Fórum Executar script com TIBQuery #383439
11/08/2010
0
Olá pessoal estou tentando executar o seguinte script via TIBQuery:
Ocorre que após a execução do mesmo... vou no IBConsole ver o metadados gerado aparece assim:
Onde estou errando?
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
Curtir tópico
+ 0
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
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
Clique aqui para fazer login e interagir na Comunidade :)