Pedidos com mesmo COdigo
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);
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
Curtidas 0
Respostas
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
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
alguma ideia
GOSTEI 0
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
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