Como Auto Incrementar os Itens do meu Pedido de Compra?

28/01/2015

0

Olá

O problema é que eu estou tentado Auto Incrementar os Itens do meu Pedido de Compra em Delphi, só que ele está incrementando como se não existisse um pedido como referência.


Por exemplo:


PEDIDO | ITEM
1 | 1
1 | 2
2 | 1
2 | 2
2 | 3
3 | 1
… e assim por diante.


Este seria o correto. Só que, quando eu lanço um novo pedido de compra, ele está ficando assim:

PEDIDO | ITEM
1 | 1
1 | 2
2 | 3 > Começando no pedido 2 o primeiro item com numero 3
2 | 4
2 | 5
3 | 6 > Começando o pedido 3 com o primeiro item com numero 6


… e assim por diante.


No Client Data Set 'cdsItensCom', em events OnNewRecord, eu inclui o seguinte código:


procedure TDMDados.cdsItensComNewRecord(DataSet: TDataSet);
begin
Incrementa('ITENS_PEDIDO_COMPRA', cdsItensComITEM_PEDIDO_COMPRA, sqlConn);
end;


Sendo o Incrementa uma Unit separada do Form:

procedure Incrementa(TableName: String; PrimaryKey: TField; Connection : TSQLConnection);
var
Qry:TSQLQuery;
begin
{: cria uma autonumeração}
if PrimaryKey.DataSet.State <> dsInsert then
Exit;
Qry := TSQLQuery.Create(nil); {: cria uma instância do objeto}
try
Qry.SQLConnection := Connection; {: componente de conexão}
Qry.SQL.Add('SELECT MAX('+PrimaryKey.FieldName+')FROM '+ TableName);
Qry.Open;
if Qry.Fields[0].IsNull then {: se a tabela está vazia, retornará nulo}
PrimaryKey.AsInteger := 1 {: então este será o 1º registro}
else PrimaryKey.AsInteger := Qry.Fields[0].AsInteger+1;
finally
FreeAndNil(Qry); {: libera o objeto da memória}
end;
end;

Visto em algumas aulas aqui na DEVMEDIA.


Será que alguém poderia me ajudar?


Desde já agradeço a atenção,

Att,

Felipe Onishi
Felipe Onishi

Felipe Onishi

Responder

Posts

29/01/2015

Joel Rodrigues

Neste caso eu optaria por fazer esse incremento direto no banco de dados, usando um trigger que fosse disparado na operação de insert.
Você faria a verificação pelo código do pedido e contaria quantos itens já tem naquele pedido. Com base nessa quantidade, incrementaria mais um e jogaria na coluna do item.
Responder

03/02/2015

Felipe Onishi

Obrigado Joel!
Responder

03/02/2015

Felipe Onishi

Mas então Joel,

a minha triger está desta maneira:

as
begin
if (new.item_pedido_compra is null) then
new.item_pedido_compra = gen_id(gen_itens_pedido_compra_id,1);
end

Neste caso, como eu faria para incluir este código nesta triger?
Responder

Assista grátis a nossa aula inaugural

Assitir aula

Saiba por que programar é uma questão de
sobrevivência e como aprender sem riscos

Assistir agora

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar