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

Erro de Syntaxe


nsouza

Pergunta

Colegas sou iniciante e estou com problema no código abaixo recebo a seguinte mensagem ao clicar no botão incluir:

Da a seguinte mensagem de erro:

You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right

syntax to use near 'Value('2', 'Carlos',",",",",",",",",",",",",",",",",","' / / ',' ate line 2'.

Minha conexão é com o DBExpress e estou usando o Mysql 5.0.77

Por favor alguém poderia corrigir este código ou parte de código para mim.

DM.Q_Funcionarios.close;

DM.Q_Funcionarios.sql.clear;

DM.Q_Funcionarios.SQL.Add('INSERT INTO FUNCIONARIO (CODESPECIALIDADE, NOME, ENDERECO, NUMERO, OMPLEMENTO, CIDADE, ESTADO, CEP, TELEFONE, CELULAR, EMAIL, RG, CPF, DTNASCIMENTO, DTADMISSAO, DTDEMISSAO, NOMECONTATO,TELCONTATO, LOGIN, SENHA, FOTO');

DM.Q_Funcionarios.SQL.Add('VALUES (:NOME, :ENDERECO, :NUMERO, :COMPLEMENTO, :CIDADE, :ESTADO, :CEP, :TELEFONE, :CELULAR, :EMAIL, :RG, :CPF, :DTNASCIMENTO, :DTADMISSAO, :DTDEMISSAO, :NOMECONTATO,:TELCONTATO, :LOGIN, :SENHA, :FOTO)');

DM.Q_Funcionarios.ParamByName('NOME').Text := edtNome.Text;

DM.Q_Funcionarios.ParamByName('CODESPECIALIDADE').Text := edtcodespecialidade.Text;;

DM.Q_Funcionarios.ParamByName('ENDERECO').Text := edtEndereco.Text;

DM.Q_Funcionarios.ParamByName('NUMERO').Text := edtNumero.Text;

DM.Q_Funcionarios.ParamByName('COMPLEMENTO').Text := edtComplemento.Text;

DM.Q_Funcionarios.ParamByName('CIDADE').Text := edtCidade.Text;

DM.Q_Funcionarios.ParamByName('ESTADO').Text := edtUF.Text;

DM.Q_Funcionarios.ParamByName('CEP').Text := mkeCep.Text;

DM.Q_Funcionarios.ParamByName('TELEFONE').Text := mkeTelefone.Text;

DM.Q_Funcionarios.ParamByName('CELULAR').Text := mkeCelular.Text;

DM.Q_Funcionarios.ParamByName('EMAIL').Text := edtEmail.Text;

DM.Q_Funcionarios.ParamByName('RG').Text := edtIdentidade.Text;

DM.Q_Funcionarios.ParamByName('CPF').Text := mkeCpf.Text;

DM.Q_Funcionarios.ParamByName('DTNASCIMENTO').Text := mkeNascimento.Text;

DM.Q_Funcionarios.ParamByName('DTADMISSAO').Text := mkeDemissao.Text;

DM.Q_Funcionarios.ParamByName('DTDEMISSAO').Text := mkeDemissao.Text;

DM.Q_Funcionarios.ParamByName('NOMECONTATO').Text := edtNomeCont.Text;

DM.Q_Funcionarios.ParamByName('TELCONTATO').Text := mkeTelContato.Text;

DM.Q_Funcionarios.ParamByName('LOGIN').Text := edtLogin.Text;

DM.Q_Funcionarios.ParamByName('SENHA').Text := edtSenha.Text;

DM.Q_Funcionarios.ParamByName('FOTO').Text := edtFoto.Text;

DM.Q_Funcionarios.ExecSql(false);

Link para o comentário
Compartilhar em outros sites

11 respostass a esta questão

Posts Recomendados

  • 0

Da a seguinte mensagem de erro:

You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right

syntax to use near 'Value('2', 'Carlos',",",",",",",",",",",",",",",",",","' / / ',' ate line 2'.

