Duvidas com Stored Procedure no Delphi
Pessoal criei uma SP no banco(MySQL):
Código:
Nela tem uma mensagem, qdo eu executar essa minha SP no delphi essa mensagem é disparada no delphi caso a pessoa não preencha os dados?
Tô perguntando, pq no meu banco essa mensagem foi disparada qdo não insiro os dados ou cpf ou nome.
O que eu quero é saber como essa mensagem é disparado no meu delphi, no delphi to usando DBEXPRESS e o ZSQLStoredprod
faço as ligações certo, e no meu botão de inserir coloquei:
Tipo inseri normalmente, mais qdo eu deixo de preencher ou onome ou cpf, aquela mensagem não dispara.
COMO DISPARO ESSA MENSAGEM NO DELPHI?
Código:
DELIMITER // DROP PROCEDURE IF EXISTS `NomeCli_CPFCli` // CREATE PROCEDURE NomeCli_CPFCli(v_cod_cli INT, v_nome VARCHAR(60), v_cpf VARCHAR(20)) BEGIN IF ((v_nome != ) && (v_cpf != )) THEN INSERT INTO fisico (cod_cli,nome_cli,cpf_) VALUES (v_cod_cli, v_nome, v_cpf); ELSE SELECT NOME e CPF devem ser fornecidos para o cadastro! AS Msg; END IF; END// DELIMITER;
Nela tem uma mensagem, qdo eu executar essa minha SP no delphi essa mensagem é disparada no delphi caso a pessoa não preencha os dados?
Tô perguntando, pq no meu banco essa mensagem foi disparada qdo não insiro os dados ou cpf ou nome.
O que eu quero é saber como essa mensagem é disparado no meu delphi, no delphi to usando DBEXPRESS e o ZSQLStoredprod
faço as ligações certo, e no meu botão de inserir coloquei:
SQLStoredProc1.Close;
SQLStoredProc1.ParamByName(v_cod_cli).Value := dbedit1.Text;
SQLStoredProc1.ParamByName(v_nome).Value := dbedit2.Text;
SQLStoredProc1.ParamByName(v_cpf).Value := dbedit3.Text;
SQLStoredProc1.ExecProc;
Tipo inseri normalmente, mais qdo eu deixo de preencher ou onome ou cpf, aquela mensagem não dispara.
COMO DISPARO ESSA MENSAGEM NO DELPHI?
Gabrielscorpion
Curtidas 0
Respostas
Bruno Leandro
09/07/2012
Ola, eu dei uma pesquisada poderia tentar desta forma
ai no delphi
qualquer duvida estou a disposicao
DELIMITER // DROP PROCEDURE IF EXISTS `NomeCli_CPFCli` // CREATE PROCEDURE NomeCli_CPFCli(v_cod_cli INT, v_nome VARCHAR(60), v_cpf VARCHAR(20)) BEGIN DECLARE EXIT HANDLER FOR SQLSTATE 42000 SELECT NOME e CPF devem ser fornecidos para o cadastro!; IF ((v_nome != ) && (v_cpf != )) THEN INSERT INTO fisico (cod_cli,nome_cli,cpf_) VALUES (v_cod_cli, v_nome, v_cpf); ELSE CALL raise_error; END IF; END// DELIMITER;
ai no delphi
try SQLStoredProc1.Close; SQLStoredProc1.ParamByName(v_cod_cli).Value := dbedit1.Text; SQLStoredProc1.ParamByName(v_nome).Value := dbedit2.Text; SQLStoredProc1.ParamByName(v_cpf).Value := dbedit3.Text; SQLStoredProc1.ExecProc; except on E: Exception do ShowMessage(E.Message); end;
qualquer duvida estou a disposicao
GOSTEI 0
Deivison Melo
09/07/2012
Porquê não faz sua validação a nível de sistema, já que é uma validação simples e com isso vc nao precisaria ir no servidor de dados e voltar com a resposta (como está usando o banco vc precisará se comunicar com o banco e voltar para o front-end (sistema)).
Acho que ficaria mais simples (apenas uma sugestão)!!!
Boa sorte e bons códigos aí!!!
Acho que ficaria mais simples (apenas uma sugestão)!!!
Boa sorte e bons códigos aí!!!
GOSTEI 0
Gabrielscorpion
09/07/2012
Pois é amigo eu tentei dessa forma, inclusive tentei fazer a procedure com handlers desse jeito que passou, e mesmo assim não deve resultado diferente.
Tipo stored procedure aceita try e except no delphi? é que eu achava que num dava usar. Enfim...mesmo usando ou não não tipo sucesso aqui, ainda a mensagem não disparou. A SP não deixa inserir sem CPF ou NOME mais também não disparada a tal mensagem.
Tipo stored procedure aceita try e except no delphi? é que eu achava que num dava usar. Enfim...mesmo usando ou não não tipo sucesso aqui, ainda a mensagem não disparou. A SP não deixa inserir sem CPF ou NOME mais também não disparada a tal mensagem.
GOSTEI 0
Gabrielscorpion
09/07/2012
Porquê não faz sua validação a nível de sistema, já que é uma validação simples e com isso vc nao precisaria ir no servidor de dados e voltar com a resposta (como está usando o banco vc precisará se comunicar com o banco e voltar para o front-end (sistema)).
Acho que ficaria mais simples (apenas uma sugestão)!!!
Boa sorte e bons códigos aí!!!
Acho que ficaria mais simples (apenas uma sugestão)!!!
Boa sorte e bons códigos aí!!!
Entendi cara, mais o seguinte...isso aqui que coloquei é apenas um exemplo para entenderem melhor o que eu quero...no sistema é um pouco mais complexo. E eu tô preferindo fazer por banco de dados...pq meu sistema a maioria vai ser no banco de dados a programação atraves de SP,triggers e functions e também pq quero aprender como fazer o delphi disparar uma mensagem atraves de uma SP.
GOSTEI 0
Deivison Melo
09/07/2012
Entendo!!!
Vc tera que utilizar componentes que possam interagir com o seu componente ou dbexpress ou zeoslib mesmo (nisso vc está correto), agora vc deverá fazer sua codificação de forma que possa ter essa interação entre o sistema e o banco, é que aqui no trabalho não tenho como fazer um exemplo por não trabalharmos com delphi...
Vc tera que utilizar componentes que possam interagir com o seu componente ou dbexpress ou zeoslib mesmo (nisso vc está correto), agora vc deverá fazer sua codificação de forma que possa ter essa interação entre o sistema e o banco, é que aqui no trabalho não tenho como fazer um exemplo por não trabalharmos com delphi...
GOSTEI 0
Gabrielscorpion
09/07/2012
Bom, vou continuar tentando aqui...mais ainda aguardo sugestões...caso eu consiga eu posto o resultado pra pessoas que também possa ter esse duvida que tenho.
GOSTEI 0
Gabrielscorpion
09/07/2012
Bom, vou continuar tentando aqui...mais ainda aguardo sugestões...caso eu consiga eu posto o resultado pra pessoas que também possa ter esse duvida que tenho.
Bom o jeito foi fazer a nivel de sistema mesmo, então fizassim:
if (sp.ParamByName(v_nome).Asstring <> ) and
(sp.ParamByName(v_cpf).Asstring <> )then
begin
sp.ExecProc;
// atualiza tabela
ClientDataSet1.Close;
SQLQuery1.SQL.Clear;
SQLQuery1.SQL.add(select * from clientes);
ClientDataSet1.open;
end
else
begin
ShowMessage(Preencha o CPF e Nome);
// atualiza tabela
ClientDataSet1.Close;
SQLQuery1.SQL.Clear;
SQLQuery1.SQL.add(select * from clientes);
ClientDataSet1.open;
end;
GOSTEI 0