Publicado por: Gustavo Henrique | Março 26, 2008

Execute Statement com Firebird + Delphi.

Outro Execute Statement Brincando ainda mais no Delphi e no Firebird

Vc pode chamar no delphi desta maneira, olha o detalhe coloque entre aspas duplas e o que acontece bumba posso colocas um espaço no apelido de cada campo.

SELECT
OPCODIGOLOGON AS “CODIGO LOGON :”,
OPLOGON AS “LOGON :”,
OPSENHA AS “SENHA :”,
OPNIVEL AS “NIVEL :”,
OPCODIGOSETOR AS “CODIGO SETOR :”,
OPSETOR AS ” SETOR :”,
OPMNEMONICO AS “MNENOMICO :”
FROM SP_ACESSOS_SELECIONA(0,”,”,0,0,”,”,’NAO’,'1′)

CREATE PROCEDURE SP_ACESSOS_SELECIONA (
IPCODIGOLOGON INTEGER,
IPLOGON VARCHAR(20),
IPSENHA VARCHAR(10),
IPNIVEL INTEGER,
IPCODIGOSETOR INTEGER,
IPSETOR VARCHAR(20),
IPMNEMONICO VARCHAR(8),
IPPREENCHACAMPOS VARCHAR(3),
IPORDENAR VARCHAR(1000))
RETURNS (
OPCODIGOLOGON INTEGER,
OPLOGON VARCHAR(20),
OPSENHA VARCHAR(10),
OPNIVEL INTEGER,
OPCODIGOSETOR INTEGER,
OPSETOR VARCHAR(20),
OPMNEMONICO VARCHAR(8))
AS
DECLARE VARIABLE VSQL VARCHAR(1000);
BEGIN
VSQL = ‘SELECT A.CODIGOLOGON, L.LOGON, L.SENHA, L.NIVEL, A.CODIGOSETOR, S.SETOR, S.MNEMONICO’;
VSQL = VSQL || ‘ FROM LOGON L, SETOR S, ACESSOS A’;

IF (:IPCODIGOLOGON = 0) THEN
IPCODIGOLOGON = NULL;
IF (:IPLOGON = ”) THEN
IPLOGON = NULL;
IF (:IPSENHA = ”) THEN
IPSENHA = NULL;
IF (:IPNIVEL = 0) THEN
IPNIVEL = NULL;
IF (:IPCODIGOSETOR = 0) THEN
IPCODIGOSETOR = NULL;
IF (:IPSETOR = ”) THEN
IPSETOR = NULL;
IF (:IPMNEMONICO = ”) THEN
IPMNEMONICO = NULL;
IF ((:IPORDENAR = ”) OR (:IPORDENAR IS NULL)) THEN
IPORDENAR = ‘1′;
IF (:IPPREENCHACAMPOS = ”) THEN
IPPREENCHACAMPOS = ‘SIM’;

IF ( :IPPREENCHACAMPOS = ‘SIM’) THEN
BEGIN
–Se eu quiser coloca algum campo como obrigatório
IF ( (:IPLOGON IS NULL) ) THEN
BEGIN
EXCEPTION ERRO ‘PREENCHA OS CAMPOS OBRIGATÓRIOS’;
EXIT;
END
END

VSQL = VSQL || ‘ WHERE A.CODIGOLOGON = L.CODIGOLOGON AND A.CODIGOSETOR = S.CODIGOSETOR ‘;

–Neste Caso o And é obrigatório
IF (:IPCODIGOLOGON IS NOT NULL) THEN
VSQL = VSQL || ‘ AND A.CODIGOLOGON = ‘ || :IPCODIGOLOGON;

IF (:IPLOGON IS NOT NULL) THEN
VSQL = VSQL || ‘ AND L.LOGON LIKE ‘ || ”” || ‘%’ || :IPLOGON || ‘%’ || ””;

IF (:IPSENHA IS NOT NULL) THEN
VSQL = VSQL || ‘ AND L.SENHA LIKE ‘ || ”” || ‘%’ || :IPSENHA || ‘%’ || ””;

IF (:IPNIVEL IS NOT NULL) THEN
VSQL = VSQL || ‘ AND L.NIVEL = ‘ || :IPNIVEL;

IF (:IPCODIGOSETOR IS NOT NULL) THEN
VSQL = VSQL || ‘ AND A.CODIGOSETOR = ‘ || :IPCODIGOSETOR;

IF (:IPSETOR IS NOT NULL) THEN
VSQL = VSQL || ‘ AND S.SETOR LIKE ‘ || ”” || ‘%’ || :IPSETOR || ‘%’ || ””;

IF (:IPMNEMONICO IS NOT NULL) THEN
VSQL = VSQL || ‘ AND S.MNEMONICO LIKE ‘ || ”” || ‘%’ || :IPMNEMONICO || ‘%’ || ””;

VSQL = VSQL || ‘ ORDER BY ‘ || :IPORDENAR;

FOR
EXECUTE STATEMENT VSQL INTO :OPCODIGOLOGON, :OPLOGON, :OPSENHA, :OPNIVEL, :OPCODIGOSETOR, :OPSETOR, :OPMNEMONICO
DO

SUSPEND;

End


Respostas

  1. Gostei do artigo, Gustavo. Porém estou com um problema envolvendo datas.
    Tenho uma SP que recebe 2 params
    (_fornec integer, _ini date, _fim date).
    A intenção é recuperar os dados das contas a pagar.
    Dentro dessa SP eu faço um tratamento desses params prevendo a não digitação dos mesmos.
    Assim como vc fez.
    Crio então uma statement conforme a verificação desses parâmetros.
    Tudo funciona bem. Porém a concatenação dos campos Data dão problema.
    Na verdade preciso colocar essas datas entre aspas simples, sabe como fazr isso?


Deixe uma resposta

Sua resposta:

Categorias