Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Tablas planas (https://www.clubdelphi.com/foros/forumdisplay.php?f=20)
-   -   Autonumericos (https://www.clubdelphi.com/foros/showthread.php?t=36691)

crc2005 20-10-2006 16:47:12

Autonumericos
 
Hoal a todos
Por favor quisiera saber como puedio al darle en el boton nuevo de un form se genere un campo autonumerico solo (Campo cadena de 5 caracteres como maximo y que empiece con la letra U)
ejm:
Primer regsitro A0001
Segundo registro A0002
me lea el anterio y se genere automaticamente el A0003
Saludos
Gracias de antemano
:)

maeyanes 20-10-2006 17:02:38

Bueno, teniendo el valor del campo del registro anterior, puedes hacer algo como esto:

Código Delphi [-]
var
  ValorNuevo: string;
  ParteNumerica: Integer;

begin
  ParteNumerica := StrToInt(Copy(ValorAnterior, 2, 4));
  Inc(ParteNumerica);
  ValorNuevo := Format('A%.4d', [ParteNumerica]) // Esto te devolvería algo como A0003
end;


Saludos...

crc2005 20-10-2006 17:31:44

RP. Autonumerico
 
Cita:

Empezado por maeyanes
Bueno, teniendo el valor del campo del registro anterior, puedes hacer algo como esto:


Código Delphi [-]
var
ValorNuevo: string;
ParteNumerica: Integer;

begin
ParteNumerica := StrToInt(Copy(ValorAnterior, 2, 4));
Inc(ParteNumerica);
ValorNuevo := Format('A%.4d', [ParteNumerica]) // Esto te devolvería algo como A0003
end;






Saludos...

Pero tengo una duda como podria saber cual es el valor anterior
Gracias
Saludos
Carlos

maeyanes 20-10-2006 18:28:01

Lo podrías hacer mediante un query, aquí una función que hace los dos procesos al mismo tiempo:

Código Delphi [-]
function GetKeyValue: string;
var
  ValorAnterior: string;
  ParteNumerica: Integer;

begin
  { Esto depende un poco del tipo de base de datos y los componentes que uses,
  por ejemplo, si es Interbase y usas los IBX sería algo como TIBQuery.Create }
  with TQuery.Create(nil) do
    try
      // Configuras la base de datos
      SQL.Text := 'select max(campokey) from tabla'; // Obtienes el valor mas alto del campo
      Open;
      ValorAnterior := Fields[0].AsString;
      Close
    finally
      free
    end;
  ParteNumerica := StrToInt(Copy(ValorAnterior, 2, 4));
  Inc(ParteNumerica);
  Result := Format('A%.4d', [ParteNumerica])
end;


Saludos...

Caral 20-10-2006 19:17:18

Hola crc2005
Solo por curiosidad para ti haz esta prueba:
En una aplicacion nueva, coloca 2 edit y un boton, en el evento on click del boton pon:
Código Delphi [-]
procedure TForm1.Button1Click(Sender: TObject);
Var
  A: String;
  N: Integer;
begin
  A:= Edit1.Text;
  N:= 1;
  Edit2.Text:= Edit1.Text + IntToStr(N);
end;

end.
Ejecutalo, pon en el edit 1 la letra A, y presiona el boton.
Esto no hara lo que necesitas pero te va a dar muchas ideas, en vase a esto podras hacer lo que quieres.
Saludos

maeyanes 20-10-2006 19:21:40

Para que declaras A y le asignas un valor si no la usas en la concatenación? :p

Caral 20-10-2006 19:26:32

Buen Punto Maestro.
No se necesita.
Saludos

crc2005 23-10-2006 21:02:19

RP. Autonumerico
 
Amigos:
Gracias a todas las ideas resolvi mi problema
Primero cree una Consulta:SQL1
Select max(campokey) from tabla
------
var
ValorAnterior: string;
ParteNumerica: Integer;
begin
En el boton de Nuevo
SQL1.OPEN;
SQL1.SQL.Text := 'select max(campokey) from tabla';
ValorAnterior := Fields[0].AsString;
ParteNumerica := StrToInt(Copy(ValorAnterior, 2, 4));
Inc(ParteNumerica);
Result := Format('A%.4d', [ParteNumerica]);
DBEDIT1.TEXT:=Result;
SQL1.REFRESH;
SQL1.CLOSE;
tabla.insert;
end;
------
En un boton Guardar
tabla.post;
tabla.refresh;
Gracias
Saludos
Carlos
:)


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

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