Ir para conteúdo
Fórum Script Brasil
  • 0

Como Concatenar Expressões Sql Longas


Mei

Pergunta

Olá,

Estou fazendo meu segundo programa em Delphi usando MySQL e não consigo fazer um INSERT longo porque o Delphi não aceitou minha expressão:

SQLQuery1.SQL.Clear;

SQLQuery1.SQL.Add('insert into tbl_clientes values(:cli_name, :cli_cpf, :cli_email, :cli_endereco, :cli_bairro, :cli_cidade, :cli_uf, :cli_fone_res, :cli_fone_cel, :cli_fone_fax, :cli_auto_placa, :cli_auto_marca, :cli_auto_modelo, :cli_auto_ano_mod')'+' aqui ocorre missing operator or semicolon. Se deixo apenas o + depois do parênteses dá o erro na linha de baixo

('+'':cli_auto_cor, :cli_auto_km, :cli_auto_niv_com, :cli_auto_chassi, :cli_auto_prisma, :cli_auto2_placa, :cli_auto2_marca, :cli_auto2_modelo, :cli_auto2_ano_mod, :cli_auto2_cor, :cli_auto2_km, :cli_auto2_niv_com, :cli_auto2_chassi')'+'

Tipos incompatíveis String e Inteiro('+'':cli_auto2_prisma, :cli_auto3_placa, :cli_auto3_marca, :cli_auto3_modelo, :cli_auto3_ano_mod, :cli_auto3_cor, :cli_auto3_km, :cli_auto3_niv_com, :cli_auto3_chassi, :cli_auto3_prisma'

Me disseram pra fazer assim, mas paro no mesmo problema: preciso concatenar a expressão longa no insert:

SQLQuery1.SQL.Clear;

SQLQuery1.SQL.Add

('insert into tbl_clientes values(:cli_name, :cli_cpf, :cli_email, :cli_n...')

SQLQuery1.ParamByname('cli_name').Value := 'edit1.text';

SQLQuery1.ParamByname('cli_cpf').Value :='edit2.text';

SQLQuery1.ParamByname('cli_email').Value := 'edit3.text';

.

.

.

SQLQuery1.ExecSQL;

1 - Como fazer pra escrever o INSERT corretamente ?

2 - Tem como usar a mesma expressão utilizada no DBVisualizer pra fazer o INSERT? :(

Link para o comentário
Compartilhar em outros sites

6 respostass a esta questão

Posts Recomendados

  • 0
Estou fazendo meu segundo programa em Delphi usando MySQL e não consigo fazer um INSERT longo porque o Delphi não aceitou minha expressão:

SQLQuery1.SQL.Clear;

SQLQuery1.SQL.Add('insert into tbl_clientes values(:cli_name, :cli_cpf, :cli_email, :cli_endereco, :cli_bairro, :cli_cidade, :cli_uf, :cli_fone_res, :cli_fone_cel, :cli_fone_fax, :cli_auto_placa, :cli_auto_marca, :cli_auto_modelo, :cli_auto_ano_mod')'+' aqui ocorre missing operator or semicolon. Se deixo apenas o + depois do parênteses dá o erro na linha de baixo

('+'':cli_auto_cor, :cli_auto_km, :cli_auto_niv_com, :cli_auto_chassi, :cli_auto_prisma, :cli_auto2_placa, :cli_auto2_marca, :cli_auto2_modelo, :cli_auto2_ano_mod, :cli_auto2_cor, :cli_auto2_km, :cli_auto2_niv_com, :cli_auto2_chassi')'+'

Tipos incompatíveis String e Inteiro('+'':cli_auto2_prisma, :cli_auto3_placa, :cli_auto3_marca, :cli_auto3_modelo, :cli_auto3_ano_mod, :cli_auto3_cor, :cli_auto3_km, :cli_auto3_niv_com, :cli_auto3_chassi, :cli_auto3_prisma'

Me disseram pra fazer assim, mas paro no mesmo problema: preciso concatenar a expressão longa no insert:

SQLQuery1.SQL.Clear;

SQLQuery1.SQL.Add

('insert into tbl_clientes values(:cli_name, :cli_cpf, :cli_email, :cli_n...')

SQLQuery1.ParamByname('cli_name').Value := 'edit1.text';

SQLQuery1.ParamByname('cli_cpf').Value :='edit2.text';

SQLQuery1.ParamByname('cli_email').Value := 'edit3.text';

.

.

.

SQLQuery1.ExecSQL;

1 - Como fazer pra escrever o INSERT corretamente ?

2 - Tem como usar a mesma expressão utilizada no DBVisualizer pra fazer o INSERT? :(

Mei, acho que apenas sua concatenação não está sendo feita corretamente. O seu primeiro comentário dentro da concatenação, você tem: ", :cli_auto_ano_mod')'+'". Se não estou interpretando erroneamente, o apóstrofo (') após ":cli_auto_ano_mod" fechará a string iniciada após o "Add(", então, você não poderia simplesmente colocar ")'+'" para fazer a concatenação. Experimente fazer assim (acredito que dará certo) - observe as marcações:

SQLQuery1.SQL.Add('insert into tbl_clientes values(:cli_name, :cli_cpf, :cli_email, :cli_endereco, :cli_bairro, :cli_cidade, :cli_uf, :cli_fone_res, :cli_fone_cel, :cli_fone_fax, :cli_auto_placa, :cli_auto_marca, :cli_auto_modelo, :cli_auto_ano_mod, ' +

':cli_auto_cor, :cli_auto_km, :cli_auto_niv_com, :cli_auto_chassi, :cli_auto_prisma, :cli_auto2_placa, :cli_auto2_marca, :cli_auto2_modelo, :cli_auto2_ano_mod, :cli_auto2_cor, :cli_auto2_km, :cli_auto2_niv_com, :cli_auto2_chassi, ' +

':cli_auto2_prisma, :cli_auto3_placa, :cli_auto3_marca, :cli_auto3_modelo, :cli_auto3_ano_mod, :cli_auto3_cor, :cli_auto3_km, :cli_auto3_niv_com, :cli_auto3_chassi, :cli_auto3_prisma');

De qualquer modo, você não precisa fazer uma concatenação tão longa e pouco legível como a anterior. Já experimentou desdobrar a instrução em vários Add's? Acredito que fique mais simples e legível:

SQLQuery1.SQL.Clear;
SQLQuery1.SQL.Add('insert into tbl_clientes ');

SQLQuery1.SQL.Add('values(:cli_name, :cli_cpf, :cli_email, :cli_endereco, :cli_bairro, :cli_cidade, :cli_uf, :cli_fone_res, :cli_fone_cel, :cli_fone_fax, ');

SQLQuery1.SQL.Add(':cli_auto_placa, :cli_auto_marca, :cli_auto_modelo, :cli_auto_ano_mod, :cli_auto_cor, :cli_auto_km, :cli_auto_niv_com, :cli_auto_chassi, :cli_auto_prisma, ');

SQLQuery1.SQL.Add(':cli_auto2_placa, :cli_auto2_marca, :cli_auto2_modelo, :cli_auto2_ano_mod, :cli_auto2_cor, :cli_auto2_km, :cli_auto2_niv_com, :cli_auto2_chassi, :cli_auto2_prisma, ');

SQLQuery1.SQL.Add(':cli_auto3_placa, :cli_auto3_marca, :cli_auto3_modelo, :cli_auto3_ano_mod, :cli_auto3_cor, :cli_auto3_km, :cli_auto3_niv_com, :cli_auto3_chassi, :cli_auto3_prisma');

SQLQuery1.ParamByname('cli_name').Value := 'edit1.text';
  :
  :
SQLQuery1.ExecSQL;

Abraços

Link para o comentário
Compartilhar em outros sites

  • 0

Obrigada Micheus,

Fiz como disse, mas ainda recebo msg de erro:

EDatabaseError with message 'have an error in your SQL sintax; check the manual that corresponds to your MySQL server version fot the right syntax to use near ''cli_name.text','cli_cpf.text','cli_endereco.text','cli_bairro'. Process stopped

Então mudei a segunda linha adicionando o values e o final de :cli_auto_prisma'); para :cli_auto_prisma)');

ficou assim:

SQLQuery1.SQL.Clear;

SQLQuery1.SQL.Add('insert into tbl_clientes values(');

SQLQuery1.SQL.Add(':cli_name,:cli_cpf, :cli_endereco, :cli_bairro, :cli_cidade, :cli_uf, :cli_fone_res, :cli_fone_cel, :cli_fone_fax, :cli_email,');

SQLQuery1.SQL.Add(':cli_auto_placa, :cli_auto_marca, :cli_auto_modelo, :cli_auto_ano_mod, :cli_auto_cor, :cli_auto_km, :cli_auto_niv_com, :cli_auto_chassi, :cli_auto_prisma)');

SQLQuery1.ParamByname('cli_name').Value := 'cli_name.text';

SQLQuery1.ParamByname('cli_cpf').Value := 'cli_cpf.text';

SQLQuery1.ParamByname('cli_endereco').Value := 'cli_endereco.text';

SQLQuery1.ParamByname('cli_bairro').Value := 'cli_bairro.text';

SQLQuery1.ParamByname('cli_cidade').Value := 'cli_cidade.text';

SQLQuery1.ParamByname('cli_uf').Value := 'cli_uf.text';

SQLQuery1.ParamByname('cli_fone_res').Value := 'cli_fone_res.text';

SQLQuery1.ParamByname('cli_fone_cel').Value := 'cli_fone_cel.text';

SQLQuery1.ParamByname('cli_fone_fax').Value := 'cli_fone_fax.text';

SQLQuery1.ParamByname('cli_email').Value := 'cli_email.text';

SQLQuery1.ParamByname('cli_auto_placa').Value := 'placa1.text';

SQLQuery1.ParamByname('cli_auto_marca').Value := 'marca1.text';

SQLQuery1.ParamByname('cli_auto_modelo').Value := 'modelo1.text';

SQLQuery1.ParamByname('cli_auto_ano_mod').Value := 'ano_modelo1.text';

SQLQuery1.ParamByname('cli_auto_cor').Value := 'cor1.text';

SQLQuery1.ParamByname('cli_auto_km').Value := 'km1.text';

SQLQuery1.ParamByname('cli_auto_niv_com').Value := 'niv_comb1.text';

SQLQuery1.ParamByname('cli_auto_chassi').Value := 'chassi1.text';

SQLQuery1.ParamByname('cli_auto_prisma').Value := 'prisma1.text';

SQLQuery1.ExecSQL;

Diminui um pouco para resolver o problema primeiro depois completo ele. :rolleyes:

Agora ocorre o erro:

mn count doesn't match value count at row 1

Não consigo ver onde está o erro. Tenho a mesma quantidade de insert nos edit.text. A mesma sequencia e não dá certo. Tentei fazer instrução copiando do delphi no DBVisualizer e funcionou alterando os dados mas obedecendo a sequencia e os campos.

Link para o comentário
Compartilhar em outros sites

  • 0
Fiz como disse, mas ainda recebo msg de erro:

EDatabaseError with message 'have an error in your SQL sintax; check the manual that corresponds to your MySQL server version fot the right syntax to use near ''cli_name.text','cli_cpf.text','cli_endereco.text','cli_bairro'. Process stopped

.

.

.

Não consigo ver onde está o erro. Tenho a mesma quantidade de insert nos edit.text. A mesma sequencia e não dá certo. Tentei fazer instrução copiando do delphi no DBVisualizer e funcionou alterando os dados mas obedecendo a sequencia e os campos.

Mei, acho que você não está olhando direito para o seu código. :huh:

Voce não acha que tem umas aspas sobrando não???

SQLQuery1.ParamByname('cli_name').Value := 'cli_name.text';

por acaso você não está querendo atribuir o conteúdo digitado em cli_name.text, por exemplo?

se for, e parece o mais lógico, então retire as aspas de todos os edits que você colocou (e não esqueça de desfazer a "correção" que você disse ter feito na minha sugestão, logo no início do seu último post).

Link para o comentário
Compartilhar em outros sites

  • 0
Guest --Mei --
Fiz como disse, mas ainda recebo msg de erro:

EDatabaseError with message 'have an error in your SQL sintax; check the manual that corresponds to your MySQL server version fot the right syntax to use near ''cli_name.text','cli_cpf.text','cli_endereco.text','cli_bairro'. Process stopped

.

.

.

Não consigo ver onde está o erro. Tenho a mesma quantidade de insert nos edit.text. A mesma sequencia e não dá certo. Tentei fazer instrução copiando do delphi no DBVisualizer e funcionou alterando os dados mas obedecendo a sequencia e os campos.

Mei, acho que você não está olhando direito para o seu código. :huh:

Voce não acha que tem umas aspas sobrando não???

SQLQuery1.ParamByname('cli_name').Value := 'cli_name.text';

por acaso você não está querendo atribuir o conteúdo digitado em cli_name.text, por exemplo?

se for, e parece o mais lógico, então retire as aspas de todos os edits que você colocou (e não esqueça de desfazer a "correção" que você disse ter feito na minha sugestão, logo no início do seu último post).

Link para o comentário
Compartilhar em outros sites

  • 0

Sim Micheus, quero atribuir o valor de edit.text.

Agora fiz como você disse:

begin

SQLQuery1.SQL.Clear;

SQLQuery1.SQL.Add('insert into tbl_clientes ');

SQLQuery1.SQL.Add('values(:cli_name, :cli_cpf, :cli_endereco, :cli_bairro, :cli_cidade, :cli_uf, :cli_fone_res, :cli_fone_cel, :cli_fone_fax, :cli_email ');

SQLQuery1.ParamByname('cli_name').Value := cli_name.text;

SQLQuery1.ParamByname('cli_cpf').Value := cli_cpf.text;

SQLQuery1.ParamByname('cli_endereco').Value := cli_endereco.text;

SQLQuery1.ParamByname('cli_bairro').Value := cli_bairro.text;

SQLQuery1.ParamByname('cli_cidade').Value := cli_cidade.text;

SQLQuery1.ParamByname('cli_uf').Value := cli_uf.text;

SQLQuery1.ParamByname('cli_fone_res').Value := cli_fone_res.text;

SQLQuery1.ParamByname('cli_fone_cel').Value := cli_fone_cel.text;

SQLQuery1.ParamByname('cli_fone_fax').Value := cli_fone_fax.text;

SQLQuery1.ParamByname('cli_email').Value := cli_email.text;

SQLQuery1.ExecSQL;

end;

E continua com erro 'have an error in your SQL syntax; verifique o manual correspondente a sua versao do MySQL server , bla, bla bla... na linha 2.

Não vejo erro aqui. Estou com escamas nos olhos. :rolleyes:

Editado por Mei
Link para o comentário
Compartilhar em outros sites

  • 0
Sim Micheus, quero atribuir o valor de edit.text.

Agora fiz como você disse:

begin

SQLQuery1.SQL.Clear;

SQLQuery1.SQL.Add('insert into tbl_clientes ');

SQLQuery1.SQL.Add('values(:cli_name, :cli_cpf, :cli_endereco, :cli_bairro, :cli_cidade, :cli_uf, :cli_fone_res, :cli_fone_cel, :cli_fone_fax, :cli_email ');

SQLQuery1.ParamByname('cli_name').Value := cli_name.text;

SQLQuery1.ParamByname('cli_cpf').Value := cli_cpf.text;

SQLQuery1.ParamByname('cli_endereco').Value := cli_endereco.text;

SQLQuery1.ParamByname('cli_bairro').Value := cli_bairro.text;

SQLQuery1.ParamByname('cli_cidade').Value := cli_cidade.text;

SQLQuery1.ParamByname('cli_uf').Value := cli_uf.text;

SQLQuery1.ParamByname('cli_fone_res').Value := cli_fone_res.text;

SQLQuery1.ParamByname('cli_fone_cel').Value := cli_fone_cel.text;

SQLQuery1.ParamByname('cli_fone_fax').Value := cli_fone_fax.text;

SQLQuery1.ParamByname('cli_email').Value := cli_email.text;

SQLQuery1.ExecSQL;

end;

E continua com erro 'have an error in your SQL syntax; verifique o manual correspondente a sua versao do MySQL server , bla, bla bla... na linha 2.

Não vejo erro aqui. Estou com escamas nos olhos. :rolleyes:

Bom, agora o erro está associado a sua instrução SQL - temos apenas um problema para resolver. :D

Especificamente neste código que você colocou (parece-me um insert muito menor que o inicial), e sabendo que o erro está no SQL, vamos observar apenas a instrução SQL e não o código "delphi":

SQLQuery1.SQL.Add('insert into tbl_clientes ');

SQLQuery1.SQL.Add('values(:cli_name, :cli_cpf, :cli_endereco, :cli_bairro, :cli_cidade, :cli_uf, :cli_fone_res, :cli_fone_cel, :cli_fone_fax, :cli_email ');

Transcrevendo (retirando o que não é o SQL):

'insert into tbl_clientes '

'values(:cli_name, :cli_cpf, :cli_endereco, :cli_bairro, :cli_cidade, :cli_uf, :cli_fone_res, :cli_fone_cel, :cli_fone_fax, :cli_email '

Acho que dá para notar a falta de um ")" referente à cláusula VALUES da instrução SQL, não está?!

Abraços

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,3k
    • Posts
      652,3k
×
×
  • Criar Novo...