Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   MySQL (https://www.clubdelphi.com/foros/forumdisplay.php?f=21)
-   -   Ejecutar varias SQL en una sola llamada (https://www.clubdelphi.com/foros/showthread.php?t=37326)

erian96 09-11-2006 17:38:27

Ejecutar varias SQL en una sola llamada
 
Hola buen día a todos.

Estoy desarrollando una aplicación Delphi/Zeos 6.5.1-alpha/MySQL 5.0.22 - mis componentes Zeos tienen los ultimos parches para esa versíon (permiten la ejecución de SP's) -

Necesito ejecutar varias sentencias en una sola llamada al servidor, ¿alguien sabe como hacerlo?

Por ej., en este momento lo hago de la siguiente forma:
Código Delphi [-]
 
qSQL.SQL.Text := 'CALL calcular_siguiente_folio_movimiento_inventario(@folio)';
qSQL.ExecSQL;
qSQL.SQL.Text := 'SELECT @folio';
qSQL.Open;

y lo que quisiera hacer es ejecutar la primera instrucción y la tercera en una sola llamada.

Gracias.

Neftali [Germán.Estévez] 09-11-2006 17:47:40

Sé que hay componentes (por ejemplo ADO -que vienen con Delphi-) que permiten lanzar un SQL cque devuelva varios Recordsets; Una vez que la has ejecutado puedes "moverte" (NextRecordSet) entre los distintos Recorsets que has obtenido. El redimiento es sensiblemente superior a si los ejecutas por separado.

Tal vez deberías mirar los componentes que utilizas para ver si poseen algo similar. Tal vez alguien que conozca Zeos pueda decirnos si poseen alguna característica similar a ésta.

erian96 09-11-2006 18:14:52

Que tal Neftali, gracias por tu ayuda. Solo un ultimo favor, me podrías postear un ejemplo de como lo haces tú y si me puedes decir sobre que DBMS lo ejecutas.

Gracias.

Neftali [Germán.Estévez] 10-11-2006 10:47:17

Cita:

Empezado por erian96
...me podrías postear un ejemplo de como lo haces tú y si me puedes decir sobre que DBMS lo ejecutas.

Yo en mi caso he utilizado ADO con SQL Server. Depende del proveedor, por ejemplo ADO con MDB (Jet4) no permite esta característica.
Alado una sentencia del estilo a esta:

Código SQL [-]
select * from tabla1
select * from tabla2
select * from tabla3

Para ejecutarla se hace normal:

Código Delphi [-]
  ADOQuery1.Open;

Para cambiar al siguiente DataSet (por ejemplo si lo estás viendo en un Grid) serñía así:

Código Delphi [-]
var
  n:Integer;
begin
  // Creas un nuevo recordset
  FRecordSet := TADODataSet.Create(nil);
  // Pasas al siguiente
  FRecordSet.Recordset := ADOQuery1.NextRecordSet(n);
  // cambias la fuente de datos del DBGrid
  DBGrid1.DataSource.DataSet := FRecordSet;
  // ...

erian96 10-11-2006 16:11:34

Neftali, muchas gracias por tu última respuesta. Trataré de adecuar tu solución a mi problema.

He leido por ahí de un componente TSQLProcessor del mismo paquete Zeos probaré con él aunque creo q no me será de mucha ayuda debido a que mis sentencias son llamadas a procedimientos almacenados y de selección de datos.

Gracias de nuevo.

AzidRain 26-11-2006 07:06:22

El ZSQLProcessor te sirve mas que nada para correr scripts SQL, es decir, series de sentencias que no precisamente regresan datos. Por otro lado Tienes
ZSQLStoredProc, que precisamente ejecuta procedimientos almacenados. Este componente se comporta como un Dataset y puedes manipularlo casi igual. Para el ejemplo que pusiste yo creo que si te sirve...revisalo


La franja horaria es GMT +2. Ahora son las 07:06:57.

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