none
Dúvida Package RRS feed

  • Pergunta

  • Amigos,

     

    tenho um package estou com algumas dúvidas. Dentro do Packege existe varios procedimentos mais existe um Activex script que possuí um procedimento que muda a rotina de execução de todo pacote. Gostaria de entender melhor os trechos que eu grifei em vermelho. O que o colega que disse mais não está mais na empresa era que o pacote lê um determinado diretoria(já identifiquei isso) e lê cada arquivo texto por vez e executa uma penca de consultas para cada arquivo lido. Segue abaixo o Activex Script e o restante do pacote eu vou tirando as dúvidas conforme forem surgindo.

     

    Code Snippet

    Sub Carregar(Site, AnoMes)

     Dim pkge, ConArqTXT, TksDP_Importar, TskSQL_Montar_Base, TskSQL_BApoio, CTaskDP, CTaskSQL
     
     Set pkge = DTSGlobalVariables.Parent
     Set ConArqTXT = pkge.Connections("Base Camara")
     Set TskDP_Importar = Pkge.Tasks("Task_DP_Arquivo_Camara")
     Set TskSQL_Montar_Base = Pkge.Tasks("Task_SQL_Montar_Base")
     Set TskSQL_BApoio = Pkge.tasks("Task_SQL_Atualizar_bases_Apoio")

     Set CTaskDP = TskDP_Importar.CustomTask 

     ConArqTXT.DataSource = "F:\Cadu\Camara\ArquivosCamara\IFF5M355-" & Site & "-SALDO-CAMARA-" & CSTR(AnoMes) & ".TXT"
     CTaskDP.SourceObjectName =  ConArqTXT.DataSource
     CTaskDP.Execute pkge, Nothing, Nothing, 0

     Set CTaskSQL = TskSQL_BApoio.CustomTask 
     CTaskSQL.Execute pkge, Nothing, Nothing, 0

     Set CTaskSQL = TskSQL_Montar_Base.CustomTask 
     CTaskSQL.SQLStatement = Sql(AnoMes) 
     CTaskSQL.Execute pkge, Nothing, Nothing, 0

    End Sub

    Function Main()
     
     Carregar "RJ", 200710
     Carregar "BA", 200710
     Carregar "PE", 200710
     Carregar "MG", 200710


     Main = DTSTaskExecResult_Success

    End Function


    Function SQL(Ano_Mes)

     Dim TSql

     TSql = "SELECT A.UF, A.CPF_CNPJ, A.LOCAL, A.TERMINAL, A.CONJUNTA CJ, A.SU, A.DATA_CONTA, A.VALOR_CONTA, A.TIPO_LINHA, A.SUB_TIPO_LINHA, " &  CHR(13)
     TSql = TSql & "B.CD_UN, C.CD_RELACIONAMENTO, A.DATA_INCLUSAO, A.DATA_FATURAMENTO, TIPO_MOVIMENTACAO, " &  CHR(13)
     TSql = TSql & "CAST(MAX(CASE WHEN D.TIPO LIKE 'VC%' THEN 1 ELSE 0 END) AS BIT) VC, " &  CHR(13)
     TSql = TSql & "CAST(SUM(CASE WHEN D.TIPO = 'VC OI' THEN VALOR_SERVICO ELSE 0 END) AS INT) VRVCEA," &  CHR(13)
     TSql = TSql & "CAST(SUM(CASE WHEN D.TIPO = 'VC OUTROS' THEN VALOR_SERVICO ELSE 0 END) AS INT) VRVCENA, " &  CHR(13)
     TSql = TSql & "CAST(SUM(CASE WHEN D.TIPO = 'VC NID' THEN VALOR_SERVICO ELSE 0 END) AS INT) VRVCNID," &  CHR(13)
     TSql = TSql & "DATA_SELECAO, " &  CHR(13)
     TSql = TSql & "COD_CANCELAMENTO, AREA_EMISSAO, CAST(" & Ano_Mes &"  AS INT) ANO_MES_CAMARA" &  CHR(13)
     TSql = TSql & "INTO DBO.A_CAMARA_RETENCAO_TMP" &  CHR(13)
     TSql = TSql & "FROM A_CAMARA_RETENCAO_ENT A INNER JOIN A_CAMARA_RETENCAO_UN B ON A.UNIDADE_NEGOCIO = B.UN " &  CHR(13)
     TSql = TSql & "INNER JOIN A_CAMARA_RETENCAO_RELACIONAMENTO C ON A.RELACIONAMENTO = C.RELACIONAMENTO" &  CHR(13)
     TSql = TSql & "INNER JOIN A_CAMARA_RETENCAO_SERVICO D ON A.COD_SERVICO = D.CD_SERVICO" &  CHR(13)
     TSql = TSql & "GROUP BY" &  CHR(13)
     TSql = TSql & "A.UF, A.CPF_CNPJ, A.LOCAL, A.TERMINAL, A.CONJUNTA, A.SU, A.DATA_CONTA, A.VALOR_CONTA, A.TIPO_LINHA, A.SUB_TIPO_LINHA, " &  CHR(13)
     TSql = TSql & "B.CD_UN, C.CD_RELACIONAMENTO, A.DATA_INCLUSAO, A.DATA_FATURAMENTO, TIPO_MOVIMENTACAO, DATA_SELECAO, COD_CANCELAMENTO, AREA_EMISSAO" &  CHR(13)
     
     TSql = TSql & "INSERT INTO A_CAMARA_RETENCAO_SAIDA  SELECT *, NULL, NULL, 0  FROM A_CAMARA_RETENCAO_TMP WHERE TIPO_MOVIMENTACAO = 'S'" &  CHR(13)
     TSql = TSql & "INSERT INTO A_CAMARA_RETENCAO_CANCELAMENTO SELECT *, NULL, NULL, 0  FROM A_CAMARA_RETENCAO_TMP WHERE TIPO_MOVIMENTACAO = 'C'" &  CHR(13)
     TSql = TSql & "INSERT INTO A_CAMARA_RETENCAO_ENTRADAS SELECT *, NULL, NULL, 0  FROM A_CAMARA_RETENCAO_TMP WHERE TIPO_MOVIMENTACAO = 'E'" &  CHR(13)
     
     TSql = TSql & "DROP TABLE A_CAMARA_RETENCAO_TMP" &  CHR(13)
     TSql = TSql & "TRUNCATE TABLE A_CAMARA_RETENCAO_ENT " &  CHR(13)

     Sql = TSql
    End Function

     

     

    terça-feira, 17 de junho de 2008 20:10

Respostas

  • Bom Dia,

     

    No DTS realmente era preciso programar um pouco mais já que não tínhamos um ferramental tão poderoso quanto o do SSIS. O DTS permitia alterações diretas na estrutura do pacote em tempo de execução e ao mesmo tempo que isso era poderoso era arriscado já que alterações desse tipo em tempo de execução podem comprometer o pacote.

     

    Segue uma descrição do que essa tarefa está fazendo:

     

    Code Snippet

    Sub Carregar(Site, AnoMes)

    Declara variáveis
     Dim pkge, ConArqTXT, TksDP_Importar, TskSQL_Montar_Base, TskSQL_BApoio, CTaskDP, CTaskSQL
     
     ' Captura a coleção de variáveis globais do pacote
     Set pkge = DTSGlobalVariables.Parent

     

     ' Captura a conexão chamada "Base Camara" para uma variável
     Set ConArqTXT = pkge.Connections("Base Camara")

     

     ' Captura a tarefa "Task_DP_Arquivo_Camara" para a variável TskDP_Importar
     Set TskDP_Importar = Pkge.Tasks("Task_DP_Arquivo_Camara")

     

     ' Captura a tarefa "Task_SQL_Montar_Base" para a variável TskSQL_Montar_Base
     Set TskSQL_Montar_Base = Pkge.Tasks("Task_SQL_Montar_Base")

     

     ' Captura a tarefa "Task_SQL_Atualizar_bases_Apoio" para a variável TskSQL_BApoio
     Set TskSQL_BApoio = Pkge.tasks("Task_SQL_Atualizar_bases_Apoio")

     

     ' A variável TskDP_Importar foi definida anteriormente
     ' Esse passo permite que a variável CTaskDP acesse as propriedades da tarefa "Task_DP_Arquivo_Camara"

     Set CTaskDP = TskDP_Importar.CustomTask

     

     ' Redefine a connection string da conexão "Base Camara" que foi atribuída na variável ConArqTXT
     ConArqTXT.DataSource = "F:\Cadu\Camara\ArquivosCamara\IFF5M355-" & Site & "-SALDO-CAMARA-" & CSTR(AnoMes) & ".TXT"
     
     ' Redefine as propriedades da tarefa "Task_DP_Arquivo_Camara"
     CTaskDP.SourceObjectName =  ConArqTXT.DataSource
     CTaskDP.Execute pkge, Nothing, Nothing, 0

     

     ' A variável TskSQL_BApoio foi definida anteriormente
     ' Esse passo permite que a variável CTaskSQL acesse as propriedades e métodos da tarefa "Task_SQL_Atualizar_bases_Apoio"
     ' Execute uma tarefa Execute SQL passando os parâmetros do pacote já alterados

     Set CTaskSQL = TskSQL_BApoio.CustomTask
     CTaskSQL.Execute pkge, Nothing, Nothing, 0

     

     ' Redefine a instrução SQL da tarefa "Task_SQL_Atualizar_bases_Apoio" e a executa
     Set CTaskSQL = TskSQL_Montar_Base.CustomTask
     CTaskSQL.SQLStatement = Sql(AnoMes)
     CTaskSQL.Execute pkge, Nothing, Nothing, 0

    End Sub

     

    O modelo de objetos do DTS pode ser um pouco complexo no início, mas não é difícil. Você pode obter maiores informações no livro Microsoft SQL Server 2000 DTS (existe em Português). Para saber o nome das tarefas, você deve usar o Disconnect Edit.

     

    [ ]s,

     

    Gustavo

     

    quarta-feira, 18 de junho de 2008 12:52

