Ir al contenido


Foto

Consejo para manejar una info


  • Por favor identifícate para responder
17 respuestas en este tema

#1 RipperXD2

RipperXD2

    Newbie

  • Miembros
  • Pip
  • 9 mensajes

Escrito 10 marzo 2013 - 05:17

buenas, primero un saludo a todos
estoy realizando un programa en XE2 en el que necesito guardar una información de varios tipos de datos y quiero que sea en un archivo simple de texto (que posteriormente cifrare de ser necesario), he leído acerca de usar bases de datos pero la mayoría requiere la instalación de programas y no quiero nada así también leí sobre usar archivos XML pero no se si pueda funcionar como base de datos que consejos me dan?

un ejemplo de de los datos que quiero guardar son

X0000000, dd/mm/aaaa, dd/mm/aaaa, 00

donde seria un identificador, dos fechas y un valor entero por cada entrada
  • 0

#2 enecumene

enecumene

    Webmaster

  • Administrador
  • 7.419 mensajes
  • LocationRepública Dominicana

Escrito 10 marzo 2013 - 05:39

Utiliza CSV como BD, es un texto plano dividido por coma o punto y coma, para ello puedes utilizad TClientDataSets.

Saludos
  • 0

#3 RipperXD2

RipperXD2

    Newbie

  • Miembros
  • Pip
  • 9 mensajes

Escrito 10 marzo 2013 - 05:43

Muchas gracias no conocía ese tipo de fichero ya mismo me pongo a investigar sobre el.
  • 0

#4 RipperXD2

RipperXD2

    Newbie

  • Miembros
  • Pip
  • 9 mensajes

Escrito 10 marzo 2013 - 08:39

Buenas investigue un poco pero aun no entiendo bien como usarlo, podrías darme un ejemplo simple de uso?
  • 0

#5 Fenareth

Fenareth

    Advanced Member

  • Administrador
  • 3.486 mensajes
  • LocationMexico City

Escrito 10 marzo 2013 - 09:03

Amigo RipperXD2, tal vez el artículo del blog de poliburro te pueda ayudar con lo que necesitas, échale una miradita...

Usar archivos CSV en modo tabla con Delphi y ADO

Saludox ! :)
  • 0

#6 RipperXD2

RipperXD2

    Newbie

  • Miembros
  • Pip
  • 9 mensajes

Escrito 10 marzo 2013 - 09:09

probé de esa manera pero no deja de darme un error "No se pudo encontrar el archivo ISAM instalable."

usando esta linea de conexion que es donde se supone que esta el error:
ADOConnection1.ConnectionString := 'Provider=Microsoft.JET.OLEDB.4.0;Data Source='+RUTA+';Extended Properties=”text;HDR=Yes;FMT=Delimited(,)”';

y donde RUTA tiene actualmente este valor "C:\Users\Usuario\Documents\Delphi\Proyecto\db.csv"

por eso decidí preguntar de nuevo
  • 0

#7 Fenareth

Fenareth

    Advanced Member

  • Administrador
  • 3.486 mensajes
  • LocationMexico City

Escrito 10 marzo 2013 - 09:13

Amigo, en tu variable RUTA está de más el nombre del archivo.

En el ConnectionString únicamente debes agregar el directorio y el nombre del archivo será usado como nombre de tabla en el dataset que vayas a emplear... (y)

Saludox ! :)
  • 0

#8 RipperXD2

RipperXD2

    Newbie

  • Miembros
  • Pip
  • 9 mensajes

Escrito 10 marzo 2013 - 09:16

Gracias por responder, el error que mencione antes continua, no se si ayude estoy en Win8 64bit
  • 0

#9 Fenareth

Fenareth

    Advanced Member

  • Administrador
  • 3.486 mensajes
  • LocationMexico City

Escrito 10 marzo 2013 - 09:19

Amigo, coloca todo tu código aquí para ver si encontramos algo raro (y)

Otra cosa que puedes intentar es poner tu archivo directamente en C: y probar, vamos eliminando posibles obstáculos...

Saludox ! :)
  • 0

#10 RipperXD2

RipperXD2

    Newbie

  • Miembros
  • Pip
  • 9 mensajes

Escrito 10 marzo 2013 - 09:31



delphi
  1. unit Unit1;
  2.  
  3. interface
  4.  
  5. uses
  6.   Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  7.   Dialogs, StdCtrls, DateUtils, Data.DB, Data.Win.ADODB, Vcl.ExtCtrls,
  8.   Vcl.DBCtrls;
  9.  
  10. type
  11.   TForm1 = class(TForm)
  12.     Memo1: TMemo;
  13.     Label1: TLabel;
  14.     Memo2: TMemo;
  15.     Label2: TLabel;
  16.     Button1: TButton;
  17.     Button2: TButton;
  18.     ADOConnection1: TADOConnection;
  19.     procedure Button1Click(Sender: TObject);
  20.     procedure Button2Click(Sender: TObject);
  21.     procedure FormCreate(Sender: TObject);
  22.   private
  23.     { Private declarations }
  24.   public
  25.     { Public declarations }
  26.   end;
  27.  
  28. var
  29.   NOMBRE, STRAUX: String;
  30.   Form1: TForm1;
  31.   REFDESDE, ULTCLICK, FECHAHOY: TDate;
  32.   PROMEDIO: Single;
  33.   DIAREF, DIAINA, CANREF, CANCLICK: Integer;
  34.  
  35. implementation
  36.  
  37. {$R *.dfm}
  38.  
  39. procedure TForm1.Button1Click(Sender: TObject);
  40. var
  41.   i, TL: Integer;
  42.   AUX: String;
  43. begin
  44.   FECHAHOY := date();
  45.   ShortDateFormat := 'yyyy/mm/dd';
  46.   CANREF := Memo1.Lines.Count;
  47.   for i := 0 to (CANREF - 1) do
  48.   begin
  49.     NOMBRE := '';
  50.     AUX := '';
  51.     STRAUX := Memo1.Lines.Strings[i];
  52.  
  53.     while STRAUX[1] <> ',' do
  54.     begin
  55.       NOMBRE := NOMBRE + STRAUX[1];
  56.       Delete(STRAUX, 1, 1);
  57.     end;
  58.  
  59.     Delete(STRAUX, 1, 1);
  60.  
  61.     while STRAUX[1] <> ',' do
  62.     begin
  63.       AUX := AUX + STRAUX[1];
  64.       Delete(STRAUX, 1, 1);
  65.     end;
  66.     REFDESDE := StrToDate(AUX);
  67.  
  68.     AUX := '';
  69.     Delete(STRAUX, 1, 1);
  70.  
  71.     while STRAUX[1] <> ',' do
  72.     begin
  73.       AUX := AUX + STRAUX[1];
  74.       Delete(STRAUX, 1, 1);
  75.     end;
  76.     ULTCLICK := StrToDate(AUX);
  77.  
  78.     Delete(STRAUX, 1, 1);
  79.     CANCLICK := StrToInt(STRAUX);
  80.  
  81.     DIAREF := DaysBetween(REFDESDE, FECHAHOY);
  82.     DIAINA := DaysBetween(ULTCLICK, FECHAHOY);
  83.  
  84.     PROMEDIO := CANCLICK / DIAREF;
  85.  
  86.     if (DIAINA = 5) and (PROMEDIO < 1.400) then
  87.     begin
  88.       Memo2.Lines.Add(NOMBRE + ' RECICLAR');
  89.     end
  90.     else
  91.     begin
  92.       if (DIAINA = 6) and (PROMEDIO < 1.701) then
  93.       begin
  94.         Memo2.Lines.Add(NOMBRE + ' RECICLAR');
  95.       end
  96.       else
  97.       begin
  98.         if (DIAINA > 6) and (DIAINA <= 9) and (PROMEDIO <= 2.000) then
  99.         begin
  100.           Memo2.Lines.Add(NOMBRE + ' RECICLAR');
  101.         end
  102.         else
  103.         begin
  104.           if (DIAINA >= 9) and (PROMEDIO > 2.000) then
  105.           begin
  106.             Memo2.Lines.Add(NOMBRE + ' RECICLAJE AUTOMATICO');
  107.           end
  108.         end
  109.       end
  110.     end;
  111.     if (DIAREF >= 60) and (PROMEDIO <= 1.350) then
  112.     begin
  113.       Memo2.Lines.Add(NOMBRE + ' RECICLAR');
  114.     end
  115.     else
  116.     begin
  117.       if (DIAREF >= 45) and (PROMEDIO <= 1.300) then
  118.       begin
  119.         Memo2.Lines.Add(NOMBRE + ' RECICLAR');
  120.       end
  121.       else
  122.       begin
  123.         if (DIAREF >= 30) and (PROMEDIO <= 1.250) then
  124.         begin
  125.           Memo2.Lines.Add(NOMBRE + ' RECICLAR');
  126.         end
  127.         else
  128.         begin
  129.           if (DIAREF >= 15) and (PROMEDIO <= 1.200) then
  130.           begin
  131.             Memo2.Lines.Add(NOMBRE + ' RECICLAR');
  132.           end
  133.         end
  134.       end
  135.     end;
  136.     if (CANCLICK = 0) and (DIAREF >= 3) then
  137.     begin
  138.       Memo2.Lines.Add(NOMBRE + ' RECICLAR');
  139.     end
  140.   end
  141. end;
  142.  
  143. procedure TForm1.Button2Click(Sender: TObject);
  144. begin
  145.   Form1.Close;
  146. end;
  147.  
  148. procedure TForm1.FormCreate(Sender: TObject);
  149. var
  150.   RUTA : String ;
  151. begin
  152.   RUTA := ExtractFilePath(ParamStr(0))+'db.csv';
  153.   Memo1.Lines.Add(RUTA);
  154.   ADOConnection1.ConnectionString := 'Provider=Microsoft.JET.OLEDB.4.0;Data Source='+RUTA+';Extended Properties=”text;HDR=Yes;FMT=Delimited(,)”';
  155.   ADOConnection1.Connected := TRUE;
  156. end;
  157.  
  158. end.



