Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Cleberson Gabardo

Gerar um txt usando a base access. não sei onde recorrer mais

Recommended Posts

Olá Pessoal Como vão? Estou fazendo estágio em uma empresa e me passaram um projeto no access mas preciso fazer ele funcionar no vb.Pesquisei na internet não achei nada que pudecesse me ajudar sou iniciante em programação e nunca desenvolvi em vb. Tenho um banco de dados no access com uma macro, quando é rodada essa macro ela atualiza os dados em um banco de dados oracle e depois gera um arquivo excel e envia para um determinado email, fiz a exportação da macro para vb, mas acontece que para ela rodar é necessário o access estar aberto na base que estou acesando.Pelo que entendi do código essa função DoCmd.SendObject acQuery, "DtRev01_Carteira_Data_Revenue", "MicrosoftExcel(*.xls)", "clegabardo@yahoo.com.br", "", "", "Bonificacao", "Segue a Bonificacao", False, "" que gera o xls e manda o email, so que ela pede intevenção do usuário, o que não vai ser mais possivel pois o executavel que for gerado no vb vai ser colocado em um servidor afim de automatizar o processo. Essa função é do access e para funcionar no vb tenho que abilitar a biblioteca do access nela.Sabem me informar se existe algo no vb que faço a mesma coisa e não precise ter o excel na maquina nem o access aberto? Se não for possivel gerar um xls pode ser um arquivo txt puxando a base do access, ja me ajuda e muito. Não tenho a quem recorrer e se eu conseguir fazer isso aqui seria muito importante para meu crescimento profissional pois faz 2 meses que faço estágio aqui.Esse é o codigo que gera o email e o arquivo no excelFunction Mac01_Bonificação_Data_Revenue()On Error GoTo Mac01_Bonificação_Data_Revenue_Err DoCmd.SendObject acQuery, "DtRev01_Carteira_Data_Revenue", "MicrosoftExcel(*.xls)", "cleberson.gabardo@gvt.com.br", "", "", "Bonificacao", "Segue a Bonificacao", False, ""Mac01_Bonificação_Data_Revenue_Exit: Exit FunctionMac01_Bonificação_Data_Revenue_Err: MsgBox Error$ Resume Mac01_Bonificação_Data_Revenue_ExitEnd Function Muito obrigado

Compartilhar este post


Link para o post
Compartilhar em outros sites

neste site tem a forma para para se conectar a um banco de dados de access.

 

http://www.silicio.com.br/vb/dicas/db_019.html

 

assim você conseguirá se conectar e pesquisar os dados que necessita para formar seu arquivo texto.

 

depois você precisará criar um arquivo texto, e isso você pode ver neste site

 

http://www.macoratti.net/txt_arqs.htm

 

veja o ultimo exemplo que ele passa, ele dará uma boa noção do que fazer.

 

acredito que com isso vocÊ conseguira fazer essa parte, porem você terá que localizar a parte interna do codigo onde ele executa o comando DoCmd para replicar o codigo inteiro para alguma função.

 

ps.

no caso do arquivo texto, não lembro se nesse site mostra, porem se você realmente quiser que o arquivo seja mandado como um arquivo de excel, você pode montar o arquivo texto com os mesmos comandos que o normal, porem no nome você poe a extenção ".csv" e entre os valores de cada coluna poe uma virgula "," assim você indica cada valora da coluna, mas ele não vai com as configurações corretas, as celulas são abertas com o tamanho padrão do excel (o tamanho de cada celula quando se abre um novo documento).

Compartilhar este post


Link para o post
Compartilhar em outros sites

Obrigado por responder mas a conexão com o access o código ja faz, vou colocar o código completo para ver se pode me ajudar, sou iniciante e não fui eu quem escrevi o codigo.Ele ja busca os dados no access oq preciso é gerar um xls ou txt e enviar por email sem ter intervenção do usuario e sem telas se por possivel.Muito obrigado por ter respondido.Private Sub Comando0_Click() Dim strSenha As String Dim strUser As String Dim strDataBase As String Dim connOracle As ADODB.Connection Dim recebecnpj As String Dim Commit As Recordset Dim tb As Recordset Dim ctm As Recordset Dim Inserir As Recordset Dim data As Integer data = Format(Date, "yyyy") Set connOracle = CreateObject("ADODB.Connection") strSenha = UCase(Trim("corpbi")) strUser = UCase(Trim("USR_CORP")) strDataBase = UCase(Trim("BIPDMB3")) connOracle.ConnectionString = "Provider=MSDAORA.1;Data Source=" & strDataBase & ";User ID=" & strUser & ";Password=" & strSenha connOracle.Open Set connAccess = CreateObject("ADODB.Connection") connAccess.ConnectionString = "driver={Microsoft Access Driver (*.mdb)};dbq=C:\web\PD 15804\teste oracle\bonif para teste.mdb" & ";PWD=manager" connAccess.Open ' Set Inserir = connOracle.Execute(" INSERT INTO CPTB70_LOGIN_TOP VALUES ('" & Trim(tb.Fields![MatriculaFuncionário]) & "','" & Trim(tb.Fields![senhaFuncionario]) & "','" & Trim(tb.Fields![NomeFuncionario]) & "','" & Trim(tb.Fields![RegiaoFuncionario]) & "','" & Trim(tb.Fields![CargoFuncionario]) & "', '0','0','0','0')", 0&) Set tb = connAccess.Execute(" select A.MatriculaFuncionário as Matricula, A.SenhaFuncionario as Senha, A.NomeFuncionario as Nome,B.DescricaoRegiao as Regiao, C.DescricaoCargo as Cargo from Tab_Funcionario A, Tab_Regiao B, Tab_Cargo C where A.RegiaoFuncionario = B.CodigoRegiao And A.CargoFuncionario = c.CodigoCargo And A.MesBase in (40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58) ") 'Set tb = connAccess.Execute(" select Matrícula,Nome,Senha from Tab_Funcionario Order by Nome") 'Set tb = connAccess.Execute(" SELECT DtRev01_Carteira_Data_Revenue.CNPJCliente as CNPJCliente, DtRev01_Carteira_Data_Revenue.CNPJ_RAIZ as CNPJ_RAIZ, DtRev01_Carteira_Data_Revenue.NomeCliente as NomeCliente, DtRev01_Carteira_Data_Revenue.NomeGrupoCliente as NomeGrupoCliente, Tab_Localidade.Cidade as Cidade, Tab_Regiao.DescricaoRegiao as DescricaoRegiao, Tab_BU.DescricaoBU as DescricaoBU, Tab_Mercado.DescricaoMercado as DescricaoMercado, DtRev01_Carteira_Data_Revenue.Grupo_Segmento as Grupo_Segmento, DtRev01_Carteira_Data_Revenue.Segmento as Segmento, DtRev01_Carteira_Data_Revenue.NomeFuncionario as NomeFuncionario, DtRev01_Carteira_Data_Revenue.MatriculaFuncionário as MatriculaFuncionário, Tab_MesBase.MesBase as MesBase " _ & "FROM ((((DtRev01_Carteira_Data_Revenue INNER JOIN Tab_MesBase ON DtRev01_Carteira_Data_Revenue.MesBaseCliente = Tab_MesBase.CodigoMesBase) LEFT JOIN Tab_Localidade ON DtRev01_Carteira_Data_Revenue.CidadeFuncionario = Tab_Localidade.CodigoLocalidade) LEFT JOIN Tab_Regiao ON DtRev01_Carteira_Data_Revenue.RegiaoFuncionario = Tab_Regiao.CodigoRegiao) LEFT JOIN Tab_Mercado ON DtRev01_Carteira_Data_Revenue.MercadoFuncionario = Tab_Mercado.CodigoMercado) LEFT JOIN Tab_BU ON DtRev01_Carteira_Data_Revenue.DescricaoBU = Tab_BU.CodigoBU " _ & " WHERE (((Tab_MesBase.MesBase) = #2/1/2006#)) ") Dim contador As Integer Dim contador2 As Integer contador = 0 'contador = ctm.BOF tb.MoveFirst Do While Not tb.EOF 'Set ctm = connOracle.Execute("SELECT * FROM CPTB16_CONTROLE_ACESSO where upper(c16_login) in( ' " & tb.Fields![MatriculaFuncionário] & "') ") 'Set ctm = connOracle.Execute("SELECT * FROM CPTB70_LOGIN_TOP where C70_login = ( '" & tb.Fields![MatriculaFuncionário] & "') ") Set ctm = connOracle.Execute("SELECT * FROM CPTB70_LOGIN_TOP where C70_login = ( '" & tb.Fields![Matricula] & "') ") contador = ctm.BOF If (contador = (-1)) Then 'MSGBOX ou contador 'Set Inserir = connOracle.Execute(" INSERT INTO CPTB70_LOGIN_TOP VALUES ('" & Trim(tb.Fields![MatriculaFuncionário]) & "','" & Trim(tb.Fields![senhaFuncionario]) & "','" & Trim(tb.Fields![NomeFuncionario]) & "','" & Trim(tb.Fields![RegiaoFuncionario]) & "','" & Trim(tb.Fields![CargoFuncionario]) & "', '0','0','0','0')", 0&) Set Inserir = connOracle.Execute(" INSERT INTO CPTB70_LOGIN_TOP VALUES ('" & Trim(tb.Fields![Matricula]) & "','" & Trim(tb.Fields![senha]) & "','" & Trim(tb.Fields![Nome]) & "','" & Trim(tb.Fields![regiao]) & "','" & Trim(tb.Fields![Cargo]) & "', '0','0','0','1')", 0&) Set Commit = connOracle.Execute(" commit ", 0&) contador2 = contador2 + 1 End If tb.MoveNext Loop Set Commit = connOracle.Execute(" commit ", 0&) MsgBox ("FIM: Carregou " & contador2 & " registro") End SubPrivate Sub Command2_Click() Call cmdCarregaCarteira_Click Unload Form1End SubPrivate Sub cmdCarregaCarteira_Click() Dim strSenha As String Dim strUser As String Dim strDataBase As String Dim connOracle As ADODB.Connection Dim recebecnpj As String Dim Commit As Recordset Dim tb As Recordset Dim ctm As Recordset Dim Inserir As Recordset Dim Remover As Recordset Set connOracle = CreateObject("ADODB.Connection") strSenha = UCase(Trim("corpbi")) strUser = UCase(Trim("USR_CORP")) strDataBase = UCase(Trim("BIPDMB3")) connOracle.ConnectionString = "Provider=MSDAORA.1;Data Source=" & strDataBase & ";User ID=" & strUser & ";Password=" & strSenha connOracle.Open Set connAccess = CreateObject("ADODB.Connection") connAccess.ConnectionString = "driver={Microsoft Access Driver (*.mdb)};dbq=C:\web\PD 15804\teste oracle\bonif para teste.mdb" & ";PWD=manager" connAccess.Open 'Set Inserir = connOracle.Execute(" INSERT INTO CPTB70_LOGIN_TOP VALUES ('" & Trim(tb.Fields![MatriculaFuncionário]) & "','" & Trim(tb.Fields![senhaFuncionario]) & "','" & Trim(tb.Fields![NomeFuncionario]) & "','" & Trim(tb.Fields![RegiaoFuncionario]) & "','" & Trim(tb.Fields![CargoFuncionario]) & "', '0','0','0','0')", 0&) 'Set tb = connAccess.Execute(" select A.MatriculaFuncionário as Matricula, A.SenhaFuncionario as Senha, A.NomeFuncionario as Nome,B.DescricaoRegiao as Regiao, C.DescricaoCargo as Cargo from Tab_Funcionario A, Tab_Regiao B, Tab_Cargo C where A.RegiaoFuncionario = B.CodigoRegiao And A.CargoFuncionario = c.CodigoCargo And A.MesBase = 34 ") Set tb = connAccess.Execute(" select B.MesBase as mes, C.DescricaoBU as BU, A.CNPJCliente as cnpjCliente, " _ & " A.NomeCliente as nomeCliente, A.NomeGrupoCliente as grupoCliente, A.MatriculaFuncionario as login, " _ & " D.SenhaFuncionario as senha, D.NomeFuncionario as funcionario, E.DescricaoRegiao as regiao, A.[%Responsabilidade] as responsabilidade, " _ & " A.Excluir_Receita as excluir, A.Canal as canal, A.CNPJCanal as cnpjCanal, A.NomeCanal as nomeCanal " _ & " from Tab_Cliente A, Tab_MesBase B, Tab_BU C, Tab_Funcionario D, Tab_Regiao E " _ & " where A.MesBaseCliente = B.CodigoMesBase AND A.DescricaoBU = C.CodigoBU " _ & " AND C.CodigoBU in (1,3) AND A.MatriculaFuncionario = D.MatriculaFuncionário AND A.MesBaseCliente = D.MesBase " _ & " AND D.RegiaoFuncionario = E.CodigoRegiao " _ & " GROUP BY B.MesBase, C.DescricaoBU, A.CNPJCliente, A.NomeCliente, A.NomeGrupoCliente, A.MatriculaFuncionario, A.Excluir_Receita, A.Canal, A.CNPJCanal, A.NomeCanal, A.[%Responsabilidade], D.NomeFuncionario, E.DescricaoRegiao, D.SenhaFuncionario") 'Set tb = connAccess.Execute(" select * from Tab_Cliente ") Dim contador As Integer contador = 0 tb.MoveFirst Set Inserir = connOracle.Execute(" DELETE FROM CPTB74_CARTEIRA_BONIF", 0&) Do While Not tb.EOF 'MES BASE If Not IsNull(tb.Fields![mes]) Then mes = tb.Fields![mes] Else mes = " " End If 'BU If Not IsNull(tb.Fields![bU]) Then BU = tb.Fields![bU] Else BU = " " End If 'CNPJ_CLIENTE If Not IsNull(tb.Fields![cnpjCliente]) Then cnpj_cliente = tb.Fields![cnpjCliente] Else cnpj_cliente = " " End If 'NOME CLIENTE If Not IsNull(tb.Fields![nomeCliente]) Then nome_cliente = tb.Fields![nomeCliente] Else nome_cliente = " " End If 'GRUPO CLIENTE If Not IsNull(tb.Fields![grupoCliente]) Then grupo_cliente = tb.Fields![grupoCliente] Else grupo_cliente = " " End If 'LOGIN SME If (tb.Fields![bU] = "SME") Then login = "SME" Else login = Trim(tb.Fields![login]) End If 'SENHA If Not IsNull(tb.Fields![senha]) Then senha = tb.Fields![senha] Else senha = " " End If 'FUNCIONARIO If Not IsNull(tb.Fields![funcionario]) Then funcionario = tb.Fields![funcionario] Else funcionario = " " End If 'REGIAO If Not IsNull(tb.Fields![regiao]) Then regiao = tb.Fields![regiao] Else regiao = " " End If 'RESPONSABILIDADE If Not IsNull(tb.Fields![responsabilidade]) Then responsabilidade = tb.Fields![responsabilidade] Else responsabilidade = " " End If 'EXCLUIR_RECEITA If (tb.Fields![excluir] = False) Then excluir = 0 Else excluir = 1 End If 'CANAL FLAG If (tb.Fields![canal] = False) Then canal = 0 Else canal = 1 End If 'CNPJ CANAL If (IsNull(tb.Fields![cnpjCanal])) Then cnpjCanal = "XXXXXXXXXXXXXX" Else cnpjCanal = Trim(tb.Fields![cnpjCanal]) End If 'NOME CANAL If (IsNull(tb.Fields![nomeCanal])) Then nomeCanal = "AJUSTEXXXXXX" Else nomeCanal = Replace(Trim(tb.Fields![nomeCanal]), "'", "") End If Set Inserir = connOracle.Execute(" INSERT INTO CPTB74_CARTEIRA_BONIF VALUES (TO_DATE('" & mes & "','DD/MM/YYYY'),'" & BU & "','" & cnpj_cliente & "','" & Replace(nome_cliente, "'", "") & "','" & Replace(grupo_cliente, "'", "") & "','" & login & "','" & senha & "','" & funcionario & "','" & regiao & "','" & responsabilidade & "', '" & excluir & "','" & canal & "','" & cnpjCanal & "','" & nomeCanal & "' )", 0&) Set Commit = connOracle.Execute(" commit ", 0&) contador = contador + 1 tb.MoveNext Loop Set Commit = connOracle.Execute(" commit ", 0&) MsgBox ("FIM " & contador)End SubPrivate Sub Form_Load() Call Comando0_Click Call cmdCarregaCarteira_Click Call Mac01_Bonificação_Data_Revenue Unload Form1End SubFunction Mac01_Bonificação_Data_Revenue()On Error GoTo Mac01_Bonificação_Data_Revenue_Err DoCmd.SendObject acQuery, "DtRev01_Carteira_Data_Revenue", "MicrosoftExcel(*.xls)", "cleberson.gabardo@gvt.com.br", "", "", "Bonificacao", "Segue a Bonificacao", False, ""Mac01_Bonificação_Data_Revenue_Exit: Exit FunctionMac01_Bonificação_Data_Revenue_Err: MsgBox Error$ Resume Mac01_Bonificação_Data_Revenue_ExitEnd Function

Compartilhar este post


Link para o post
Compartilhar em outros sites

bom para ser sincero não entendi muito do seu codigo, principalmente onde é que ele define os dados....mas caso você ache onde é que ele define os dados, e quais as variaveis que utiliza, é só ver o que eu passei do site do macoratti, lah ele mostra como fazer arquivos ".txt", e para não precisar que o usuario click em nada, é só colocar o codigo de criação de textos no meio desse que você já tem.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá FernandoConsegui um cara aqui no trabalho que me ajudou a resolver o problema, ele tb achou esse código bem confuso.Mas não entramos no merito de modificar o codigo pois para o cliente esta atendendo.Muito obrigado por sua atenção e preocupação em ajudar.

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.