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+')');
GRATO.
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!
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+’)’);
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!
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!
Bom, escrevi um exemplo simples só pra mostrar o que poderia ser feito:
Pessoa := TPessoa.Create();
Pessoa.Nome := 'Alexandre';
Pessoa.CPF := '12345';
Pessoa.Telefone := '12345';
Instrucao := 'insert into (NOME, CPF) values (' + QuotedStr(Pessoa.Nome) + ', ' + QuotedStr(Pessoa.CPF) + ', ' + QuotedStr(Pessoa.Telefone) + ')';
DataModule.Conexao.ExecuteDirect(Instrucao);
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!
AlexandreGama , perfeito seu exemplo…
obrigado.
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.
Que bom que foi útil!
Até mais!
Escrevi enquanto você postava! hehe
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:
SQLDataSet.Open();
Pessoa.Nome := SQLDataSet.FieldByName('NOME').AsString;
ShowMessage(Pessoa.Nome); //só pra teste mesmo
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!
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.
Exemplo:
SQLDataSet.Open();
SQLDataSet.First;
while not SQLDataSet.Eof do
begin
ShowMessage(SQLDataSet.FieldByName('NOME').AsString);
SQLDataSet.Next;
end;
Você poderia manipular, a grosso modo, como se faz em Java, com ArrayList.
Abraços!
AlexandreGama , tu é fera mesmo…
Obrigado…
Que bom que está funcionando por aí!!
Precisando, só postar! 
Até mais!