Fórum Duvidas com Stored Procedure no Delphi #419601

09/07/2012

0

Pessoal criei uma SP no banco(MySQL):
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

Gabrielscorpion

Responder

Posts

09/07/2012

Bruno Leandro

Ola, eu dei uma pesquisada poderia tentar desta forma

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
Responder

Gostei + 0

09/07/2012

Deivison Melo

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

Gostei + 0

09/07/2012

Gabrielscorpion

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.
Responder

Gostei + 0

09/07/2012

Gabrielscorpion

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



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.
Responder

Gostei + 0

09/07/2012

Deivison Melo

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...
Responder

Gostei + 0

09/07/2012

Gabrielscorpion

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.
Responder

Gostei + 0

09/07/2012

Gabrielscorpion

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;
Responder

Gostei + 0

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

Aceitar