Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Bases de datos > Tablas planas
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 10-02-2010
Er0s Er0s is offline
Miembro
 
Registrado: mar 2008
Posts: 75
Poder: 17
Er0s Va por buen camino
Consultas Access en Delphi

Buenos días!!

He estado buscando por el foro y no encuentro nada que satisfazga mi deseo.

Estoy haciendo una aplicacion para mi uso personal "Servicio Tecnico Informatico" en el que tengo de momento dos tablas hechas en access Clientes y Averias. Las tablas estan Bien definidas me funciona todo a la perfeccion añado borro edit, bla bla bla.

Mi problema viene a la hora de sacar las consultas en pantalla digamos que quiero ver el historial de averias del pc de un cliente, en access pide el DNI del cliente y me saca toda la informacion, por lo que funciona perfetamente ,pero... como puedo pasar esa consulta a delphi.

Cada vez que lo intento me saca el mensaje "Pocos parametros se esperaba 1", y supongo que es el DNI que en acces tengo como filtro para que saque la informacion.

No se si me explique bien o me entendereis, espero que si y a ver si me echais un cable. Gracias de antemano.
Responder Con Cita
  #2  
Antiguo 10-02-2010
Avatar de Caro
*Caro* Caro is offline
Moderadora
 
Registrado: jul 2004
Ubicación: Cochabamba, Bolivia
Posts: 2.544
Poder: 22
Caro Va por buen camino
Hola Er0s, bienvenido al foro, sería bueno que pusieras el codigo delphi que tienes.

Para hacer una consulta debes hacerlo de esta forma:

Código Delphi [-]
  Query.Close;
  Query.Sql.Text := 'Select * From Clientes Where DNI='+Edit1.Text;
  Query.Open;

Suponiendo que el DNI lo introduces en un Edit, si tu campo DNI es String debes añadir comillas.

Saluditos
__________________
Disfruten cada minuto de su vida a lado de sus seres queridos como si fuese el ultimo, uno nunca sabe lo que puede pasar.
Responder Con Cita
  #3  
Antiguo 10-02-2010
Er0s Er0s is offline
Miembro
 
Registrado: mar 2008
Posts: 75
Poder: 17
Er0s Va por buen camino
Pues codigo no he metido nada aún, todo esta hecho con clicks de raton.

Estoy utilizando un TADOStoreProc pero como como decia antes me salta el error de Falta un Parametro. Si en lugar de esa consulta que pide un parametro metro una consulta ya filtrada me lo muestra perfectamente.

Y quisiera saber si hay una propiedad de este componente que me pida en pantalla ese parametro que le falta y que supongo que se referirá, en este caso, al DNI que en access pido.
Responder Con Cita
  #4  
Antiguo 10-02-2010
Avatar de Neftali [Germán.Estévez]
Neftali [Germán.Estévez] Neftali [Germán.Estévez] is offline
[becario]
 
Registrado: jul 2004
Ubicación: Barcelona - España
Posts: 18.275
Poder: 10
Neftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en bruto
Cita:
Empezado por Er0s Ver Mensaje
Y quisiera saber si hay una propiedad de este componente que me pida en pantalla ese parametro que le falta y que supongo que se referirá, en este caso, al DNI que en access pido.
No.

Como bien ya te ha dicho Caro, lo mejor es que crees las consultas en tu programa Delphi, ya que así tendrás más control sobre lo que haces y si algun día decides cambiar de Base de Datos, el cambio será menos traumático.

Si aun así deseas utilizar las consultas creadas en Access (por que sean muy complejas o porque no deseas reescribirlas) debes utilizar para llamarlas el componente TADOStoredProc.

El tema de los parámetros de Access en las consultas (que te lo pida) no es un tema del motor de Base de Datos, sino del propio Access como programa; Por lo tanto si usas el motor "desde fuera", por ejemplo desde un programa Delphi+ADO como tú estás haciendo, nunca te pedirá esos parámetros.

Debes utilizar un TADOStoredProc y definir como parámetros del Stored, los mismo que tienes definidos en la consulta. Antes de llamarlo, los rellenas y luego haces la llamada.

Cita:
Empezado por Er0s Ver Mensaje
...pero como como decia antes me salta el error de Falta un Parametro. Si en lugar de esa consulta que pide un parametro metro una consulta ya filtrada me lo muestra perfectamente.
Por que no estás pasando el parámetro que el ADOStoredProc necesita. POr eso cuando la consulta no tiene parámetros sí funciona.

Haz una búsqueda en los foros por Parametros y ADOStoredProc y verás como te salen unos cuantos hilos al respecto con bastantes ejemplos.
__________________
Germán Estévez => Web/Blog
Guía de estilo, Guía alternativa
Utiliza TAG's en tus mensajes.
Contactar con el Clubdelphi

P.D: Más tiempo dedicado a la pregunta=Mejores respuestas.
Responder Con Cita
  #5  
