delphi 7 o XE2, MySQL 5.1 y storeprocedure
#1
Escrito 24 julio 2012 - 02:54
los store procudure en la BD trabajan perfecto.
gracias
#2
Escrito 24 julio 2012 - 03:02
Yo ejecuto el SP (Firbird) desde un IBQuery y no desde IBStoredProc.
Saludos
#3
Escrito 25 julio 2012 - 07:03
¿Qué configuración usas?
#4
Escrito 25 julio 2012 - 09:34
#5
Escrito 25 julio 2012 - 09:38
#6
Escrito 25 julio 2012 - 09:46
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
#7
Escrito 25 julio 2012 - 09:47
CALL DbName.SPNAME(Parameters)
#8
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:
procedure TForm1.Button1Click(Sender: TObject); begin StoredProc1.ParamByName('PARAMETRO_ENTRADA').AsString := 'LO QUE SEA'; StoredProc1.ExecProc; Caption := StoredProc1.ParamByName('PARAMETRO DE SALIDA').AsString; end;
Con IBX y TIBQuery:
procedure TForm1.Button2Click(Sender: TObject); begin ibQuery.SQL.Text := ' SELECT SP("LO QUE SEA") '; ibQuery.Open; Caption := ibQuery.fields[0].AsString; end;
Lo hago de memoria, así que puede haber algún detalle.
Saludos
#9
Escrito 25 julio 2012 - 11:31
#10
Escrito 25 julio 2012 - 11:56
#11
Escrito 25 julio 2012 - 11:59
#12
Escrito 25 julio 2012 - 12:02
#13
Escrito 25 julio 2012 - 12:05
Por cierto debes usar Mysql ODBC 5.1 Driver
, pequeño detalle
Saludos
#14
Escrito 25 julio 2012 - 12:33
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;
#15
Escrito 25 julio 2012 - 12:50
#16
Escrito 25 julio 2012 - 12:51
para hacerlo por query sería de la forma:
ComponenteQuery.Sql.Text := 'CALL DBNAME.Sys_Valida_Entrada("usuario","Clave",@Entrar); Select @Entrar'; ComponenteQuery.Open
El open te devolverá dos recorsets uno con el count y el otro con el mensaje de error...
saludos
#17
Escrito 26 julio 2012 - 11:42
with ZQuery1 do begin Active:=False; Connection:=ZBaseDatos; Close; SQL.Clear; SQL.Add('call Sys_Valida_Entrada(:usuario, :clave, @entrar)'); ParamByName('usuario').AsString := 'ADMIN'; ParamByName('clave').AsString := 'a'; ExecSQL; SQL.Clear; SQL.Add('select @entrar'); Open; entrar := ZQuery1.fields[0].Asinteger; Close; end; 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.
#18
Escrito 26 julio 2012 - 11:55
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..
#19
Escrito 26 julio 2012 - 11:59
gracias
#20
Escrito 26 julio 2012 - 12:15