Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Conexión con bases de datos (https://www.clubdelphi.com/foros/forumdisplay.php?f=2)
-   -   Saber el id de mi ultimo registro insertado (https://www.clubdelphi.com/foros/showthread.php?t=74149)

voldemmor 01-06-2011 17:42:42

Saber el id de mi ultimo registro insertado
 
Saludos a todos, espero q estes bien.

Solicito su ayu nuevamente.

D7 + MySql 5 + Zeos 6.6...

Necesito saber cual es el registro de mi ultimo registro ingresado:
Algo como esto

mi tabla recibo es algo asi:

id PK autoincrement e Integer
Nombre Varchar

mas campos.....
.....



Código Delphi [-]
ZQ.text:= 'INSERT INTO recibo ( cliente,..... )     VALUES  ( :PNombre,...)';
ZQ.parambyname('PNombre').asstring:='JOSE';
ZQ.Execsql;
zq....retur(id) (esto es lo que busco)

espero me haya explicado
y agradesco de antemano su ayuda

roman 01-06-2011 18:15:56

Ejecuta esta consulta:

Código SQL [-]
select last_insert_id()

inmediatamente después de la inserción. Te devuelve un único registro con el valor deseado.

// Saludos

voldemmor 01-06-2011 18:36:55

ok
 
muchas gracias roman.
te agradesco mucho.


Puedo aprovechar este hilo para preguntar como manejo transacciones con zeos, la verdad es hace mucho q no programo y no lo recuerdo.

a ver si estoy bien:

Código Delphi [-]
try zconn.begintran
begin
......
end
catch
 zconn.rollback.

La verdad no se si estoy en lo correcto.
Pero muchas gracias por su ayuda

roman 01-06-2011 18:39:33

Hace tiempo que no uso ZEOS, creo que no usé transacciones con él, pero supongo que es como lo pones, excepto que en lugar de catch es except :).

// Saludos

voldemmor 02-06-2011 19:32:59

gracias
 
Gracias por la respuesta, y disculpas por la demora en le respuesta.

Bueno me referia a que hace mucho no uso zeos y la verdad no se si esta bien lo escrito, como que es un pequeño indicio sobre como lo usaba.


Gracias por todo

waly2k1 13-06-2011 08:38:22

Transacciones con zeos
 
Para el manejo de transacciones en zeos es algo asi:
ZeosConx.StartTransaction;
// insert/Update/delete
ZeosConx.Commit;

Error:
ZeosConx.Rollback;

Espero te sirva de algo, y no te olvides que para el uso de transacciones las tablas deben ser de tipo innodb y no myisam.
Saludos
Walter

voldemmor 13-06-2011 17:21:57

gracias
 
muchas gracias por su ayuda.
lo resolvi asi:
Código Delphi [-]
try
Zconn.startransaction; zquery.exec; zconn.commit;
except
zconn.rollback;
end;

Gracias a todos por su colaboracion

roman 13-06-2011 19:58:09

Hola,

Yo añadiría un detallito:

Código Delphi [-]
try
  Zconn.startransaction;
  zquery.exec;
  zconn.commit;
except
  zconn.rollback;
  raise; // <-- para que relanzar la excepción
end;

Si no lanzas la excepción, el usuario no se enterará de qué fue lo que pasó, simplemente estarás ocultando el error.

// Saludos

voldemmor 14-06-2011 02:33:52

EL apuro
 
Gracias Roman por la aclaraciòn.
Me confirman nuevamente que el apuro no es bueno, pror responder rapidamente uno se olvida de detallitos muy importantes.

Tienes toda la razon debemos informar al usuario de que ocurrio un error.

Gracias por todo

Panasys 04-07-2013 16:14:29

Pregunto, continuando el hilo, la solucion para saber el ultimo ID sirve para multiples usuarios accediendo a la tabla? Es decir a mi aplicacion la van a acceder 3 o 4 usuarios asi es que cuando hago el INSERT (tambien con ZEOS) y luego pido el ultimo ID es seguro que me traera el mio y no el de otro usuario?

Gracias y abrazo

Javier

Casimiro Notevi 04-07-2013 16:56:55

El último insertado. Sin importar quién haya sido.

anubis 20-06-2014 20:26:28

Buenas,

Dando una vuelta por los foros, queria comentar que, en relacion a las transacciones con zeos y, segun lo que comentais

Cita:

try
Zconn.startransaction;
zquery.exec;
zconn.commit;
except zconn.rollback;
raise; // <-- para que relanzar la excepción
end;
si tenemos el componente zconn.autocommit:=false;
el sistema te arroja que zconn.startrarnsaccion no esta permitido para non autocommit.

espero que sirva.

un saludo

anubis 20-06-2014 21:12:56

ya aprovechando el post, con permiso de ustedes.

tengo un problema que no se por donde es el asunto por mas vueltas que le doy

si pongo

Código Delphi [-]
zquery1.sql.clear;
zquery1.sql.text:='select id_folio from compras';
zquery1.active:=true;

No tengo problemas.

pero si pongo

Código Delphi [-]
zquery1.sql.clear;
zquery1.sql.text:='select max(id_folio) from compras';
zquery1.active:=true;

para saber cual es el ultimo registro añadido, me dice que id_folio no existe.

Estoy usando zeos e id_folio es autoincrement.

si cambio id_folio por otro campo me sigue diciendo que no existe id_folio.

No lo entiendo la verdad.

Casimiro Notevi 20-06-2014 21:34:59

Cita:

Empezado por anubis (Mensaje 478117)
si cambio id_folio por otro campo me sigue diciendo que no existe id_folio.

O sea,
Código SQL [-]
select max(fecha) from tabla
te dice: Error, id_folio no existe ???

anubis 20-06-2014 21:40:26

sip

le
Código SQL [-]
pongo max(id_proveedor) from compras

tambien me dice lo mismo que el id_folio no existe.

Si lo hago desde el flamerobin no tengo ningun problema con id_folio que, de hecho, me devuelve el ultimo.

ya probe a poner un form nuevo para probar y me da lo mismo.

Casimiro Notevi 20-06-2014 21:49:53

Está claro que estás ejecutando otro sql, revisa todo porque ahí hay un "cacao" de cuidado :D

anubis 20-06-2014 22:13:09

Creo que ya se porque me dice que no existe.

Puede ser porque tengo en la misma tabla claves foraneas y al ponerle solo eso me bota el error?

si es asi, como se puede hacer esta linea

Código Delphi [-]
zquery1.sql.text:='select id_folio from compras';

porque me obliga a meter el resto de campos.

Me explico,

si pongo

Código SQL [-]
select * from compras


no hay problema

si pongo solo

Código SQL [-]
select id_folio from compras

me dice que me falta otro campo, se lo añado,
y asi sucesivamente hasta que he puesto todos, que equivalen a

Código SQL [-]
 select * from compras

anubis 20-06-2014 22:44:32

Buenas,

perdonen ustedes.

No me funcionaba porque tenia en otros forms referencia a esos campos en las propiedades del campo db

Casimiro Notevi 20-06-2014 22:55:17

Cita:

Empezado por anubis (Mensaje 478133)
No me funcionaba porque tenia en otros forms referencia a esos campos en las propiedades del campo db

Cita:

Empezado por Casimiro Notevi (Mensaje 478127)
Está claro que estás ejecutando otro sql

:):):):):):)

anubis 21-06-2014 17:13:00

Parece que nunca aprendo :(
una disculpa.


La franja horaria es GMT +2. Ahora son las 04:24:16.

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