Ir al contenido


Foto

delphi 7 o XE2, MySQL 5.1 y storeprocedure


  • Por favor identifícate para responder
19 respuestas en este tema

#1 JuanPalmaSoft

JuanPalmaSoft

    Advanced Member

  • Miembros
  • PipPipPip
  • 76 mensajes
  • LocationDistrito Federal

Escrito 24 julio 2012 - 02:54

No logro con los conectores de DB que me funcione bien  un storeprocedure. ej delphi 7  con ningun provider de BD logro que me trabajen bien. o no los reconoce o no me roconoce los parametros d eentrada y salida, he visto ZEOs, BDE y ADO. alguien me pudoiera ayudar en esto.

los store procudure en la BD trabajan perfecto.


gracias
  • 0

#2 egostar

egostar

    missing my father, I love my mother.

  • Administrador
  • 14.448 mensajes
  • LocationMéxico

Escrito 24 julio 2012 - 03:02

Que componente estas utilizando para ejecutar el SP ?

Yo ejecuto el SP (Firbird) desde un IBQuery y no desde IBStoredProc.

Saludos
  • 0

#3 poliburro

poliburro

    Advanced Member

  • Administrador
  • 4.945 mensajes
  • LocationMéxico

Escrito 25 julio 2012 - 07:03

Yo ejecuto procedimientos almacenados con Delphi y ADO pero usado MyOdbc como capa de conexión...

¿Qué configuración usas?
  • 0

#4 JuanPalmaSoft

JuanPalmaSoft

    Advanced Member

  • Miembros
  • PipPipPip
  • 76 mensajes
  • LocationDistrito Federal

Escrito 25 julio 2012 - 09:34

en estos momentos  uso BDE y el componente para ejecutar los sp,  TStoredProc
  • 0

#5 JuanPalmaSoft

JuanPalmaSoft

    Advanced Member

  • Miembros
  • PipPipPip
  • 76 mensajes
  • LocationDistrito Federal

Escrito 25 julio 2012 - 09:38

en ADO como haces la configuracion. y en caso de ejecutar el sp con un TQuery como lo ejecutas?
  • 0

#6 poliburro

poliburro

    Advanced Member

  • Administrador
  • 4.945 mensajes
  • LocationMéxico

Escrito 25 julio 2012 - 09:46

No amigo... BDE es lo peor que puedes usar para conectarte a cualquier base de datos... Debes cambiarte a ADO...

Haces lo siguiente:

1- Instalas MyODC
2- Creas un DSN Con los datos de tu servidor Mysql
3- colocas un ADO Conexion en tu aplicación y en conecction string eliges el proveedor Para ODBC  y seleccionas el DSN que has creado.
Luego colocas un TADOStoredProcedure, le defines su conexión y el nombre del SP, al dar click en parámtros de manera automática los creará y te los mostrará....


Es muy sencillo amigo


  • 0

#7 poliburro

poliburro

    Advanced Member

  • Administrador
  • 4.945 mensajes
  • LocationMéxico

Escrito 25 julio 2012 - 09:47

Si deseas invocar el SP como si fuera un query coloca un TADOQUERY y en SQL coloca

CALL DbName.SPNAME(Parameters)

  • 0

#8 egostar

egostar

    missing my father, I love my mother.

  • Administrador
  • 14.448 mensajes
  • LocationMéxico

Escrito 25 julio 2012 - 10:01

en ADO como haces la configuracion. y en caso de ejecutar el sp con un TQuery como lo ejecutas?


Con BDE y TStoredProc:



delphi
  1. procedure TForm1.Button1Click(Sender: TObject);
  2. begin
  3.   StoredProc1.ParamByName('PARAMETRO_ENTRADA').AsString := 'LO QUE SEA';
  4.   StoredProc1.ExecProc;
  5.   Caption := StoredProc1.ParamByName('PARAMETRO DE SALIDA').AsString;
  6. end;



Con IBX y TIBQuery:



delphi
  1. procedure TForm1.Button2Click(Sender: TObject);
  2. begin
  3.   ibQuery.SQL.Text := ' SELECT SP("LO QUE SEA") ';
  4.   ibQuery.Open;
  5.   Caption := ibQuery.fields[0].AsString;
  6. end;



Lo hago de memoria, así que puede haber algún detalle.

Saludos
  • 0

#9 JuanPalmaSoft

JuanPalmaSoft

    Advanced Member

  • Miembros
  • PipPipPip
  • 76 mensajes
  • LocationDistrito Federal

Escrito 25 julio 2012 - 11:31

uso el mySQl ODBC 3.51  sigue sin mostrarme los parametros del sp. utilizando ADO.
  • 0

#10 poliburro

poliburro

    Advanced Member

  • Administrador
  • 4.945 mensajes
  • LocationMéxico

Escrito 25 julio 2012 - 11:56

Me podrías mostrar tu cadena de conexión por favor?
  • 0

#11 poliburro

poliburro

    Advanced Member

  • Administrador
  • 4.945 mensajes
  • LocationMéxico

Escrito 25 julio 2012 - 11:59

También el encabezado de tu sp y la configruación que creaste en el ODBC
  • 0

#12 poliburro

poliburro

    Advanced Member

  • Administrador
  • 4.945 mensajes
  • LocationMéxico

Escrito 25 julio 2012 - 12:02

Por cierto debes usar Mysql ODBC 5.1 Driver
  • 0

#13 egostar

egostar

    missing my father, I love my mother.

  • Administrador
  • 14.448 mensajes
  • LocationMéxico

Escrito 25 julio 2012 - 12:05

Por cierto debes usar Mysql ODBC 5.1 Driver


*-) *-) *-), pequeño detalle :)

Saludos
  • 0

#14 JuanPalmaSoft

JuanPalmaSoft

    Advanced Member

  • Miembros
  • PipPipPip
  • 76 mensajes
  • LocationDistrito Federal

Escrito 25 julio 2012 - 12:33

cadena

Provider=MSDASQL.1;Password=sysadm;Persist Security Info=True;User ID=sysadm;Data Source=MEmpresaDelphi

sp

CREATE DEFINER = 'root'@'localhost' PROCEDURE `Sys_Valida_Entrada`(
        IN Usuario varCHAR(8),
        IN Clave varCHAR(8),
        OUT Entrar BOOLEAN
    )
    NOT DETERMINISTIC
    CONTAINS SQL
    SQL SECURITY DEFINER
    COMMENT ''
BEGIN
declare Existe Integer;

set Existe = 0;

select count(*) into Existe from usuario
where CLAVEUSUARIO = Usuario and  CLAVEACCESO = Clave;

if Existe > 0  then  set Entrar = 1;
else set Entrar = 0;
end if;

END;



  • 0

#15 JuanPalmaSoft

JuanPalmaSoft

    Advanced Member

  • Miembros
  • PipPipPip
  • 76 mensajes
  • LocationDistrito Federal

Escrito 25 julio 2012 - 12:50

con el odbc 5.1 me pasa lo mismo, me faltara alguna actualizacion a delphi 7?
  • 0

#16 poliburro

poliburro

    Advanced Member

  • Administrador
  • 4.945 mensajes
  • LocationMéxico

Escrito 25 julio 2012 - 12:51

Los parámetros de salida no están soportados para su uso con los componentes TADO STORED...
para hacerlo por query sería de la forma:



delphi
  1. ComponenteQuery.Sql.Text := 'CALL DBNAME.Sys_Valida_Entrada("usuario","Clave",@Entrar); Select @Entrar';
  2. ComponenteQuery.Open



El open te devolverá  dos recorsets uno con el count y el otro con el mensaje de error...


saludos







  • 0

#17 JuanPalmaSoft

JuanPalmaSoft

    Advanced Member

  • Miembros
  • PipPipPip
  • 76 mensajes
  • LocationDistrito Federal

Escrito 26 julio 2012 - 11:42

Gracias por todo, pero con ZEOS  7.0.0 dev  lo resolvi de esta forma,



delphi
  1. with ZQuery1 do
  2.   begin
  3.   Active:=False;
  4.   Connection:=ZBaseDatos;
  5.   Close;
  6.   SQL.Clear;
  7.   SQL.Add('call Sys_Valida_Entrada(:usuario, :clave, @entrar)');
  8.   ParamByName('usuario').AsString  := 'ADMIN';
  9.   ParamByName('clave').AsString    := 'a';
  10.   ExecSQL;
  11.   SQL.Clear;
  12.   SQL.Add('select @entrar');
  13.   Open;
  14.   entrar := ZQuery1.fields[0].Asinteger;
  15.   Close;
  16.   end;
  17.   ZBaseDatos.Reconnect;


parecida a la solucion dada anteriormente, pero no me dejaba poner dos sentencias dentro de una misma llamada. Por eso las separe.

el tema esta como me dices en la variables de salida, definidas en los SP.
  • 0

#18 poliburro

poliburro

    Advanced Member

  • Administrador
  • 4.945 mensajes
  • LocationMéxico

Escrito 26 julio 2012 - 11:55

Me alegra que lo hayas resuelto al final mi estimado amigo...

Me he tomado la libertad de editar tu mensaje para colocar las etiquetas delphi pues de esta manera tu código se hace más legible..
  • 0

#19 JuanPalmaSoft

JuanPalmaSoft

    Advanced Member

  • Miembros
  • PipPipPip
  • 76 mensajes
  • LocationDistrito Federal

Escrito 26 julio 2012 - 11:59

como haces lo de poner las etiquetas?

gracias
  • 0

#20 poliburro

poliburro

    Advanced Member

  • Administrador
  • 4.945 mensajes
  • LocationMéxico

Escrito 26 julio 2012 - 12:15

Seleccionas tu código y presionas el botón con el ícono de delphi.. ya sabes el del casco romano...

  • 0




IP.Board spam blocked by CleanTalk.