Pedidos com mesmo COdigo

Delphi

10/02/2012

Uso esta rotina pra pegar o numero do pedido e as vezes 2 vendedores pegam o mesmo codigo .
Alguma solução...

y := 0;
While y < 60 do
begin
if y = 5 then
begin
vQuerySql.Close;
ShowMessage(Não foi possível concluir a Inclusão. + chr(13) + Tente Novamente);
LiberarBtn;
exit;
end;
try
DM.TB_Contadores.Open;
if not DM.TB_Contadores.FindKey([1]) then
begin
ShowMessage(Erro no Contador);
exit;
end;
vContador := DM.TB_Contadores.FieldByName(vCampoChave1).asInteger;
DM.TB_Contadores.Edit;
DM.TB_Contadores.FieldByName(vCampoChave1).asInteger :=
DM.TB_Contadores.FieldByName(vCampoChave1).asInteger+1;
DM.TB_Contadores.Post;
DM.TB_Contadores.Close;
//
VQuerySql.Close;
vQuerySql.ParamByName(vCampoChave1).asString := IntToStr(vContador);
vQuerySql.Open;
if vQuerySql.IsEmpty then
begin
vQuerySql.Append;
break;
end;
except
Inc(y);
DM.TB_Contadores.Close;
Continue;
end;
//
Inc(y);
end;
vQuerySql.FieldByName(vCampoChave1).asString := IntToStr(vContador);
Decio Neto

Decio Neto

Curtidas 0

Respostas

William

William

10/02/2012

Colega qual banco de dados vc tá usando, se for firebird crie um Generator que serve como auto_increment(no Firebird ainda não existe esse tipo de campo) e no dephi usando uma Query capture o próximo valor do generator, depois é só formatar o código a seu gosto com FormatFloat(), desse jeito fica mais dificil de haver duplicações.
GOSTEI 0
Decio Neto

Decio Neto

10/02/2012

ola amigo trabalho com sql server 2005 e utilizo uma tabela de contadores aonde quando do um incluir eu busco na tabela o valor e incremento no pedido.


alguma ideia
GOSTEI 0
William

William

10/02/2012

Não sei no SQLServer funciona, mas tente trabalhar com transações talvez com algumas modificações no Isolationlevel (isolando a transação funcione), é uma idéia pois nunca trabalhei com esse SGBD.
GOSTEI 0
Joel Rodrigues

Joel Rodrigues

10/02/2012

Amigo, tente usar um StoredProcedure que já incremente o campo na tabela e lhe traga o código atualizado. Assim, você dispensará o Edit/Post no Delphi e fará isso direto no banco.
GOSTEI 0
POSTAR