Fórum Erro estranho no Firebird 2.0 e Delphi 7 #410024
30/11/2011
0
Galera, a muito tempo não venho aqui, então saudações a todos.
Também tem tempos que eu não programo, só que agora estou criando um programinha simples aqui e tou com um problema ao qual não consigo resolver. O código abaixo é parte do código que eu uso pra criar orçamentos para cupom fiscal.
While not (dmP.tblPedidos.Eof) do
begin
AssignFile(Orcamento,cPath + \OR+IntToStr(nContador)+.TXT);
Rewrite(Orcamento);
txtNumPed.Text := dmP.tblPedidos.FieldByName(NumPed).AsString;
While (dmP.tblPedidos.FieldbyName(NumPed).AsInteger = nNumped) and not(dmP.tblPedidos.Eof) do
begin
dmP.tblPedidos.Edit;
dmP.tblPedidos.FieldByName(PROCPED).Value := E;
dmP.tblPedidos.FieldByName(ORCAMENTO).Value := tbFormataCodigo(IntToStr(nContador));
dmP.tblPedidos.FieldByName(DATAPROC).Value := StrToDate(dbeData.Text);
dmP.tblPedidos.Post;
WriteLn(Orcamento,
Format(%-20s,[dmP.tblPedidos.FieldbyName(Cod2A).AsString]) +
Format(%-36s,[dmP.tblPedidos.FieldByName(Desc2A).AsString]) +
Format(%-11s,[FormatFloat(0000000.00,dmP.tblPedidos.FieldByName(QntProd).AsFloat)]) +
Format(%-4s ,[dmP.tblPedidos.FieldByName(Unidade).AsString])+
Format(%-11s,[FormatFloat(0000000.00,dmP.tblPedidos.FieldByName(Preco).AsFloat)]) +
Format(%-11s,[FormatFloat(0000000.00,dmP.tblPedidos.FieldByName(TotalProd).AsFloat)]) +
Format(%-7s ,[tbFormataCodigo(IntToStr(nContador))]) +
Format(%-11s,[dbeData.Text]) + NAO);
dmP.tblPedidos.Next;
end;
Tudo está funcionando exceto o problema que onde eu tento gravar os valores no Banco de Dados (com EDIT...POST) simplesmente grava uma série, pula um, grava mais um, pula um... grava uma série... pula um, ou seja, alguns registros ficam simplesmente sem valor. Vai entender!!!!
Não vejo razão pra isso acontecer por isso peço ajuda aí dos colegas para resolver isso.
Como ajuda segue a imagem no banco e os campos em branco são os buracos que eu não entendo como não foram gravados valores neles.
[img]http://i451.photobucket.com/albums/qq233/rvmello/imagemx.jpg[/img]
No mais, sempre muito obrigado a todos. Abração. :lol:
Também tem tempos que eu não programo, só que agora estou criando um programinha simples aqui e tou com um problema ao qual não consigo resolver. O código abaixo é parte do código que eu uso pra criar orçamentos para cupom fiscal.
While not (dmP.tblPedidos.Eof) do
begin
AssignFile(Orcamento,cPath + \OR+IntToStr(nContador)+.TXT);
Rewrite(Orcamento);
txtNumPed.Text := dmP.tblPedidos.FieldByName(NumPed).AsString;
While (dmP.tblPedidos.FieldbyName(NumPed).AsInteger = nNumped) and not(dmP.tblPedidos.Eof) do
begin
dmP.tblPedidos.Edit;
dmP.tblPedidos.FieldByName(PROCPED).Value := E;
dmP.tblPedidos.FieldByName(ORCAMENTO).Value := tbFormataCodigo(IntToStr(nContador));
dmP.tblPedidos.FieldByName(DATAPROC).Value := StrToDate(dbeData.Text);
dmP.tblPedidos.Post;
WriteLn(Orcamento,
Format(%-20s,[dmP.tblPedidos.FieldbyName(Cod2A).AsString]) +
Format(%-36s,[dmP.tblPedidos.FieldByName(Desc2A).AsString]) +
Format(%-11s,[FormatFloat(0000000.00,dmP.tblPedidos.FieldByName(QntProd).AsFloat)]) +
Format(%-4s ,[dmP.tblPedidos.FieldByName(Unidade).AsString])+
Format(%-11s,[FormatFloat(0000000.00,dmP.tblPedidos.FieldByName(Preco).AsFloat)]) +
Format(%-11s,[FormatFloat(0000000.00,dmP.tblPedidos.FieldByName(TotalProd).AsFloat)]) +
Format(%-7s ,[tbFormataCodigo(IntToStr(nContador))]) +
Format(%-11s,[dbeData.Text]) + NAO);
dmP.tblPedidos.Next;
end;
Tudo está funcionando exceto o problema que onde eu tento gravar os valores no Banco de Dados (com EDIT...POST) simplesmente grava uma série, pula um, grava mais um, pula um... grava uma série... pula um, ou seja, alguns registros ficam simplesmente sem valor. Vai entender!!!!
Não vejo razão pra isso acontecer por isso peço ajuda aí dos colegas para resolver isso.
Como ajuda segue a imagem no banco e os campos em branco são os buracos que eu não entendo como não foram gravados valores neles.
[img]http://i451.photobucket.com/albums/qq233/rvmello/imagemx.jpg[/img]
No mais, sempre muito obrigado a todos. Abração. :lol:
Raphael Mello
Curtir tópico
+ 0
Responder
Posts
01/12/2011
Wellington Marques
Olá Raphael!
Uma vez conversando com alguns programadores, eles me disseram que o Firebird não possui um desempenho muito bom ao utilizar procedures de gravação, alteração e/ ou exclusão. Então, eu estou colocando duas formas de você efetuar o processo além da tão conhecida procedure.
Primeira forma:
Utilizando o componente Table (no caso da aba InterBase, o nome do componente é IBTable). Este componente funciona como um ClientDataSet, ou seja:
IBTable.Insert;
IBTable.FieldByName(NOME DA COLUNA).Value := [VALOR];
IBTable.Post;
Segunda forma:
Utilizando o componente Query (no caso da aba InterBase, o nome do componente é IBQuery). Este componente faz a comunicação direto com o Banco de Dados, assim é só inserir o comando SQL:
IBQuery.Close;
IBQuery.SQL.Clear;
IBQuery.SQL.Add( INSERT INTO [TABELA] ( [CAMPO] ) VALUES ( [VALOR] ) );
IBQuery.ExecSQL;
Acredito que qualquer uma das duas maneiras irá funcionar perfeitamente.
Uma vez conversando com alguns programadores, eles me disseram que o Firebird não possui um desempenho muito bom ao utilizar procedures de gravação, alteração e/ ou exclusão. Então, eu estou colocando duas formas de você efetuar o processo além da tão conhecida procedure.
Primeira forma:
Utilizando o componente Table (no caso da aba InterBase, o nome do componente é IBTable). Este componente funciona como um ClientDataSet, ou seja:
IBTable.Insert;
IBTable.FieldByName(NOME DA COLUNA).Value := [VALOR];
IBTable.Post;
Segunda forma:
Utilizando o componente Query (no caso da aba InterBase, o nome do componente é IBQuery). Este componente faz a comunicação direto com o Banco de Dados, assim é só inserir o comando SQL:
IBQuery.Close;
IBQuery.SQL.Clear;
IBQuery.SQL.Add( INSERT INTO [TABELA] ( [CAMPO] ) VALUES ( [VALOR] ) );
IBQuery.ExecSQL;
Acredito que qualquer uma das duas maneiras irá funcionar perfeitamente.
Responder
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)