ese es todo mi código y ya probé pasando el archivo a C: y me sigue dando el mismo error

(posiblemente el código de asco en algunas partes xD soy programador noob estoy haciendo este código por necesidad jaja)

pd: parte del código es como hago actualmente el proceso y es lo que quiero sustituir por la base de datos
  • 0

#11 poliburro

poliburro

    Advanced Member

  • Administrador
  • 4.945 mensajes
  • LocationMéxico

Escrito 10 marzo 2013 - 09:59

cuál es el valor que tiene Ruta?
  • 0

#12 RipperXD2

RipperXD2

    Newbie

  • Miembros
  • Pip
  • 9 mensajes

Escrito 10 marzo 2013 - 10:06

Básicamente la ruta donde esta, arriba puse un ejemplo de uno de los valores pero he movido el archivo a varias ubicaciones y sigue dando el mismo error
  • 0

#13 Fenareth

Fenareth

    Advanced Member

  • Administrador
  • 3.486 mensajes
  • LocationMexico City

Escrito 10 marzo 2013 - 10:10

Por lo que veo de tu código, a la variable RUTA sigues concatenándole el nombre del archivo... como te comentaba, en el connectionstring únicamente debes colocar la ruta ( si moviste el archivo a C:, entonces la variable RUTA, sólo debe contener C: ) y al momento de usar un DataSet, ya sea ADOQuery o ADOTable, el nombre del archivo nos servirá como nombre de tabla...

Haz la modificación que te digo y coméntanos...

Saludox ! :)
  • 0

#14 RipperXD2

RipperXD2

    Newbie

  • Miembros
  • Pip
  • 9 mensajes

Escrito 10 marzo 2013 - 10:16

Disculpen esa, copie el código sin esa corrección pero en ambos casos me da el mismo error investigue un poco y el error parece mas por culpa de la llamada pero he probado de mil maneras y aun así me sigue dando ese error como si ese motor no estuviese instalado pero ya verifique y si se encuentra en el sistema
  • 0

#15 Fenareth

Fenareth

    Advanced Member

  • Administrador
  • 3.486 mensajes
  • LocationMexico City

Escrito 10 marzo 2013 - 10:26

Déjame hacer una prueba amigo...

Saludox ! :)
  • 0

#16 Fenareth

Fenareth

    Advanced Member

  • Administrador
  • 3.486 mensajes
  • LocationMexico City

Escrito 10 marzo 2013 - 10:41

Intenta porfavor con la siguiente cadena de conexión...



delphi
  1. var
  2.   Ruta: String;
  3. begin
  4.     Ruta := 'C:\Apache24';
  5.     Conexion.Connected := False;
  6.     Conexion.ConnectionString := 'Provider=Microsoft.Jet.OLEDB.4.0;Data Source='+
  7.                                 Ruta+';Extended Properties="Text;HDR=Yes;'+
  8.                                 'FMT=Delimited(,);";Persist Security Info=False';
  9.     try
  10.       Conexion.Connected := True;
  11.       Showmessage('Conexión exitosa !');
  12.     except
  13.       on e:exception do
  14.         Showmessage('Error en la conexión...'+#10#13+e.Message);
  15.     end;



Coméntanos ! (y)

Saludox ! :)
  • 0

#17 RipperXD2

RipperXD2

    Newbie

  • Miembros
  • Pip
  • 9 mensajes

Escrito 11 marzo 2013 - 08:43

Funciono perfecto, muchas gracias ese era el problema  <:o) ahora a seguir trabajando *-*
  • 0

#18 Sergio

Sergio

    Advanced Member

  • Moderadores
  • PipPipPip
  • 1.092 mensajes
  • LocationMurcia, España

Escrito 11 marzo 2013 - 10:55

Puedes incluso leer el fichero CVS a un TStringlist, así tendrás automáticamente una línea por "record", luego para acceder a cada "record", vuelves a copiar la linea completa a otro TStringList donde previamente definiste el delimiter a tabulador (chr(10) o #10 directamente), así tienes cada "field" del "record" en una línea de este segundo TStringList:



delphi
  1. MiLista:= TStringList.create;
  2. MiRecord:= TStringList.create;
  3. MiRecord.Delimiter:= #10;
  4. for i:= 0 to MiLista.Count-1 do begin
  5.   MiRecord.Clear;
  6.   MiRecord.Text:= MiLista.Items[i];
  7.   for j:= 0 to MiRecord.Count-1 do
  8.     ShowMessage('El campo '+IntToStr(j)+' del record '+IntToStr(i)+ ' contiene el texto '+QuotedStr(MiRecord[j]);
  9. end;



Lo del delimiter es de memoria, creo que se llamaba así pero igual me equivoco.
  • 0




IP.Board spam blocked by CleanTalk.