Antiguo 10-02-2010
Er0s Er0s is offline
Miembro
 
Registrado: mar 2008
Posts: 75
Poder: 17
Er0s Va por buen camino
Gracias Caro y neftali por responder

Esta noche mirare porque ando en el curro.... pero si no entiendo mal neftali, me estas diciendo que use codigo para acceder a las BD no? como si de un fichero se tratase no?

Disculpad mi ignorancia
Responder Con Cita
  #6  
Antiguo 10-02-2010
Avatar de Caro
*Caro* Caro is offline
Moderadora
 
Registrado: jul 2004
Ubicación: Cochabamba, Bolivia
Posts: 2.544
Poder: 22
Caro Va por buen camino
Cita:
Empezado por Er0s Ver Mensaje
Esta noche mirare porque ando en el curro.... pero si no entiendo mal neftali, me estas diciendo que use codigo para acceder a las BD no? como si de un fichero se tratase no?
Hola de nuevo, lo que te dice Neftali es que lo hagas de la forma del ejemplo que he puesto en mi primer mensaje.

Si quieres hacerlo con tu consulta de access, debes crearte el parametro con el mismo nombre que tienes en access como te dijo Neftalí, y no te olvides ponerle su tipo en la propiedad DataType. El código delphi para ejecutar tu consulta pasandole el prámetro sería así:

Código Delphi [-]
 ADOStoredProc1.Close; //También vale con Active := False;
 ADOStoredProc1.Prepared := True;;
 ADOStoredProc1.Parameters[0].Value := StrToInt(Edit1.Text);
 ADOStoredProc1.Open; //Active := True;

Ahora creo que si el procediento no devuelve valor se debe ejecutar con ADOStoredProc1.ExecProc, pero mejor si Neftalí nos confirma eso.

Saluditos
__________________
Disfruten cada minuto de su vida a lado de sus seres queridos como si fuese el ultimo, uno nunca sabe lo que puede pasar.
Responder Con Cita
  #7  
Antiguo 11-02-2010
Avatar de Neftali [Germán.Estévez]
Neftali [Germán.Estévez] Neftali [Germán.Estévez] is offline
[becario]
 
Registrado: jul 2004
Ubicación: Barcelona - España
Posts: 18.275
Poder: 10
Neftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en bruto
Cita:
Empezado por Er0s Ver Mensaje
...pero si no entiendo mal neftali, me estas diciendo que use codigo para acceder a las BD no? como si de un fichero se tratase no?
Intentaré explicarme mejor.

Hay 2 formas de ejecutar una consulta en Access desde un programa Delphi.

OPCION 1: Crear la consulta en Delphi utilizando SQL. Para ello necesitaras un componente TADOQuery; Y como tu consulta tiene una parámetro (valor variable) que comentas que es el DNI, deberás usar algo similar a lo que Caro te ha comentado aquí.

OPCION 2: Si no sabes SQL o quieres usar la consulta que has creado en Access, debes utilizar un componente TADOStoredProc. Como tu consulta tiene un parámetro variable, debes usar para rellenarlo un código similar al que Caro te ha comentado en este otro post.

Si tu consulta no tuviera parámetros podrías utilizar un TADOStoredProc directamente o pegar la SQL en un TADOQuery y ejecutarlo directamente (sin código). Como tu consulta tieve un parámetro variable (DNI) o se lo añades con código al TADOQuery(SQL) o se la pasas al TADOStoredProc. En ambos casos deberás utilizar algo de código.

Un saludo.
__________________
Germán Estévez => Web/Blog
Guía de estilo, Guía alternativa
Utiliza TAG's en tus mensajes.
Contactar con el Clubdelphi

P.D: Más tiempo dedicado a la pregunta=Mejores respuestas.
Responder Con Cita
  #8  
Antiguo 11-02-2010
Er0s Er0s is offline
Miembro
 
Registrado: mar 2008
Posts: 75
Poder: 17
Er0s Va por buen camino
El codigo Funciona

Cita:

datamodule1.Consulta.Close;
datamodule1.Consulta.Prepared := True;;
datamodule1.Consulta.Parameters[0].Value := Edit1.Text;
datamodule1.Consulta.Open;
datamodule1.Consulta.ExecProc;
Ahora mi pregunta, dado mi ignorancia, es la siguiente como muestro esos datos filtrados por DNI en pantalla ya sea en DBedits o en una DBGrid, es decir como busco en la tabla dichos datos con el parametro obtenido y como los muestro despues en pantalla?

Última edición por Er0s fecha: 11-02-2010 a las 13:01:17.
Responder Con Cita
  #9  
Antiguo 11-02-2010
Avatar de Caro
*Caro* Caro is offline
Moderadora
 
