Ir para conteúdo

Arquivado

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

Ryox

Insert direto na query

Recommended Posts

Salve salve galera,

to com um probleminha ao fazer um insert.

estou usando o delphi xe6 com mysql 5.5

 

o sistema possui um DataModule principal onde fica o ZConnection,(componente Zeus para conectar ao DB).

no form cadastro da empresa tem uma query, onde por ela estou tentando inserir os dados no banco.

porem da erro.

a função do botao gravar ficou assim:

 

procedure Tfrm_empresa.BtnGravarClick(Sender: TObject);
begin
Qry_Gravar.Close;
Qry_Gravar.SQL.Clear;
Qry_Gravar.SQL.Add('INSERT INTO EMPRESA VALUES');
Qry_Gravar.SQL.Add('CODIGO = '+Chr(39)+CODIGO.text+Chr(39)+',');
Qry_Gravar.SQL.Add('RAZAO = '+Chr(39)+RAZAO.text+Chr(39)+',');
Qry_Gravar.SQL.Add('FANTASIA, = '+Chr(39)+Fantasia.text+Chr(39)+',');
Qry_Gravar.SQL.Add('ENDERECO, = '+Chr(39)+Endereco.text+Chr(39)+',');
Qry_Gravar.SQL.Add('NUMERO, = '+Chr(39)+Numero.text+Chr(39)+',');
Qry_Gravar.SQL.Add('COMPLEMENTO, = '+Chr(39)+Complemento.text+Chr(39)+',');
Qry_Gravar.SQL.Add('BAIRRO, = '+Chr(39)+Bairro.text+Chr(39)+',');
Qry_Gravar.SQL.Add('CEP, = '+Chr(39)+CEP.text+Chr(39)+',');
Qry_Gravar.SQL.Add('CNPJ_CPF, = '+Chr(39)+CNPJ_CPF.text+Chr(39)+',');
Qry_Gravar.SQL.Add('INSC_RG, = '+Chr(39)+INSC_RG.text+Chr(39)+',');
Qry_Gravar.SQL.Add('INSC_MUNICIPAL, = '+Chr(39)+Insc_Municipal.text+Chr(39)+',');
Qry_Gravar.SQL.Add('CIDADE, = '+Chr(39)+Cidade.text+Chr(39)+',');
Qry_Gravar.SQL.Add('UF, = '+Chr(39)+UF.text+Chr(39)+',');
Qry_Gravar.SQL.Add('TELEFONE, = '+Chr(39)+Telefone.text+Chr(39)+',');
Qry_Gravar.SQL.Add('CELULAR, = '+Chr(39)+Celular.text+Chr(39)+',');
Qry_Gravar.SQL.Add('EMAIL = '+Chr(39)+Email.text+Chr(39)+')');
Qry_Gravar.SQL.Add('SITUACAO, = '+Chr(39)+SitTributaria.Text+Chr(39)+',');
Qry_Gravar.SQL.Add('RESPONSAVEL, = '+Chr(39)+Responsavel.Text+Chr(39)+',');
Qry_Gravar.SQL.Add('SMTP, = '+Chr(39)+smtp_email.Text+Chr(39)+',');
Qry_Gravar.SQL.Add('USUARIO, = '+Chr(39)+usuario_email.Text+Chr(39)+',');
Qry_Gravar.SQL.Add('SENHA, = '+Chr(39)+senha_email.Text+Chr(39)+',');
Qry_Gravar.SQL.Add('PORTA, = '+Chr(39)+porta_email.Text+Chr(39)+',');
if autenticacao.Checked then
Qry_Gravar.SQL.Add('AUTENTICACAO = 1,')
else
Qry_Gravar.SQL.Add('AUTENTICACAO = 0,');
if ssl_tls.Checked then
Qry_Gravar.SQL.Add('SEGURA = 1,')
else
Qry_Gravar.SQL.Add('SEGURA = 0,');
Qry_Gravar.ExecSQL;
end;
Porem quando executo clico no botao gravar da erro.
SQL error: you have an error in your sql syntax check the manual that corresponds to your mysql!!
acredito que esteja faltando algo, porem nao sei oq pode ser.
sera q alguem sabe oq estou errando no insert?
desde ja agradeço.
att

Compartilhar este post


Link para o post
Compartilhar em outros sites

De cara já vejo dois possíveis problemas aqui: um é a sintaxe que está errada, pois está faltando inserir no seu sql os parênteses após o values... outro, que você está montando o insert como se fosse um update... lembre-se que qualquer insert é feito seguindo a regra abaixo:

 

 

insert into tabela (campo1, campo2, ..., campoN) values (valor1, valor2, ..., valorN)

 

Se observar seu código, seu sql está gerando um insert do tipo abaixo:

 

 

INSERT INTO EMPRESA VALUES
CODIGO               = '4', --Considerando-se aqui que o valor do campo CODIGO.text seja 4
'RAZAO                = 'RAZAO',

 

Logo, já vemos de cara que não irá funcionar... um outro possível problema que terá com o insert desta forma é: se algum campo da tabela não for do tipo caracter, dará erro de conversão. Dê uma revisada, há inúmeros exemplos de como montar inserts dinâmicos passando os valores como parâmetro. Qualquer coisa retorne!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Encontrei alguns problemas:

1. Para inserir dessa forma, use 'INSERT INTO EMPRESA SET ' <-- eu costumo deixar um espaço no final
2. Só coloque Chr(39) quando o campo for caracter,
3. Em alguns campos ficou uma vírgula antes do = (Fantasia, EDndereco, Numero, etc...)
4. No último campo, não vai a vírgula no final

Compartilhar este post


Link para o post
Compartilhar em outros sites

Essa sintaxe de um UPDATE

<CAMPO> = <VALOR>

 

O insert para não ter problema faça como o Chrnos mencionou no post anterior: INSERT INTO <TABELA> ( <CAMPO1>, <CAMPO2>, ...) VALUES (<VALOR1>, <VALOR2>,...)

 

E o seu código está encerrando com um SEGURA = 0/1,

 

Att.

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.