Voce tem um erro na sintaxe em sua SQL; cheque o manual correspondente para sua versão MySQL Server ( Mysql 5.0.77 ) para o uso correto da sintaxe

ou seja a sintaxe da SQL não pode ser assim, principalmente quando se está passando parametros

'Value('2', 'Carlos',",",",",",",",",",",",",",",",",","' / / ',')

abraço

Link para o comentário
Compartilhar em outros sites

  • 0
Da a seguinte mensagem de erro:

You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right

syntax to use near 'Value('2', 'Carlos',",",",",",",",",",",",",",",",",","' / / ',' ate line 2'.

Voce tem um erro na sintaxe em sua SQL; cheque o manual correspondente para sua versão MySQL Server ( Mysql 5.0.77 ) para o uso correto da sintaxe

ou seja a sintaxe da SQL não pode ser assim, principalmente quando se está passando parametros

'Value('2', 'Carlos',",",",",",",",",",",",",",",",",","' / / ',')

abraço

Caro,

minha dificuldade esta justamente em identificar onde esta o erro para neste syntaxe

você tem o manual de referencia desta versão onde pode me orientar onde eu consigo?

Obrigado

Link para o comentário
Compartilhar em outros sites

  • 0

Caro Jhonas,

tentei, retentei, tentei de novo, mudei o jeito, perdi horas tentando e não tive sucesso

fiz da forma que você com poucas colunas e mesmo assim continua dando e erro de syntaxe

1- forma que tentei

DM.Q_Funcionarios.Active := False;

DM.Q_Funcionarios.SQL.Clear;

DM.Q_Funcionarios.SQL.Add('INSERT INTO FUNCIONARIO (ENDERECO, NUMERO) VALUES (');

DM.Q_Funcionarios.SQL.Add('"'+EdtENDERECO.Text+'","');

DM.Q_Funcionarios.SQL.Add(EdtNumero.Text+',)');

DM.Q_Funcionarios.ExecSQL;

2- forma que tentei

DM.Q_Funcionarios.close;

DM.Q_Funcionarios.sql.clear;

DM.Q_Funcionarios.SQL.Add('INSERT INTO FUNCIONARIO (NOME, ENDERECO');

DM.Q_Funcionarios.SQL.Add('VALUES (:NOME, :ENDERECO)');

DM.Q_Funcionarios.ParamByName('NOME').AsString := edtNome.Text;

DM.Q_Funcionarios.ParamByName('ENDERECO').AsString := edtEndereco.Text;

DM.Q_Funcionarios.ExecSql(false);

voce poderia dar uma exemplo de como devo fazer?

Obrigado!

Link para o comentário
Compartilhar em outros sites

  • 0
voce poderia dar uma exemplo de como devo fazer?

DML – Data Manipulation Language

Inserindo dados em uma tabela (INSERT)

Atualizando dados em uma tabela (UPDATE)

Removendo dados de uma tabela (DELETE)

Exemplo usando meu Banco de dados

