Galera estou usando apenas o datamodule para gravar no banco…isso é certo?
tipo o erro que ocorre éh:
quando eu passo os valores por exemplo… nome = MARIA, acontece o seguinte erro… unknown coluna MARIA???o_O
DataModule1.conn.ExecuteDirect('insert into pessoas (NOME, CPF, TELEFONE)'+
' values('+pessoa.Nome+','+pessoa.Cpf+','+pessoa.Telefone+')');
Fala Java_Terminator!
Então, este erro é o típico “coluna não encontrada” da tabela.
Está apontando certinho pro banco correto na conexão?
Até mais!
G
gbpereira
Tenta jogar este trecho de código em um ShowMessage() pra ver como a instrução está ficando:
(‘insert into pessoas (NOME, CPF, TELEFONE)’+
’ values(’+pessoa.Nome+’,’+pessoa.Cpf+’,’+pessoa.Telefone+’)’);
A
AlexandreGama
Só complementanto:
Está correto você utilizar o DataModule para fazer as suas consultas, insert’s e etc.
Mas no seu DataModule você deve ter um trio de ClientDataSet, DataSetProvider e SQLDataSet (ou SQLQuery), imagino eu.
Assim, ficaria melhor você inserir por um ClientDataSet mesmo do que por um SQLConnection de forma direta,
já que você tem o benefício do tratamento de erros do DataSetProvider e da manipulação dos data packages
criados pelo Provider.
E seria interessante você ter funções no seu DataModule para inserir registros em vez de chamar a inserção
pela instância do DataModule.
DataModule.inserePessoa();
E no insere pessoa você trabalha com o ClientDataSet.
Fica só como dica:
Abraços!
A
AlexandreGama
Como o gbpereira disse (bem de Delpheiro) pode colocar a instrução em um ShowMessage.
Provavelmente você verá que as aspas são retiradas e a instrução ficará como:
insert into pessoas (NOME, CPF, TELEFONE) values (MARIA, 12345987, 123456789));
Ou seja, ele entenderá como Colunas!
Uma dica é usar QuotedStr para não ter estes problemas.
Até mais!
A
AlexandreGama
Bom, escrevi um exemplo simples só pra mostrar o que poderia ser feito:
Levanto em consideração que seu telefone e CPF são do tipo String
Há outras formas bem melhores de se fazer esta inserção, utilizando parâmetros, semelhante ao que se faz em Java com o PrepareStatement.
Abraços!
J
Java_Terminator
AlexandreGama , perfeito seu exemplo…
obrigado.
J
Java_Terminator
Ja aproveitando … como que eu poderia fazer o select;;;
utitlizando esse componente que eu estou usando?
Isso daqui funciona? se sim, como guardar os valoes ?
DataModule1.conn.ExecuteDirect(‘select * from pessoa’);
grato.
A
AlexandreGama
Que bom que foi útil!
Até mais!
A
AlexandreGama
Escrevi enquanto você postava! hehe
A
AlexandreGama
Com o select eu faria utilizando um SQLDataSet.
Você pode colocar no seu DataModule um SQLDataSet (paleta dbExpress) e conectá-lo ao seu SQLConnection
pela propriedade SQLConnection do seu SQLDataSet.
Na propriedade CommandText do SQLDataSet você coloca a sua consulta inteira e via código você poderia ter:
Onde o FieldByName é o nome da sua coluna no Banco de Dados.
Você pode incrementar isso adicionando, como eu disse, um ClientDataSet e um DataSetProvider pra uma manipulação
melhor dos dados.
Até mais!
A
AlexandreGama
Não mencionei um detalhe:
Sobre a sua dúvida de guardar valores
Na verdade quando você faz SQLDatSet.Open() os seus dados são retornados para
este SQLDataSet e por um while por exemplo, você pode percorrer este DataSet
e pegar todos os valores.