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)
-   -   Creando Consulta de alquiler (https://www.clubdelphi.com/foros/showthread.php?t=33603)

enecumene 12-07-2006 03:33:52

Creando Consulta de alquiler
 
hola a todos!!

estoy haciendo una aplicacion para gestion de videclub, tengo lo siguiente:

2 - Edits (Cliente y Pelicula)
1 - DBGrid (columnas 'codigo', 'pelicula', 'fecha alquiler' y 'fecha devolucion')
2 - DBLabels
1 - tabla access (tbPeliculaAlquilada 'codigo_pelicula', 'codigo_cliente', 'fecha_alquiler', 'fecha_devolucion' y 'devuelta')
1 - datasource
1 - TTable (ADO)
1 - Tquery (ADO)

como configuro que al teclear en el Edit1.text y con Enter me llame al cliente y me lo presente al lado en un dblabel u otra cosa, igual lo mismo en el edit2.text de las peliculas y me los presente en el dbgrid con sus respectivos columnas cual seria la consulta sql y el codigo delphi??:confused::confused::confused:

nemesio 12-07-2006 03:52:51

Para buscar el Cliente podrías hacer algo parecido:
Código Delphi [-]
AdoQueryCliente.Close;
AdoQueryCliente.SQL.Add(' SELECT codcliente, Nombre, Apellido FROM CLIENTES ');
AdoQueryCliente.SQL.Add('WHERE CodCliente: Codigo');
AdoQueryCliente.ParamByname('Codigo').Value:=EditCodCliente.Text;
AdoQueryCliente.Open;
if not AdoqueryCliente.IsEmpty then
   LabelCliente.Caption:=AdoQueryClienteNombre.Value+' '+AdoQueryClienteApellido.Value;

Bueno con esa idea tienes para hacer las demás consultas. Suerte.

enecumene 12-07-2006 04:06:14

gracias nemesio por responder lo mas rapido, y disculpa que te haga esta pregunta porque me perdi, ese codigo donde lo pongo? en el edit? o en un Tbutton?:confused::confused::confused:

enecumene 12-07-2006 04:22:26

lo intente ponerlo en un tbutton y al compilar me sale 'Undeclared Identifier: ParamByName', a que se debe eso?:confused::confused:

nemesio 12-07-2006 04:26:38

Es válida cualquiera de las 2 opcíones. Puedes colocarlo en el evento OnKeyPress del Edit, algo asi como:

Código Delphi [-]
procedure TForm1.EditCodClienteKeyPress(Sender: TObject; var Key: Char);
begin  
  if Key=#13 then
  begin
   AdoQueryCliente.Close;     AdoQueryCliente.SQL.Add(' SELECT codcliente, Nombre, Apellido FROM CLIENTES ');   AdoQueryCliente.SQL.Add('WHERE CodCliente: Codigo');   AdoQueryCliente.ParamByname('Codigo').Value:=EditCodCliente.Text;   AdoQueryCliente.Open;     if not AdoqueryCliente.IsEmpty then      LabelCliente.Caption:=AdoQueryClienteNombre.Value+' '+AdoQueryClienteApellido.Value;  end;
end;

o Colocarlo en un en el evento OnClick de un Botón. Todo va a depender de como quieras hacerlo y de lo que requiera tu aplicación.

nemesio 12-07-2006 04:30:13

Esta si va con la etiqueta bien...

Es válida cualquiera de las 2 opcíones. Puedes colocarlo en el evento OnKeyPress del Edit, algo asi como:



Código Delphi [-]
procedure TForm1.EditCodClienteKeyPress(Sender: TObject; var Key: Char);
begin 
if Key=#13 then
begin
AdoQueryCliente.Close; AdoQueryCliente.SQL.Add(' SELECT codcliente, Nombre, Apellido FROM CLIENTES '); AdoQueryCliente.SQL.Add('WHERE CodCliente: Codigo'); AdoQueryCliente.ParamByname('Codigo').Value:=EditCodCliente.Text; AdoQueryCliente.Open; if not AdoqueryCliente.IsEmpty then LabelCliente.Caption:=AdoQueryClienteNombre.Value+' '+AdoQueryClienteApellido.Value; end;
end;





o Colocarlo en un en el evento OnClick de un Botón. Todo va a depender de como quieras hacerlo y de lo que requiera tu aplicación.

nemesio 12-07-2006 04:32:43

No se que pasó que en la Previsualización se veía bien el código con la Etiqueta delphi. pero no se que pasó. Bueno ahi tienes la idea, cualquier duda vuelve a preguntar.

nemesio 12-07-2006 04:40:42

Ok lo que pasa es que en Ado la sintaxis es asi:


Código Delphi [-]
  AdoQueryCliente.Parameters.ParamByName('codigo').Value;




Suerte

enecumene 12-07-2006 04:41:49

Código Delphi [-]
 procedure TForm1.EditCodClienteKeyPress(Sender: TObject; var Key: Char);
begin 
if Key=#13 then
begin
AdoQueryCliente.Close; AdoQueryCliente.SQL.Add(' SELECT codcliente, Nombre, Apellido FROM CLIENTES '); AdoQueryCliente.SQL.Add('WHERE CodCliente: Codigo'); AdoQueryCliente.ParamByname('Codigo').Value:=EditCodCliente.Text; AdoQueryCliente.Open; if not AdoqueryCliente.IsEmpty then LabelCliente.Caption:=AdoQueryClienteNombre.Value+' '+AdoQueryClienteApellido.Value; end;
end;

gracias nemesio con enter es mejor, pero estoy teniendo problemas que al compilar el ParamByname es Undeclared identifier que es lo que falta?:confused::confused::confused:

enecumene 12-07-2006 04:50:13

gracias nemesio ahora si! pero me surge otro problema, cuando corro la aplicacion y pruebo el codigo me sale el siguiente error: 'qryCliente: parameter 'Codigo' not found', y disculpa las molestias....:D

enecumene 12-07-2006 04:51:59

gracias nemesio ahora si! pero me surge otro problema, cuando corro la aplicacion y pruebo el codigo me sale el siguiente error: 'qryCliente: parameter 'Codigo' not found', y disculpa las molestias....:D

este es el codigo adaptado:

Código Delphi [-]
procedure TAlquiler.MaskEdit1KeyPress(Sender: TObject; var Key: Char);
begin
if Key=#13 then
  begin
qryCliente.Close;
qryCliente.SQL.Add(' SELECT telefono1_cliente, nombre_cliente, apellido_cliente FROM tbClientes ');
qryCliente.SQL.Add('WHERE telefono1_cliente: Codigo');
qryCliente.Parameters.ParamByName('Codigo').Value:=MaskEdit1.Text;
qryCliente.Open;
if not qryCliente.IsEmpty then
   DBText1.Caption:=qryClientenombre_cliente.Value+' '+qryClienteapellidos_cliente.Value;
  end;
end;

nemesio 12-07-2006 05:00:44

prueba pegando los dos puntos de la palabra codigo, asi:

Código Delphi [-]
qryCliente.SQL.Add('WHERE telefono1_cliente= :Codigo');
también coloca el "=" que por lo que veo no lo colocaste. Los dos indican en el SQL que lo que sigue es un parámetro.

nemesio 12-07-2006 05:06:30

Quise decir los dos puntos.

enecumene 12-07-2006 05:14:56

aqui estoy de nuevo nemesio, pero aun me dice que el parametro codigo no se encuentra, lo intente de estas maneras:

Código Delphi [-]
qryCliente.SQL.Add('WHERE telefono1_cliente =: Codigo');
qryCliente.SQL.Add('WHERE telefono1_cliente= :Codigo');

sera que me estara faltando algo? y que viene siendo 'Codigo'? algun campo de la tabla?

gracias, (diras que estas tratando con un bruto, jajajaja):confused::confused::confused::confused:

Lepe 12-07-2006 07:02:53

Hay 2 detalles que espero hayas corregido:
Código Delphi [-]
qryCliente.SQL.Add('WHERE telefono1_cliente: Codigo');

Falta el símbolo de comparación, como ya te dijo nemesio, debe decir:
Código Delphi [-]
qryCliente.SQL.Add('WHERE telefono1_cliente = :Codigo');

El otro detalle es darle valor al parámetro antes de abrir la consulta:
Código Delphi [-]
qryCliente.Parameters.ParamByName('Codigo').AsInteger :=StrToInt(MaskEdit1.Text);
qryCliente.Open;
if not qryCliente.IsEmpty then
   DBText1.Caption:=qryClientenombre_cliente.Value+' '+qryClienteapellidos_cliente.Value;
  end;
end;

Cuando pones ":Loquesea" estas indicando al SQL que lo que hay detras de los dos puntos es un parámetro, es decir, algo variable en la ejecución de esa SQL. Normalmente se hace un Query1.Prepare antes de abrir la consulta, así se agiliza y queda compilada esa consulta en el servidor; cuando posteriormente se llame a esa consulta con otro valor en el parámetro, la consulta ya se encuentra compilada y lista para ejecutarla, tardando menos en su ejecución.

Al menos esto funciona así en SGBD como Firebird / Interbase, etc, no sé que tal irá en Access.

Es importante que digas de qué clase es el parámetro:
Código Delphi [-]
qryCliente.Parameters.ParamByName('Codigo').AsInteger :=strToInt(MaskEdit1.Text);
Porque así Delphi lo traduce de forma correcta:
AsString - Delphi añade las comillas
AsInteger - Delphi lo pasa tal cual
AsDateTime - Delphi traduce el formato de fecha que espera el motor.

Según han comentado en otros mensajes sobre ACCESS, debes usar la propiedad Params del TQuery y especificar de qué tipo es el parámetro, obviamente es un parámetro de entrada pInput, si es de tipo String, etc.

Un detalle más. Ten cuidado al darle nombre al parámetro, porque si tienes un campo que se llama "Codigo" en tu tabla, puede que se haga un lio el Tquery, realmente no lo he probado, porque yo siempre le añado a los Parámetros el prefijo "pr"

Código Delphi [-]
 qryCliente.SQL.Add(' SELECT telefono1_cliente, nombre_cliente, apellido_cliente FROM tbClientes ');
qryCliente.SQL.Add('WHERE telefono1_cliente = : prCodigo');
Así nunca hay dudas.
Saludos

enecumene 12-07-2006 14:23:01

gracias lepe!!! ahora mismo voy hacer los arreglos. muchas gracias, luego te dire como me fue. chao.

enecumene 12-07-2006 14:52:39

aqui estoy de nuevo, hice lo que dijiste Lepe pero ahora me sale otro error

Código Delphi [-]
qryCliente.Parameters.ParamByName('Codigo').AsInteger :=StrToInt(MaskEdit1.Text);

me dice "Undeclared Identifier: 'AsInteger'", y por que sera ahora??:confused::confused::confused:

gracias y disculpa las molestias.

Neftali [Germán.Estévez] 12-07-2006 18:15:59

Por favor no repitas hilos (eso incluye abrir otro hilo diciendo que miren éste).
Revisa la Guía de estilo.

enecumene 12-07-2006 18:45:54

Perdon:(:(:(

Lepe 13-07-2006 10:05:09

Pues qué curioso, acabo de comprobar que ADO no tiene esa propiedad, así que tendrás que seguir usando .Value pero mira las propiedades de ese parámetro para indicarle que es un integer,char, etc.

Saludos


La franja horaria es GMT +2. Ahora son las 02:10:04.

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