procedure TForm1.Button1Click(Sender: TObject);
begin
   IBQuery1.Active := False;
   IBQuery1.SQL.Clear;
   IBQuery1.SQL.Append('INSERT INTO OBRAS (COD_EMP, COD_OBRA) ');
   IBQuery1.SQL.Append('VALUES (9999, 9999)');

   SHOWMESSAGE(IBQuery1.SQL.Text);

   IBQuery1.ExecSQL;
   IBQuery1.Active := TRUE;
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
   IBQuery1.Active := False;
   IBQuery1.SQL.Clear;
   IBQuery1.SQL.Append('INSERT INTO OBRAS (COD_EMP, COD_OBRA) ');
   IBQuery1.SQL.Append('VALUES (:COD1, :COD2)');

   IBQuery1.ParamByName('COD1').AsInteger := 8888;
   IBQuery1.ParamByName('COD2').AsInteger := 8888;

   SHOWMESSAGE(IBQuery1.SQL.Text);

   IBQuery1.ExecSQL;
   IBQuery1.Active := TRUE;
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
   IBQuery1.Active := False;
   IBQuery1.SQL.Clear;
   IBQuery1.SQL.Append('INSERT INTO OBRAS (COD_EMP, COD_OBRA) ');
   IBQuery1.SQL.Append('VALUES ('+ Edit1.Text + ',' + Edit2.Text + ')');

   SHOWMESSAGE(IBQuery1.SQL.Text);

   IBQuery1.ExecSQL;
   IBQuery1.Active := TRUE;
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
   IBQuery1.Active := False;
   IBQuery1.SQL.Clear;
   IBQuery1.SQL.Append('INSERT INTO OBRAS (COD_EMP, COD_OBRA) ');
   IBQuery1.SQL.Append('VALUES (:COD1, :COD2)');

   IBQuery1.ParamByName('COD1').AsInteger := strtoint(Edit1.Text);
   IBQuery1.ParamByName('COD2').AsInteger := strtoint(Edit2.Text);

   SHOWMESSAGE(IBQuery1.SQL.Text);

   IBQuery1.ExecSQL;
   IBQuery1.Active := TRUE;

end;

Todas essas maneiras funcionam ... faça uma comparação com o seu código

Veja outras informações:

http://www.devmedia.com.br/articles/viewcomp.asp?comp=5085

http://www.apostilando.com/download.php?co...categoria=MySQL

http://imasters.uol.com.br/artigo/3707/mysql/mysql_5/

http://www.cursoadv.com.br/mysql.aspx

abraço

Link para o comentário
Compartilhar em outros sites

  • 0
voce poderia dar uma exemplo de como devo fazer?

DML – Data Manipulation Language

Inserindo dados em uma tabela (INSERT)

Atualizando dados em uma tabela (UPDATE)

Removendo dados de uma tabela (DELETE)

Exemplo usando meu Banco de dados

procedure TForm1.Button1Click(Sender: TObject);
begin
   IBQuery1.Active := False;
   IBQuery1.SQL.Clear;
   IBQuery1.SQL.Append('INSERT INTO OBRAS (COD_EMP, COD_OBRA) ');
   IBQuery1.SQL.Append('VALUES (9999, 9999)');

   SHOWMESSAGE(IBQuery1.SQL.Text);

   IBQuery1.ExecSQL;
   IBQuery1.Active := TRUE;
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
   IBQuery1.Active := False;
   IBQuery1.SQL.Clear;
   IBQuery1.SQL.Append('INSERT INTO OBRAS (COD_EMP, COD_OBRA) ');
   IBQuery1.SQL.Append('VALUES (:COD1, :COD2)');

   IBQuery1.ParamByName('COD1').AsInteger := 8888;
   IBQuery1.ParamByName('COD2').AsInteger := 8888;

   SHOWMESSAGE(IBQuery1.SQL.Text);

   IBQuery1.ExecSQL;
   IBQuery1.Active := TRUE;
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
   IBQuery1.Active := False;
   IBQuery1.SQL.Clear;
   IBQuery1.SQL.Append('INSERT INTO OBRAS (COD_EMP, COD_OBRA) ');
   IBQuery1.SQL.Append('VALUES ('+ Edit1.Text + ',' + Edit2.Text + ')');

   SHOWMESSAGE(IBQuery1.SQL.Text);

   IBQuery1.ExecSQL;
   IBQuery1.Active := TRUE;
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
   IBQuery1.Active := False;
   IBQuery1.SQL.Clear;
   IBQuery1.SQL.Append('INSERT INTO OBRAS (COD_EMP, COD_OBRA) ');
   IBQuery1.SQL.Append('VALUES (:COD1, :COD2)');

   IBQuery1.ParamByName('COD1').AsInteger := strtoint(Edit1.Text);
   IBQuery1.ParamByName('COD2').AsInteger := strtoint(Edit2.Text);

   SHOWMESSAGE(IBQuery1.SQL.Text);

   IBQuery1.ExecSQL;
   IBQuery1.Active := TRUE;

end;

Todas essas maneiras funcionam ... faça uma comparação com o seu código

Veja outras informações:

http://www.devmedia.com.br/articles/viewcomp.asp?comp=5085

http://www.apostilando.com/download.php?co...categoria=MySQL

http://imasters.uol.com.br/artigo/3707/mysql/mysql_5/

http://www.cursoadv.com.br/mysql.aspx

abraço

amigo, funcionou coloquei a seguinte syntaxe:

DM.Q_Funcionarios.Active := False;

DM.Q_Funcionarios.SQL.Clear;

DM.Q_Funcionarios.SQL.Add('INSERT INTO FUNCIONARIO (CODESPECIALIDADE, NOME, ENDERECO)');

DM.Q_Funcionarios.SQL.Add('VALUES (:CODESPECIALIDADE, :nome, :endereco)');

DM.Q_Funcionarios.ParamByName('codespecialidade').AsInteger := StrToInt(edtcodespecialidade.Text);

DM.Q_Funcionarios.ParamByName('nome').AsString := edtNome.Text;

DM.Q_Funcionarios.ParamByName('endereco').AsString := edtEndereco.Text;

DM.Q_Funcionarios.ExecSQL;

DM.Q_Funcionarios.Active := TRUE;

no entanto retornou o seguinte erro:

'Q_Funcionarios: Cursor not retorned from Query"

Outro detalhe é que apesar de dar este erro, quando dou um refresh no banco de dados os registros estão sendo

gravado, porém duplicados.

obrigado!

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

  • 0
amigo, funcionou coloquei a seguinte syntaxe:

DM.Q_Funcionarios.Active := False;

DM.Q_Funcionarios.SQL.Clear;

DM.Q_Funcionarios.SQL.Add('INSERT INTO FUNCIONARIO (CODESPECIALIDADE, NOME, ENDERECO)');

DM.Q_Funcionarios.SQL.Add('VALUES (:CODESPECIALIDADE, :nome, :endereco)');

DM.Q_Funcionarios.ParamByName('codespecialidade').AsInteger := StrToInt(edtcodespecialidade.Text);

DM.Q_Funcionarios.ParamByName('nome').AsString := edtNome.Text;

DM.Q_Funcionarios.ParamByName('endereco').AsString := edtEndereco.Text;

DM.Q_Funcionarios.ExecSQL;

no entanto retornou o seguinte erro:

'Q_Funcionarios: Cursor not retorned from Query"

Outro detalhe é que apesar de dar este erro, quando dou um refresh no banco de dados os registros estão sendo

gravado, porém duplicados.

Retire este comando

DM.Q_Funcionarios.Active := TRUE; // ele esta provocando a duplicação

abraço

Link para o comentário
Compartilhar em outros sites

  • 0

Caro Jhonas,

quando clico no botão confirmar para salvar os dados, recebo a mensagem

Dataset not in edit or insert mode

abaixo esta o código do botão confirmar, pesquisei algumas coisas mas não tive sucesso

em resolver.

Obrigado pela sua atenção, se puder ajudar de novo

agradeço.

Procedure TF_Funcinario.confirmarClick(Sender:TObject);

begin

if confira <> 3 then begin

grava;

F_Dados.Q_funcionario.Post;

end;

PanGrid.BringToFront;

PanBotoes.Enabled := True;

Limpa;

end;

Link para o comentário
Compartilhar em outros sites

  • 0
quando clico no botão confirmar para salvar os dados, recebo a mensagem

Dataset not in edit or insert mode

DataSet não está no modo Edit ou modo Insert

Procedure TF_Funcinario.confirmarClick(Sender:TObject);
begin
   if confira <> 3 then begin
      grava;  //  Se nesta procedure não estiver Editando ou Inserindo este erro acontece

   F_Dados.Q_funcionario.Post;

