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
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
Curtir tópico
+ 0
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.
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
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?
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
Clique aqui para fazer login e interagir na Comunidade :)