Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Conexión con bases de datos
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Conexión con bases de datos

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 05-06-2015
foxer_juan foxer_juan is offline
Registrado
NULL
 
Registrado: jun 2015
Posts: 8
Poder: 0
foxer_juan Va por buen camino
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.

Última edición por nlsgarcia fecha: 05-06-2015 a las 05:04:16. Razón: Sintaxis Delphi
Responder Con Cita
  #2  
Antiguo 05-06-2015
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 36
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
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
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
  #3  
Antiguo 05-06-2015
Avatar de nlsgarcia
[nlsgarcia] nlsgarcia is offline
Miembro Premium
 
Registrado: feb 2007
Ubicación: Caracas, Venezuela
Posts: 2.206
Poder: 21
nlsgarcia Tiene un aura espectacularnlsgarcia Tiene un aura espectacular
foxer_juan,

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


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.
Responder Con Cita
  #4  
Antiguo 05-06-2015
foxer_juan foxer_juan is offline
Registrado
NULL
 
Registrado: jun 2015
Posts: 8
Poder: 0
foxer_juan Va por buen camino
Cita:
Empezado por ecfisa Ver Mensaje
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.
Responder Con Cita
  #5  
Antiguo 05-06-2015
foxer_juan foxer_juan is offline
Registrado
NULL
 
Registrado: jun 2015
Posts: 8
Poder: 0
foxer_juan Va por buen camino
Hola Nelson
Gracias por ayudar.
Mi dilema esta en q no puedo copiar los datos de las consultas a variables.
Responder Con Cita
  #6  
Antiguo 05-06-2015
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 36
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
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
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
  #7  
Antiguo 05-06-2015
foxer_juan foxer_juan is offline
Registrado
NULL
 
Registrado: jun 2015
Posts: 8
Poder: 0
foxer_juan Va por buen camino
Cita:
Empezado por ecfisa Ver Mensaje
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"
Responder Con Cita
  #8  
Antiguo 05-06-2015
foxer_juan foxer_juan is offline
Registrado
NULL
 
Registrado: jun 2015
Posts: 8
Poder: 0
foxer_juan Va por buen camino
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,.
Responder Con Cita
  #9  
Antiguo 05-06-2015
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 36
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
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
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
  #10  
Antiguo 05-06-2015
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 36
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Hola juan.
Cita:
Empezado por foxer_juan Ver Mensaje
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
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
  #11  
Antiguo 05-06-2015
Avatar de nlsgarcia
[nlsgarcia] nlsgarcia is offline
Miembro Premium
 
Registrado: feb 2007
Ubicación: Caracas, Venezuela
Posts: 2.206
Poder: 21
nlsgarcia Tiene un aura espectacularnlsgarcia Tiene un aura espectacular
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)...


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.
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Asignar resultado de consulta a variable Saiyan SQL 3 10-07-2007 15:44:10
asignar el resultado de un sql a una variable Cañones SQL 2 14-04-2007 15:29:43
Como asignar el resultado de una consulta a una variable Luis Cuenca Conexión con bases de datos 2 11-08-2006 16:27:32
Guardar una variable de javascript a delphi joel20 .NET 2 12-04-2006 12:54:19
Resultado de Consulta en Variable ¥0n1 SQL 1 30-12-2003 01:07:29


La franja horaria es GMT +2. Ahora son las 13:29:48.


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
Copyright 1996-2007 Club Delphi