Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Francisco Assis_45674

Problemas ao salvar dados do ComboBox e do MaskEdit no Banco de Dados

Recommended Posts

Fala pessoal do iMasters!

 

Eu preciso da ajuda de vocês, já estou no fim do projeto e eu to enfrentando um problema. Toda vez que eu tento salvar o texto do ComboBox e do MaskEdit no Banco de Dados, o conteúdo deles vão para outra linha.

 

Na hora que vou fazer a consulta (abrir a tabela no DbGrid) as informações do ComboBox e do MaskEdit estão em uma linha e as demais informações em outra linha...

 

Como resolvo isso? É o único problema pra terminar o projeto :/

Compartilhar este post


Link para o post
Compartilhar em outros sites

Bom dia Francisco,

 

 

Isso é estranho, visto que o dbgrid apenas retorna o que está gravado na tabela, não insere linhas sozinho.... você verificou se os dados estão sendo gravados corretamente no BD (fazendo o seu select no banco e vendo se a gravação está ok ou se por algum erro na inserção os dados não entraram em dois registros distintos, um só com os dados do combobox/maskedit e outro com os demais dados)? Há algum evento configurado no seu dbgrid ou na carga dos dados que possa causar este comportamento estranho? Como está gravando as informações no BD? Dê mais detalhes e se possível exemplos/cópia do seu código de gravação para podermos dar alguma sugestão....

Compartilhar este post


Link para o post
Compartilhar em outros sites

Estou usando os seguintes comandos para salvar os dados:

 

dtmdlData.tblVendas.Insert;
dtmdlData.tblVendas.FieldByName('vndProduto').AsString := dbedtProduto.Text;
dtmdlData.tblVendas.FieldByName('vndTitular').AsString := dbedtNomeTitular.Text;
dtmdlData.tblVendas.FieldByName('vndValor').AsString := medtValor.Text;
dtmdlData.tblVendas.FieldByName('vndData').AsString := medtData.Text;
dtmdlData.tblVendas.FieldByName('vndSituacao').AsString := cbbSituacao.Text;
dtmdlData.tblVendas.FieldByName('vndQuantidade').AsString := dbedtQuantidade.Text;
dtmdlData.tblVendas.Post;

Os componentes "medtValor" e "medtData" são os MaskEdit e o "cbbSituacao" é o ComboBox... Estou usando o Delphi XE4, o banco de dados é Access 2013.

 

Para carregar os dados no DBGrid eu apenas abro a tabela na hora que o FORM é mostrado, pois eu já configurei o DBGrid para pegar os dados do DataSource... Não é só na hora de exibir que eles estão em duas linhas, quando eu abro o banco de dados também estão registrados cada um em uma linha. O que mais intriga é que os demais ficam normais, só o MaskEdit e o ComboBox tão com problema.

 

Será que alguém pode me ajudar?

Compartilhar este post


Link para o post
Compartilhar em outros sites

O que é o tblVendas? Um table? Se for, o erro não parece estar ai... já revisou todos os pontos em que efetua gravação dos dados? Debugou passo a passo?

Compartilhar este post


Link para o post
Compartilhar em outros sites

se o dbedtProduto for um TDBEdit quando você insere um conteúdo nela o dataset entra em modo de edição(ou inserção) e quando você invoca o DataSet.Insert via código ele realiza um post dos dados e entra em modo de inserção ai os dados dos TDBEdit ficam nulos mais os dos componentes comuns não.

Compartilhar este post


Link para o post
Compartilhar em outros sites

O ideal seria você decidir se vai utilizar os componentes dataware ou os comuns.

se optar pelos comuns é só você trocar os TDBEdit pelos comuns.

set resolver utilizar os dataware então você vai ter que colocar o dataset em modo de inserção em algum momento

DataSet.Insert;//Ou Append;

e depois no botão salvar só chamar o post

DataSet.Post;

Compartilhar este post


Link para o post
Compartilhar em outros sites

tente usaro o seguinte codigo:

dtmdlData.tblVendas.Insert;
dtmdlData.tblVendasvndProduto.AsString := dbedtProduto.Text;
dtmdlData.tblVendasvndTitular.AsString := dbedtNomeTitular.Text;
dtmdlData.tblVendasvndValor.AsString := medtValor.Text;
dtmdlData.tblVendasvndData.AsString := medtData.Text;
dtmdlData.tblVendasvndSituacao.AsString := cbbSituacao.Text;
dtmdlData.tblVendasvndQuantidade.AsString := dbedtQuantidade.Text;
dtmdlData.tblVendas.Post;

Costumo não confiar no fieldbyname, alem disso se tiver algum erro vc pega em ambiente compiler.



Revendo o codigo notei que o o CVolega hacker_wap esta certo, quando vc preenche o DBEdit o seu DataSet que provvelmente esta marcado como AutoEdit= True acaba inserindo a nova linha, quando você da um insert novamente ele coloca uma linha diferente, para comprovar isso basta você tirar a linha abaixo do seu codigo e complilar;

 

dtmdlData.tblVendas.Insert;

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.