TonyDmaZ 0 Denunciar post Postado Maio 7, 2015 Pessoal, felicidades para todos. Cenário: Delphi 2010 + IBO 4.9.14 53 Está ocorrendo um erro na execução de um SELECT em uma tabela (PAR_GLOBAL) que não faz muito sentido, pois esse ocorre apenas quando o programa (P2) é chamado por um outro (P1). Explicação: O ERRO apenas acontece quando P1 chama P2. Se P2 for executado diretamente não ocorre. Antes que perguntem, preciso que P2 seja chamado por P1 por uma questão de necessidade aqui no órgão. Descrição do erro: Mensagem: ISC ERROR CODE 335544569 ISC ERROR MESSAGE: Dynamic SQL Error SQL Error code = -204 Table unknown PAR_GLOBAL At line 3, column 1 Alguém já teve algum caso parecido e poderia ajudar? { Fonte de P1 } { Aplicativo chamador de Aplicativos } program TONYSOFT_EXE; uses Forms, FunArquivo, IniFiles, SysUtils, Messages, Dialogs, IBODataset, VLRotinasGerais, DBDatabase; var IBDatabase: TIBODatabase; Exe_Par_Call, AppExeName,AppExePath, AppBDNAME,AppBDPATH,AppBDPROTOCOL,AppBDSERVER,AppBDUSER,AppBDPASSWORD: String; {$R *.res} begin Application.Initialize; try { Tratamento do Arquivo INI } if Not FileExists( GetNomeArquivoPadrao(True,True,'INI') ) then begin { Grava Dados Padrões (Modelo) no Arquivo INI } IniArquivo('BDCONFIG','EXE_PAR_CALL','STRING','BDCONFIG.FDB',False,GetNomeArquivoPadrao(True,True)); IniArquivo('BDCONFIG','BDNAME' ,'STRING','BDCONFIG.FDB',False,GetNomeArquivoPadrao(True,True)); IniArquivo('BDCONFIG','BDPATH' ,'STRING',ExtractFilePath(Application.ExeName),False,GetNomeArquivoPadrao(True,True)); IniArquivo('BDCONFIG','BDSERVER' ,'STRING','LocalHost',False,GetNomeArquivoPadrao(True,True)); IniArquivo('BDCONFIG','BDPROTOCOL','STRING','cpTCP_IP',False,GetNomeArquivoPadrao(True,True)); IniArquivo('BDCONFIG','BDUSER' ,'STRING','SYSDBA',False,GetNomeArquivoPadrao(True,True)); IniArquivo('BDCONFIG','BDPASSWORD','STRING','clusterdet',False,GetNomeArquivoPadrao(True,True)); end else Exe_Par_Call:=IniArquivo('BDCONFIG','EXE_PAR_CALL','STRING','BDCONFIG.FDB',True); Try { Acessar o Banco para pegar o Executável - Parametrização do APLICATIVO } IBDatabase:=TIBODatabase.Create(Application); IBDatabase.CharSet :='WIN1252'; IBDatabase.Path :=IniArquivo('BDCONFIG','BDPATH' ,'STRING', '',True,GetNomeArquivoPadrao(True,True)) +'\'+ IniArquivo('BDCONFIG','BDNAME' ,'STRING', '',True,GetNomeArquivoPadrao(True,True)); except On Err:Exception do Messagedlg('ERRO NA TENTATIVA DE ACESSO AO SGBD DE CONFIGURAÇÃO!' +#13 + 'Arquivo INI de Configuração..: '+GetNomeArquivoPadrao(True,True,'INI') +#13 + 'Esse Aplicativo Executável...: '+ParamStr(0) +#13 + 'Mensagem do erro.............: '+Err.message,mtError,[mbOk],0); end; { Acessar a Chave Parameter(1) no BD de Configuração } AppExePath:=SQLSeek(IBDatabase, 'PAR_GLOBAL', 'PAR_EXEPATH','PAR_CALL_EXE='+QuotedStr(Exe_Par_Call)); if AppExePath='' then begin // PAR_CALL_EXE NÃO EXISTE NO BANCO DE CONFIGURAÇÃO // MessageDlg('PAR_CALL_EXE NÃO EXISTE NO BANCO DE CONFIGURAÇÃO!' +#13 + 'Arquivo INI de Configuração..: '+GetNomeArquivoPadrao(True,True,'INI') +#13 + 'Esse Aplicativo Executável...: '+ParamStr(0) +#13 + 'Parâmetro PAR_CALL_EXE ......: '+Exe_Par_Call, mtError, [mbOk],0); Abort; end; { Invoca o Aplicativo alvo conforme sigla de IDENTIFICAÇÃO no BDGERAL. Parâmetros passados: (0) Path e o aplicativo executável respectivo; (1) Valor que corresponde ao campo PAR_CALL_EXE; (1) Parametros de Acesso ao Banco do Aplicativo Alvo (observar a sequencia); } IBDatabase.Connected:=False; ===> CHAMADA PARA O P2 <=== ExeProg( AppExePath +'\'+ AppExeName, Exe_Par_Call+' '+ AppBDPATH+' '+AppBDNAME+' '+AppBDSERVER+' '+AppBDPROTOCOL+' '+AppBDUSER+' '+AppBDPASSWORD ); finally IBDatabase.Connected:=False; Application.Terminate; end; end. { Fonte de P2 } { Programa principal da Aplicação } program TONYSOFT_SIGE; uses Forms, UTTraducao in 'C:\Delphi2010\DetranLib\Utilitarios\UTTraducao.pas' {Tradutor}, Un_Pass in 'C:\Delphi2010\DetranLib\Parametros\Un_Pass.pas' {FrSplash}, DgFormulario in 'C:\Delphi2010\DetranLib\Dialogo\DgFormulario.pas' {DGFormularioF}, DBConfigF in 'C:\Delphi2010\DetranLib\DataBase\DBConfigF.pas' {FrDBConfig}, DGMenuPrincipal in 'C:\Delphi2010\DetranLib\Dialogo\DGMenuPrincipal.pas' {DGMenuPrincipalF: Delphi2010\DetranLib\Dialogo\DgFrmMasterDetail.pas' {DGFrmMasterDetailF}, DgFrmSimple in 'C:\Delphi2010\DetranLib\Dialogo\DgFrmSimple.pas' {DGFrmSimpleF}, DgFrmMasterDetail in 'C:\Delphi2010\DetranLib\Dialogo\DgFrmMasterDetail.pas' {DgFrmMasterDetailF}, DgFrmMDTriplo4Tabsheet in 'C:\Delphi2010\DetranLib\Dialogo\DgFrmMDTriplo4Tabsheet.pas' {DgFrmMDTriplo4TabsheetF}, PRSimple in 'C:\Delphi2010\DetranLib\Print\PRSimple.pas' {FrRelSimple}, Un_MenuP in 'Un_MenuP.pas' {FrMenuP}, DM_Datamodule in 'DM_Datamodule.pas' {DM_FrDataModule: TDataModule}; {$R *.res} begin Application.Initialize; Application.MainFormOnTaskbar := True; { Criação do Menu Principal //} Application.Title := 'TonySoft SIGE - Sistema Integrado de Gestão Empresarial'; Application.CreateForm(TFrMenuP, FrMenuP); Try Try ===> CHAMADA PARA o DATAMODULE onde dá o ERRO </b> Execução da Linha abaixo DÁ O ERRO (apenas qdo chamado por P1. Esse é o detalhe intrigante) <=== AppBDNAME :=SQLSeek(BDConfig, 'PAR_GLOBAL', 'PAR_BDNAME','PAR_CALL_EXE='+QuotedStr(pPAR_CALL_EXE)); { Tratamento Genérico } except on Err:Exception do begin Messagedlg('CONFIGURAÇÃO INCORRETA DO SISTEMA (no EXE ou SGBD) NO SGBD DE CONFIGURAÇÃO: '+#13+ 'Esse Aplicativo : '+ParamStr(0) +#13+ 'Parâmetro Chave.: '+pPAR_CALL_EXE+#13+ 'Path do banco...: '+AppBDPATH +'\'+AppBDNAME+#13 + 'Protocolo.......: '+AppBDPROTOCOL +#13 + 'Servidor........: '+AppBDSERVER +#13 + 'Usuário.........: '+AppBDUSER +#13 + 'Password Master.: Verifique no SGBD de configuração'+#13 + 'Nome da Rotina..........: TDM_FrDataModule.DataModuleCreate' +#13+ 'Mensagem do erro........: '+Err.message,mtError,[mbOk],0); end; end; Finally if (BDConfig.Connected and IBPrincipal.Connected) then begin Initializacao; end else begin FreeAndNil(DM_FrDataModule); ExitProcess(0); Application.Terminate; end; Screen.Cursor := crDefault; End; end; { Fonte Rotina SQLSeek }{ Pesquisa de Dado cadastrado Atraves SQL } Function SQLSeek(bd:TIBODatabase; sTable:String; sField:String; sWhere:String=''; sOrder:String=''):Variant; var SeekStrQuery: TIBOQUery; begin SeekStrQuery:=TIBOQuery.Create(Nil); with SeekStrQuery do begin IB_Connection:=bd; KeyLinksAutoDefine:=False; Sql.Add('Select '+sField); Sql.Add('From '+sTable); if sWhere<>'' then Sql.Add('Where '+sWhere); if sOrder<>'' then Sql.Add('Order by '+sOrder); if (not prepared) then prepare; Open; if Not FieldByName(sField).IsNull then begin if Pos('.',sField)=0 then Result:=FieldByName(sField).AsVariant else Result:=FieldByName(Copy(sField,Pos('.',sField)+1,length(sField))).AsVariant; end else begin case FieldByName(sField).DataType of ftString: Result:=''; ftDateTime, ftDate: Result:=StrToDateTime(' / / '); ftFloat: Result:=-0; ftInteger,ftSmallInt,ftWord: Result:=-0; end; end; Close; end; SeekStrQuery.Free; end; { SQL da QUERY } SELECT ID_PAR_GLOBAL , PAR_CALL_EXE , SETOR_ID , PAR_EXENAME , PAR_EXEPATH , PAR_BDNAME , PAR_BDPATH , PAR_BDPROTOCOL , PAR_BDSERVER , PAR_BDUSER , PAR_BDPASSWORD , PAR_APPSETOR , PAR_APPTITULO FROM PAR_GLOBAL Compartilhar este post Link para o post Compartilhar em outros sites