Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   SQL (https://www.clubdelphi.com/foros/forumdisplay.php?f=6)
-   -   Como recojo el resultado de SELECT MAX(ID) (https://www.clubdelphi.com/foros/showthread.php?t=25808)

masnovita 04-10-2005 20:05:43

Como recojo el resultado de SELECT MAX(ID)
 
Hola.
Como puedo recoger el resultado de esta consulta?

dm1.zQtemp.SQL.Clear;
dm1.zQtemp.SQL.Add('Select MAX(ID) from operacions');
dm1.zQtemp.ExecSQL;

He probado varias animaladas como esta, pero sin resultado
Showmessage(dm1.Dstemp.DataSet.fieldbyname('MAX(ID)').AsString);

Tengo una tabla operacions con campo id autonumerico.
Cuando hago un insert necesito saber el id que ha generado para ponerlo en la tabla detalle de operacions.
No se si es lo mas correcto mirar justo despues de hacer el insert el id mas grande.
Gracias!

lucasarts_18 04-10-2005 20:18:00

Cita:

Empezado por masnovita
Hola.
Como puedo recoger el resultado de esta consulta?

dm1.zQtemp.SQL.Clear;
dm1.zQtemp.SQL.Add('Select MAX(ID) from operacions');
dm1.zQtemp.ExecSQL;

Prueba así:

Código Delphi [-]
          dm1.zQtemp.SQL.Clear;
          dm1.zQtemp.SQL.Add('Select MAX(ID) maximo from operacions');
          dm1.zQtemp.Open;

Ahora lo puedes llamar desde código como un campo más..
Además cuando utilizas un Select el método a usar es OPEN.

Cita:

Empezado por masnovita
Tengo una tabla operacions con campo id autonumerico.
Cuando hago un insert necesito saber el id que ha generado para ponerlo en la tabla detalle de operacions.
No se si es lo mas correcto mirar justo despues de hacer el insert el id mas grande.
Gracias!

Puede ser una forma de hacerlo, para mí es correcto....

masnovita 04-10-2005 20:29:31

Gracias.

Por cierto, que velocidad de respuesta!!!!

1K gracias! ;)

omy 04-10-2005 20:35:38

Hola espero ayude
 
Yo lo hice asi

sql:= 'Select count (bandera) from tiempocamion where bandera = '+ inttostr(aqdumy2.FieldValues['id']);
AQchecatiempocamion.SQL.Clear;
AQchecatiempocamion.SQL.Add(sql);
AQchecatiempocamion.Active:=true;

variable := AQchecatiempocamion.FieldValues['Expr1000'];

Es lo mismo para el max

nota. si no sirve me avisas porfa

Chente(rMan) 04-10-2005 21:26:32

Como que eso que haces no lo veo muy correcto, que pasa si tienes muchos usuarios insertando a la base de datos, podrias obtener otro número que no fue el que te corresponde a ti, yo utilizo MS-SQL y lo hago desde un procedimiento almacenado.

Código SQL [-]
declare @id
insert tabla (fecha)
values ('01/01/2005')
set @id = scope_identity()
select @id as ID

ejecutas el Proc desde delphi y recojes el resultado.


Saludos.

Vicente López.

vtdeleon 04-10-2005 23:38:07

Saludos
La parte propuesta por Chente(rMan) me parece la mas adecuanda y mas aún para un Sistema Cliente-Servidor.
Cita:

Empezado por omy
sql:= 'Select count (bandera) from tiempocamion where bandera = '+ inttostr(aqdumy2.FieldValues['id']);
....
....
variable := AQchecatiempocamion.FieldValues['Expr1000'];

Esta asignación del "campo" creado por la sentencia no es muy aceptable. Lo aconsejable es asignarle un Alias a la consulta, ya que esta campo (creado por la Motor Db) podría ser diferente, dependiendo la Base de datos
Código Delphi [-]
 sql:= 'Select count (bandera) as Total from tiempocamion where bandera = :id ';
AQchecatiempocamion.SQL.Clear;
AQchecatiempocamion.SQL.Add(sql);
AQchecatiempocamion.ParamByName('id').AsString:=aqdumy2.FieldValues['id'];
AQchecatiempocamion.Open;
Puedes ver como cree un alias(TOTAL)

Pd: omy:Usa las etiquetas

lucasarts_18 05-10-2005 00:25:53

Hola:

Para usar SCOPE_IDENTITY( ), hay que definir un campo en la tabla de este tipo, como se ve en la ayuda de SQL Server.

Chente(rMan) 05-10-2005 03:13:30

Cita:

Empezado por lucasarts_18
Hola:

Para usar SCOPE_IDENTITY( ), hay que definir un campo en la tabla de este tipo, como se ve en la ayuda de SQL Server.

Correcto Lucas, masnovita nos dice que tiene un campo autonumérico (supongo yo que autoincrementable), y si estamos hablando de MS-SQL tiene que estar definido como Identity, si estoy mal, que alguien me corriga.

Por cierto, masnovita, ¿que BD usas?:confused:


Saludos.

Vicente López.

lucasarts_18 05-10-2005 15:42:59

Hola:

He hecho algunas pruebas y estoy totalmente agradecido a chente(rman) por la idea...no conocía esto en SQL Server.

Pues les dejo el ejemplo a nuestra amiga..

Código SQL [-]
  Insert into PPQOrders values (6,'nombre','Ciudad','8847','2005-08-15')
  
  SELECT SCOPE_IDENTITY()
  
  GO

Hasta luego y gracias.....:D

lucasarts_18 05-10-2005 15:45:31

Cita:

Empezado por Chente(rMan)
y si estamos hablando de MS-SQL tiene que estar definido como Identity, si estoy mal, que alguien me corriga.

Estás en lo correcto!!!!....;)


La franja horaria es GMT +2. Ahora son las 10:40:23.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi