Ir para conteúdo
Fórum Script Brasil
  • 0

problema com rotina + SQL


Humm

Pergunta

segue o codigo:

Private Sub BT_GERA_CAD_Click()
Dim DB As DAO.Database
Dim NFE As DAO.Recordset
Dim strSQL As String
Dim Sai As String
Dim PASTA As String
Dim ARQUIVO As String
    
    strSQL = "SELECT CONFIG.CNPJ, CONFIG.RSOC, CONFIG.FANT, CONFIG.IE, CONFIG.END, CONFIG.NUM, CONFIG.COMP, "
    strSQL = strSQL & "CONFIG.BAIRRO, CONFIG.MUNICIPIO, IBGE_MUN.NomeMunic, CONFIG.UF, CONFIG.CEP, CONFIG.PAIS, BACEN_PAISES.PAIS, "
    strSQL = strSQL & "CONFIG.TEL FROM ((CONFIG INNER JOIN IBGE_UF ON CONFIG.UF = IBGE_UF.UF) INNER JOIN IBGE_MUN ON IBGE_UF.ID "
    strSQL = strSQL & "= IBGE_MUN.UF) INNER JOIN BACEN_PAISES ON CONFIG.PAIS = BACEN_PAISES.COD;"

    Set DB = CurrentDb
    Set NFE = DB.OpenRecordset(strSQL)

    'PASTA E ARQUIVO
    PASTA = GetDesktopFolder() & "\NF-e"
    ARQUIVO = PASTA & "\Cadastro do Emitente - " & Format(Date, "DD-MM-YY") & ".txt"
    
    If FolderExists(PASTA) Then
        GoTo SEGUE
    Else
        MkDir (PASTA)
    End If

SEGUE:
    If FileExists(ARQUIVO) Then
        If MsgBox("O arquivo já existe." & vbNewLine & "Deseja substituir o arquivo existente?", vbYesNo, "Atenção!") = vbNo Then
            GoTo Saida
        End If
    End If
    
    Open ARQUIVO For Output As #1
    
    Sai = "A|1.01"
    Print #1, Sai
    Sai = "C|CNPJ|" & !CNPJ & "|" & !RS & "|" & !FANT & "|" & !IE & "||||" & !End & "|" & !Num & "|" & !Comp & "|" & !Bairro & "|" & !MUNICIPIO & "|" & !NOMEMUNIC & "|" & !UF & "|" & !CEP & "|" & !CONFIG.PAIS & "|" & !BACEN_PAISES.PAIS & "|" & !TEL & "|"
    Print #1, Sai
    
    MsgBox "Arquivo gerado com sucesso:" & vbNewLine & ARQUIVO, , "Mensagem"
Saida:
    Set DB = Nothing
    Set NFE = Nothing
    Close #1
    Exit Sub

#If DESENV Then
    Stop
    Resume
#End If
    Resume Saida
End Sub

ao tentar executar, o vba da erro de referencia invalida ou não qualificada no !CNPJ

to copiando esse codigo de outro projeto de exemplo e não entendo onde ta o problema... porque ele não reconhece o CNPJ da SQL

Link para o comentário
Compartilhar em outros sites

4 respostass a esta questão

Posts Recomendados

  • 0

Na tabela existe mesmo o objeto CNPJ?

Esse erro geralmente ocorre quando se tenta utilizar um campo inexistente, no caso tente pegar o codigo SQL do seu VBA fazer uma query, execute-a e veja se ocorre alguma falha.

Link para o comentário
Compartilhar em outros sites

  • 0

existe sim..

na verdade o codigo sql eu retirei d euma consulta funcionando hehe..

eu sempre crio a consulta pra retirar o codigo, saca... o problema é q o vba é muito sensivel com sql.. qualquer coisinha, encrespa.

se eu tornara consulta menos complexa, retirando as relacoes inner join por exemplo, ele já funciona.

vai entender?

Editado por Humm
Link para o comentário
Compartilhar em outros sites

  • 0

Acho entendi que entendi, no caso o vba está tendo problema de tratar o join. A saída seria utilizar uma expressão sem o join, já vi sua SQL agora se puder coloque a sua estrutura de tabela pra mim poder ver se consigo relaciona-las sem join.

Link para o comentário
Compartilhar em outros sites

  • 0
Acho entendi que entendi, no caso o vba está tendo problema de tratar o join. A saída seria utilizar uma expressão sem o join, já vi sua SQL agora se puder coloque a sua estrutura de tabela pra mim poder ver se consigo relaciona-las sem join.

então.. olha essa..

na verdade esse codigo é para criar uma aquivo txt com o conteudo que você quiser.

eu achei isso num exemplo q encontrei na internet.

você pode baixar aqui

http://www.esnips.com/doc/3d1eee0b-839f-4e...d0a49/ImpDireta

no exemplo, o cara usa inner join, usa clausula where e o diabo a 4 com varias tabelas, e funciona na boa. ainda usa with com loop e o escambau.. hehe tudo vindo da sql e consegue.

veja ai:

Private Sub btImpDir_Click()
'---------------------------------------------------------------------------------------
' Procedimento : btImpDir_Click
' Data e Hora  : 10/08/07 12:32
' Autor        : Osmar José Correia Júnior
' O que faz    : Imprime um relatório direto para a impressora
'
' Utilize à vontade mas não altere este cabeçalho.
' Valorize quem o ajuda.
'---------------------------------------------------------------------------------------
On Error GoTo Erro_btImpDir_Click

Dim DB As DAO.Database
Dim RSP As DAO.Recordset ' Pedidos
Dim RSD As DAO.Recordset ' Detalhes dos pedidos
Dim strSQL As String
Dim Sai As String

Dim CtaItens As Integer
Dim SomaNor As Currency
Dim SomaDesc As Currency
Dim SomaReal As Currency


    strSQL = "SELECT Pedidos.NúmeroDoPedido, Pedidos.NomeDoDestinatário, Pedidos.EndereçoDoDestinatário, "
    strSQL = strSQL & "Pedidos.CidadeDeDestino, Pedidos.RegiãoDeDestino, Pedidos.CEPdeDestino, "
    strSQL = strSQL & "Pedidos.PaísDeDestino, Clientes.CódigoDoCliente, Clientes.NomeDaEmpresa, "
    strSQL = strSQL & "Clientes.Endereço, Clientes.Cidade, Clientes.Região, Clientes.CEP, Clientes.País, "
    strSQL = strSQL & "[Nome] & ' ' & [Sobrenome] AS Vendedor, Pedidos.DataDoPedido, Pedidos.DataDeEntrega, "
    strSQL = strSQL & "Pedidos.DataDeEnvio, Pedidos.Via, Pedidos.Frete, [transportadoras]![NomeDaEmpresa] AS Transp "
    strSQL = strSQL & "FROM Transportadoras INNER JOIN (Funcionários INNER JOIN "
    strSQL = strSQL & "(Clientes INNER JOIN Pedidos ON Clientes.CódigoDoCliente = Pedidos.CódigoDoCliente) "
    strSQL = strSQL & "ON Funcionários.CódigoDoFuncionário = Pedidos.CódigoDoFuncionário) "
    strSQL = strSQL & "ON Transportadoras.CódigoDaTransportadora = Pedidos.Via "
    strSQL = strSQL & "WHERE (((Pedidos.NúmeroDoPedido)=" & [Forms]![Pedidos]![NúmeroDoPedido] & "));"

    Set DB = CurrentDb
    Set RSP = DB.OpenRecordset(strSQL) ' Cria o recordset com o registro a ser impresso
    
    strSQL = "SELECT [Detalhes do Pedido].NúmeroDoPedido, [Detalhes do Pedido].CódigoDoProduto, "
    strSQL = strSQL & "Produtos.NomeDoProduto, [Detalhes do Pedido].PreçoUnitário, "
    strSQL = strSQL & "[Detalhes do Pedido].Quantidade, [Detalhes do Pedido].Desconto, "
    strSQL = strSQL & "([Detalhes do Pedido]![PreçoUnitário]*[Quantidade]) AS VlrNor, "
    strSQL = strSQL & "[VlrNor]*[Desconto] AS VlrDesc, [VlrNor]-[VlrDesc] AS VlrTot "
    strSQL = strSQL & "FRO M Categorias INNER JOIN (Produtos INNER JOIN [Detalhes do Pedido] "
    strSQL = strSQL & "ON Produtos.CódigoDoProduto = [Detalhes do Pedido].CódigoDoProduto) "
    strSQL = strSQL & "ON Categorias.CódigoDaCategoria = Produtos.CódigoDaCategoria "
    strSQL = strSQL & "WHERE ((([Detalhes do Pedido].NúmeroDoPedido)=" & [Forms]![Pedidos]![NúmeroDoPedido] & "));"
    
    Set RSD = DB.OpenRecordset(strSQL)

    strSQL = Application.CurrentProject.path
    Open strSQL & "\_TesteImp.txt" For Output As #1