Registrado: jul 2004
Ubicación: Cochabamba, Bolivia
Posts: 2.544
Poder: 22
Caro Va por buen camino
Cita:
Empezado por Er0s Ver Mensaje
Ahora mi pregunta, dado mi ignorancia, es la siguiente como muestro esos datos filtrados por DNI en pantalla ya sea en DBedits o en una DBGrid, es decir como busco en la tabla dichos datos con el parametro obtenido y como los muestro despues en pantalla?
Hola de nuevo, en el Edit ya le estas pasando un valor a tu consulta, ahora solo debes añadir un DataSource enlazado a tu TAdoStoredProc y tu dbgrid enlazado a tu datasource y veras el resultado.

Saluditos
__________________
Disfruten cada minuto de su vida a lado de sus seres queridos como si fuese el ultimo, uno nunca sabe lo que puede pasar.
Responder Con Cita
  #10  
Antiguo 11-02-2010
Er0s Er0s is offline
Miembro
 
Registrado: mar 2008
Posts: 75
Poder: 17
Er0s Va por buen camino
Cita:
Empezado por Caro Ver Mensaje
hora solo debes añadir un DataSource enlazado a tu TAdoStoredProc y tu dbgrid enlazado a tu datasource y veras el resultado.

Saluditos

Llevaba to la mañana probandolo y no habia manera de mostrar datos...... Toda la mañana metiendo DNI en el Edit y que no salen los datos. Una y mil veces hice lo que acabas de escribir y una y mil veces metia el DNI a ver si encontraba al cliente y nada. hasta que viene la iluminacion y me llega a la mente " Calamar esta consulta necesita un nombre no un DNI" lol.

Todo Ok, ya me muestra datos. Gracias por vuestra rapida ayuda.

Hasta la proxima Duda :P
Responder Con Cita
  #11  
Antiguo 17-03-2011
Er0s Er0s is offline
Miembro
 
Registrado: mar 2008
Posts: 75
Poder: 17
Er0s Va por buen camino
Despues de un año trabajando con componentes TAdoStoreProc, Gracias a vuestra ayuda, me encuentro hoy con un problemilla.

Ejemplo:

Tenemos dos explotaciones ganaderas, si escojo una explotación ganadera quiero mostrar un listado de las cabezas de ganado que hay en dicha explotacion y si escojo la otra pues obviamente mostrara las cabezas de ganado que existan.

Con los ejemplos que aprendí gracias a vosotros, funciona pero....

1. selecciono explotacion
2. quiero listado
3. no sale el listado... DBGrid vacia
4. quiero listado
5. Sale el listado siempre que lo solicite de aquí en adelante
6. Si selecciono otra explotacion volvemos al punto 1

Código Delphi [-]
    datamodule1.storeproc.Close;
    datamodule1.storeproc.Parameters[0].Value:=ExploId;
    datamodule1.storeproc.Prepared:=true;
    datamodule1.storeproc.open;
    datamodule1.storeproc.exeproc;

Este es el código que utilizo

Alguna idea de porque no me da la información la primera vez que lo solicito?
Responder Con Cita
  #12  
Antiguo 17-03-2011
Avatar de Caral
[Caral] Caral is offline
Miembro Premium
 
Registrado: ago 2006
Posts: 7.659
Poder: 25
Caral Va por buen camino
Hola
Bueno, nunca he usado un TAdoStoreProc, de hecho nunca lo habia visto (que despistado).
Lo cierto es que si hay una consulta en access y la quiero usar en mi programa en delphi, tal cual, simplemente la llamo desde un simple ADOTable, como si fuera una tabla mas.
Si se necesita filtrarla, pues se hace un filtro.
Creo que se le llama una vista, en firebird se usan igualmente.
Saludos
__________________
Siempre Novato
Responder Con Cita
  #13  
Antiguo 17-03-2011
Er0s Er0s is offline
Miembro
 
Registrado: mar 2008
Posts: 75
Poder: 17
Er0s Va por buen camino
Hola Caral!!

Siguiendo tus pasos he creado una AdoTable y se la asigno al datasouce y este a la dbgrid hasta ahí todo correcto.


Siguiendo el ejemplo anterior, el codigo de explotación es un numero que tengo almacenado en una variable global llamada ExploId. Como filtro la tabla con la variable global? Se puede filtrar dicha tabla mirando en un solo campo de ella o revisa toda la tabla?

datamodule1.adotable.filter........

Gracias

Última edición por Er0s fecha: 17-03-2011 a las 13:30:40.
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
Consultas de ACCESS en Delphi 7 y ADO saldanaluis Tablas planas 1 19-12-2007 07:16:26
consultas sql en access alfil123 Conexión con bases de datos 2 31-10-2006 03:01:11
Como modificar consultas de access en tiempo de ejecucion ernestocad SQL 0 06-04-2005 16:30:05
Consultas a db en Access mediante el Tadoquery cancerbero Tablas planas 7 20-07-2004 22:52:23
Consultas por fecha en access Mashabak Conexión con bases de datos 2 16-06-2004 19:33:17


La franja horaria es GMT +2. Ahora son las 10:21:18.


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