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

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?
Por: Denerson em Abril 27, 2009
às 8:12 pm