Fórum Erro ao inserir em tb com campos identitiy no sql server 2008 #15827
18/02/2010
0
[#VIDEO-179#]
Carlos Faria
Curtir tópico
+ 0Posts
18/02/2010
Carlos Faria
Gostei + 0
18/02/2010
Carlos Faria
Gostei + 0
18/02/2010
Carlos Faria
Gostei + 0
18/02/2010
Rodrigo Mourão
Gostei + 0
20/02/2010
Carlos Faria
Gostei + 0
21/02/2010
Rodrigo Mourão
http://video.devmedia.com.br/discovirtual/162135/Chamado_15827_Final.rar
Att,
Gostei + 0
22/02/2010
Carlos Faria
Gostei + 0
22/02/2010
Rodrigo Mourão
Estamos aguardando então.
Abs!!!
Gostei + 0
24/02/2010
Carlos Faria
Gostei + 0
25/02/2010
Carlos Faria
cdsItemVenda.Open ;
cdsItemVenda.First;
while not cdsItemVenda.Active do
begin
cdsItemVenda.Append;
cdsItemVendaid_venda.AsInteger := 29; //colocar a variavel aqui
cdsItemVendaId_Produto.AsInteger := cdsItems.FieldByName('codigo').AsInteger;
cdsItemVendaQt_Items.AsFloat := cdsItems.FieldByName('quantidade').AsFloat;
cdsItemVendaVl_Produto.AsFloat := cdsItems.FieldByName('preco').AsFloat;
cdsItemVendaId_Vendedor.AsInteger := 1;
cdsItems.Next ;
cdsItemVenda.Post;
end ;
cdsItemVenda.ApplyUpdates(0); tenho 2 clientdaset um de memoria e outro conectado , peguei o exemplo la no teu curso , so nao sei o que estou fazerndo de errado aqui , cdsitems e o clientdataset offline , cdsitemvenda o que finaliza , enato seja se o camarada encher o grid com 15 pedidos tenho que gravar os 15 registros , o que ta errado aqui ????????? outra questao e a situação que te informei no texto anterior , por ser uma quantidade grande de maquinas acessando o sistema , nao pode haver erros e questao de capturar o id eu ja resolvi com um stored procedure id_venda int output select @@identity as @retorno , a proc insere , me traz o numero e inserio nos detalhes , mas to achando isso meio porcao afinal estou trabalhando com clientdataset , me diz vc o que achas ? aquele seu exemplo de como capturar o id_antes do insert no sql server eu nao consegui se vc tiver um exemplo mais claro ai agradeço outra coisa o exemplo que vc me demostrou com a query funciona sim ,testei aqui , mais poder haver error serissiomos se mais de um atendente acessar ao mesmo tempo , melhor tentarmos uma solucao meslhoe estive analizando a seguinte situação talves nesse caso a proc seja melhor , pois eu nao vou ter um id_venda na tela somente quando ela realmente for concluida , e posso fazer tudo isso dentro de uma transacao , cadastro a venda e itens da venda , assim se mais de um usuario acessar o sistema ao mesmo tempo nao tem erro , afinal o campo e do tipo identiy e so vou ter ele depois de inserido os registros ? vc que é o mestre ai , da uma ideia que eu faço aqui , Quanto a questao do Loop cara se puder ser hoje ainda urgente , passei a noite toda enrolado tentando fazer esse loop funcionar aqui rs
Gostei + 0
25/02/2010
Rodrigo Mourão
O metodo e while not cdsItemVenda.EOF do e não while not cdsItemVenda.Active do
Veja como ficaria:
cdsItemVenda.Open ;
cdsItemVenda.First;
while not cdsItemVenda.EOF do
begin
cdsItemVenda.Append;
cdsItemVendaid_venda.AsInteger := 29; //colocar a variavel aqui
cdsItemVendaId_Produto.AsInteger := cdsItems.FieldByName('codigo').AsInteger;
cdsItemVendaQt_Items.AsFloat := cdsItems.FieldByName('quantidade').AsFloat;
cdsItemVendaVl_Produto.AsFloat := cdsItems.FieldByName('preco').AsFloat;
cdsItemVendaId_Vendedor.AsInteger := 1;
cdsItems.Next ;
cdsItemVenda.Post;
end ;
cdsItemVenda.ApplyUpdates(0);
Abs!!
Gostei + 0
25/02/2010
Carlos Faria
cdsItemVenda.First;
while not cdsItemVenda.EOF do
begin
cdsItemVenda.Append;
cdsItemVendaid_venda.AsInteger := 29; //colocar a variavel aqui
cdsItemVendaId_Produto.AsInteger := cdsItems.FieldByName('codigo').AsInteger;
cdsItemVendaQt_Items.AsFloat := cdsItems.FieldByName('quantidade').AsFloat;
cdsItemVendaVl_Produto.AsFloat := cdsItems.FieldByName('preco').AsFloat;
cdsItemVendaId_Vendedor.AsInteger := 1;
cdsItems.Next ; //cds de memoria
cdsItemVenda.Post;
end ;
cdsItemVenda.ApplyUpdates(0);
Cdsitemvenda é co clientdaset que vai dar um insert nao tb_item_vendas esse cds e conectado a banco Cdsitems esse e de memoria , offline como vc diz , nao esta funcionando o lação , eu copiei e colei exatamente como vc mandou nao esta varrendo os dados inseridos na grid ???????????????
Gostei + 0
25/02/2010
Rodrigo Mourão
Me manda a mensagem do erro ou se prefirir grave um video me mostrando como tudo esta conectado e como vc fez o codigo que fica mais facil.
Estou no aguardo !!
Attt,
Gostei + 0
25/02/2010
Carlos Faria
var
t: TDBXTransaction;
begin
try
t := DM.SQLConnection.DBXConnection.BeginTransaction(TDBXIsolations.ReadCommitted);
pri_vendas;
pri_item_venda;
DM.SQLConnection.DBXConnection.CommitFreeAndNil(t); except
DM.SQLConnection.DBXConnection.RollbackFreeAndNil(t);
//ShowMessage(Venda nao realizada ');
end;
end; a procedure pri_items_Venda nada mais e que cdsItemVenda.Open;
cdsItems.First;
while not cdsItems.EOF do
begin
cdsItemVenda.Append;
cdsItemVendaid_venda.AsInteger := xVenda;
cdsItemVendaId_Produto.AsInteger := cdsItems.FieldByName('codigo').AsInteger; cdsItemVendaQt_Items.AsFloat := cdsItems.FieldByName('quantidade').AsFloat;
cdsItemVendaVl_Produto.AsFloat := cdsItems.FieldByName('preco').AsFloat; cdsItemVendaId_Vendedor.AsInteger := 1;
cdsItems.Next; cdsItemVenda.Post;
end;
cdsItemVenda.ApplyUpdates(0); porem ao colocar um brack point ele entra nessa rotina do cliente dataset e fica em loop infinito e nao roda
codigo correto cdsItemVenda.Open;
cdsItems.First;
while not cdsItems.EOF do
begin
cdsItemVenda.Append;
cdsItemVendaid_venda.AsInteger := xVenda;
cdsItemVendaId_Produto.AsInteger := cdsItems.FieldByName('codigo').AsInteger; cdsItemVendaQt_Items.AsFloat := cdsItems.FieldByName('quantidade').AsFloat;
cdsItemVendaVl_Produto.AsFloat := cdsItems.FieldByName('preco').AsFloat; cdsItemVendaId_Vendedor.AsInteger := 1;
cdsItems.Next; cdsItemVenda.Post;
end;
cdsItemVenda.ApplyUpdates(0);
seu codigo (alias nosso codigo melhor dizendo eu e vc caimos no mesmo erro rs)
cdsItemVenda.Open ; //cdsligado ao banco
cdsItemVenda.First;
while not cdsItemVenda.EOF do
begin
cdsItemVenda.Append;
cdsItemVendaid_venda.AsInteger := 29; //colocar a variavel aqui
cdsItemVendaId_Produto.AsInteger := cdsItems.FieldByName('codigo').AsInteger;
cdsItemVendaQt_Items.AsFloat := cdsItems.FieldByName('quantidade').AsFloat;
cdsItemVendaVl_Produto.AsFloat := cdsItems.FieldByName('preco').AsFloat;
cdsItemVendaId_Vendedor.AsInteger := 1;
cdsItems.Next ; //cds de memoria
cdsItemVenda.Post;
end ;
cdsItemVenda.ApplyUpdates(0);
Gostei + 0
25/02/2010
Rodrigo Mourão
Putz que mole ein. kkkk Realmente não reparei. Mas tai ja pegou o jeito da depuração.
Att,
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)