Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

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

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 11-06-2010
betto betto is offline
Miembro
 
Registrado: ene 2006
Posts: 42
Poder: 0
betto Va por buen camino
Smile Parametros + Stored Procedure

Hola a todos:

Mi problema es el siguiente, estaba usando delphi 7 para el desarrollo de una aplicacion y tenia un componente que me permitia ejecutar TRANSACCIONES para asegurar que se ejecutaran todas mis instrucciones o ninguna (zeos). Despues migre el codigo del sistema a delphi 2010 y ahi no tengo ese componente.
Intente utilizar un componente que ejecuta Querys simples, pasando como parametro la siguiente instruccion:

START TRANSACTION WITH CONSISTENT SNAPSHOT;
UPDATE tablaX SET ENTREGA = 0 WHERE ciudad='MEX' AND ID= 253 AND TIPO=1;
UPDATE tablaX SET ENTREGA = 0 WHERE ciudad='MEX' AND ID= 253 AND TIPO=2;
UPDATE tablaX SET ENTREGA = 0 WHERE ciudad='MEX' AND ID= 253 AND TIPO=3;
UPDATE tablaY SET ENTREGA = 0 WHERE ciudad='MEX' AND ID= 253 AND ID_PAGO=5;
DELETE FROM tablaX WHERE SISTEMA = 0 AND ENTREGA = 0 AND ID =253 AND ciudad= 'MEX';
COMMIT;


pero me marca error en el componente TSQLQuery.

La pregunta es: alguien puede orientarme en como pasar mis Querys como parametro a un Stored Procedure y ejecutarlos desde el server?
intente pasar como parametro la cadena con los querys pero no reconoce como instruccion el parametro, es algo mas o menoa asi:

CREATE PROCEDURE `XYZ`(IN _SQL VARCHAR(2000) )
BEGIN
START TRANSACTION WITH CONSISTENT SNAPSHOT;
_SQL;
COMMIT;
END

pero no obtengo ningun resultado. no me deja guardar por que no reconoce _SQL como instruccion.

Otra cosa que he intentado es insertar las instrucciones en una tabla para poder tomarlas desde el stored procedure pero tampoco me ha dado resultado.


Datos Extra:
Admin de BD: MySQL 5.0
Lenguaje: Delphi 2010
Componente utilizado Actualmente: TSQLQuery de DBExpress


Espero que alguien puedo ayudarme.

Saludos y de antemano gracias.
Responder Con Cita
  #2  
Antiguo 11-06-2010
osmuar_exp osmuar_exp is offline
Miembro
 
Registrado: ene 2008
Posts: 18
Poder: 0
osmuar_exp Va por buen camino
Procedimiento Almacenado

Hola, con este procedimiento que debes de crear te modifica la tabla, solamente que debes de mandarle los parametros...

1) Procedimiento Almacenado
Código SQL [-]
CREATE PROCEDURE Actualizar (ENTREGA INTEGER(11), CIUDAD CHAR(50), ID INTEGER(11), TIPO integer(11) )
    NOT DETERMINISTIC
    SQL SECURITY DEFINER
    COMMENT ''
BEGIN
    SET @s = CONCAT('update tablaX set entrega =' , ENTREGA , ' where ciudad = ', CIUDAD, ', id = ' , ID, ', tipo = ' , TIPO);
    PREPARE consulta FROM @s;
    EXECUTE consulta;
  END;


2) Consulta para mandarle los parámetros al procedimiento
Código Delphi [-]
procedure Actualizar(entrega:integer; ciudad:string; id:integer; tipo:integer);
 var xConsulta:TADOQuery;
 begin 
    xConsulta:=TADOQuery.Create(nil);
    xConsulta.Connection:=frm_md.conexion;
    try
      with xConsulta do
       begin
           close;
           sql.Text:='call Actualizar('+IntToStr(entrega)+','+QuotedStr(ciudad)+','+inttostr(id)+','+IntToStr(tipo)+')';
           ExecSQL;
       end;
    finally
      xConsulta.free;
  end;
 end;
3) Y para mandarlo en delphi seria algo asi:
Código Delphi [-]
Actualizar(0,'MEX',253,1);

Saludos
Responder Con Cita
  #3  
Antiguo 12-06-2010
betto betto is offline
Miembro
 
