Operação de várias etapas gerou erros
Olá a todos!
Estou ficando de cabelo em pé com uma mensagem que vem aparecendo, sem contudo, apesar do que parece, deixar de atuar sobre a tabela que está recebendo o Post, ou seja, a tabela é atualizada, porém a execução do programa segue para a primeira linha dentro do except. A mensagem de erro também é exibida quando tento recuperar a informação de um campo desta tabela.
Para início de conversa estou usando Delphi 7, acessando MS Sql com ADO (ADOConnection; ADOQuery; ADOCommand; etc...).
Os trechos que apresentam o problema estão destacados pelo texto
{{{{Aqui NÃO ocorre a mensagem}}}} ou {{{{Aqui ocorre a mensagem}}}}.
Duas procedures InclusaoDeVendaParaMesa e InclusaoDeVendaParaEntrega. A primeira, quando chamada funciona perfeitamente e a segunda apresenta o erro acima descrito.
Abaixo o corpo das procedures:
procedure TfrmPrincipal.InclusaoDeVendaParaMesa;
Var
rcCliente : RCliente;
Begin
If Not PodeRealizarOperacoes then
Exit;
Screen.Cursor := crHourGlass;
dtsGenerico.DataSet := DMEstoque.qryVendas;
MensagemDeStatus(´Preparando módulo de venda para mesa...´, 0);
//Carrega dados da venda
CarregaVendas( 0, 0, ´´ );
CarregaTiposDeOperacoes( sTipoDeOperacao );
CarregaContrato( dEstabelecimento );
CarregaUnidades;
CarregaModelosDeNotasFiscais;
CarregaSeriesDeNotasFicais;
//Inicia inclusão de nova operação de venda
DMEstoque.qryVendas.Insert;
If Not Vazio( dbeCodigoDoAtendente.Text, False) Then
DmEstoque.qryVendas.FieldByName(´CodigoDoVendedor´).AsFloat :=
StrToInt(dbeCodigoDoAtendente.Text )
Else
DmEstoque.qryVendas.FieldByName(´CodigoDoVendedor´).AsFloat := 0;
If Not Vazio( dbeCodigoDoCliente.Text, False ) Then
DmEstoque.qryVendas.FieldByName(´CodigoDoCliente´).AsFloat :=
StrToInt( dbeCodigoDoCliente.Text )
Else
DmEstoque.qryVendas.FieldByName(´CodigoDoCliente´).AsFloat := 0;
If Not DMEstoque.qryTiposDeOperacoes.FieldByName(´NaoMovimenta´).AsBoolean Then
Begin
If Vazio(DmEstoque.qryVendas.FieldByName(´DataDaEmissao´).AsString, False) Then
DmEstoque.qryVendas.FieldByName(´DataDaEmissao´).AsDateTime := dtData;
If Vazio(DmEstoque.qryVendas.FieldByName(´DataDeRecebimento´).AsString, False) Then
DmEstoque.qryVendas.FieldByName(´DataDeRecebimento´).AsDateTime := dtData;
End;
If Vazio(DmEstoque.qryVendas.FieldByName(´Caixa´).AsString, False) Then
DmEstoque.qryVendas.FieldByName(´Caixa´).AsFloat := dFechamento;
NumeroDoPedidoDeVenda;
AcertaData;
Try
DmEstoque.qryVendas.Post;
If dtsLocaisAlocados.DataSet.State in [dsInsert, dsEdit] Then
Begin
dtsLocaisAlocados.DataSet.FieldByName(´Orcamento´).AsFloat :=
DmEstoque.qryVendas.FieldByName(´NumeroDoPedido´).AsFloat;
dtsLocaisAlocados.DataSet.FieldByName(´CentroDeCusto´).AsFloat :=
DmEstoque.qryVendas.FieldByName(´CentroDeCusto´).AsFloat;
dtsLocaisAlocados.DataSet.FieldByName(´TipoDeOperacao´).AsString :=
DmEstoque.qryVendas.FieldByName(´TipoDeOperacao´).AsString;
Try
{{{{Aqui NÃO ocorre a mensagem}}}}
dtsLocaisAlocados.DataSet.Post;
{{{{Aqui NÃO ocorre a mensagem}}}}
Except
On e : Exception Do
Begin
MensagemDeAviso(´Não foi possível alocar novo local: ´ + e.Message);
End;
End;
Try
dtsLocaisAlocados.DataSet.Edit;
Except
On e : Exception Do
Begin
MensagemDeAviso(´Não foi possível colocar o local em estado de alte´ +
// ´ração: ´ + e.Message);
End;
End;
End;
Except
End;
End;
/////////////////////////////////////////////////////////////////////////////////////
procedure TfrmPrincipal.InclusaoDeVendaParaEntrega;
Var
rcCliente : RCliente;
Begin
If Not PodeRealizarOperacoes then
Exit;
Screen.Cursor := crHourGlass;
dtsGenerico.DataSet := DMEstoque.qryVendas;
MensagemDeStatus(´Preparando módulo de venda para entrega...´, 0);
//Carrega dados da venda
CarregaVendas( 0, 0, ´´ );
CarregaTiposDeOperacoes( sTipoDeOperacao );
CarregaContrato( dEstabelecimento );
CarregaUnidades;
CarregaModelosDeNotasFiscais;
CarregaSeriesDeNotasFicais;
//Inicia inclusão de nova operação de venda
DMEstoque.qryVendas.Insert;
If Not Vazio( dbeCodigoDoAtendente.Text, False) Then
DmEstoque.qryVendas.FieldByName(´CodigoDoVendedor´).AsFloat :=
StrToInt(dbeCodigoDoAtendente.Text )
Else
DmEstoque.qryVendas.FieldByName(´CodigoDoVendedor´).AsFloat := 0;
If Not Vazio( dbeCodigoDoCliente.Text, False ) Then
DmEstoque.qryVendas.FieldByName(´CodigoDoCliente´).AsFloat :=
StrToInt( dbeCodigoDoCliente.Text )
Else
DmEstoque.qryVendas.FieldByName(´CodigoDoCliente´).AsFloat := 0;
If Not DMEstoque.qryTiposDeOperacoes.FieldByName(´NaoMovimenta´).AsBoolean Then
Begin
If Vazio(DmEstoque.qryVendas.FieldByName(´DataDaEmissao´).AsString, False) Then
DmEstoque.qryVendas.FieldByName(´DataDaEmissao´).AsDateTime := dtData;
If Vazio(DmEstoque.qryVendas.FieldByName(´DataDeRecebimento´).AsString, False) Then
DmEstoque.qryVendas.FieldByName(´DataDeRecebimento´).AsDateTime := dtData;
End;
If Vazio(DmEstoque.qryVendas.FieldByName(´Caixa´).AsString, False) Then
DmEstoque.qryVendas.FieldByName(´Caixa´).AsFloat := dFechamento;
NumeroDoPedidoDeVenda;
AcertaData;
Try
DmEstoque.qryVendas.Post;
If dtsLocaisAlocados.DataSet.State in [dsInsert, dsEdit] Then
Begin
dtsLocaisAlocados.DataSet.FieldByName(´Posicao´).AsInteger :=
ProximaEntregaDisponivel( dtData );
dtsLocaisAlocados.DataSet.FieldByName(´Orcamento´).AsFloat :=
DmEstoque.qryVendas.FieldByName(´NumeroDoPedido´).AsFloat;
dtsLocaisAlocados.DataSet.FieldByName(´CentroDeCusto´).AsFloat :=
DmEstoque.qryVendas.FieldByName(´CentroDeCusto´).AsFloat;
dtsLocaisAlocados.DataSet.FieldByName(´TipoDeOperacao´).AsString :=
DmEstoque.qryVendas.FieldByName(´TipoDeOperacao´).AsString;
edtPosicao.Text :=
dtsLocaisAlocados.DataSet.FieldByName(´Posicao´).AsString;
Try
{{{{Aqui ocorre a mensagem}}}}
dtsLocaisAlocados.DataSet.Post;
{{{{Aqui ocorre a mensagem}}}}
Except
On e : Exception Do
Begin
MensagemDeAviso(´Não foi possível alocar novo local: ´ + e.Message);
End;
End;
Try
dtsLocaisAlocados.DataSet.Edit;
Except
On e : Exception Do
Begin
MensagemDeAviso(´Não foi possível colocar o local em estado de alte´ +
´ração: ´ + e.Message);
End;
End;
End;
Except
End;
End;
Como podem notar o código é idêntico. Abaixo, o trecho do código em que tento recuperar a informação da mesma tabela que FOI atualizada, contudo, apresenta a mesma mensagem. A situação é agravada, pois, aqui, o sistema deixa de executar as linhas restantes e com isso acaba por não imprimir a operação:
Function TfrmPrincipal.Cabecalho( bComTotalizacao : Boolean ) : SmallInt;
begin
With impMatric Do
Begin
textolc(1, 1, ´=======================================´);
textolc(2, 1, Copy(dtsContratos.DataSet.FieldByname(´Descricao´).AsString, 1, 39));
textolc(3, 1, ´=======================================´);
TextoE( 4, 1, ´Data: ´ + FormatDateTime(´dd/mm/yyyy´, dtData) +
´-´ + IntToStr(iTurno) + ´ Caixa.: ´ + Copy(dbtAtendente.Caption, 1, 12) );
If sTipoDeOperacao = sCPVMe Then
Begin
TextoE( 5, 1, ´Ped.: ´ + FormatFloat(´000000´,
dtsLocaisAlocados.DataSet.FieldByName(´Orcamento´).AsFloat) + ´-M´ +
FormatFloat(´0000´, dtsLocaisAlocados.DataSet.FieldByName(´Posicao´).AsFloat) +
´ Garcom: ´ + Copy(dbtGarcom.Caption, 1, 12));
textolc(6, 1, ´=======================================´);
If bComTotalizacao Then
textolc(7, 1, ´ DESCRICAO QTD TOTAL ´)
Else
textolc(7, 1, ´ QTD DESCRICAO ´);
textolc(8, 1, ´=======================================´);
Result := 9;
End;
If sTipoDeOperacao = sCPVDe Then
Begin
{{{{Aqui ocorre a mensagem}}}}
TextoE( 5, 1, ´Hr.Pedido: ´ +
FormatDateTime(´HH:MM´, dtsLocaisAlocados.DataSet.FieldByName(´HoraDeEntrada´).AsDateTime) +
´ Hr.Saida: ´ +
FormatDateTime(´HH:MM´, dtsLocaisAlocados.DataSet.FieldByName(´HoraDeSaida´).AsDateTime));
{{{{Aqui ocorre a mensagem}}}}
TextoE( 6, 1, ´Ped.: ´ + FormatFloat(´000000´,
dtsLocaisAlocados.DataSet.FieldByName(´Orcamento´).AsFloat) + ´-E´ +
FormatFloat(´0000´, dtsLocaisAlocados.DataSet.FieldByName(´Posicao´).AsFloat) +
´ Engdr.: ´ + Copy(dbtEntregador.Caption, 1, 13));
textolc(7, 1, ´=======================================´);
If bComTotalizacao Then
textolc(8, 1, ´ DESCRICAO QTD TOTAL ´)
Else
textolc(8, 1, ´ QTD DESCRICAO ´);
textolc(9, 1, ´=======================================´);
Result := 10;
End;
End;
end;
Ficaria muito grato se alguém pudesse me dar uma luz.
Estou ficando de cabelo em pé com uma mensagem que vem aparecendo, sem contudo, apesar do que parece, deixar de atuar sobre a tabela que está recebendo o Post, ou seja, a tabela é atualizada, porém a execução do programa segue para a primeira linha dentro do except. A mensagem de erro também é exibida quando tento recuperar a informação de um campo desta tabela.
Para início de conversa estou usando Delphi 7, acessando MS Sql com ADO (ADOConnection; ADOQuery; ADOCommand; etc...).
Os trechos que apresentam o problema estão destacados pelo texto
{{{{Aqui NÃO ocorre a mensagem}}}} ou {{{{Aqui ocorre a mensagem}}}}.
Duas procedures InclusaoDeVendaParaMesa e InclusaoDeVendaParaEntrega. A primeira, quando chamada funciona perfeitamente e a segunda apresenta o erro acima descrito.
Abaixo o corpo das procedures:
procedure TfrmPrincipal.InclusaoDeVendaParaMesa;
Var
rcCliente : RCliente;
Begin
If Not PodeRealizarOperacoes then
Exit;
Screen.Cursor := crHourGlass;
dtsGenerico.DataSet := DMEstoque.qryVendas;
MensagemDeStatus(´Preparando módulo de venda para mesa...´, 0);
//Carrega dados da venda
CarregaVendas( 0, 0, ´´ );
CarregaTiposDeOperacoes( sTipoDeOperacao );
CarregaContrato( dEstabelecimento );
CarregaUnidades;
CarregaModelosDeNotasFiscais;
CarregaSeriesDeNotasFicais;
//Inicia inclusão de nova operação de venda
DMEstoque.qryVendas.Insert;
If Not Vazio( dbeCodigoDoAtendente.Text, False) Then
DmEstoque.qryVendas.FieldByName(´CodigoDoVendedor´).AsFloat :=
StrToInt(dbeCodigoDoAtendente.Text )
Else
DmEstoque.qryVendas.FieldByName(´CodigoDoVendedor´).AsFloat := 0;
If Not Vazio( dbeCodigoDoCliente.Text, False ) Then
DmEstoque.qryVendas.FieldByName(´CodigoDoCliente´).AsFloat :=
StrToInt( dbeCodigoDoCliente.Text )
Else
DmEstoque.qryVendas.FieldByName(´CodigoDoCliente´).AsFloat := 0;
If Not DMEstoque.qryTiposDeOperacoes.FieldByName(´NaoMovimenta´).AsBoolean Then
Begin
If Vazio(DmEstoque.qryVendas.FieldByName(´DataDaEmissao´).AsString, False) Then
DmEstoque.qryVendas.FieldByName(´DataDaEmissao´).AsDateTime := dtData;
If Vazio(DmEstoque.qryVendas.FieldByName(´DataDeRecebimento´).AsString, False) Then
DmEstoque.qryVendas.FieldByName(´DataDeRecebimento´).AsDateTime := dtData;
End;
If Vazio(DmEstoque.qryVendas.FieldByName(´Caixa´).AsString, False) Then
DmEstoque.qryVendas.FieldByName(´Caixa´).AsFloat := dFechamento;
NumeroDoPedidoDeVenda;
AcertaData;
Try
DmEstoque.qryVendas.Post;
If dtsLocaisAlocados.DataSet.State in [dsInsert, dsEdit] Then
Begin
dtsLocaisAlocados.DataSet.FieldByName(´Orcamento´).AsFloat :=
DmEstoque.qryVendas.FieldByName(´NumeroDoPedido´).AsFloat;
dtsLocaisAlocados.DataSet.FieldByName(´CentroDeCusto´).AsFloat :=
DmEstoque.qryVendas.FieldByName(´CentroDeCusto´).AsFloat;
dtsLocaisAlocados.DataSet.FieldByName(´TipoDeOperacao´).AsString :=
DmEstoque.qryVendas.FieldByName(´TipoDeOperacao´).AsString;
Try
{{{{Aqui NÃO ocorre a mensagem}}}}
dtsLocaisAlocados.DataSet.Post;
{{{{Aqui NÃO ocorre a mensagem}}}}
Except
On e : Exception Do
Begin
MensagemDeAviso(´Não foi possível alocar novo local: ´ + e.Message);
End;
End;
Try
dtsLocaisAlocados.DataSet.Edit;
Except
On e : Exception Do
Begin
MensagemDeAviso(´Não foi possível colocar o local em estado de alte´ +
// ´ração: ´ + e.Message);
End;
End;
End;
Except
End;
End;
/////////////////////////////////////////////////////////////////////////////////////
procedure TfrmPrincipal.InclusaoDeVendaParaEntrega;
Var
rcCliente : RCliente;
Begin
If Not PodeRealizarOperacoes then
Exit;
Screen.Cursor := crHourGlass;
dtsGenerico.DataSet := DMEstoque.qryVendas;
MensagemDeStatus(´Preparando módulo de venda para entrega...´, 0);
//Carrega dados da venda
CarregaVendas( 0, 0, ´´ );
CarregaTiposDeOperacoes( sTipoDeOperacao );
CarregaContrato( dEstabelecimento );
CarregaUnidades;
CarregaModelosDeNotasFiscais;
CarregaSeriesDeNotasFicais;
//Inicia inclusão de nova operação de venda
DMEstoque.qryVendas.Insert;
If Not Vazio( dbeCodigoDoAtendente.Text, False) Then
DmEstoque.qryVendas.FieldByName(´CodigoDoVendedor´).AsFloat :=
StrToInt(dbeCodigoDoAtendente.Text )
Else
DmEstoque.qryVendas.FieldByName(´CodigoDoVendedor´).AsFloat := 0;
If Not Vazio( dbeCodigoDoCliente.Text, False ) Then
DmEstoque.qryVendas.FieldByName(´CodigoDoCliente´).AsFloat :=
StrToInt( dbeCodigoDoCliente.Text )
Else
DmEstoque.qryVendas.FieldByName(´CodigoDoCliente´).AsFloat := 0;
If Not DMEstoque.qryTiposDeOperacoes.FieldByName(´NaoMovimenta´).AsBoolean Then
Begin
If Vazio(DmEstoque.qryVendas.FieldByName(´DataDaEmissao´).AsString, False) Then
DmEstoque.qryVendas.FieldByName(´DataDaEmissao´).AsDateTime := dtData;
If Vazio(DmEstoque.qryVendas.FieldByName(´DataDeRecebimento´).AsString, False) Then
DmEstoque.qryVendas.FieldByName(´DataDeRecebimento´).AsDateTime := dtData;
End;
If Vazio(DmEstoque.qryVendas.FieldByName(´Caixa´).AsString, False) Then
DmEstoque.qryVendas.FieldByName(´Caixa´).AsFloat := dFechamento;
NumeroDoPedidoDeVenda;
AcertaData;
Try
DmEstoque.qryVendas.Post;
If dtsLocaisAlocados.DataSet.State in [dsInsert, dsEdit] Then
Begin
dtsLocaisAlocados.DataSet.FieldByName(´Posicao´).AsInteger :=
ProximaEntregaDisponivel( dtData );
dtsLocaisAlocados.DataSet.FieldByName(´Orcamento´).AsFloat :=
DmEstoque.qryVendas.FieldByName(´NumeroDoPedido´).AsFloat;
dtsLocaisAlocados.DataSet.FieldByName(´CentroDeCusto´).AsFloat :=
DmEstoque.qryVendas.FieldByName(´CentroDeCusto´).AsFloat;
dtsLocaisAlocados.DataSet.FieldByName(´TipoDeOperacao´).AsString :=
DmEstoque.qryVendas.FieldByName(´TipoDeOperacao´).AsString;
edtPosicao.Text :=
dtsLocaisAlocados.DataSet.FieldByName(´Posicao´).AsString;
Try
{{{{Aqui ocorre a mensagem}}}}
dtsLocaisAlocados.DataSet.Post;
{{{{Aqui ocorre a mensagem}}}}
Except
On e : Exception Do
Begin
MensagemDeAviso(´Não foi possível alocar novo local: ´ + e.Message);
End;
End;
Try
dtsLocaisAlocados.DataSet.Edit;
Except
On e : Exception Do
Begin
MensagemDeAviso(´Não foi possível colocar o local em estado de alte´ +
´ração: ´ + e.Message);
End;
End;
End;
Except
End;
End;
Como podem notar o código é idêntico. Abaixo, o trecho do código em que tento recuperar a informação da mesma tabela que FOI atualizada, contudo, apresenta a mesma mensagem. A situação é agravada, pois, aqui, o sistema deixa de executar as linhas restantes e com isso acaba por não imprimir a operação:
Function TfrmPrincipal.Cabecalho( bComTotalizacao : Boolean ) : SmallInt;
begin
With impMatric Do
Begin
textolc(1, 1, ´=======================================´);
textolc(2, 1, Copy(dtsContratos.DataSet.FieldByname(´Descricao´).AsString, 1, 39));
textolc(3, 1, ´=======================================´);
TextoE( 4, 1, ´Data: ´ + FormatDateTime(´dd/mm/yyyy´, dtData) +
´-´ + IntToStr(iTurno) + ´ Caixa.: ´ + Copy(dbtAtendente.Caption, 1, 12) );
If sTipoDeOperacao = sCPVMe Then
Begin
TextoE( 5, 1, ´Ped.: ´ + FormatFloat(´000000´,
dtsLocaisAlocados.DataSet.FieldByName(´Orcamento´).AsFloat) + ´-M´ +
FormatFloat(´0000´, dtsLocaisAlocados.DataSet.FieldByName(´Posicao´).AsFloat) +
´ Garcom: ´ + Copy(dbtGarcom.Caption, 1, 12));
textolc(6, 1, ´=======================================´);
If bComTotalizacao Then
textolc(7, 1, ´ DESCRICAO QTD TOTAL ´)
Else
textolc(7, 1, ´ QTD DESCRICAO ´);
textolc(8, 1, ´=======================================´);
Result := 9;
End;
If sTipoDeOperacao = sCPVDe Then
Begin
{{{{Aqui ocorre a mensagem}}}}
TextoE( 5, 1, ´Hr.Pedido: ´ +
FormatDateTime(´HH:MM´, dtsLocaisAlocados.DataSet.FieldByName(´HoraDeEntrada´).AsDateTime) +
´ Hr.Saida: ´ +
FormatDateTime(´HH:MM´, dtsLocaisAlocados.DataSet.FieldByName(´HoraDeSaida´).AsDateTime));
{{{{Aqui ocorre a mensagem}}}}
TextoE( 6, 1, ´Ped.: ´ + FormatFloat(´000000´,
dtsLocaisAlocados.DataSet.FieldByName(´Orcamento´).AsFloat) + ´-E´ +
FormatFloat(´0000´, dtsLocaisAlocados.DataSet.FieldByName(´Posicao´).AsFloat) +
´ Engdr.: ´ + Copy(dbtEntregador.Caption, 1, 13));
textolc(7, 1, ´=======================================´);
If bComTotalizacao Then
textolc(8, 1, ´ DESCRICAO QTD TOTAL ´)
Else
textolc(8, 1, ´ QTD DESCRICAO ´);
textolc(9, 1, ´=======================================´);
Result := 10;
End;
End;
end;
Ficaria muito grato se alguém pudesse me dar uma luz.
Marciodossantosprog
Curtidas 0
Melhor post
Juarez Mendes
24/04/2011
Eu passei por este problema ontem e descobri a solução, para ajudar quem passar por ele tambem, é simples, um componente com 2 casas decimais tentando salvar os dados em um campo com 3 casas decimais, imagino que este erro deva ocorrer para qualquer divergência de dados utilizando ADO.
GOSTEI 1
Mais Respostas
Marciodossantosprog
31/10/2008
Alguém teria alguma sugestão ou idéia de onde possa estar o problema? Pesquisando na Net, li que o problema poderia estar na divergência de tipos, tamanhos e etc... De fato, os campos CodigoDoCliente, CodigoDoAtendente, CodigoDoGarcom, todos Integer, estavam recebendo valores Double. Mesmo corrigindo os tipos, o problema permanece.
Agradeço desde já quem possa lançar alguma luz ao problema.
Agradeço desde já quem possa lançar alguma luz ao problema.
GOSTEI 0
Emerson Nascimento
31/10/2008
certo... então nos campos onde você usava .AsFloat você passou a usar .AsInteger, certo?
e quanto aos campos data? O campo na tabela é datahora, certo?
tente, ao invés de .AsDate, usar .AsSQLTimeStamp em conjunto com a função DateTimeToSQLTimeStamp(), que está na unit SqlTimSt.
e quanto aos campos data? O campo na tabela é datahora, certo?
tente, ao invés de .AsDate, usar .AsSQLTimeStamp em conjunto com a função DateTimeToSQLTimeStamp(), que está na unit SqlTimSt.
GOSTEI 0
Marciodossantosprog
31/10/2008
Olá, Emerson.
Como tinha muita urgência em resolver a questão e, como não encontrava uma explicação e principalmenente a SOLUÇÃO, para não deixar de atender ao cliente, decidi seguir por outro caminho. Claro, perdi um tempo refazendo a rotina, pois deixei de trabalhar com os métodos nativos da classe TADOQuery para manipulação de registros ( Insert, Edit, Post, etc... ) e passei a fazer uso de scripts (Insert Into..., Update X Set...). Na verdade consegui, inclusive, reduzir as linhas de códigos e ao mesmo tempo deixá-lo mais legível.
Mesmo sem testar, posso dizer que você me deu a LUZ que buscava. Agora estou numa correria danada, mas assim que for possível, vou aplicar sua sugestão e retorno para dizer o que aconteceu.
De qualquer forma, Muitííííííííííííííííííííssimo obrigado pela ajuda.
Um grande abraço.
Como tinha muita urgência em resolver a questão e, como não encontrava uma explicação e principalmenente a SOLUÇÃO, para não deixar de atender ao cliente, decidi seguir por outro caminho. Claro, perdi um tempo refazendo a rotina, pois deixei de trabalhar com os métodos nativos da classe TADOQuery para manipulação de registros ( Insert, Edit, Post, etc... ) e passei a fazer uso de scripts (Insert Into..., Update X Set...). Na verdade consegui, inclusive, reduzir as linhas de códigos e ao mesmo tempo deixá-lo mais legível.
Mesmo sem testar, posso dizer que você me deu a LUZ que buscava. Agora estou numa correria danada, mas assim que for possível, vou aplicar sua sugestão e retorno para dizer o que aconteceu.
De qualquer forma, Muitííííííííííííííííííííssimo obrigado pela ajuda.
Um grande abraço.
GOSTEI 0
Marcio Santos
31/10/2008
Olá, Juarez.
Obrigado, por apesar de tanto tempo, ter dado atenção ao tópico.
Cometi aqui um grande pecado. Fiquei de voltar para dar mais detalhes sobre a solução encontrada e não o fiz. Por outro lado, como a solução encontrada, como citei anteriormente foi reescrever o código e mudar a técnica utilizada, imaginei que não traria contribuição ao tema.
O mais importante, destaco, é a sua iniciativa: Mesmo após tanto tempo do tópico iniciado fez questão de postar a solução por ti encontrada.
Espetacular. Parabéns!
Grande abraço.
Obrigado, por apesar de tanto tempo, ter dado atenção ao tópico.
Cometi aqui um grande pecado. Fiquei de voltar para dar mais detalhes sobre a solução encontrada e não o fiz. Por outro lado, como a solução encontrada, como citei anteriormente foi reescrever o código e mudar a técnica utilizada, imaginei que não traria contribuição ao tema.
O mais importante, destaco, é a sua iniciativa: Mesmo após tanto tempo do tópico iniciado fez questão de postar a solução por ti encontrada.
Espetacular. Parabéns!
Grande abraço.
GOSTEI 0
José
31/10/2008
Este tópico esta sendo fechado por inatividade. Se necessário, sinalizar para que seja reaberto ou abrir um novo.
GOSTEI 0
Paulo Horlle
31/10/2008
Olá, Juarez.
Obrigado, por apesar de tanto tempo, ter dado atenção ao tópico.
Cometi aqui um grande pecado. Fiquei de voltar para dar mais detalhes sobre a solução encontrada e não o fiz. Por outro lado, como a solução encontrada, como citei anteriormente foi reescrever o código e mudar a técnica utilizada, imaginei que não traria contribuição ao tema.
O mais importante, destaco, é a sua iniciativa: Mesmo após tanto tempo do tópico iniciado fez questão de postar a solução por ti encontrada.
Espetacular. Parabéns!
Grande abraço.
Obrigado, por apesar de tanto tempo, ter dado atenção ao tópico.
Cometi aqui um grande pecado. Fiquei de voltar para dar mais detalhes sobre a solução encontrada e não o fiz. Por outro lado, como a solução encontrada, como citei anteriormente foi reescrever o código e mudar a técnica utilizada, imaginei que não traria contribuição ao tema.
O mais importante, destaco, é a sua iniciativa: Mesmo após tanto tempo do tópico iniciado fez questão de postar a solução por ti encontrada.
Espetacular. Parabéns!
Grande abraço.
GOSTEI 0
Paulo Horlle
31/10/2008
Olá, Juarez.
Obrigado, por apesar de tanto tempo, ter dado atenção ao tópico.
Cometi aqui um grande pecado. Fiquei de voltar para dar mais detalhes sobre a solução encontrada e não o fiz. Por outro lado, como a solução encontrada, como citei anteriormente foi reescrever o código e mudar a técnica utilizada, imaginei que não traria contribuição ao tema.
O mais importante, destaco, é a sua iniciativa: Mesmo após tanto tempo do tópico iniciado fez questão de postar a solução por ti encontrada.
Espetacular. Parabéns!
Grande abraço.
Obrigado, por apesar de tanto tempo, ter dado atenção ao tópico.
Cometi aqui um grande pecado. Fiquei de voltar para dar mais detalhes sobre a solução encontrada e não o fiz. Por outro lado, como a solução encontrada, como citei anteriormente foi reescrever o código e mudar a técnica utilizada, imaginei que não traria contribuição ao tema.
O mais importante, destaco, é a sua iniciativa: Mesmo após tanto tempo do tópico iniciado fez questão de postar a solução por ti encontrada.
Espetacular. Parabéns!
Grande abraço.
11 anos depois... passei pelo mesmo problema e a razao deste erro é porque o dataset é alterado no banco, ou por um trigger ou por campo default, qdo o dataset volta para o delphi ele possui um conteudo diferente do que havia anteriormente causando este erro.
GOSTEI 0