SQLSTATE[42000]: Syntax error or access violation: 1064 You have Bom dia! Sou acadêmico de Análise e Desenvolvimento de Sistemas, estou criando um projeto para apresentação na faculdade e estou com a seguinte dificuldade: Após inserir os dados em um formulário de cadastro de cliente e tentar gravar esses dados no banco (mysql) estou me deparando com o seguinte erro: "SQLSTATE[42000]: Syntax error or access violation: 1064 You have an error in your S...
ML
SQLSTATE[42000]: Syntax error or access violation: 1064 You have  
Fechado
Bom dia!

Sou acadêmico de Análise e Desenvolvimento de Sistemas, estou criando um projeto para apresentação na faculdade e estou com a seguinte dificuldade:

Após inserir os dados em um formulário de cadastro de cliente e tentar gravar esses dados no banco (mysql) estou me deparando com o seguinte erro: "SQLSTATE[42000]: Syntax error or access violation: 1064 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 '' at line 1".

Classe criada na pasta model:
 
  1. <?php
  2. class Cliente extends TRecord
  3. {
  4. const TABLEENAME = 'tbcliente';
  5. const PRIMARYKEY = 'id_cliente';
  6. const IDPOLICY = 'max';
  7. public function __construct(1583 = NULL)
  8. {
  9. parent::addAttribute('nome_cliente');
  10. parent::addAttribute('telefone');
  11. parent::addAttribute('endereco_cliente');
  12. parent::addAttribute('ponto_ref');
  13. parent::addAttribute('data_nasc_cliente');
  14. }
  15. }
  16. ?>


Classe criada na pasta control:
 
  1. <?php
  2. class ClienteForm extends TPage
  3. {
  4. private $form;
  5. public function __construct()
  6. {
  7. parent::__construct();
  8. $this->form = new TQuickForm('form_cliente');
  9. $this->form->setFormTitle('Cadastro de Clientes');
  10. $this->form->class = 'tform';
  11. $this->form->style = 'width: 500px';
  12. 1583_cliente = new TEntry('id_cliente');
  13. $nome_cliente = new TEntry('nome_cliente');
  14. $tel_cliente = new TEntry('tel_cliente');
  15. $ponto_ref = new TEntry('ponto_ref');
  16. $data_nasc_cliente = new TDate('data_nasc_cliente');
  17. 1583_cliente->setEditable(FALSE);
  18. $this->form->addQuickField('ID Cliente', 1583_cliente, 25);
  19. $this->form->addQuickField('Nome', $nome_cliente, 200);
  20. $this->form->addQuickField('Telefone', $tel_cliente, 75);
  21. $this->form->addQuickField('Referência', $ponto_ref, 100);
  22. $this->form->addQuickField('Data de Nascimento', $data_nasc_cliente, 50);
  23. $save = new TAction( array($this, 'onSave') );
  24. $this->form->addQuickAction('Salvar', $save, 'ico_save.png');
  25. parent::add($this->form);
  26. }
  27. public function onSave()
  28. {
  29. try
  30. {
  31. TTransaction::open('conectabd');
  32. $object = $this->form->getData('Cliente');
  33. $object->store();
  34. $this->form->setData( $object );
  35. new TMessage('info', 'Registro adicionado com sucesso!');
  36. TTransaction::close();
  37. }
  38. catch (Exception $e)
  39. {
  40. new TMessage('error', $e->getMessage());
  41. TTransaction::rollback();
  42. }
  43. }
  44. }
  45. ?>


E no topo do form aparece: Warning: constant(): Couldn't find constant Cliente::TABLENAME in C:xampphtdocsMisterCheflibadiantidatabaseTRecord.php on line 201".

Dentro desse diretório não existe o arquivo TRecord.php.

Ao testar a conexão com o banco através do botão Database Connections do Adianti Studio é exibida a msg de sucesso da conexão com o banco.







Curso Dominando o Adianti Framework

O material mais completo de treinamento do Framework.
Curso em vídeo aulas + Livro completo + Códigos fontes do projeto ERPHouse.
Conteúdo Atualizado!


Dominando o Adianti Framework Quero me inscrever agora!

Comentários (12)


MG

Dá uma olhada na classe cliente. A constante TABLENAME está declarada de forma errada. Está TABLEENAME (com 2 "Es").
Corrija e tente novamente.
ML

Fiz a correção que você solicitou e ao tentar gravar no banco apareceu essa mensagem: 'SQLSTATE[42S02]: Base table or view not found: 1146 Table 'misterchefdb.tbcliente' doesn't exist'.

Mesmo testando a conexão com o banco através do botão Database Connections do adianti studio, é possível que a aplicação esteja rodando sem conseguir conectar no banco?

No banco essa tabela existe com o nome: tbclientes.

FC

 
  1. <?php
  2. class Cliente extends TRecord
  3. {
  4. const TABLENAME = 'tbclientes';
  5. const PRIMARYKEY = 'id_cliente';
  6. const IDPOLICY = 'max';
  7. public function __construct($id = NULL)
  8. {
  9. parent::addAttribute('nome_cliente');
  10. parent::addAttribute('telefone');
  11. parent::addAttribute('endereco_cliente');
  12. parent::addAttribute('ponto_ref');
  13. parent::addAttribute('data_nasc_cliente');
  14. }
  15. }
  16. ?>
MG

Seria possível postar o arquivo de conexão (.ini) e uma imagem do BD (tabela)?
Eu acredito que possa ser conexão ou BD.
Posta pra gente analisar.
ML

Segue o arquivo conectabd.ini

host = 'localhost'
name = 'misterchefdb'
user = 'root'
pass = ''
type = 'mysql'

Quanto a imagem da tabela, não vi onde e como inserir a imagem, segue o comando SQL:

CREATE TABLE `misterchedb`.`tbclientes` ( `id_cliente` INT NOT NULL , `nome_cliente` VARCHAR(100) NOT NULL , `tel_cliente` VARCHAR(20) NOT NULL , `endereco_cliente` VARCHAR(100) NOT NULL , `ponto_ref` VARCHAR(100) NOT NULL , `data_nasc_cliente` DATE NOT NULL , PRIMARY KEY (`id_cliente`(4))) ENGINE = InnoDB;

Vlw.
ML

Segue comando correto:

CREATE TABLE `misterchefdb`.`tbclientes` ( `id_cliente` INT NOT NULL , `nome_cliente` VARCHAR(100) NOT NULL , `tel_cliente` VARCHAR(20) NOT NULL , `endereco_cliente` VARCHAR(100) NOT NULL , `ponto_ref` VARCHAR(100) NOT NULL , `data_nasc_cliente` DATE NOT NULL , PRIMARY KEY (`id_cliente`(4))) ENGINE = InnoDB;
ML

Felipe,

Segui suas orientações, porém o problema persisti.

vlw.
FC

Qual é a mensagem de erro?
ML

'SQLSTATE[42S02]: Base table or view not found: 1146 Table 'misterchefdb.tbcliente' doesn't exist'.
FC

Erro de conexão ou não existe o banco ou tabela ou o nome da mesma está errado no model
PD

Você criou a tabela no plural:
CREATE TABLE `misterchefdb`.`tbclientes`

Mas na hora de usar, indicou o singular:
const TABLEENAME = 'tbcliente';

Não existe problema, a mensagem de erro está correta.

Att,
ML

Pablo,

Boa tarde,

Alteração aplicada, questão resolvida.

Obrigado à todos que dispuseram de tempo para me orientar para correção do meu erro.

Atc,

Marcelo Bandeira