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)
-   -   Obtener maximo valor de un campo en Access (https://www.clubdelphi.com/foros/showthread.php?t=87917)

wilcg 19-03-2015 05:07:10

Obtener maximo valor de un campo en Access
 
De nuevo aquí en el foro, tengo un error que no le encuentro cura. Haber si me dan una solución.

Código Delphi [-]
with Query1 do
  begin
    SQL.Clear;
    Close;
    SQL.Text := 'Select max(codigo) as codigo from clientes';
    Open;
    Edit1.Text := FormatFloat('0000000', StrToFloat(FloatToStr(FieldByName('CODIGO').AsInteger +1)));
    Close;
    Active := False;
  end;
Este código funciona correctamente en Firebird, Posgresql que ya lo probe. Pero en Access me da error, no funciona ¿como puedo obtener el valor maximo de un campo en un base de datos .MDB de Access?. necesito una manito.^\||/

Casimiro Notevi 19-03-2015 10:11:23

Cita:

Empezado por wilcg (Mensaje 490135)
Pero en Access me da error

¿Y el error es... ?

Neftali [Germán.Estévez] 19-03-2015 12:59:01

La consulrta en si no parece tener nada raro.
Tal y como te han comentado, ¿Te da error? ¿No funciona? ¿No da nada?... ?¿?¿?

giulichajari 19-03-2015 15:05:41

Y cambiaste la fuente de datos del query? osea en vez de especificar la conexión mysql, debes conectar con access.

wilcg 19-03-2015 17:15:58

Gracias por su interés, les comento la conexión es correcta para Access la aplicacion guarda y modifica los registros de la base de datos, el problema surge cuando realizo esta consulta. y con respecto al error es este.

nicolas77 19-03-2015 18:54:24

Código Delphi [-]
with Query1 do
begin
  SQL.Clear;
  Close;
  SQL.Text := 'Select max(codigo) as Maximo from clientes';
  Open;
  Edit1.Text := FormatFloat('0000000', StrToFloat(FloatToStr(FieldByName('CODIGO').AsInteger +1)));
  Close;
  Active := False;
end;
esto se puede arreglar:
Código Delphi [-]
  Edit1.Text := FormatFloat('0000000', StrToFloat(FloatToStr(FieldByName('CODIGO').AsInteger +1)));

giulichajari 19-03-2015 21:04:45

Si intentas generar el id podria ser:

Código Delphi [-]
Select last_insert_id() from clientes

y le sumas 1.

Lo que veo raro es que si seleccionas el codigo "as maximo", lo que muestras en el edit es(el field) "maximo"; o codigo, etc..

Y fijate utilizando:

Código Delphi [-]
ExecSQL;

ozsWizzard 19-03-2015 23:23:51

Llámame loco, pero parece ser que en access no dejará, intuyo, usar como alias el nombre de un campo que tenga la tabla.

wilcg 20-03-2015 04:11:57

Cita:

Empezado por ozsWizzard (Mensaje 490188)
Llámame loco, pero parece ser que en access no dejará, intuyo, usar como alias el nombre de un campo que tenga la tabla.

Con todo los intentos que he realizado, parces tener razón. no encuentro la manera de solucionarlo, siempre me inventa un error este access, bueno seguiré investigando un poco mas, de lo contrario buscare otra solución.

wilcg 20-03-2015 05:29:42

En fin este Access si que me invento un montón de errores, no podía dar con lo deseado, pero lo que no sabia es que no me iba dar por vencido, y después de tanto aquí la solución para otro que lo desee. Yo uso UNIDAC y creo que en otros componentes es muy parecido.

PASO 1
en el UniQuery1, clic derecho y selecionar Fields Editor y crear un campo del tipo integer con el nombre en mi caso va ha ser MaxCodigo, y automaticamente se renombrara el campo UniQuery1MaxCodigo.

PASO 2
Crear la funcion
Código Delphi [-]
function TForm1l.ObtenerCodigo: Integer;
var
  NCodigo: Integer;
begin
  UniQuery1.Close;
  UniQuery1.DisableControls;
  UniQuery1.SQL.Text := 'select max( codigo ) as maxcodigo from clientes';
  UniQuery1.Open;
  UniQuery1.EnableControls;
  NCodigo := UniQuery1MaxCodigo.AsInteger; // aqui el nombre del campo
  if NCodigo = 0 then
    Result := 1000000001 // si esta en 0 indicamos de que numeracion queremos empezar
  else
    Result := NCodigo + 1;
end;

PASO 3
uso
Código Delphi [-]
Edit1.Text := IntToStr(ObtenerCodigo);

y listo.


La franja horaria es GMT +2. Ahora son las 04:40:35.

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