Botao Novo e Editar nao funciona com Query

06/08/2009

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;

Curtidas 0

Respostas

Rodrigo Mourão

Rodrigo Mourão

06/08/2009

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!!!

GOSTEI 0
Fistsoft-sistemas Empresarial-ltda;

Fistsoft-sistemas Empresarial-ltda;

06/08/2009

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
GOSTEI 0
Rodrigo Mourão

Rodrigo Mourão

06/08/2009

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!
 





GOSTEI 0
Fistsoft-sistemas Empresarial-ltda;

Fistsoft-sistemas Empresarial-ltda;

06/08/2009

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  
GOSTEI 0
Fistsoft-sistemas Empresarial-ltda;

Fistsoft-sistemas Empresarial-ltda;

06/08/2009

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  
GOSTEI 0
Fistsoft-sistemas Empresarial-ltda;

Fistsoft-sistemas Empresarial-ltda;

06/08/2009

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  
GOSTEI 0
Fistsoft-sistemas Empresarial-ltda;

Fistsoft-sistemas Empresarial-ltda;

06/08/2009

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  
GOSTEI 0
Fistsoft-sistemas Empresarial-ltda;

Fistsoft-sistemas Empresarial-ltda;

06/08/2009

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  
GOSTEI 0
Fistsoft-sistemas Empresarial-ltda;

Fistsoft-sistemas Empresarial-ltda;

06/08/2009

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  
GOSTEI 0
Fistsoft-sistemas Empresarial-ltda;

Fistsoft-sistemas Empresarial-ltda;

06/08/2009

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  
GOSTEI 0
Rodrigo Mourão

Rodrigo Mourão

06/08/2009

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

GOSTEI 0
Fistsoft-sistemas Empresarial-ltda;

Fistsoft-sistemas Empresarial-ltda;

06/08/2009

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? 
GOSTEI 0
Fistsoft-sistemas Empresarial-ltda;

Fistsoft-sistemas Empresarial-ltda;

06/08/2009

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
GOSTEI 0
Rodrigo Mourão

Rodrigo Mourão

06/08/2009

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 !
GOSTEI 0
Fistsoft-sistemas Empresarial-ltda;

Fistsoft-sistemas Empresarial-ltda;

06/08/2009

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
GOSTEI 0
Rodrigo Mourão

Rodrigo Mourão

06/08/2009

Bem amigo vc tem que de alguma maneira identificar o registro que vc quer atualizar, se vc nao tem ID vc identifica o registro como ?  Pelo nome ?

Se e pelo nome, que eu acho muito perigoso pois podem ter nomes iguais, entao vc faria.


Update tabela set campo = valor, campo = valor, campo = valor where nome = EditComNome->text;


Vc tem que identificar o registro por um campo se vai ser ID ou nao isso fica por conta de como vc trabalha, se vc nao tem ID entao usa outro campo.

Abs!!


GOSTEI 0
Fistsoft-sistemas Empresarial-ltda;

Fistsoft-sistemas Empresarial-ltda;

06/08/2009

é porque tipo eu tenho o ID na tabela mas no cadastro nao coloco o campo ID pq se colocar o usuario tera que colocar o numero do ID sempre que for cadastrar e pra mim isso nao é viavel pq nem sempre ele vai saber em qual ID parou entao nao deixo o campo ID no formulario de cadastro so no banco de dados mesmo uso o auto incremento entao dessa forma acredito eu se eu der um where no ID ira dar erro pq nao tenho ele no formulario de cadastro entao gostaria de saber como faria
GOSTEI 0
Fistsoft-sistemas Empresarial-ltda;

Fistsoft-sistemas Empresarial-ltda;

06/08/2009

olha este é meu comando insert como ja havida te mostrado $DMPrincipal->DBConexao->execute("Insert Into cad_usuario (nome, usuario, senha, email) Values ('"
         . $this->EditNome->Text . "','"
         . $this->EditUsuario->Text . "','"
         . $this->EditSenha->Text . "','"
         . $this->EditEmail->Text . "')");   quero que vc converta para mim isso em Update com aspas e tudo para eu poder fazer segue abaixo a imagem de meu cadastro de usuário aguardo obrigado
GOSTEI 0
Rodrigo Mourão

Rodrigo Mourão

06/08/2009

Olá Amigo,

O fato de seu campo ID ser auto incremento eu entendo, mas vc não precisa trazer um campo e mostrá-lo na tela. Mas quando você está atualizando o ID já existe, então o que se faz e trazer o ID mas não mostar.

Não se trata se de transformar o insert em update. Você ainda não entendeu. Me diga como eu vou gerar o update do registro se nao tenho como identificá-lo ???

Não adiante fazer isso:

$DMPrincipal->DBConexao->execute("update cad_usuario set
                                                             nome = ' ".$this->EditNome->Text." ' ,
                                                             usuario = ' ".$this->EditUsuario->Text." ' ,
                                                             senha = ' ".$this->EditSenha->Text." ' ,
                                                             email = ' ".$this->EditEmail->Text." ' ");
    

Se você fizer isso, vai atualizar todos os usuario e colocar o mesmo nome, usuario, senha e email para todo mundo. Entao tem que ter uma clausula where, ou seja, update cad_usuario set bla bla bla where alguma coisa = a outra coisa.

Neste caso teria que ser where ID = 1 ou  = 2. Nem por nome vai funcionar pois quando vc apertar o botão vc ja vai ter trocado o nome do usuario, por isso se usa o ID pois vc pode atualizar todos os campos mas o ID nao muda, e ja que ele nao muda usamos ele no update.

Enfim, sei ID no update eu nao sei como fazer, nao vejo como.

Att,
GOSTEI 0
Fistsoft-sistemas Empresarial-ltda;

Fistsoft-sistemas Empresarial-ltda;

06/08/2009

ja consegui
GOSTEI 0
POSTAR