Clipper On Line • Ver Tópico - erro em INSERT no MySQL com Harbour e RDD
Mudar para estilo Clássico
Discussão sobre Banco de Dados e RDDs para Clipper/[x]Harbour.
Postar uma resposta

erro em INSERT no MySQL com Harbour e RDD

15 Jul 2015 13:41

Pessoal, estou recebendo de vez em quando o seguinte erro:

Código:
Erro: 42000 [MySQL][ODBC 3.51 Driver][mysqld-5.6.10-log]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 ''Acresci o PDF.' at line 1


O comando no qual deu erro desta vez foi:

Código:
INSERT INTO tarefas values ('N','N656','2010-07-15','2015-01-01',9,'Inacio','N','E','MP',15,0,0,' ','40610-35.2013','2015-07-14','09:39:23','Acresci o PDF.',' ','2000-01-01','2000-01-01')


Mas também ocorre com UPDATE com frequência.

O problema é que não consigo achar nenhum erro no comando acima (nem nos demais em que dá erro).

A estrutura da tabela está assim:

Código:
         cQuery:="CREATE TABLE tarefas ("+;
        "USUARIO char(1),"+;
         "NRTAREFA char(7),"+;
          "HREXIBE datetime,"+;
         "DTMAXIMA date,"+;
          "PRIORIDADE int,"+;
          "INCLUIDOR char(15),"+;
        "SOLUC char(1),"+;
        "EXIBE char(1),"+;
        "VINCULO char(20),"+;
        "TEMPOESTIM decimal(7,1),"+;
        "TEMPOUSADO decimal(7,1),"+;
        "TEMPOCOMPU decimal(7,1),"+;
        "CAMPO char(1),"+;
          "ASSUNTO char(30),"+;
        "DATA date,"+;
          "HORA char(8),"+;
          "TAREFA char(60),"+;
        "ATIND char(1),"+;
        "DTCARGA date,"+;
        "DTPREFER date)"


O pior é que o erro acontece apenas de vez em quando, aleatoriamente.

Não deve ser conexão, pois eu testo a conexão antes desse comando.

Alguém poderia me ajudar a achar esse erro?

erro em INSERT no MySQL com Harbour e RDD

15 Jul 2015 20:33

cade os campo no comando INSERT ?

erro em INSERT no MySQL com Harbour e RDD

16 Jul 2015 14:37

No caso dos nomes de campo no insert é opcional, mas nesse caso fica dependente da ordem exata da estrutura.
Só não lembro agora se vai o "VALUES" quando não se descrevem os campos, mas como disse que é só em alguns, é provável que esteja certo.

Essa linha com conteúdo é a que dá erro?
É uma pergunta idiota, mas é esse mesmo o conteúdo, ou apenas digitou aqui?

Faz diferença a CODEPAGE.
Tem letra que não é válida de uma codepage pra outra.
O nome "inacio" é sugestivo pra um erro desse tipo.
Lembrando que caracteres inválidos nem sempre são visíveis ao mostrar na tela, nem no bloco de notas.

Também data, se estiver vazia, depende do que estiver configurado no servidor, que não é o caso dessa linha.

Por último tamanho de campo, o que à primeira vista no comando está respeitando os tamanhos.

Por coincidência, tive um erro desses ontem, e era a planilha com conteúdo inválido.
Estava importando de Excel pra MySql.
O mais esquisito é que no select veio campo com conteúdo... "sfddsfddfc:\arquivos de programas\..."

erro em INSERT no MySQL com Harbour e RDD

16 Jul 2015 14:59

Só acrescentando:
Pra descobrir esse erro que tive, acabei acrescentando um hb_MemoWrit( "teste.txt", cComandoSQL ) no fonte.
Com isso, obtive o comando exato que gerou o último erro.

Convém depois criar uma rotina pra analisar esse txt, procurando caracteres inválidos.
Algo do tipo:

Código:
cTxt := MemoRead( "teste.txt" )
FOR nCont = 1 TO Len( cTxt )
   cLetra := Substr( cTxt, nCont, 1 )
   IF .NOT. cLetra $ "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"
      ? nCont, cLetra, Asc( cLetra ), Substr( cTxt, nCont - 10, 20 )
   ENDIF
NEXT

erro em INSERT no MySQL com Harbour e RDD

16 Jul 2015 15:35

Olá!

Creio que as considerações do Quintas são válidas mas, nenhum dos itens citados geraria um erro de sintaxe, como aponta a mensagem retornada pelo SGBD.

Penso que o problema realmente esteja no conteúdo dos campos. Verifique se tem algum campo contendo apóstrofe (Ex: "Caixa d'Água"). Isto pode quebrar a sentença SQL e gerar este tipo de erro.

erro em INSERT no MySQL com Harbour e RDD

16 Jul 2015 20:32

Já tive essa mensagem algumas vezes, por conter caractere inválido.
Isso de codepage é problemático.

E não adianta testar no HeidiSQL, porque ele já converte pra UTF8.

Tabela ascii do Harbour PTBR

tabelaascii.png


128 a 159 não existem.
Então... são caracteres inválidos para o MySQL, se considerar a mesma codepage.
Postar uma resposta