Registrado: ene 2006
Posts: 42
Poder: 0
betto Va por buen camino
Hola, de antemano muchisimas gracias por la respuesta, me funciona cuando es una sola instruccion ya que tengo este codigo:

CREATE PROCEDURE `X_Y_Z`(IN _SQL text)
BEGIN
SET @s = _SQL;
PREPARE INSERTA FROM @s;
EXECUTE INSERTA;
END

pero el problema viene cuando _SQL (mi parametro) es algo parecido a esto:

START TRANSACTION WITH CONSISTENT SNAPSHOT;
DELETE FROM T_TABLA WHERE ID=2;
INSERT INTO T_TABLA(ID, X,Y)
VALUES( 2,452,1);
COMMIT;


es que precisamente necesito la funcion para mandar como parametro una cadena con todas las instrucciones SQL requeridas para asegurar que se ejecuten TODAS o NINGUNA.


Tendras alguna idea de como puedo hacerle en este caso?
Responder Con Cita
  #4  
Antiguo 12-06-2010
osmuar_exp osmuar_exp is offline
Miembro
 
Registrado: ene 2008
Posts: 18
Poder: 0
osmuar_exp Va por buen camino
Transacción

Hola, creo que ya te entendí, una vez que inicias una transacción esta no se detiene hasta que la última sentencia incluida en ella se cumpla correctamente. Puedes realizar varias consultas a la base de datos y si en alguna de ellas pasa algo, todo lo que se se haya procesado se cancela, en otras palabras "se hace por que se hace o no se hace nada",, este es el ejemplo:

Código Delphi [-]
var consulta:tadoquery;
begin
  consulta:=tadoquery.Create(self);
  consulta:=frm_md.conexion;
  frm_md.conexion.BeginTrans;
  try
    with consulta do
     begin
       close;
       sql.text:='insert into.....';
       ExecSQL;

       close;
       sql.text:='delete from....';
       ExecSQL;

       Actualizar(0,'MEX',253,1);
     end;

     frm_md.conexion.CommitTrans;
     consulta.free;
  except
  on e:exception do
     begin
       frm_md.conexion.RollbackTrans;
       showmessage('Error en la transacción de tipo '+e.Message);
       consulta.free;
       exit;
     end;
  end;

Saludos transaccionales.
Responder Con Cita
  #5  
Antiguo 12-06-2010
betto betto is offline
Miembro
 
Registrado: ene 2006
Posts: 42
Poder: 0
betto Va por buen camino
muchas gracias

si eso es lo que necesito, de hecho lo tengo en un modulo del sistema, pero queria ahorrar tiempo de procesamiento xq la red donde estoy corriendo el proyecto, esta lenta. pero creo que no quedara de otra mas que hacerlo instruccion por instruccion.

Te agradezco muchisimo, que tengas un excelente fin de semana.
Responder Con Cita
  #6  
Antiguo 12-06-2010
Avatar de rgstuamigo
rgstuamigo rgstuamigo is offline
Miembro
 
Registrado: jul 2008
Ubicación: Santa Cruz de la Sierra-Bolivia
Posts: 1.646
Poder: 17
rgstuamigo Va por buen camino
Arrow

Solo agregar que ya existe una version de Zeos para trabajar en Delphi 2010 la version 7 que es una version Alpha, que puedes descargarla de la página oficial de Zeos exactamente desde Aquí.
Saludos...
__________________
"Pedid, y se os dará; buscad, y hallaréis; llamad, y se os abrirá." Mt.7:7
Responder Con Cita
  #7  
Antiguo 14-06-2010
betto betto is offline
Miembro
 
Registrado: ene 2006
Posts: 42
Poder: 0
betto Va por buen camino
Smile Gracias!

GRACIAS!

Ya estoy trabajando con esto, gracias nuevamente.
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
Zeos, Stored Procedure y Parametros betto MySQL 3 18-02-2017 03:45:30
Stored Procedure !!! Ledian_Fdez C++ Builder 0 02-03-2010 14:01:29
Stored Procedure StartKill MySQL 2 27-08-2008 06:18:44
Ver los Stored Procedure tgsistemas SQL 0 06-04-2004 17:18:22
Stored Procedure tgsistemas SQL 1 27-02-2004 13:10:33


La franja horaria es GMT +2. Ahora son las 17:16:14.


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