Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Internet (https://www.clubdelphi.com/foros/forumdisplay.php?f=3)
-   -   Intraweb: Ejecutar una consulta dentro del propio ACCESS (https://www.clubdelphi.com/foros/showthread.php?t=11211)

Brewster 08-06-2004 18:25:55

Intraweb: Ejecutar una consulta dentro del propio ACCESS
 
Mi duda es la siguiente, he leido que se pueden ejecutar desde Intraweb consultas que están dentro de la propia base de datos de ACCESS a la que se conecta.

Hasta ahora no he encontrado exactamente como es.

¿Alguien sabe algo?

Gracias.

tcp_ip_es 08-06-2004 18:52:51

Con un componente TStoredProc o con TADOStoredProc.
Luego con TStoredProc (BDE) le "enchufas" a la Bd en la propiedad DatabaseName y la propiedad StoredProcName le pones la consulta/procedimiento que tengas en la base de datos (te saldrá un desplegable)

y si es conTADOStoredProc lo mismo le "enchufas" la Bd en la propiedad Connection o DataSource como prefieras y luego le pones la consulta/procedimiento que quieras en su propiedad ProcedureName.


Espero que te haya servido, Saludos, Tony

Brewster 08-06-2004 20:11:13

Estoy usando un TADOStoredProc y las inserciones, modificaciones y borrado me lo hace correctamente.

Pero cuando es un select no, mi codigo es.-

proceder := TADOStoredProc.Create(Nil);
proceder.ConnectionString := 'C:\xxx\bdPrueba.mdb';
proceder.ProcedureName := 'insPedido';
proceder.ExecProc;

while not proceder.EOF do begin
---
End;

Pero siempre me da como resultado vacio, la pruebo en el propio ACCESS y me devuelve varios registros.

He probado con otros métodos aparte de ExecProc pero ninguno parece ir bien.

¿Alguien sabe como ejecutar select que devuelva múltiples registros?

guillotmarc 08-06-2004 20:49:42

Hola.

Utiliza un .Open en lugar de un .ExecProc, si estás esperando que te devuelva un Dataset (como es el caso actual).

Saludos.

Brewster 09-06-2004 10:58:23

Ya había probado lo del Open, de todos modos gracias.

Pero si otra pregunta, si la consulta interna del ACCESS tiene un parámetro, como por ejemplo.-

select * from prueba where precio>[precio]

Desde Delphi com paso el valor a ese parámetro, lo he probado de varias maneras.-

ADOStoredProc.Parameters.ParamValues['precio'] := 77;

ADOStoredProc.Parameters.Parambyname['precio'].value := 77;

ADOStored.Proc.Parameters.Items[1].Value := 77;

Pero nada.

Espero respuesta. Muchas gracias.

guillotmarc 09-06-2004 12:36:21

Cita:

Empezado por Brewster
Ya había probado lo del Open, de todos modos gracias.

Sigue haciendo pruebas con el Open, puesto que con el ExecProc no tienes ninguna posiblidad de abrir un Dataset (y por tanto navegar por él, con First, Next, Eof, ...).

Cita:

Empezado por Brewster
Pero si otra pregunta, si la consulta interna del ACCESS tiene un parámetro, como por ejemplo.-

select * from prueba where precio>[precio]

Desde Delphi com paso el valor a ese parámetro, lo he probado de varias maneras.-

ADOStoredProc.Parameters.ParamValues['precio'] := 77;

ADOStoredProc.Parameters.Parambyname['precio'].value := 77;

ADOStored.Proc.Parameters.Items[1].Value := 77;

Las 3 formas són correctas. El problema debe estar en que no te encuentra el parámetro. Cuando usaba ADO, creaba los parámetros como persistentes para no tener este problema. Simplemente en tiempo de diseño vete a la colección Parameters del componente, y modifica alguna propiedad (normalmente la Values) para que el parámetro quede fijado como permanente.

NOTA : Si no te aparecen los parámetros, lo puedes crear manualmente.

PD : Respecto al primer código, ¿ porqué no utilizas una conexión, en lugar de especificar la ConnectionString en cada comando ?. No estoy seguro, pero es muy probable que se abran distintas conexiones a la base de datos.
Simplemente añade un componente TADOConnection al formulario (o en un DataModule para poder compartirlo entre formularios), y especifica la propiedad Connection del TADOStoredProc a esa conexión.

Saludos.

tcp_ip_es 09-06-2004 16:20:01

Siento no haber contestado antes, esta mañanita he estado muu liado en el curro :D , de todas formas tienes alguien que sabe más que yo de delphi que te ha asesorado perfectamente. En cuanto a lo que comentas de los parametros, como bien dice Guillotmarc, son correctos prueba lo que te comenta él, tambien pon antes de la asignación de parámetros esta instrucción:

Código Delphi [-]
ADOStoredProc.prepare;
ADOStoredProc.Parameters.Parambyname['precio'].value := 77;
ADOStoredProc.Open // en el caso de que sea un select claro.

Saludos, Tony


La franja horaria es GMT +2. Ahora son las 00:37:02.

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