Fórum Botao Novo e Editar nao funciona com Query #8362

06/08/2009

0

ola como ja viu nos outros posts sao todos sobre o projeto que estou desenvolvendo
estou com a revista clube delphi edição 88 ano 7
e no sistema de noticias da revista tem os botoes NOVO ALTERAR GRAVAR CANCELAR DELETAR E VOLTAR
no botao NOVO ele usa o segundo comando
global $UDados;
$UDados->tabela->Filter="id_instituicao=0";
$UDados->tabela->refresh();
$UDados->tabela->append();
$this->btnGravar->Tag=1; botao ALTERAR
global $UDados;
$UDados->tabela->Edit();
$this->btnGravar->Tag=2; botao GRAVAR
global $UDados;
$UDados->tabela->post();
if ($this->btnGravar->tag==1)
{
      $UDados->tabela->Filter="id_instituicao=".mysql_insert_id();
      $UDados->tabela->refresh();
}
pelo que entendi esse if é para inserir um novo id se estiver inserindo um novo objeto, e se no caso a tag do btnGravar nao for 1 ele nao vai inserir o id pq a tabela estara em edicao olha como estao meus comandos
function btnAlterarClick($sender, $params)
   {
      global $DMPrincipal;
      $DMPrincipal->QRCad_Rep->edit();
      $this->btnNovo->Enabled = false;
      $this->btnAlterar->Enabled = false;
      $this->btnGravar->Enabled = true;
      $this->btnCancelar->Enabled = true;
      $this->btnExcluir->Enabled = true;
      $this->btnPesquisar->Enabled = false;
   } function btnGravarClick($sender, $params)
   {
      global $DMPrincipal;
      $DMPrincipal->QRCad_Rep->close();
      $DMPrincipal->QRCad_Rep->SQL = "Insert Into cad_rep (nome, email, uf, cidade, fone1, fone2, cel) Values ('" . $this->nome->Text . "','"
         . $this->email->Text . "','"
         . $this->cbestado->ItemIndex . "','"
         . $this->cidade->Text . "','"
         . $this->fone1->Text . "','"
         . $this->fone2->Text . "','"
         . $this->cel->Text . "')";
         $DMPrincipal->QRCad_Rep->Prepare();
         $DMPrincipal->QRCad_Rep->open();
      $this->nome->Text = null;
      $this->email->Text = null;
      $this->cidade->Text = null;
      $this->fone1->Text = null;
      $this->fone2->Text = null;
      $this->cel->Text = null;
      $this->btnNovo->Enabled = true;
      $this->btnAlterar->Enabled = false;
      $this->btnGravar->Enabled = false;
      $this->btnCancelar->Enabled = false;
      $this->btnExcluir->Enabled = false;
      $this->btnPesquisar->Enabled = true;
   } gostaria de saber como eu faria esse comando para quando o cliente clicasse em alterar ele alterasse normalmente pq deste modo ele nao altera e aparece o seguinte erro Application raised an exception class ADODB_Exception with message 'postgres7 error: [-1: ERRO:  erro de sintaxe em ou próximo a "where"
LINE 1: ...nekernba@yahoo.com.br','SP','mirassol','','','')  where id_r...
                                                             ^] in EXECUTE("Insert Into cad_rep (nome, email, uf, cidade, fone1, fone2, cel) Values ('andrea','linekernba@yahoo.com.br','SP','mirassol','','','')  where id_rep=1   ")
'
Click for detailed information
Fistsoft-sistemas Empresarial-ltda;

Fistsoft-sistemas Empresarial-ltda;

Responder

Posts

06/08/2009

Rodrigo Mourão

Olá Amigo,

Bem de cara dar pra ver que seu codigo esta com problema olha o comando insert que foi gerado:

Insert Into cad_rep (nome, email, uf, cidade, fone1, fone2, cel) Values
('andrea','linekernba@yahoo.com.br','SP','mirassol','','','')  where id_rep=1 


Nao existe clausula where em insert. Outra coisa que me chama atencao é: voce diz que gostaria que quando o usuairo clicasse em gravar ele alterasse normalmente mas vc esta dando um comando de insert ?

Outra coisa o que o Fabricio faz no artigo e o seguinte ele coloca a tabela em edicao e coloca a tag do botao como 2. Isso e pra que ? Bem quando pressionar o gravar vc vai inserir ou editar ?

Entao se o tag for 1 insere se for 2  atualiza. NAo estou vendo isso no seu codigo, onde vc faz este check ?

Bem sugiro que releia o artigo pois deve ter pulado alguma parte.. 

Abs!!!

Responder

Gostei + 0

06/08/2009

Fistsoft-sistemas Empresarial-ltda;

nao e que pulei parte é que ele trabalha com table e eu trabalho com query e o modo de edição é diferente veja o que ele faz quando a Tag é igual a 1 ou seja inserção ele da um mysql_insert_id(); ele faz isso pq quando clica em novo ele zera o id entao usa o codigo pra gerar o id eu trabalha com postgre e ele com mysql como eu faria esse comando mysql_insert_id(); em postgre? se vc me falar como faço talvez de certo eu usar as tags
Responder

Gostei + 0

06/08/2009

Rodrigo Mourão

Olá Amigo,  vamos lá.

Se vc não pulou parte nunhuma então parece que não entendeu o que ele fez.

Usar o tag não tem nada haver como MySql_insert_id ou mysql.  É simplesmenta para saber o que fazer quando clicar em gravar. Outro detalhe está no lance de setar o id para zero, ele sé fez isso para abrir a tabela e não retornar nada, registro nenhum para poder aumentar a performance. Isso pode ser feito setando a propriedade LimitCount da Table (no seu caso da Query que funciona igual).

Me responde uma coisa quando o usuario apertar o seu botão gravar como vc vai saber se tem que inserir ou atualizar?

Usar a tag é apenas uma dica vc pode fazer com GET, Post, Session ou o que melhor lhe convir e isso nada tem haver com o Mysql ou outro banco qualquer.

E como falei no post abaixo o erro está na instrução insert que vc está montando.

Observe a mensagem de erro que o PHP está reportando:

ERRO:  erro de sintaxe em ou próximo a "where"
LINE 1: ...nekernba@yahoo.com.br','SP','mirassol','','','')  where id_r...
                                                             ^] in EXECUTE("Insert Into cad_rep (nome, email, uf, cidade, fone1, fone2, cel) Values ('andrea','linekernba@yahoo.com.br','SP','mirassol','','','')  where id_rep=1 ")Observe o comando isolado: Insert Into cad_rep (nome, email, uf, cidade, fone1, fone2, cel) Values ('andrea','linekernba@yahoo.com.br','SP','mirassol','','','')  where id_rep=1
Bem, em algum momento o where id_rep=1 esta sendo incluido no seu insert, isso pode acontecer quando e inserido um filter na query.Faça o seguinte use o metodo execute() do componente Database. Assim Seu codigo ficaria assim:function btnGravarClick($sender, $params)
   {
      global $DMPrincipal;
     
      $DMPrincipal->DataBasse->execute("Insert Into cad_rep (nome, email, uf, cidade, fone1, fone2, cel) Values ('" . $this->nome->Text . "','"
         . $this->email->Text . "','"
         . $this->cbestado->ItemIndex . "','"
         . $this->cidade->Text . "','"
         . $this->fone1->Text . "','"
         . $this->fone2->Text . "','"
         . $this->cel->Text . "')");
      
      $this->nome->Text = null;
      $this->email->Text = null;
      $this->cidade->Text = null;
      $this->fone1->Text = null;
      $this->fone2->Text = null;
      $this->cel->Text = null;
      $this->btnNovo->Enabled = true;
      $this->btnAlterar->Enabled = false;
      $this->btnGravar->Enabled = false;
      $this->btnCancelar->Enabled = false;
      $this->btnExcluir->Enabled = false;
      $this->btnPesquisar->Enabled = true;
   }Este metodo manda o comando direto para o banco sem passar por nada, isso e mais rapido, pratico e seguro. Ele funciona com insert, delete e update.Espero ter ajudado.
Abs!
 





Responder

Gostei + 0

07/08/2009

Fistsoft-sistemas Empresarial-ltda;

a blz obrigado funcionou esta gravando certinho agora queria saber como seria o update estou usando tag 1 para insert e tag 2 para update olha meu comando   function btnGravarClick($sender, $params)
   {
      global $DMPrincipal;       If($this->btnGravar->tag == 1)
      {
         $DMPrincipal->DBConexao->execute("Insert Into cad_usuario (nome, usuario, senha, email) Values ('"
         . $this->EditNome->Text . "','"
         . $this->EditUsuario->Text . "','"
         . $this->EditSenha->Text . "','"
         . $this->EditEmail->Text . "')");
      }
      else
         if($this->btnGravar->Tag == 2)
         {
            $DMPrincipal->DBConexao->execute("Update cad_usuario set (nome, usuario, senha, email) Values ('"
            . $this->EditNome->Text . "','"
            . $this->EditUsuario->Text . "','"
            . $this->EditSenha->Text . "','"
            . $this->EditEmail->Text . "')");
         }

   }   o update seria como? eu fiz deste modo e nao deu certo  
Responder

Gostei + 0

07/08/2009

Fistsoft-sistemas Empresarial-ltda;

a blz obrigado funcionou esta gravando certinho agora queria saber como seria o update estou usando tag 1 para insert e tag 2 para update olha meu comando   function btnGravarClick($sender, $params)
   {
      global $DMPrincipal;       If($this->btnGravar->tag == 1)
      {
         $DMPrincipal->DBConexao->execute("Insert Into cad_usuario (nome, usuario, senha, email) Values ('"
         . $this->EditNome->Text . "','"
         . $this->EditUsuario->Text . "','"
         . $this->EditSenha->Text . "','"
         . $this->EditEmail->Text . "')");
      }
      else
         if($this->btnGravar->Tag == 2)
         {
            $DMPrincipal->DBConexao->execute("Update cad_usuario set (nome, usuario, senha, email) Values ('"
            . $this->EditNome->Text . "','"
            . $this->EditUsuario->Text . "','"
            . $this->EditSenha->Text . "','"
            . $this->EditEmail->Text . "')");
         }

   }   o update seria como? eu fiz deste modo e nao deu certo aprece  
Responder

Gostei + 0

07/08/2009

Fistsoft-sistemas Empresarial-ltda;

a blz obrigado funcionou esta gravando certinho agora queria saber como seria o update estou usando tag 1 para insert e tag 2 para update olha meu comando   function btnGravarClick($sender, $params)
   {
      global $DMPrincipal;       If($this->btnGravar->tag == 1)
      {
         $DMPrincipal->DBConexao->execute("Insert Into cad_usuario (nome, usuario, senha, email) Values ('"
         . $this->EditNome->Text . "','"
         . $this->EditUsuario->Text . "','"
         . $this->EditSenha->Text . "','"
         . $this->EditEmail->Text . "')");
      }
      else
         if($this->btnGravar->Tag == 2)
         {
            $DMPrincipal->DBConexao->execute("Update cad_usuario set (nome, usuario, senha, email) Values ('"
            . $this->EditNome->Text . "','"
            . $this->EditUsuario->Text . "','"
            . $this->EditSenha->Text . "','"
            . $this->EditEmail->Text . "')");
         }

   }   o update seria como? eu fiz deste modo e nao deu certo aparece  
Responder

Gostei + 0

07/08/2009

Fistsoft-sistemas Empresarial-ltda;

a blz obrigado funcionou esta gravando certinho agora queria saber como seria o update estou usando tag 1 para insert e tag 2 para update olha meu comando   function btnGravarClick($sender, $params)
   {
      global $DMPrincipal;       If($this->btnGravar->tag == 1)
      {
         $DMPrincipal->DBConexao->execute("Insert Into cad_usuario (nome, usuario, senha, email) Values ('"
         . $this->EditNome->Text . "','"
         . $this->EditUsuario->Text . "','"
         . $this->EditSenha->Text . "','"
         . $this->EditEmail->Text . "')");
      }
      else
         if($this->btnGravar->Tag == 2)
         {
            $DMPrincipal->DBConexao->execute("Update cad_usuario set (nome, usuario, senha, email) Values ('"
            . $this->EditNome->Text . "','"
            . $this->EditUsuario->Text . "','"
            . $this->EditSenha->Text . "','"
            . $this->EditEmail->Text . "')");
         }

   }   o update seria como? eu fiz deste modo e nao deu certo aparece o  
Responder

Gostei + 0

07/08/2009

Fistsoft-sistemas Empresarial-ltda;

a blz obrigado funcionou esta gravando certinho agora queria saber como seria o update estou usando tag 1 para insert e tag 2 para update olha meu comando   function btnGravarClick($sender, $params)
   {
      global $DMPrincipal;       If($this->btnGravar->tag == 1)
      {
         $DMPrincipal->DBConexao->execute("Insert Into cad_usuario (nome, usuario, senha, email) Values ('"
         . $this->EditNome->Text . "','"
         . $this->EditUsuario->Text . "','"
         . $this->EditSenha->Text . "','"
         . $this->EditEmail->Text . "')");
      }
      else
         if($this->btnGravar->Tag == 2)
         {
            $DMPrincipal->DBConexao->execute("Update cad_usuario set (nome, usuario, senha, email) Values ('"
            . $this->EditNome->Text . "','"
            . $this->EditUsuario->Text . "','"
            . $this->EditSenha->Text . "','"
            . $this->EditEmail->Text . "')");
         }

   }   o update seria como? eu fiz deste modo e nao deu certo aparece o seguinte  
Responder

Gostei + 0

07/08/2009

Fistsoft-sistemas Empresarial-ltda;

a blz obrigado funcionou esta gravando certinho agora queria saber como seria o update estou usando tag 1 para insert e tag 2 para update olha meu comando   function btnGravarClick($sender, $params)
   {
      global $DMPrincipal;       If($this->btnGravar->tag == 1)
      {
         $DMPrincipal->DBConexao->execute("Insert Into cad_usuario (nome, usuario, senha, email) Values ('"
         . $this->EditNome->Text . "','"
         . $this->EditUsuario->Text . "','"
         . $this->EditSenha->Text . "','"
         . $this->EditEmail->Text . "')");
      }
      else
         if($this->btnGravar->Tag == 2)
         {
            $DMPrincipal->DBConexao->execute("Update cad_usuario set (nome, usuario, senha, email) Values ('"
            . $this->EditNome->Text . "','"
            . $this->EditUsuario->Text . "','"
            . $this->EditSenha->Text . "','"
            . $this->EditEmail->Text . "')");
         }

   }   o update seria como? eu fiz deste modo e nao deu certo aparece o seguinte erro  
Responder

Gostei + 0

07/08/2009

Fistsoft-sistemas Empresarial-ltda;

a blz obrigado funcionou esta gravando certinho agora queria saber como seria o update estou usando tag 1 para insert e tag 2 para update olha meu comando   function btnGravarClick($sender, $params)
   {
      global $DMPrincipal;       If($this->btnGravar->tag == 1)
      {
         $DMPrincipal->DBConexao->execute("Insert Into cad_usuario (nome, usuario, senha, email) Values ('"
         . $this->EditNome->Text . "','"
         . $this->EditUsuario->Text . "','"
         . $this->EditSenha->Text . "','"
         . $this->EditEmail->Text . "')");
      }
      else
         if($this->btnGravar->Tag == 2)
         {
            $DMPrincipal->DBConexao->execute("Update cad_usuario set (nome, usuario, senha, email) Values ('"
            . $this->EditNome->Text . "','"
            . $this->EditUsuario->Text . "','"
            . $this->EditSenha->Text . "','"
            . $this->EditEmail->Text . "')");
         }

   }   o update seria como? eu fiz deste modo e nao deu certo aparece o seguinte erro Application raised an exception class ADODB_Exception with message 'postgres7 error: [-1: ERRO:  erro de sintaxe em ou próximo a "Values"
LINE 1: ...ate cad_usuario set (nome, usuario, senha, email) Values ('L...
                                                             ^] in EXECUTE("Update cad_usuario set (nome, usuario, senha, email) Values ('Lineker Pablo da Silva','Lineker','13091990','web_designer@fistsoft.com.br')")
'
Click for detailed information  
Responder

Gostei + 0

07/08/2009

Rodrigo Mourão

Olá amigo seu codigo esta correto tanto para atualizar quanto para inserir. O problrma parece estar novamente na hora de montar o comando. Oberserv a mensagem do erro:

EXECUTE("Update cad_usuario set (nome, usuario, senha, email) Values ('Lineker Pablo da Silva','Lineker','13091990','web_designer@fistsoft.com.br')")
.

A sintaxe do comando update oa e assim nao se faz update tabel (campo, campo, campo) values (valor, valor, valor).

Um comando update se faz assim  update tabela set campo=valor, campo=valor, campo=valor where codigo=x;

Esta e a sintaxe correta.

Atenciosamente,
Rodrigo Carreiro Mourão
Borland Instructor Certified
Coordenador da Consultoria em Delphi

Responder

Gostei + 0

07/08/2009

Fistsoft-sistemas Empresarial-ltda;

ham ok fiz meu codigo assim ele tipo nao da erro nenhum so q nao atualiza na minha tabela function btnGravarClick($sender, $params)
   {
      global $DMPrincipal;       If($this->btnGravar->tag == 1)
      {
         $DMPrincipal->DBConexao->execute("Insert Into cad_usuario (nome, usuario, senha, email) Values ('"
         . $this->EditNome->Text . "','"
         . $this->EditUsuario->Text . "','"
         . $this->EditSenha->Text . "','"
         . $this->EditEmail->Text . "')");
      }
      else
         if($this->btnGravar->Tag == 2)
         {
            $DMPrincipal->DBConexao->execute("update cad_usuario set nome='"
            . $this->EditNome->Text . "', usuario='"
            . $this->EditUsuario->Text . "', senha='"
            . $this->EditSenha->Text . "', email='"
            . $this->EditEmail->Text . "'");
         }
aonde estou errando? 
Responder

Gostei + 0

07/08/2009

Fistsoft-sistemas Empresarial-ltda;

da erro sim nao tinha dado erro pq minhas tag estavam comentadas ai tirei o comentario e aparece o seguinte erro Application raised an exception class ADODB_Exception with message 'postgres7 error: [-1: ERRO:  duplicar valor da chave viola a restrição de unicidade "cad_usuario_usuario_key"] in EXECUTE("update cad_usuario set nome='Lineker Pablo da Silva', usuario='Lineker', senha='13091990', email='web_designer@fistsoft.com.br'")
'
Click for detailed information   e se eu coloco o where assim   function btnGravarClick($sender, $params)
   {
      global $DMPrincipal;       If($this->btnGravar->tag == 1)
      {
         $DMPrincipal->DBConexao->execute("Insert Into cad_usuario (nome, usuario, senha, email) Values ('"
         . $this->EditNome->Text . "','"
         . $this->EditUsuario->Text . "','"
         . $this->EditSenha->Text . "','"
         . $this->EditEmail->Text . "')");
      }
      else
         if($this->btnGravar->Tag == 2)
         {
            $DMPrincipal->DBConexao->execute("update cad_usuario set nome='"
            . $this->EditNome->Text . "', usuario='"
            . $this->EditUsuario->Text . "', senha='"
            . $this->EditSenha->Text . "', email='"
            . $this->EditEmail->Text . "' where id_usu=");
         }
 aparece este erro Application raised an exception class ADODB_Exception with message 'postgres7 error: [-1: ERRO:  erro de sintaxe no fim da entrada
LINE 1: ... senha='13091990', email='web@fistsoft.com.br' where id_usu=
                                                                       ^] in EXECUTE("update cad_usuario set nome='Lineker Pablo da Silva', usuario='Lineker', senha='13091990', email='web@fistsoft.com.br' where id_usu=")
'
Click for detailed information
Responder

Gostei + 0

07/08/2009

Rodrigo Mourão

Eleandro vc esta tendo dificuldade em montar comandos SQL. Observe seu comando de update.
Esta sem o id do usuario que quer atualizar.


Parece que vc tem um pouco de dificuldades com SQL, o problema ai nao esta no PHP, esta na hora que vc monta a instrucao.

abs !
Responder

Gostei + 0

07/08/2009

Fistsoft-sistemas Empresarial-ltda;

certo vc falou de meu id mas em meu formulario nao tem o campo para colocar o id entao nao sei como faria para poder colocar meu id   se vc pudesse me falar como ficaria esse codigo pq as outras telas seriam todas iguais
Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar