Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Ayuda con Consulta Max (ID) (https://www.clubdelphi.com/foros/showthread.php?t=85722)

Zucra 24-04-2014 00:14:39

Ayuda con Consulta Max (ID)
 
Hola gente, ante nada disculpas si este post no iba en esta seccion del foro, no sabia donde ponerla.

Bueno mi consulta es la siguiente...
Tengo un TIBQuery (maxprodcuto) que hace la siguiente consulta:
Select Max (ID)+1 from Producto

Quisiera saber como hacer para asignar a una variable el resultado de la consulta de ese TIBQuery.

Ejemplo, si el Max (Id) de la tabla producto es 100. Quiero asignar ese 100 a una variable integer.

seria algo asi?

Max:= maxproducto.Fields[0].Asinteger;

dec 24-04-2014 00:23:32

Hola,

No entiendo mucho, pero, ¿podría ser algo así?

Código:

SELECT MAX(ID)+1 AS MiCampo FROM Producto
Código Delphi [-]
Max := maxproducto.Fields[0].AsInteger;

// O tal vez...
Max := maxproducto.Fields['MiCampo'].AsInteger;

Ya digo que seguramente no sea, pero, igual suena la flauta. :)

Zucra 24-04-2014 00:32:47

Gracias por tu respuesta. Algo asi es lo que quiero hacer, pero de esa forma no funciona =(

dec 24-04-2014 00:42:06

Hola,

Cita:

Empezado por Zucra (Mensaje 475518)
Gracias por tu respuesta. Algo asi es lo que quiero hacer, pero de esa forma no funciona =(

¡Lo intenté! Pero no te preocupes: algún compañero podrá echarte una mano. Ten un poco de paciencia. :)

ecfisa 24-04-2014 01:03:07

Hola.

Es que no andan muy lejos :)

Tres formas de acceder al campo:
Código Delphi [-]
var
  Max1,Max2,Max3: Integer;
begin
  IBQuery1.Close;
  IBQuery1.SQL.Text:= 'SELECT MAX(ID) AS MAX_ID FROM PRODUCTOS';
  IBQuery1.Open;
  Max1:= IBQuery1.FieldByName('MAX_ID').AsInteger; // (1)
  Max2:= IBQuery1.Fields[0].AsInteger;             // (2)
  Max3:= IBQuery1.FieldValues['MAX_ID'];           // (3)
  with ListBox1.Items do
  begin
    Add(IntToStr(Max1));
    Add(IntToStr(Max2));
    Add(IntToStr(Max3));
  end;
  IBQuery1.Close;
end;
(1), (2) y (3) devuelven el mismo resultado.

Si no creas los campos persistentes que es el modo mas rápido de acceso, te recomiendo usar la forma (1).
La (2), además de ser muy confusa, basta un cambio en la organización de las columnas y ¡ Pif ! lo que eran pollos se vuelven sandías :D, la forma (3) es la mas lenta de acceder al valor del campo.

Saludos :)

Zucra 24-04-2014 01:19:05

Muchas gracias ecfisa! Me vino al pelo, funciona de maravillas.

dec 24-04-2014 02:01:50

¡Ahora lo cogí! :D :D :D

Gracias ecfisa.

ecfisa 24-04-2014 02:13:07

De nada Zucra, me alegra haberte sido útil.

Me olvide de comentarte que FieldValues es la propiedad vectorial por defecto de la clase TDataSet, por lo que se podría haber omitido quedando:
Código Delphi [-]
   ...
   Max3:= IBQuery1['ID'];
   ...

Saludos :)

ecfisa 24-04-2014 02:19:20

Cita:

Empezado por dec (Mensaje 475524)
¡Ahora lo cogí! :D :D :D

Gracias ecfisa.

¿ Lo de pollos por sandías ? :D:D:D

Una vez me paso algo similar:o, pero (por mi gran suerte) eran de tipos diferentes. Si no, hubiera renegado un buén rato...

Saludos :)

dec 24-04-2014 02:59:10

Hola,

He cogido las sandías ecfisa. :) Pero me extrañaba que mi "solución" no funcionase, hasta que he visto que la consulta SQL no es exactamente la misma, así que si no me equivoco la primera estaba mal y era por eso por lo que fallaba el asunto. :)


La franja horaria es GMT +2. Ahora son las 10:16:53.

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