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 13-07-2006
Avatar de enecumene
[enecumene] enecumene is offline
Miembro de Oro
 
Registrado: may 2006
Ubicación: Santo Domingo, Rep. Dom.
Posts: 3.040
Poder: 21
enecumene Va por buen camino
Ayuda Con Consulta

hola A TODOS, sucede lo siguiente, este es mi codigo:
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 = :telefono');
qryCliente.Parameters.ParamByName('telefono').Value:=strtoInt(MaskEdit1.Text);
qryCliente.Open;
if not qryCliente.IsEmpty then
   DBText1.Caption:=qryClientenombre_cliente.Value+' '+qryClienteapellidos_cliente.Value;
  end;
end;


el campo telefono1_cliente es un campo de texto tipo 809-555-5555, pues cuando corro la aplicacion y digito el telefono para llamar al cliente 809-555-5555 me sale el siguiente error: "809-555-5555 is not a valid integer value" esta claro que no es un valor numerico esto esta en :
Código Delphi [-]
qryCliente.Parameters.ParamByName('telefono').Value:=strtoInt(MaskEdit1.Text);


cual es el valor que debo poner en vez de StrtoInt he intentado con varios y no doy con el. para que tengas una idea de todo lo que tengo en mi form:

1 - adoquery (deberia tenerlo? o no es necesario?, debe estar en false?)
1 - datasource
1 - maskedit (clientes)
1 - edit (peliculas)
1 - base de datos MS ACCESS
3 - tablas (tbClientes, tbPeliculas, tbPeliculasAlquilada)
1 - dbgrid
2 - speedbuttons (para hacer busquedas de clientes y peliculas tipo ... )
3 - dbedit (donde se mostraran los totales del alquiler, subtotal, iva y total)
2 - dbtext (donde se mostraran el nombre de la pelicula y el cliente)
2 - checkbox (donde se indicara si el cliente paga en efectivo o credito)
4 - buttons (cobrar, anular, cancelar y cerrar)

gracias

Última edición por enecumene fecha: 13-07-2006 a las 17:49:49.
Responder Con Cita
  #2  
Antiguo 13-07-2006
Avatar de kuan-yiu
[kuan-yiu] kuan-yiu is offline
Miembro Premium
 
Registrado: jun 2006
Ubicación: Galicia. España.
Posts: 1.017
Poder: 19
kuan-yiu Va camino a la fama
¿Si telefono1_cliente es un campo de texto por qué le envías un integer? Deberías enviarle un string.
Código Delphi [-]
qryCliente.Parameters.ParamByName('telefono').AsString:=MaskEdit1.Text;
Responder Con Cita
  #3  
Antiguo 13-07-2006
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
¿Y si no pones nada?

Código Delphi [-]
qryCliente.Parameters.ParamByName('telefono').Value:=MaskEdit1.Text;

// Saludos
Responder Con Cita
  #4  
Antiguo 13-07-2006
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
Cita:
Empezado por kuan-yiu
Código Delphi [-]
qryCliente.Parameters.ParamByName('telefono').AsString:=MaskEdit1.Text;
Creo que tratándose de un AdoQuery, no hay AsString.

// Saludos
Responder Con Cita
  #5  
Antiguo 13-07-2006
Avatar de enecumene
[enecumene] enecumene is offline
Miembro de Oro
 
Registrado: may 2006
Ubicación: Santo Domingo, Rep. Dom.
Posts: 3.040
Poder: 21
enecumene Va por buen camino
roman tiene razon tratandose de componentes ado no hay asString, y roman sin ponerle nada

Código Delphi [-]
qryCliente.Parameters.ParamByName('telefono').Value:=MaskEdit1.Text;

me sale un error que dice "ole error 800A0d5d" cuando intento probarlo.

gracias...
Responder Con Cita
  #6  
Antiguo 13-07-2006
Avatar de kuan-yiu
[kuan-yiu] kuan-yiu is offline
Miembro Premium
 