'    Open "LPT1" For Output As #1 ' Abre o arquivo impressora
'    Open "c:\_TesteImp.txt" For Output As #1
' Estas duas linhas são utilizadas apenas como gabarito de posições
' Faça todos os testes em papel branco e compare o posicionamento com o formulário
' de saida, ignorando essas duas linhas
    Sai = "         1         2         3         4         5         6         7         8         9         0          1        2         3"
    Print #1, Sai
    Sai = "123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012"
    Print #1, Sai
    Sai = "---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+--"
    Print #1, Sai
    Print #1,: Print #1,
    Sai = Space(100) & Format(RSP!NúmeroDoPedido, "000000")
    Print #1, Sai
    Print #1,: Print #1,
    Sai = Space(10) & JustStr(RSP!NomeDaEmpresa, " ", 50) & Space(20) & JustStr(RSP!NomeDoDestinatário, " ", 50)
    Print #1, Sai
    Sai = Space(10) & JustStr(RSP!Endereço, " ", 50) & Space(20) & JustStr(RSP!EndereçoDoDestinatário, " ", 50)
    Print #1, Sai
    Sai = Space(10) & JustStr(RSP!Cidade, " ", 25) & " - " & JustStr(RSP!Região, " ", 15) & " - " & JustStr(RSP!CEP, " ", 24) & JustStr(RSP!CidadeDeDestino, " ", 25) & " - " & JustStr(RSP!RegiãoDeDestino, " ", 15) & " - " & RSP!CEPdeDestino
    Print #1, Sai
    Sai = Space(10) & JustStr(RSP!País, " ", 70) & RSP!PaísDeDestino
    Print #1, Sai
    Print #1,: Print #1,
    Sai = Space(10) & JustStr(RSP!Vendedor, " ", 70) & RSP!Transp
    Print #1, Sai
    Print #1,: Print #1,
    CtaItens = 0
    SomaNor = 0
    SomaDesc = 0
    SomaReal = 0
    With RSD
        .MoveFirst
        Do While Not .EOF
            Sai = Space(5) & JustStr(!CódigoDoProduto, " ", 10) & JustStr(!NomeDoProduto, " ", 40) & JustStr(!Quantidade, " ", 8, True)
            Sai = Sai & JustStr(Format(!PreçoUnitário, "#,##0.00"), " ", 15, True) & JustStr(Format(!VlrNor, "#,##0.00"), " ", 15, True)
            Sai = Sai & JustStr(Format(!Desconto, "#0.00%"), " ", 8, True) & JustStr(Format(!vlrdesc, "#,##0.00"), " ", 15, True)
            Sai = Sai & JustStr(Format(!vlrtot, "#,##0.00"), " ", 15, True)
            CtaItens = CtaItens + 1
            SomaNor = SomaNor + !VlrNor
            SomaDesc = SomaDesc + !vlrdesc
            SomaReal = SomaReal + !vlrtot
            Print #1, Sai
            .MoveNext
        Loop
    End With
    Print #1,: Print #1,
    Sai = Space(55) & JustStr(CStr(CtaItens), " ", 8, True) & Space(15) & JustStr(Format(SomaNor, "#,##0.00"), " ", 15, True)
    Sai = Sai & Space(8) & JustStr(Format(SomaDesc, "#,##0.00"), " ", 15, True) & JustStr(Format(SomaReal, "#,##0.00"), " ", 15, True)
    Print #1, Sai
    Print #1,: Print #1,
    Sai = Space(93) & "TOTAL DA NOTA  " & JustStr(Format(SomaReal, "#,##0.00"), " ", 15, True)
    Print #1, Sai
    Sai = Space(93) & "FRETE          " & JustStr(Format(RSP!Frete, "#,##0.00"), " ", 15, True)
    Print #1, Sai
    Sai = Space(93) & "TOTAL FINAL    " & JustStr(Format(SomaReal + RSP!Frete, "#,##0.00"), " ", 15, True)
    Print #1, Sai
    Print #1,: Print #1,
    Print #1,: Print #1,
    Print #1, "                                            ISSO É SÓ UMA DEMONSTRAÇÂO DO QUE PODE SER FEITO"
    Print #1, "                               VEJA MAIORES INFORMAÇÕES SOBRE FORMATAÇÃO DE CARACTERES NO MANUAL DA SUA IMPRESSORA"
Saida:
    Set DB = Nothing
    Set RSP = Nothing
    Close #1
    Exit Sub
Erro_btImpDir_Click:
    MsgBox Err.Description & vbCrLf & vbCrLf & "No módulo Form_Pedidos, tipo Documento VBA, procedimento btImpDir_Click", vbExclamation + vbOKOnly, "Erro: " & CStr(Err.Number)
#If DESENV Then
    Stop
    Resume
#End If
    Resume Saida
End Sub

eu não consigo adaptar o codigo na minha necessidade, sendo que to fazendo o mesmo q tem la, so mudando a string sql no caso, e o vba fica implicando com os campos. inclusive montando aconsulta, e depois copiando o codigo sql pra n ter erro.

já comparei quase tudo, inclusive tem uma funçao em modulo la no exemplo.

eu so consigo fazer funcionar a sql se eu torna-la simples..

por exemplo, ao invés de usar uma sql pra trazer todos os dados, relacionando tabelas com inner join e filtrando com where, eu criei uma consulta acrescimo antes e executo com docmd.openquery pra inserir todos os dados numa tabela unica, e a partir dela eu consigo chamar no sql do vba, porque fica sem inner join e sem where. sacou?

mas eu queria entender porque n to conseguindo usar a sql que eu quero.

a unica coisa que n comparei ainda é o formato dos campos que o cara usa no exemplo.. ve se você consegue desvendar essa..

pra quem ta trabalhando com nota fiscal eletronica, criar aquivos txt é uma boa

Editado por Humm
Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,3k
    • Posts
      652,2k
×
×
  • Criar Novo...