MySQL - Ultimo insert

   
Vista:

Ultimo insert

Publicado por MATIAS (48 intervenciones) el 20/10/2008 18:01:55
hola como va ??
bueno miren mi problema es que necesito declarar un procedimiento con un datos output

la tabla venta solo tiene un campo que es codventa y es autoincrement

lo que hago es

create procedure nuevaventa(codigo int output)

begin

insert into ventas values();

set codigo = select @last := last_insert_id();

end

pero en la linea

set codigo = select @last := last_insert_id();

me da error

Que hago mal? como le doy a la variable codigo el codigo del ultimo dato que inserto

Bueno muchas gracias
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:Ultimo insert

Publicado por Emiliano (98 intervenciones) el 20/10/2008 21:01:27
Hola yo que vos probaria esto

en ves de "set codigo = select @last := last_insert_id(); "

pondria

SELECT last_insert_id() into @last;
SET codigo = @last;

Acordate que @last son variables globales por coneccion o sea no haria falta que la funcion devuelva el valor si vos desde el cliente llamas al procedimiento y en el cliente haces un SELECT @last; te devuelve el mismo valor .

Espero que te sirva avisame si te anduvo y si era eso lo que necesitabas
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Ultimo insert

Publicado por Matias (48 intervenciones) el 21/10/2008 18:45:48
Gracias Emiliano
Tu codigo funciono mi problema ahora es como llamarlo desde vb6

por las dudas te muestro como quedoo

procedimiento mysql

create procedure nuevaventa(importe decimal (15, 2), out codigo int)

begin
insert into ventas (codventa, importe) values (null, importe);

select last_insert_id() into @last;

set codigo = @last;
end


si lo llamo desde el servidor mysql funciona bien

call nuevaventa(null, 120.02)

ahora desde vb6 intento dos maneras

**********************************************************************************************

Dim rs As ADODB.Recordset
Dim db As ADODB.Connection
Dim cmd As ADODB.Command
Dim codigo As Integer

Private Sub Command1_Click()
Set cmd = New ADODB.Command
cmd.ActiveConnection = db
cmd.CommandType = adCmdStoredProc

'cmd.Parameters.Append cmd.CreateParameter("Importe", adDecimal, adParamInput, 10, Text1)
'cmd.Parameters.Append cmd.CreateParameter("codigo", adInteger, adParamOutput, 3, codigo)



cmd.CommandText = "nuevaventa"

cmd.Execute

cmd.CommandText queda asi

{call nuevaventa(?,?)}

esto me da error de sintaxys

***********************************************************************************************

la otra forma es esta

***********************************************************************************************

Dim rs As ADODB.Recordset
Dim db As ADODB.Connection
Dim cmd As ADODB.Command

Private Sub Command1_Click()
Set cmd = New ADODB.Command
cmd.ActiveConnection = db

cmd.CommandText = "call nuevaventa" & "(" & Text1 & "," & "@a" & ")"
MsgBox (cmd.CommandText)
cmd.Execute



End Sub

**********************************************************************************************

Esto no me da error lo ejecuta bien pero no entiendo como capturar ese valor de salida.
Bueno gracias por tu ayuda
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Ultimo insert

Publicado por Emiliano (98 intervenciones) el 21/10/2008 21:30:33
Hola,simplemente despues de llamar al procedimiento almacenado haces un

SELECT @last;

como cualquie otro SELECT que haces

y en esa variable te devuelve el valor. Ah y a esta linea

SET codigo = @last;

en el procedimiento no hace falta ya que a ese valor lo tenes en la variable @last;

Espero que te sirva decime si te anduvo.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Ultimo insert

Publicado por Matias (48 intervenciones) el 21/10/2008 22:52:21
Gracias funcione pero ya lo habia probado a eso y antes no me anduvo, se ve que algo hacia mal.
Bueno muchas gracias por tu ayuda...
Nos vemos
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar