Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Conexión con bases de datos (https://www.clubdelphi.com/foros/forumdisplay.php?f=2)
-   -   Guardar el Resultado de una Consulta en sqlite3 a una variable en delphi 7 (https://www.clubdelphi.com/foros/showthread.php?t=88425)

foxer_juan 05-06-2015 04:22:41

Guardar el Resultado de una Consulta en sqlite3 a una variable en delphi 7
 
Holas

Quisiera saber como debo guardar el resultado de una consulta en sqlite3 a una variable en delphi 7

Estoy usando el componente Zconection para delphi y como base de datos estoy usando sqlite 3. Teniendo en cuenta que 'ejecutar' y 'resultado' son de tipo string abro la coneccion, luego creo la consulta en ejecutar.
Código Delphi [-]
  ZQuery2.open;
  ejecutar := 'select Direccion from contactos where idPersona = 1 ; ';
  ZQuery2.SQL.Text := ejecutar ;
  ZQuery2.ExecSQL;
  
  resultado := ........ ;
Lo que necesito es pasar el resultado de la consulta a una variable como 'resultado'

Nota: no creo tener problemas con la coneccion ya que puedo guardar a la tabla. pero me dificulta traer datos a variables

Muchas gracias desde ya. :D

ecfisa 05-06-2015 05:27:31

Hola foxer_juan, bienvenido a Club Delphi :)

Como acostumbramos con los que recién ingresan te invitamos a leer nuestra guía de estilo.

Código Delphi [-]
  ZQuery2.Close;
  ZQuery2.SQL.Text :=  'select Direccion from contactos where idPersona = 1';
  ZQuery2.Open;
  
  resultado := ZQuery2.FieldByName('Direccion').AsString;

Saludos :)

nlsgarcia 05-06-2015 05:32:22

foxer_juan,

Cita:

...como debo guardar el resultado de una consulta en sqlite3 a una variable en Delphi 7...
:rolleyes:

Revisa este código:
Código Delphi [-]
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, ZAbstractConnection, ZConnection, ZPgEventAlerter,
  ZIBEventAlerter, ZSequence, ZSqlMonitor, ZSqlProcessor, ZSqlMetadata,
  ZStoredProcedure, ZGroupedConnection, ZConnectionGroup, ZSqlUpdate,
  ZAbstractTable, ZDataset, ZAbstractDataset, DB, ZAbstractRODataset,
  Grids, DBGrids, StdCtrls;

type
  TForm1 = class(TForm)
    DBGrid1: TDBGrid;
    ZConnection1: TZConnection;
    DataSource1: TDataSource;
    Button1: TButton;
    ZQuery1: TZQuery;
    Edit1: TEdit;
    procedure FormCreate(Sender: TObject);
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
begin
   ZConnection1.Database := ExtractFilePath(Application.ExeName) + '\' + 'SQLTest.DB';
   ZConnection1.Protocol := 'sqlite-3';
   ZConnection1.Connect;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
   with ZQuery1 do
   begin
      Connection := ZConnection1;
      DataSource1.DataSet := ZQuery1;
      Close;
      Sql.Clear;
      if Edit1.Text <> EmptyStr then
      begin
         Sql.Text := 'Select * from Countries Where Name Like :P1';
         ParamByName('P1').AsString := Edit1.Text + '%';
      end
      else
         Sql.Text := 'Select * from Countries';
      Open
   end;
end;

end.
El código anterior en Delphi 7 sobre Windows 7 Professional x32, Realiza una consulta a una BD SQLite por medio ZeosLib y muestra el resultado en un componente TDBGrid, como se muestra en la siguiente imagen:



Revisa esta información:
Espero sea útil :)

Nelson.

foxer_juan 05-06-2015 06:11:01

Cita:

Empezado por ecfisa (Mensaje 492894)
Hola foxer_juan, bienvenido a Club Delphi :)

Como acostumbramos con los que recién ingresan te invitamos a leer nuestra guía de estilo.

Código Delphi [-]
  ZQuery2.Close;
  ZQuery2.SQL.Text :=  'select Direccion from contactos where idPersona = 1';
  ZQuery2.Open;
  
  resultado := ZQuery2.FieldByName('Direccion').AsString;

Saludos :)

Antes que nada mil gracias por la ayuda.
Al ejecutar el codigo me aparece el siguiente error raised exception class EDatabaseError whit message 'ZQuery2: Field 'Direccion' not found'

comprobe los campos de la tabla y estan iguales..es mas hice la misma consulta en la consola sqlite3 y me da el resultado que quiero. luego me fije en el ZQuery2 sus propiedades y la misma esta en "Active" = true, en "connection"= ZConnection1
La verdad no se donde estaria el error.

foxer_juan 05-06-2015 06:18:28

Hola Nelson
Gracias por ayudar.
Mi dilema esta en q no puedo copiar los datos de las consultas a variables.

ecfisa 05-06-2015 06:18:37

Hola foxer_juan.

El error es claro, no existe una columna(field) en la tabla "contactos" cuyo nombre sea "Direccion" ¿ Seguro que el nombre de la columna está bien escrito y la tabla es la correcta ?

Revisa bíen el nombre (mejor un copy/paste de la consola a la cadena SQL de Delphi) y también controla que en la tabla a que se refiere la consulta exista dicho nombre.

Saludos :)

foxer_juan 05-06-2015 06:32:42

Cita:

Empezado por ecfisa (Mensaje 492903)
Hola foxer_juan.

El error es claro, no existe una columna(field) en la tabla "contactos" cuyo nombre sea "Direccion" ¿ Seguro que el nombre de la columna está bien escrito y la tabla es la correcta ?

Revisa bíen el nombre (mejor un copy/paste de la consola a la cadena SQL de Delphi) y también controla que en la tabla a que se refiere la consulta exista dicho nombre.

Saludos :)

La verdad me pasa lo mismo...el mismo error. "EDatabaseError whit message 'ZQuery2: Field 'Direccion' not found"

foxer_juan 05-06-2015 06:42:05

nose si servirá de algo pero al ejecutar la consulta en la consola del sqlite me da como resultado el valor 'roca 1100'
el campo 'direccion' de la tabla 'contactos' es de tipo char (100).
dejo esos datos para ver si tengo algun error q no puedo ver. gracias por tu ayuda,.

ecfisa 05-06-2015 06:52:56

Hola foxer_juan.

Si estas estableciendo la cadena de consulta al TZQuery mediante la asignación de un valor en su propiedad Text,
Código Delphi [-]
ZQuery2.SQL.Text :=  'select ...
descarto que el error pueda ser producto de una cadena residual. Por otro lado ya has comprobado los nombres de columna y tabla así que no es error en los nombres...

Sólo se me ocurre que el TZConnection esté haciendo referencia a otra base de datos, tal vez una versión anterior de prueba, en donde exista otra tabla "contactos" sin tener creada la columna "Direccion" y que fue agregada con posterioridad, revisa también ese punto.

Saludos :)

ecfisa 05-06-2015 07:01:33

Hola juan.
Cita:

Empezado por foxer_juan (Mensaje 492906)
nose si servirá de algo pero al ejecutar la consulta en la consola del sqlite me da como resultado el valor 'roca 1100'
el campo 'direccion' de la tabla 'contactos' es de tipo char (100).
dejo esos datos para ver si tengo algun error q no puedo ver. gracias por tu ayuda,.

Para ir descartando, vamos a hacer una prueba.

Pone un TDBGrid en blanco (no le crees columnas) y relacionalo con un TZQuery mediante un TDataSource y luego usa este código:
Código Delphi [-]
begin
  ZQueryTmp.Close;
  ZQueryTmp.SQL.Text :=  'select * from contactos';
  ZQueryTmp.Open;
end;
Luego revisa si el DBGrid muestra una columna llamada "direccion".

Saludos :)

nlsgarcia 05-06-2015 19:33:54

foxer_juan,

Cita:

Empezado por foxer_juan
...Mi dilema esta en que no puedo copiar los datos de las consultas a variables...

Cita:

Empezado por foxer_juan
...el campo 'direccion' de la tabla 'contactos' es de tipo char (100)...

:rolleyes:

Te comento:

1- El ejemplo mostrado en el Msg #3, Realiza una consulta a una BD SQLite 3 por medio de ZeosLib y tiene por finalidad mostrar la conexión y visualización de datos así como brindar un medio para probar la BD en cuestión.

2- La asignación de datos de una BD a un tipo TDataSet, String, Integer, Double, TDateTime
, etc es igual que con cualquier tipo de variable, es decir:
Código Delphi [-]
  VariableX := ZQuery1.FieldByName('VariableX').Value;

2- Te sugiero revisar el link propuesto en el Msg #3, en el se hacen asignaciones de campos de una BD SQLite 3 a campos de un TDataSet.

Revisa este código:
Código Delphi [-]
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, Grids, DBGrids, StdCtrls, DB, ZAbstractRODataset, ZAbstractDataset, ZDataset,
  ZAbstractConnection, ZConnection;

type
  TForm1 = class(TForm)
    ZConnection1: TZConnection;
    ZQuery1: TZQuery;
    Label1: TLabel;
    Edit1: TEdit;
    Label2: TLabel;
    Edit2: TEdit;
    Label3: TLabel;
    Edit3: TEdit;
    Label4: TLabel;
    Edit4: TEdit;
    Label5: TLabel;
    Edit5: TEdit;
    Button1: TButton;
    Button2: TButton;
    procedure FormCreate(Sender: TObject);
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
begin
   ZConnection1.Database := ExtractFilePath(Application.ExeName) + '\' + 'TestDB.s3db';
   ZConnection1.Protocol := 'sqlite-3';
   ZConnection1.Connect;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin

   with ZQuery1 do
   begin

      Connection := ZConnection1;
      Close;
      Sql.Clear;

      if Edit5.Text <> EmptyStr then
      begin
         Sql.Text := 'Select * from Users Where CodUser = :P1';
         ParamByName('P1').Value := Edit5.Text;
      end
      else
      begin
         Sql.Text := 'Select * from Users';
      end;

      Open;

      if (ZQuery1.RecordCount >= 1) then
      begin
         Edit1.Text := FieldByName('CodUser').Value;
         Edit2.Text := FieldByName('Name').Value;
         Edit3.Text := FieldByName('Address1').Value;
         Edit4.Text := FieldByName('Address2').Value;
      end
      else
         MessageDlg('No existen datos a consultar',mtInformation,[mbOK],0);

   end;

end;

procedure TForm1.Button2Click(Sender: TObject);
begin
   Edit1.Text := EmptyStr;
   Edit2.Text := EmptyStr;
   Edit3.Text := EmptyStr;
   Edit4.Text := EmptyStr;
   Edit5.Text := EmptyStr;
end;

end.
El código anterior en Delphi 7 sobre Windows 7 Professional x32, Consulta una BD SQLite 3 y muestra su resultado en componentes TEdits, como se muestra en la siguiente imagen:



La estructura y datos de la BD SQLite 3 del ejemplo es la siguiente:



Espero sea útil :)

Nelson.


La franja horaria es GMT +2. Ahora son las 13:03:51.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi