Botao Novo e Editar nao funciona com Query
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;
Respostas
Rodrigo Mourão
06/08/2009
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!!!
Fistsoft-sistemas Empresarial-ltda;
06/08/2009
Rodrigo Mourão
06/08/2009
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!
Fistsoft-sistemas Empresarial-ltda;
06/08/2009
{
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
Fistsoft-sistemas Empresarial-ltda;
06/08/2009
{
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
Fistsoft-sistemas Empresarial-ltda;
06/08/2009
{
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
Fistsoft-sistemas Empresarial-ltda;
06/08/2009
{
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
Fistsoft-sistemas Empresarial-ltda;
06/08/2009
{
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
Fistsoft-sistemas Empresarial-ltda;
06/08/2009
{
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
Fistsoft-sistemas Empresarial-ltda;
06/08/2009
{
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
Rodrigo Mourão
06/08/2009
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
Fistsoft-sistemas Empresarial-ltda;
06/08/2009
{
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?
Fistsoft-sistemas Empresarial-ltda;
06/08/2009
'
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
Rodrigo Mourão
06/08/2009
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 !
Fistsoft-sistemas Empresarial-ltda;
06/08/2009
Rodrigo Mourão
06/08/2009
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!!
Fistsoft-sistemas Empresarial-ltda;
06/08/2009
Fistsoft-sistemas Empresarial-ltda;
06/08/2009
. $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
Rodrigo Mourão
06/08/2009
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,
Fistsoft-sistemas Empresarial-ltda;
06/08/2009