Fórum Executar script com TIBQuery #383439

11/08/2010

0

Olá pessoal estou tentando executar o seguinte script via TIBQuery:

        SQL.Clear;
        SQL.Add(
                'ALTER PROCEDURE RETORNACOMPROMISSOS '+
                '( '+
                '  TIPO_PESSOA_PF INTEGER, '+
                '  TIPO_PESSOA_PJ INTEGER, '+
                '  TIPO_PESSOA_C_PJ INTEGER, '+
                '  TEXTO_ VARCHAR(100) CHARACTER SET WIN1252, '+
                '  NOME VARCHAR(100) CHARACTER SET WIN1252, '+
                '  DATA_01 DATE, '+
                '  DATA_02 DATE, '+
                '  OPCAO_01 INTEGER, '+
                '  OPCAO_02 INTEGER, '+
                '  OPCAO_03 INTEGER '+
                ') '+
                'RETURNS '+
                '( '+
                '  IDENTIFICADOR" INTEGER, '+
                '  DATA DATE, '+
                '  HORA TIME, '+
                '  TEXTO VARCHAR(30000) CHARACTER SET WIN1252, '+
                '  OPCAO INTEGER, '+
                '  PUBLICO INTEGER, '+
                '  LOGIN VARCHAR(10) CHARACTER SET WIN1252, '+
                '  QUEM VARCHAR(10) CHARACTER SET WIN1252 '+
                ') '+
                'AS '+
                'BEGIN '+
                'FOR '+
                'SELECT C.IDENTIFICADOR, C.DATA, C.HORA, C.TEXTO, C.OPCAO, C.PUBLICO, C.LOGIN, C.QUEM FROM COMPROMISSO C '+
                'LEFT JOIN PESS0A_COMPROMISSO PC ON PC.ID_COMPROMISSO = C.IDENTIFICADOR '+
                'LEFT JOIN PESSOAFISICA PF ON PF.IDENTIFICADOR = PC.ID_PESSOA AND PC.TIPO_PESSOA = :TIPO_PESSOA_PF '+
                'LEFT JOIN PESSOAJURIDICA PJ ON PJ.IDENTIFICADOR = PC.ID_PESSOA AND PC.TIPO_PESSOA = :TIPO_PESSOA_PJ '+
                'LEFT JOIN CONTATO_PJ C_PJ ON C_PJ.IDENTIFICADOR = PC.ID_PESSOA AND PC.TIPO_PESSOA = :TIPO_PESSOA_C_PJ '+
                'WHERE '+
                'C.DATA BETWEEN :DATA_01 AND :DATA_02 AND '+
                'COALESCE(C.TEXTO,'') CONTAINING :TEXTO_ AND '+
                'COALESCE(PJ.NOME,'')||COALESCE(PF.NOME,'')||COALESCE(C_PJ.NOME,'') CONTAINING :NOME AND '+
                'C.OPCAO IN (:OPCAO_01, :OPCAO_02, :OPCAO_03) '+
                'INTO :IDENTIFICADOR, :DATA, :HORA, :TEXTO, :OPCAO, :PUBLICO, :LOGIN, :QUEM '+
                'DO '+
                'SUSPEND; '+
                'END;');

        EXECSQL;
        Transacao.CommitRetaining;


Ocorre que após a execução do mesmo... vou no IBConsole ver o metadados gerado aparece assim:

ALTER PROCEDURE "RETORNACOMPROMISSOS" 
(
  "TIPO_PESSOA_PF" INTEGER,
  "TIPO_PESSOA_PJ" INTEGER,
  "TIPO_PESSOA_C_PJ" INTEGER,
  "TEXTO_" VARCHAR(100) CHARACTER SET WIN1252,
  "NOME" VARCHAR(100) CHARACTER SET WIN1252,
  "DATA_01" DATE,
  "DATA_02" DATE,
  "OPCAO_01" INTEGER,
  "OPCAO_02" INTEGER,
  "OPCAO_03" INTEGER
)
RETURNS
(
  "IDENTIFICADOR" INTEGER,
  "DATA" DATE,
  "HORA" TIME,
  "TEXTO" VARCHAR(30000) CHARACTER SET WIN1252,
  "OPCAO" INTEGER,
  "PUBLICO" INTEGER,
  "LOGIN" VARCHAR(10) CHARACTER SET WIN1252,
  "QUEM" VARCHAR(10) CHARACTER SET WIN1252
)
AS
BEGIN EXIT; END
 ^


Onde estou errando?

Carlos Phelippe

Carlos Phelippe

Responder

Posts

12/08/2010

Emerson Nascimento

os componentes padrão do Delphi executam apenas um comando por vez. você precisa de um componente que execute scripts.

me parece que existe um na biblioteca JEDI.

se você estivesse usando um SQLConnection você poderia executar o script através do método ExecuteDirect:

  try
    {Faz a Conexão com a Base de Dados}
    SQLConnection.Open;

    {Tenta Rodar o Script}
    ErrorCode := SQLConnection.ExecuteDirect( stringlistScript.Text );

    {Se o SqlConnection retornar "0" é porque tudo correu bem}
    if ErrorCode = 0 then
      ShowMessage('Script rodado com sucesso')
    {Se retornar <> de "0" é porque algo deu errado}
    else
      raise Exception.Create( 'Erro: codigo = ' + IntToStr( ErrorCode ) )
  except
    on E: Exception do
      ShowMessage( E.Message )
  end


Responder

Gostei + 0

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

Aceitar