MaximoAccess

Caro Usuário, antes de postar pela primeira vez, leia as regras do fórum.

Obrigado

Administração do MaximoAccess

Dicas Ms Access, Exemplos Ms Access, Codigos VBA Ms Access, SQL Ms Access

    Comparar e validar campos antes de importar arquivo OFX

    Compartilhe

    JSommavilla
    Novato
    Novato

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 40
    Registrado : 21/09/2014

    Comparar e validar campos antes de importar arquivo OFX

    Mensagem  JSommavilla em Qua 20 Dez - 2:32

    Prezados, boa noite!

    Gostaria de fazer importação do arquivo OFX para o meu BD. Já tenho o código que importa os dados e está funcionando perfeitamente. Gostaria de importar esses dados com maior segurança, para fazer as devidas referencias corretas com as contas já pré cadastradas no BD.

    Gostaria de comparar os dois campos abaixo que vêm no arquivo OFX:

    Campo que informa o numero do banco:
    0341

    Campo que informa o numero da agencia (2222) e o numero da conta corrente já com o digito verificador (444444)
    2222444444

    No meu BD tenho uma tabela onde estão os dados das contas bancarias, como segue:

    nomedobanco - (Nome do banco Exemplo: Itau)
    idbanco - (numero do banco: Exemplo: 0341)
    idconta - (numero da agencia e conta corrente: Exemplo: 2222444444)
    conta - (numero da conta contábil: Exemplo: 10101)


    O que eu quero fazer é que antes de concretizar a importação, um código que permita checar se o numero do banco e da conta corrente estão corretos.

    A lógica é mais ou menos assim:

    se idbanco (BD) for igual a (campo arquivo OFX)  E  idconta (BD) for igual a (campo arquivo OFX), então importar

    caso contrario

    msgbox " banco e conta corrente não conferem com o arquivo OFX"

    Também gostaria de poder selecionar a data dos lançamentos a importar do arquivo OFX, como por exemplo: (campo arquivo OFX) da seguinte forma:

    entre [Me.Dtinicial] e [Me.Datfinal]


    Sei que isso pode ser dentro de uma condição "IF", já tentei mas não consegui fazer que os campos sejam comparados.

    Segue abaixo o código completo que uso para a importação do arquivo OFX para que alguém me oriente onde e como colocar essas condições. Creio que é na "SELECT CASE ROTULO":


    Código:
    Public Function ImportaOFX(ByVal caminho As String, ByVal cConta As String)

    Dim db As Database
    Dim rs As Recordset
    Dim r As Recordset
    Dim CodOFx As Integer
    Dim Sec As Variant
    Dim Rotulo As String
    Dim Linha As String
    Set db = CurrentDb

    caminho = Me.txtCaminho
    cConta = Me.txtConta

    'Abrir arquivo, adicionar novo extrato na tabela OFX
    '---------------------------------------------------

    nFileNum = FreeFile
    Open caminho For Input As nFileNum

    'Abrir tabela tbl_OFX e adicionar novo extrato
    Set r = db.OpenRecordset("tbl_OFX", dbOpenDynaset)
    r.AddNew
    r!NomeExtrato = "EXT-" & cConta & Format(Time, "HHssmm")
    r!Data = Format(Date, "dd/mm/yyyy", vbUseSystemDayOfWeek, vbUseSystem)
    r!Conta = cConta

    'Percorre linha por linha do arquivo
    Do Until EOF(nFileNum)
    Line Input #nFileNum, slinetext

    If slinetext = "" Then 'se a linha é vazia, vai pra próxima!
    GoTo pulalinha
    End If

    Linha = LTrim(Replace(slinetext, vbTab, " ")) 'Substitui as tabulações por espaços e corta os espaços
    Sec = Split(Linha, ">", 2, vbTextCompare) 'Secciona a linha até o caracter >
    Rotulo = Sec(0) 'pega a primeira parte da seção

    Select Case Rotulo
    Case Is = "<BANKID"
    r!idbanco = Mid(Linha, 9, 4)
    Case Is = "<ACCTID"
    r!idconta = Mid(Linha, 9, 15)
    Case Is = "<DTSTART"
    r!dti = DateSerial(Int(Mid(Linha, 10, 4)), Int(Mid(Linha, 14, 2)), Int(Mid(Linha, 16, 2)))
    Case Is = "<DTEND"
    r!dtf = DateSerial(Int(Mid(Linha, 8, 4)), Int(Mid(Linha, 12, 2)), Int(Mid(Linha, 14, 2)))
    End Select
    pulalinha:
    'Form_OFXimport.pbar.Value = Form_OFXimport.pbar.Value + 0.1 'Barra de progresso
    Loop

    r.Update
    r.MoveLast

    CodOFx = r!cod 'pega o código do extrato salvo para vincular os movimentos

    r.Close
    Close nFileNum
    Set r = Nothing

    'Agora lançar os movimentos
    '-------------------------------------------------------------------------

    Open caminho For Input As nFileNum 'abre o mesmo arquivo

    Set rs = db.OpenRecordset("tbl_SubOFX", dbOpenDynaset) 'abre a tabela para receber os dados

    Do Until EOF(nFileNum)
    Line Input #nFileNum, slinetext

    If slinetext = "" Then 'se a linha é vazia, pula ela!
    GoTo passadireto
    End If

    Linha = LTrim(Replace(slinetext, vbTab, " ")) 'substitui as tabulações por espaços e corta os espaços
    Sec = Split(Linha, ">", 2, vbTextCompare) 'secciona a linha (>Piscando
    Rotulo = Sec(0) 'pega a primeira parte da seção

    Select Case Rotulo
    Case Is = "<STMTTRN"
    rs.AddNew
    Case Is = "<TRNTYPE"
    'define o tipo = 1 ou 2 e armazena
    If Mid(Linha, 10, 5) = "DEBIT" Then
    rs!Tipo = 2
    Else
    rs!Tipo = 1
    End If
    Case Is = "<DTPOSTED"
    'armazena a data
    rs!Data = DateSerial(Int(Mid(Linha, 11, 4)), Int(Mid(Linha, 15, 2)), Int(Mid(Linha, 17, 2)))
    Case Is = "<TRNAMT"
    'armazena o valor
    If rs!Tipo = 1 Then
    rs!Valor = Replace(Mid(Linha, 9), ".", ",")
    Else
    rs!Valor = Replace(Mid(Linha, 10), ".", ",")
    End If
    Case Is = "<CHECKNUM"
    'armazena o cheque
    rs!doc = Mid(Linha, 11, 6)
    Case Is = "<MEMO"
    'armazena o memorando
    rs!Memorando = Mid(Linha, 7, 50)
    Case Is = "</STMTTRN"
    'armazena o CODOFX
    rs!OFX = CodOFx
    rs.Update
    Case Is = "</OFX"
    rs.Close
    'sai da função
    End Select
    passadireto:

    Loop

    Close nFileNum

    MsgBox "Arquivo OFX importado com sucesso!", vbInformation, "Mensagem"

    Set db = Nothing
    Set rs = Nothing
    End Function


    Agradeço muito por essa ajuda!

    JSommavilla
    Novato
    Novato

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 40
    Registrado : 21/09/2014

    Re: Comparar e validar campos antes de importar arquivo OFX

    Mensagem  JSommavilla em Sex 9 Fev - 1:39

    Alguma ajuda neste caso?

    Obrigado.

      Data/hora atual: Qua 21 Fev - 15:07