Registrado: jun 2006
Ubicación: Galicia. España.
Posts: 1.017
Poder: 19
kuan-yiu Va camino a la fama
jejeje... No me fijé en que era un AdoQuery
Bueno, yo normalmente no los uso, así que no estoy segura de que esto valga... Pero por probar...
Código Delphi [-]
qryCliente.Close;
qryCliente.SQL.Add(' SELECT telefono1_cliente, nombre_cliente, apellido_cliente FROM tbClientes ');
qryCliente.SQL.Add('WHERE telefono1_cliente = ' + '''' + MaskEdit1.Text + '''');
qryCliente.Open;
Responder Con Cita
  #7  
Antiguo 13-07-2006
Avatar de enecumene
[enecumene] enecumene is offline
Miembro de Oro
 
Registrado: may 2006
Ubicación: Santo Domingo, Rep. Dom.
Posts: 3.040
Poder: 21
enecumene Va por buen camino
gracias kuan-yiu por responder, pero me salio un error de sintaxis en la consulta telefono1_cliente= ?, no habra otra forma de hacerlo?

gracias...

Última edición por enecumene fecha: 13-07-2006 a las 18:15:35.
Responder Con Cita
  #8  
Antiguo 13-07-2006
Avatar de kuan-yiu
[kuan-yiu] kuan-yiu is offline
Miembro Premium
 
Registrado: jun 2006
Ubicación: Galicia. España.
Posts: 1.017
Poder: 19
kuan-yiu Va camino a la fama
Cita:
Empezado por enecumene
gracias kuan-yiu por responder, pero me sigue saliendo ese error de OLE, no se porque me sale eso. no habra otra forma?

gracias...
Por eliminar casos sustituye el "MaskEdit" por un "Edit" y mira si sigue fallando.
Responder Con Cita
  #9  
Antiguo 13-07-2006
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
Una rápida búsqueda en google me lleva a:

Cita:
ADOBD Parameter error '800a0d5d'
The application is using a value of the wrong type for
the current operation.
Dado que el campo (en Access) es de tipo texto y lo que le asignas es un texto no veo de dónde va a haber una incompatibilidad de datos a menos que tengas definida una máscara de entrada en Access que no coincida con lo que estás metiendo. Revisa eso.

// Saludos
Responder Con Cita
  #10  
Antiguo 13-07-2006
Avatar de enecumene
[enecumene] enecumene is offline
Miembro de Oro
 
Registrado: may 2006
Ubicación: Santo Domingo, Rep. Dom.
Posts: 3.040
Poder: 21
enecumene Va por buen camino
para kuan-yiu hice lo que me pediste y me salio otro error diciendo error de sintaxis en la clausula FROM y a roman en mi base de datos el campo no tiene asignado una mascara de entrada puede ser eso?

gracias
Responder Con Cita
  #11  
Antiguo 13-07-2006
Avatar de kuan-yiu
[kuan-yiu] kuan-yiu is offline
Miembro Premium
 
Registrado: jun 2006
Ubicación: Galicia. España.
Posts: 1.017
Poder: 19
kuan-yiu Va camino a la fama
¿¡Pero que leches hay en ese edit!? ... Con perdón

No entiendo por qué falla mi segunda opción si al "Add" se le pasa un string... A ver, construye el string de la consulta al completo fuera de la query, como texto, y úsalo como parámetro del "Add".
De paso sácalo por pantalla para asegurarte de que es correcto y úsalo para hacer una consulta DIRECTAMENTE en la BD...
Responder Con Cita
  #12  
Antiguo 13-07-2006
Avatar de enecumene
[enecumene] enecumene is offline
Miembro de Oro
 
Registrado: may 2006
Ubicación: Santo Domingo, Rep. Dom.
Posts: 3.040
Poder: 21
enecumene Va por buen camino
disculpa kuan-yiu, espero que no te este haciendo perder el tiempo, pero no entiendo con lo que me quisiste decir, soy un newbie y bruto total , me podrias decir como es?, gracias
Responder Con Cita
  #13  
Antiguo 13-07-2006
Avatar de kuan-yiu
[kuan-yiu] kuan-yiu is offline
Miembro Premium
 
Registrado: jun 2006
Ubicación: Galicia. España.
Posts: 1.017
Poder: 19
kuan-yiu Va camino a la fama
Perdón a veces me explico fatal.
1) Crea la consulta entera como un string, escríbela en una variable string.
Código Delphi [-]
miConsulta := 'SELECT telefono1_cliente, nombre_cliente, apellido_cliente FROM tbClientes WHERE telefono1_cliente = ' + MaskEdit1.Text;
2) Pásale esto al "Add", o sea la variable "miConsulta".
3) Vuelca en algún lado (mediante código) la consulta, por ejemplo a un fichero, o por pantalla.
4) El texto que te muestre pégalo tal cual directamente en el editor de SQL que tenga tu BD.

5) Si funciona directamente en la BD debería funcionar también a través de Delphi.
Responder Con Cita
  #14  
Antiguo 13-07-2006
Avatar de enecumene
[enecumene] enecumene is offline
Miembro de Oro
 
Registrado: may 2006
Ubicación: Santo Domingo, Rep. Dom.
Posts: 3.040
Poder: 21
enecumene Va por buen camino
yo entiendo todo lo demas pero eso de volcar en algun lado o por pantalla no lo entiendo, y disculpas de nuevo...
Responder Con Cita
  #15  
Antiguo 13-07-2006
Avatar de ContraVeneno
ContraVeneno ContraVeneno is offline
Miembro
 
Registrado: may 2005
Ubicación: Torreón, México
Posts: 4.738
Poder: 23
ContraVeneno Va por buen camino
Código Delphi [-]
qryCliente.Close;
qryCliente.SQL.Add(' SELECT telefono1_cliente, nombre_cliente, apellido_cliente FROM tbClientes ');
qryCliente.SQL.Add('WHERE telefono1_cliente = ''' + MaskEdit1.Text + '''');
qryCliente.Open;

o Tambien:

Código Delphi [-]
qryCliente.Close;
qryCliente.SQL.Add(' SELECT telefono1_cliente, nombre_cliente, apellido_cliente FROM tbClientes ');
qryCliente.SQL.Add('WHERE telefono1_cliente = '+ quotedstr(MaskEdit1.Text) );
qryCliente.Open;

P.D. Extraño a delphi
__________________

Responder Con Cita
  #16  
Antiguo 14-07-2006
Avatar de enecumene
[enecumene] enecumene is offline
Miembro de Oro
 
Registrado: may 2006
Ubicación: Santo Domingo, Rep. Dom.
Posts: 3.040
Poder: 21
enecumene Va por buen camino
gracias contraveneno me funciona perfecto, pero ahora me surge otro problema, despues de teclear un telefono me sale el nombre en el dbtext, lo limpio para teclear otro y cuando lo hago me sale esto:

Cita:
Syntax error, in query expression 'telefono1_cliente = '809-804-7530'
SELECT telefono1_cliente, nombre_cliente, apellidos_cliente FROM tbClientes
WHERE telefono1_cliente = '809-508-7990''
cual es el problema ahora?, quisiera tambien que luego de teclear el telefono me pase automaticamente al edit de peliculas...

gracias!!!
Responder Con Cita
  #17  
Antiguo 14-07-2006
Avatar de ContraVeneno
ContraVeneno ContraVeneno is offline
Miembro
 
Registrado: may 2005
Ubicación: Torreón, México
Posts: 4.738
Poder: 23
ContraVeneno Va por buen camino
El problema esta en las dobles apóstrofes al final del número. No deberías tener dobles apóstrofes.

Para pasar al siguiente contro, yo te recomiendo que al teclar enter en el control, validez el número de teléfono, y si este es válido, entonces hacer un edtPeliculas.SetFocus

Muchas personas hacen el cambio en el evento teléfono.lostfocus, pero a mi me parece que no sería correcto hacerlo en ese evento, por eso te recomiendo que lo hagas al presionar enter.
__________________

Responder Con Cita
  #18  
Antiguo 14-07-2006
Avatar de enecumene
[enecumene] enecumene is offline
Miembro de Oro
 
Registrado: may 2006
Ubicación: Santo Domingo, Rep. Dom.
Posts: 3.040
Poder: 21
enecumene Va por buen camino
gracias ContraVeneno, pero me podrias decir como hacerlo?? acordad que soy un total newbie...

te envio el codigo de nuevo para que lo veas:

Cita:
procedure TAlquiler.MaskEdit1KeyPress(Sender: TObject; var Key: Char);
begin
if Key=#13 then
begin
qryCliente.Close;
qryCliente.SQL.Add(' SELECT telefono1_cliente, nombre_cliente, apellidos_cliente FROM tbClientes ');
qryCliente.SQL.Add('WHERE telefono1_cliente = '+quotedstr(MaskEdit1.Text) );
qryCliente.Open;
if not qryCliente.IsEmpty then
DBText1.Caption:=qryClientenombre_cliente.Value+' '+qryClienteapellidos_cliente.Value;
end;
end;

Última edición por enecumene fecha: 14-07-2006 a las 01:18:09.
Responder Con Cita
  #19  
Antiguo 14-07-2006
Avatar de ContraVeneno
ContraVeneno ContraVeneno is offline
Miembro
 
Registrado: may 2005
Ubicación: Torreón, México
Posts: 4.738
Poder: 23
ContraVeneno Va por buen camino
¬¬ ( <--- nos hace falta una carita con esta expresión )
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, apellidos_cliente FROM tbClientes ');
  qryCliente.SQL.Add('WHERE telefono1_cliente = '+quotedstr(MaskEdit1.Text) );
  qryCliente.Open;
  if not qryCliente.IsEmpty then begin
    DBText1.Caption:=qryClientee.fieldByName("nombre_cliente").AsString+' '+qryCliente.fieldByName("apellidos_cliente").AsString;
    Peliculas.SetFocus; // esto era todo lo que necesitas para cambiar a películas
  else 
    //acciones cuando no encuentras al cliente
  end; //if cliente is not empty
end; //procedure
__________________


Última edición por ContraVeneno fecha: 14-07-2006 a las 01:21:41.
Responder Con Cita
  #20  
Antiguo 14-07-2006
Avatar de enecumene
[enecumene] enecumene is offline
Miembro de Oro
 
Registrado: may 2006
Ubicación: Santo Domingo, Rep. Dom.
Posts: 3.040
Poder: 21
enecumene Va por buen camino
contraveneno, el error todavia persiste, el codigo funciona para una sola vez, pues si quiero digitar otro telefono tengo que cerrar y abrir de nuevo el form, no veo donde estan los apostrofe, pues en ningun lado los tengo...

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, apellidos_cliente FROM tbClientes ');
  qryCliente.SQL.Add('WHERE telefono1_cliente = '+quotedstr(MaskEdit1.Text) );
  qryCliente.Open;
  if not qryCliente.IsEmpty then begin
    DBText1.Caption:=qryCliente.fieldByName('nombre_cliente').AsString+' '+qryCliente.fieldByName('apellidos_cliente').AsString;
    Edit2.SetFocus // esto era todo lo que necesitas para cambiar a películas
    end
  else
    begin
    ShowMessage('Cliente no existe');
    end;
  end; //if cliente is not empty
end;
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
ayuda con una consulta ddd_ddd SQL 7 06-05-2006 23:38:18
Ayuda con una consulta plz ! K4RL0S SQL 9 17-11-2005 17:33:09
Ayuda con consulta raco Varios 4 08-04-2005 21:56:43
Ayuda con consulta!! PINO72 Firebird e Interbase 1 17-10-2004 04:54:48
Ayuda con una consulta sql marcelofabiani SQL 4 27-07-2003 23:30:13


La franja horaria es GMT +2. Ahora son las 11:10:16.


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