end;   //  porque este END está aqui ?

PanGrid.BringToFront;

PanBotoes.Enabled := True;

Limpa;

end;

Veja se encontra onde está este comando

F_Dados.Q_funcionario.Edit;

ou

F_Dados.Q_funcionario.Insert;

OBS: Preste mais atenção no seu código .... voce está comentendo erros primários

abraço

Link para o comentário
Compartilhar em outros sites

  • 0
quando clico no botão confirmar para salvar os dados, recebo a mensagem

Dataset not in edit or insert mode

DataSet não está no modo Edit ou modo Insert

Procedure TF_Funcinario.confirmarClick(Sender:TObject);
begin
   if confira <> 3 then begin
      grava;  //  Se nesta procedure não estiver Editando ou Inserindo este erro acontece

   F_Dados.Q_funcionario.Post;

end;   //  porque este END está aqui ?

PanGrid.BringToFront;

PanBotoes.Enabled := True;

Limpa;

end;

Veja se encontra onde está este comando

F_Dados.Q_funcionario.Edit;

ou

F_Dados.Q_funcionario.Insert;

OBS: Preste mais atenção no seu código .... voce está comentendo erros primários

abraço

Caro Jhonas,

obrigado pelo toque quanto a prestar atenção nas minhas syntaxes vou ficar mais atento. O erro esta

porque eu coloquei .append e era .insert.

No entanto quando fui corrigir a syntaxe abaixo:

DM.Q_Funcionarios.Active := False;

DM.Q_Funcionarios.SQL.Clear;

DM.Q_Funcionarios.SQL.Add('INSERT INTO FUNCIONARIO (CODESPECIALIDADE, NOME, ENDERECO)');

DM.Q_Funcionarios.SQL.Add('VALUES (:CODESPECIALIDADE, :nome, :endereco)');

DM.Q_Funcionarios.ParamByName('codespecialidade').AsInteger := StrToInt(edtcodespecialidade.Text);

DM.Q_Funcionarios.ParamByName('nome').AsString := edtNome.Text;

DM.Q_Funcionarios.ParamByName('endereco').AsString := edtEndereco.Text;

DM.Q_Funcionarios.ExecSQL;

DM.Q_Funcionarios.Active := TRUE;

esta linha de comando estava escrita desta forma:

//DM.Q_Funcionarios.Active := TRUE;

como sabe ela não tem função desta forma, deletei-a e ainda sim continuou aparecendo a mensagem de erro:

'Q_Funcionarios: Cursor not retorned from Query"

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

  • 0

'Q_Funcionarios: Cursor not retorned from Query"

Cursor não retornado para Query

Procure não usar SQL.Add e sim SQL.Append

DM.Q_Funcionarios.Active := False;
DM.Q_Funcionarios.SQL.Clear;
DM.Q_Funcionarios.SQL.Append('INSERT INTO FUNCIONARIO (CODESPECIALIDADE, NOME, ENDERECO)');
DM.Q_Funcionarios.SQL.Append('VALUES (:CODESPECIALIDADE, :nome, :endereco)');
DM.Q_Funcionarios.ParamByName('codespecialidade').AsInteger := StrToInt(edtcodespecialidade.Text);
DM.Q_Funcionarios.ParamByName('nome').AsString := edtNome.Text;
DM.Q_Funcionarios.ParamByName('endereco').AsString := edtEndereco.Text;
DM.Q_Funcionarios.ExecSQL;

Os exemplos que te passei funcionam e é para voce comparar com o seu código ... não tente adivinhar ...leia mais sobre o assunto, procure na net, teste, modifique, teste novamente ... até chegar ao resultado esperado... quando esquentar demais a cabeça ... pare , apague tudo e faça novamente do início... voce sempre chega a solução

Meu lema : Leitura, Teste, Leitura , modificação, Teste ... até conseguir .. rs

A prática leva a perfeição.

abraço

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,4k
×
×
  • Criar Novo...