Todas as Respostas

  • Bom Dia,

     

    No DTS realmente era preciso programar um pouco mais já que não tínhamos um ferramental tão poderoso quanto o do SSIS. O DTS permitia alterações diretas na estrutura do pacote em tempo de execução e ao mesmo tempo que isso era poderoso era arriscado já que alterações desse tipo em tempo de execução podem comprometer o pacote.

     

    Segue uma descrição do que essa tarefa está fazendo:

     

    Code Snippet

    Sub Carregar(Site, AnoMes)

    Declara variáveis
     Dim pkge, ConArqTXT, TksDP_Importar, TskSQL_Montar_Base, TskSQL_BApoio, CTaskDP, CTaskSQL
     
     ' Captura a coleção de variáveis globais do pacote
     Set pkge = DTSGlobalVariables.Parent

     

     ' Captura a conexão chamada "Base Camara" para uma variável
     Set ConArqTXT = pkge.Connections("Base Camara")

     

     ' Captura a tarefa "Task_DP_Arquivo_Camara" para a variável TskDP_Importar
     Set TskDP_Importar = Pkge.Tasks("Task_DP_Arquivo_Camara")

     

     ' Captura a tarefa "Task_SQL_Montar_Base" para a variável TskSQL_Montar_Base
     Set TskSQL_Montar_Base = Pkge.Tasks("Task_SQL_Montar_Base")

     

     ' Captura a tarefa "Task_SQL_Atualizar_bases_Apoio" para a variável TskSQL_BApoio
     Set TskSQL_BApoio = Pkge.tasks("Task_SQL_Atualizar_bases_Apoio")

     

     ' A variável TskDP_Importar foi definida anteriormente
     ' Esse passo permite que a variável CTaskDP acesse as propriedades da tarefa "Task_DP_Arquivo_Camara"

     Set CTaskDP = TskDP_Importar.CustomTask

     

     ' Redefine a connection string da conexão "Base Camara" que foi atribuída na variável ConArqTXT
     ConArqTXT.DataSource = "F:\Cadu\Camara\ArquivosCamara\IFF5M355-" & Site & "-SALDO-CAMARA-" & CSTR(AnoMes) & ".TXT"
     
     ' Redefine as propriedades da tarefa "Task_DP_Arquivo_Camara"
     CTaskDP.SourceObjectName =  ConArqTXT.DataSource
     CTaskDP.Execute pkge, Nothing, Nothing, 0

     

     ' A variável TskSQL_BApoio foi definida anteriormente
     ' Esse passo permite que a variável CTaskSQL acesse as propriedades e métodos da tarefa "Task_SQL_Atualizar_bases_Apoio"
     ' Execute uma tarefa Execute SQL passando os parâmetros do pacote já alterados

     Set CTaskSQL = TskSQL_BApoio.CustomTask
     CTaskSQL.Execute pkge, Nothing, Nothing, 0

     

     ' Redefine a instrução SQL da tarefa "Task_SQL_Atualizar_bases_Apoio" e a executa
     Set CTaskSQL = TskSQL_Montar_Base.CustomTask
     CTaskSQL.SQLStatement = Sql(AnoMes)
     CTaskSQL.Execute pkge, Nothing, Nothing, 0

    End Sub

     

    O modelo de objetos do DTS pode ser um pouco complexo no início, mas não é difícil. Você pode obter maiores informações no livro Microsoft SQL Server 2000 DTS (existe em Português). Para saber o nome das tarefas, você deve usar o Disconnect Edit.

     

    [ ]s,

     

    Gustavo

     

    quarta-feira, 18 de junho de 2008 12:52
  • Gustavo,

     

    como eu descubro o nome de cada tarefa no meu pacote.

    quarta-feira, 25 de junho de 2008 19:49
  • Olá Daniel,

     

    Conforme eu havia lhe falado. Você deve usar o Disconnected Edit. Basta clicar em qualquer área em branco do seu pacote com o botão direito.

     

    [ ]s,

     

    Gustavo

     

    quarta-feira, 25 de junho de 2008 21:09
  • Gustavo,

     

    tentei executar o Package e deu o seguinte erro que não estou conseguindo entender:

     

    Server: Msg 170, Level 15, State 1, Line 6
    Line 6: Incorrect syntax near 'Site'.
    Server: Msg 103, Level 15, State 1, Line 51
    The identifier that starts with 'B.CD_UN, C.CD_RELACIONAMENTO, A.DATA_INCLUSAO, A.DATA_FATURAMENTO, TIPO_MOVIMENTACAO, DATA_SELECAO, COD_CANCELAMENTO, AREA_EMISS' is too long. Maximum length is 128.

     

    Segue o Active_script que está dando erro

     

    Sub Carregar(Site, AnoMes)

     Dim pkge, ConArqTXT, TksDP_Importar, TskSQL_Montar_Base, TskSQL_BApoio, CTaskDP, CTaskSQL
     
     Set pkge = DTSGlobalVariables.Parent
     Set ConArqTXT = pkge.Connections("Base Camara")
     Set TskDP_Importar = Pkge.Tasks("Task_DP_Arquivo_Camara")
     Set TskSQL_Montar_Base = Pkge.Tasks("Task_SQL_Montar_Base")
     Set TskSQL_BApoio = Pkge.tasks("Task_SQL_Atualizar_bases_Apoio")

     Set CTaskDP = TskDP_Importar.CustomTask 

     ConArqTXT.DataSource = "D:\Camara\M355\IFF1M355-" & Site & "-SALDO-CAMARA-" & CSTR(AnoMes) & ".TXT"
     CTaskDP.SourceObjectName =  ConArqTXT.DataSource
     CTaskDP.Execute pkge, Nothing, Nothing, 0

     Set CTaskSQL = TskSQL_BApoio.CustomTask 
     CTaskSQL.Execute pkge, Nothing, Nothing, 0

     Set CTaskSQL = TskSQL_Montar_Base.CustomTask 
     CTaskSQL.SQLStatement = Sql(AnoMes) 
     CTaskSQL.Execute pkge, Nothing, Nothing, 0

    End Sub

    Function Main()
     
     Carregar "RJ", 200805
     Carregar "BA", 200805
     Carregar "PE", 200805
     Carregar "MG", 200805


     Main = DTSTaskExecResult_Success

    End Function


    Function SQL(Ano_Mes)

     Dim TSql

     TSql = "SELECT A.UF, A.CPF_CNPJ, A.LOCAL, A.TERMINAL, A.CONJUNTA CJ, A.SU, A.DATA_CONTA, A.VALOR_CONTA, A.TIPO_LINHA, A.SUB_TIPO_LINHA, " &  CHR(13)
     TSql = TSql & "B.CD_UN, C.CD_RELACIONAMENTO, A.DATA_INCLUSAO, A.DATA_FATURAMENTO, TIPO_MOVIMENTACAO, " &  CHR(13)
     TSql = TSql & "CAST(MAX(CASE WHEN D.TIPO LIKE 'VC%' THEN 1 ELSE 0 END) AS BIT) VC, " &  CHR(13)
     TSql = TSql & "CAST(SUM(CASE WHEN D.TIPO = 'VC OI' THEN VALOR_SERVICO ELSE 0 END) AS INT) VRVCEA," &  CHR(13)
     TSql = TSql & "CAST(SUM(CASE WHEN D.TIPO = 'VC OUTROS' THEN VALOR_SERVICO ELSE 0 END) AS INT) VRVCENA, " &  CHR(13)
     TSql = TSql & "CAST(SUM(CASE WHEN D.TIPO = 'VC NID' THEN VALOR_SERVICO ELSE 0 END) AS INT) VRVCNID," &  CHR(13)
     TSql = TSql & "DATA_SELECAO, " &  CHR(13)
     TSql = TSql & "COD_CANCELAMENTO, AREA_EMISSAO, CAST(" & Ano_Mes &"  AS INT) ANO_MES_CAMARA" &  CHR(13)
     TSql = TSql & "INTO DBO.A_CAMARA_RETENCAO_TMP" &  CHR(13)
     TSql = TSql & "FROM A_CAMARA_RETENCAO_ENT A INNER JOIN A_CAMARA_RETENCAO_UN B ON A.UNIDADE_NEGOCIO = B.UN " &  CHR(13)
     TSql = TSql & "INNER JOIN A_CAMARA_RETENCAO_RELACIONAMENTO C ON A.RELACIONAMENTO = C.RELACIONAMENTO" &  CHR(13)
     TSql = TSql & "INNER JOIN A_CAMARA_RETENCAO_SERVICO D ON A.COD_SERVICO = D.CD_SERVICO" &  CHR(13)
     TSql = TSql & "GROUP BY" &  CHR(13)
     TSql = TSql & "A.UF, A.CPF_CNPJ, A.LOCAL, A.TERMINAL, A.CONJUNTA, A.SU, A.DATA_CONTA, A.VALOR_CONTA, A.TIPO_LINHA, A.SUB_TIPO_LINHA, " &  CHR(13)
     TSql = TSql & "B.CD_UN, C.CD_RELACIONAMENTO, A.DATA_INCLUSAO, A.DATA_FATURAMENTO, TIPO_MOVIMENTACAO, DATA_SELECAO, COD_CANCELAMENTO, AREA_EMISSAO" &  CHR(13)
     
     TSql = TSql & "INSERT INTO A_CAMARA_RETENCAO_SAIDA  SELECT *, NULL, NULL, 0  FROM A_CAMARA_RETENCAO_TMP WHERE TIPO_MOVIMENTACAO = 'S'" &  CHR(13)
     TSql = TSql & "INSERT INTO A_CAMARA_RETENCAO_CANCELAMENTO SELECT *, NULL, NULL, 0  FROM A_CAMARA_RETENCAO_TMP WHERE TIPO_MOVIMENTACAO = 'C'" &  CHR(13)
     TSql = TSql & "INSERT INTO A_CAMARA_RETENCAO_ENTRADAS SELECT *, NULL, NULL, 0  FROM A_CAMARA_RETENCAO_TMP WHERE TIPO_MOVIMENTACAO = 'E'" &  CHR(13)
     
     TSql = TSql & "DROP TABLE A_CAMARA_RETENCAO_TMP" &  CHR(13)
     TSql = TSql & "TRUNCATE TABLE A_CAMARA_RETENCAO_ENT " &  CHR(13)

     Sql = TSql
    End Function

    sexta-feira, 27 de junho de 2008 17:47
  • Olá Daniel,

     

    Acredito que a sintaxe da Function SQL esteja errada. Você precisa visualizar o resultado da variável TSQL, pegar o comando e verificar se ele está correto.

     

    [ ]s,

     

    Gustavo

    sexta-feira, 27 de junho de 2008 20:00
  • Como faço validar a variavel? Eu não tenho como debugar. Ou tenho?

    segunda-feira, 30 de junho de 2008 14:47
  • DrAlves,

     

    Você que fazer um debug no SSIS?

    segunda-feira, 30 de junho de 2008 16:22
  • não estou fazendo no SQL2000.

    segunda-feira, 30 de junho de 2008 16:30
  • Olá Daniel,

     

    É possível debugar pacotes DTS, mas o trabalho envolvido é tanto que prefiro não entrar nesse mérito.

     

    Peça um MsgBox do valor da variável TSQL e veja se ela está correta

     

    [ ]s,

     

    Gustavo

     

    segunda-feira, 30 de junho de 2008 19:57
  • Fiz dessa maneira, mais ainda continua dando erro.

     

    Code Snippet
    Server: Msg 170, Level 15, State 1, Line 3
    Line 3: Incorrect syntax near 'RJ'.
    Server: Msg 103, Level 15, State 1, Line 48
    The identifier that starts with 'B.CD_UN, C.CD_RELACIONAMENTO, A.DATA_INCLUSAO, A.DATA_FATURAMENTO, TIPO_MOVIMENTACAO, DATA_SELECAO, COD_CANCELAMENTO, AREA_EMISS' is too long. Maximum length is 128.

     

     

    Code Snippet

     

    Sub Carregar(RJ, AnoMes)

     Dim pkge, ConArqTXT, TksDP_Importar, TskSQL_Montar_Base, TskSQL_BApoio, CTaskDP, CTaskSQL
     
     Set pkge = DTSGlobalVariables.Parent
     Set ConArqTXT = pkge.Connections("Base Camara")
     Set TskDP_Importar = Pkge.Tasks("Task_DP_Arquivo_Camara")
     Set TskSQL_Montar_Base = Pkge.Tasks("Task_SQL_Montar_Base")
     Set TskSQL_BApoio = Pkge.tasks("Task_SQL_Atualizar_bases_Apoio")

     Set CTaskDP = TskDP_Importar.CustomTask 

     ConArqTXT.DataSource = "D:\Camara\M355\IFF1M355-" & RJ & "-SALDO-CAMARA-" & CSTR(AnoMes) & ".TXT"
     CTaskDP.SourceObjectName =  ConArqTXT.DataSource
     CTaskDP.Execute pkge, Nothing, Nothing, 0

     Set CTaskSQL = TskSQL_BApoio.CustomTask 
     CTaskSQL.Execute pkge, Nothing, Nothing, 0

     Set CTaskSQL = TskSQL_Montar_Base.CustomTask 
     CTaskSQL.SQLStatement = Sql(AnoMes) 
     CTaskSQL.Execute pkge, Nothing, Nothing, 0
     Msgbox(SQL)
    End Sub

     

     

    segunda-feira, 30 de junho de 2008 20:48