1. Esta seria uma procedure que busca em uma tabela recebendo os parâmetros até de ordenação pelo delphi vc pode chamar ela
SELECT
OPCODIGOLOGON AS CODIGO,
OPLOGON AS LOGON,
OPSENHA AS SENHA,
OPNIVEL AS NIVEL
FROM SP_LOGON_SELECIONA(0,”,”,1,’SIM’,’2,1 DESC’)
O Interessante é que vc executa a Store com o parâmetro que vc quiser aí vc pode simplesmente consultar por todos campos ou só por um, ordenando por um vários de ordem crescente ou decrescente, ficando de acordo com o gosto do cliente.
CREATE PROCEDURE SP_LOGON_SELECIONA (
IPCODIGOLOGON INTEGER,
IPLOGON VARCHAR(20),
IPSENHA VARCHAR(10),
IPNIVEL INTEGER,
IPPREENCHACAMPOS VARCHAR(3),
IPORDENAR VARCHAR(1000))
RETURNS (
OPCODIGOLOGON INTEGER,
OPLOGON VARCHAR(20),
OPSENHA VARCHAR(10),
OPNIVEL INTEGER)
AS
DECLARE VARIABLE VAND VARCHAR(1);
DECLARE VARIABLE VSQL VARCHAR(1000);
BEGIN
— Aqui é o caso do And se já tem algum campo ele coloca o AND se não ele não coloca
VAND = ‘N’;
— Começo do SQL aqui em cima vai o Select e o FROM
VSQL = ‘SELECT CODIGOLOGON, LOGON, SENHA, NIVEL’;
VSQL = VSQL || ‘ FROM LOGON’;
–Do Jeito que vem do Delphi transformo para NULL
IF (:IPLOGON = ”) THEN
IPLOGON = NULL;
IF (:IPSENHA = ”) THEN
IPSENHA = NULL;
IF (:IPNIVEL = 0) THEN
IPNIVEL = NULL;
IF (:IPCODIGOLOGON = 0) THEN
IPCODIGOLOGON = NULL;
IF ((:IPORDENAR = ”) OR (:IPORDENAR IS NULL)) THEN
IPORDENAR = ‘1’;
IF (:IPPREENCHACAMPOS = ”) THEN
IPPREENCHACAMPOS = ‘SIM’;
–Se precisar ser tudo obrigatório ou se fazer parte dele dá o erro aqui
IF ( :IPPREENCHACAMPOS = ‘SIM’) THEN
BEGIN
IF ( (:IPLOGON IS NULL) AND (:IPSENHA IS NULL) AND (:IPNIVEL IS NULL)) THEN
BEGIN
EXCEPTION ERRO ‘PREENCHA OS CAMPOS OBRIGATÓRIOS’;
EXIT;
END
ELSE
BEGIN
–Aqui coloca o WHERE
VSQL = VSQL || ‘ WHERE ‘;
–Começa a conferencia de campos
IF (:IPLOGON IS NOT NULL) THEN
BEGIN
–Estou usando o Like as 4 aspas é para colocar uma aspas no parametro ex: Logon like ‘%PARAMETRO%’
VSQL = VSQL || ‘ LOGON LIKE ‘ || ”” || ‘%’ || :IPLOGON || ‘%’ || ””;
VAND = ‘S’;
END
–Aqui começa a verificação do And
IF (:IPSENHA IS NOT NULL) THEN
BEGIN
IF (:VAND = ‘S’) THEN
VSQL = VSQL || ‘ AND’;
VSQL = VSQL || ‘ SENHA LIKE ‘ || ”” || ‘%’ || :IPSENHA || ‘%’ || ””;
VAND = ‘S’;
END
IF (:IPNIVEL IS NOT NULL) THEN
BEGIN
IF (:VAND = ‘S’) THEN
VSQL = VSQL || ‘ AND’;
VSQL = VSQL || ‘ NIVEL = ‘ || :IPNIVEL;
VAND = ‘S’;
END
–Verifico a Ordenação que foi passada via Parametro tambem
VSQL = VSQL || ‘ ORDER BY ‘ || :IPORDENAR;
–Uso o For Execute Stamente pois pode ser que seja mais de uma linha que será retornado
FOR
EXECUTE STATEMENT VSQL INTO :OPCODIGOLOGON, :OPLOGON, :OPSENHA, :OPNIVEL
DO
— Usa o SUSPEND todas as vezes que retornar valor
SUSPEND;
END
END
End