Bom dia galera...então...estou com um problema grave na geração de código incremental....
uso tabela dbf [sim...já estou largando ela, é que neste caso preciso usá-la]
e tenho algumas condições nessa geração de código....
o campo deve ter 5 caracteres sempre....então, se o número do código não tiver 5 caracteres, ele deve ser preenchido com zeros à esquerda....até aí tudo bem...
mas ele só preenche com zeros à esquerda caso eu digite algo no DBEdit....pois há a possibilidade do usuário digitar um código, sem seguir a ordem...
se eu deixo a DBEdit vazia, para prencher com o próximo número, usando o SELECT MAX, ele não preenche com zeros....
exemplo....a tabela está vazia....tenho a condição de que se ela estiver vazia, o campo é preenchido com 00001.
Lembrando que esse campo é string
então clico em novo, deixo vazia a DBEdit do codigo e clico em gravar...
O campo é preenchido com 00001.
Em seguida, clico em Novo, preencho o código com 2, e clico em gravar....o campo é preenchido com 00002
Depois, se clico em novo, deixo a DBEdit vazia e clico em gravar, o campo é preenchido com 3, e não com 00003.
vou postar aqui os códigos que estou utilizando para isso...
se alguém conseguir me ajudar, ficarei muito grato.
Botão Gravar - Evento OnClick
procedure TfrmCadForn.btnGravarClick(Sender: TObject);
var i: integer;
begin
if dm.tblCadForn.RecordCount = 0 then
txtCadForn_CodForn.Text := '00001';
if not (txtCadForn_CodForn.Text = '') then
begin
for i:=1 to txtCadForn_CodForn.MaxLength - length(txtCadForn_CodForn.Text) do
txtCadForn_CodForn.Text := '0' + txtCadForn_CodForn.Text;
end;
with dm.QueryBuscaForn do
begin
Close;
SQL.Clear;
SQL.Add('SELECT * FROM FINAFOR.dbf');
SQL.Add('WHERE FORCOD = :pCODIGO');
ParambyName('pCODIGO').AsString := txtCadForn_CodForn.Text;
Open;
if not(IsEmpty) then
begin
ShowMessage(' Registro já existente!');
frmCadForn.btnAlterarClick(Sender);
end
else
begin
dm.tblCadForn.Post;
dm.tblCadForn.Last;
end;
end;
end;
Evento BeforePost
procedure Tdm.tblCadFornBeforePost(DataSet: TDataSet);
begin
if not tblCadForn.FieldByName('FORCOD').IsNull then
Exit;
QueryMaxForn.DatabaseName := tblCadForn.DatabaseName;
QueryMaxForn.SQL.Clear;
QueryMaxForn.SQL.Add('SELECT MAX (FORCOD) FROM FINAFOR.dbf');
QueryMaxForn.Open;
try
tblCadForn.FieldByName('FORCOD').AsString := FloatToStr(StrToFloat(QueryMaxForn.Fields[0].AsString)+1);
finally
QueryMaxForn.Close;
end;
end;
Pergunta
Gabriel Cabral
Bom dia galera...então...estou com um problema grave na geração de código incremental....
uso tabela dbf [sim...já estou largando ela, é que neste caso preciso usá-la]
e tenho algumas condições nessa geração de código....
o campo deve ter 5 caracteres sempre....então, se o número do código não tiver 5 caracteres, ele deve ser preenchido com zeros à esquerda....até aí tudo bem...
mas ele só preenche com zeros à esquerda caso eu digite algo no DBEdit....pois há a possibilidade do usuário digitar um código, sem seguir a ordem...
se eu deixo a DBEdit vazia, para prencher com o próximo número, usando o SELECT MAX, ele não preenche com zeros....
exemplo....a tabela está vazia....tenho a condição de que se ela estiver vazia, o campo é preenchido com 00001.
Lembrando que esse campo é string
então clico em novo, deixo vazia a DBEdit do codigo e clico em gravar...
O campo é preenchido com 00001.
Em seguida, clico em Novo, preencho o código com 2, e clico em gravar....o campo é preenchido com 00002
Depois, se clico em novo, deixo a DBEdit vazia e clico em gravar, o campo é preenchido com 3, e não com 00003.
vou postar aqui os códigos que estou utilizando para isso...
se alguém conseguir me ajudar, ficarei muito grato.
Botão Gravar - Evento OnClick
Evento BeforePost Editado por Gabriel CabralLink para o comentário
Compartilhar em outros sites
11 respostass a esta questão
Posts Recomendados
Participe da discussão
Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.