Olá Feras de plantão, boa noite.
Há tempos utilizo um código do Mestre JPaulo para capturar ficheiros que possuam uma imagem jpg e escrever o caminho completo desta imagem numa tabela e funciona redondinho.
O problema atual é que esta tabela agora é vinculada a outra num relacionamento 1/Muitos e não consigo mais fazer a "coisa funfar legal.
Explicando: Possuo um formulário vinculado à tabela tblColeção que possui um campo de chave primária Index e outros campos. A tabela tblColeção se relaciona com a tabela tblPastas (do lado Muitos) pelo campo Index do tipo numero. Nesta tabela existe o campo Pastas que armazena o caminho do ficheiro.
Quando desfaço o relacionamento a coisa funciona mas quando crio o relacionamento não consigo capturar ficheiro algum.
O código é esse:
Option Compare Database
Option Explicit
Public Function ContaFicheirosExtraiNome(strCaminho As String, strIncluiSubPastas As Boolean)
'By JPaulo ® Maximo Access
'Requer a seguinte referência VBA ativa:
'Microsoft Scripting Runtime
'Para chamar a função, deve colocar no pressionar de um botão: Call ContaFicheirosExtraiNome("C:\SuaPasta\",True)
Dim fso As Object, strPasta As Object, strSubPasta As Object, strFicheiro As Object
Dim strConta As Long, strSql As String
Set fso = CreateObject("Scripting.FileSystemObject")
Set strPasta = fso.GetFolder(strCaminho)
'Percorre a drive e extraí o nome das pastas, subPastas e ficheiros
For Each strFicheiro In strPasta.Files
'Insere na tabela o caminho completo dos ficheiros com as extensões JPEG
If Mid([strFicheiro], InStrRev([strFicheiro], "\") + 1) Like "*.jpg*" Then
CurrentDb.Execute "INSERT INTO tblPastas (Pastas) SELECT '" & strPasta.path & "\" & strFicheiro.NAME & "'"
'CurrentDb.Execute "INSERT INTO tblPastas (Pastas) SELECT '" & Replace(strPasta.path, "'", "''") & "\" & strFicheiro.NAME & "'"
strConta = strConta + 1
Else
End If
Next strFicheiro
'Se existirem subpastas, insere na tabela o caminho completo dos ficheiros
If strIncluiSubPastas = True Then
For Each strSubPasta In strPasta.SubFolders
ContaFicheirosExtraiNome strSubPasta.path, True
Next strSubPasta
End If
Set strFicheiro = Nothing
Set strPasta = Nothing
End Function
No formulário possuo um botão de comando com o seguinte código:
Private Sub Comando1_Click()
Dim strCaminho As String
If MsgBox("Você está seguro de executar esta ação no momento ? " & Chr(13) & "Saiba que irá alterar toda a base de dados. ", vbYesNo, " InfoBasic Smart System") = 6 Then
MsgBox "Essa operação pode demorar alguns minutos, por favor, Aguarde ... ", , " InfoBasic Smart System"
strCaminho = InputBox("Introduza o caminho dos ficheiros.")
Me.Caption = " Por favor, aguarde ..."
Screen.MousePointer = 11
Me.TimerInterval = 2000
Call ContaFicheirosExtraiNome(strCaminho, True)
MsgBox "Arquivos importados com sucesso. ", , " InfoBasic Smart System"
Screen.MousePointer = 0
Me.TimerInterval = 0
Call MouseCursor(32649&)
Me.Refresh
Me.Caption = " InfoBasic Smart System"
Else
MsgBox "A ação de capitura foi cancelada pelo usuário. ", vbInformation, " InfoBasic Smart System"
End If
End Sub
Já torrei milhões de neurônios e não consigo fazer a coisa funcionar quando ambas as tabelas estão vinculadas.
Sem o relacionamento volto a afirmar que funciona mas o campo Index da tabela tblPastas fica em branco.
A imagem abaixo mostra o resultado quando desfaço o relacionamento:
" />
Alguém se habilita?
Abraços, WSenna
Há tempos utilizo um código do Mestre JPaulo para capturar ficheiros que possuam uma imagem jpg e escrever o caminho completo desta imagem numa tabela e funciona redondinho.
O problema atual é que esta tabela agora é vinculada a outra num relacionamento 1/Muitos e não consigo mais fazer a "coisa funfar legal.
Explicando: Possuo um formulário vinculado à tabela tblColeção que possui um campo de chave primária Index e outros campos. A tabela tblColeção se relaciona com a tabela tblPastas (do lado Muitos) pelo campo Index do tipo numero. Nesta tabela existe o campo Pastas que armazena o caminho do ficheiro.
Quando desfaço o relacionamento a coisa funciona mas quando crio o relacionamento não consigo capturar ficheiro algum.
O código é esse:
Option Compare Database
Option Explicit
Public Function ContaFicheirosExtraiNome(strCaminho As String, strIncluiSubPastas As Boolean)
'By JPaulo ® Maximo Access
'Requer a seguinte referência VBA ativa:
'Microsoft Scripting Runtime
'Para chamar a função, deve colocar no pressionar de um botão: Call ContaFicheirosExtraiNome("C:\SuaPasta\",True)
Dim fso As Object, strPasta As Object, strSubPasta As Object, strFicheiro As Object
Dim strConta As Long, strSql As String
Set fso = CreateObject("Scripting.FileSystemObject")
Set strPasta = fso.GetFolder(strCaminho)
'Percorre a drive e extraí o nome das pastas, subPastas e ficheiros
For Each strFicheiro In strPasta.Files
'Insere na tabela o caminho completo dos ficheiros com as extensões JPEG
If Mid([strFicheiro], InStrRev([strFicheiro], "\") + 1) Like "*.jpg*" Then
CurrentDb.Execute "INSERT INTO tblPastas (Pastas) SELECT '" & strPasta.path & "\" & strFicheiro.NAME & "'"
'CurrentDb.Execute "INSERT INTO tblPastas (Pastas) SELECT '" & Replace(strPasta.path, "'", "''") & "\" & strFicheiro.NAME & "'"
strConta = strConta + 1
Else
End If
Next strFicheiro
'Se existirem subpastas, insere na tabela o caminho completo dos ficheiros
If strIncluiSubPastas = True Then
For Each strSubPasta In strPasta.SubFolders
ContaFicheirosExtraiNome strSubPasta.path, True
Next strSubPasta
End If
Set strFicheiro = Nothing
Set strPasta = Nothing
End Function
No formulário possuo um botão de comando com o seguinte código:
Private Sub Comando1_Click()
Dim strCaminho As String
If MsgBox("Você está seguro de executar esta ação no momento ? " & Chr(13) & "Saiba que irá alterar toda a base de dados. ", vbYesNo, " InfoBasic Smart System") = 6 Then
MsgBox "Essa operação pode demorar alguns minutos, por favor, Aguarde ... ", , " InfoBasic Smart System"
strCaminho = InputBox("Introduza o caminho dos ficheiros.")
Me.Caption = " Por favor, aguarde ..."
Screen.MousePointer = 11
Me.TimerInterval = 2000
Call ContaFicheirosExtraiNome(strCaminho, True)
MsgBox "Arquivos importados com sucesso. ", , " InfoBasic Smart System"
Screen.MousePointer = 0
Me.TimerInterval = 0
Call MouseCursor(32649&)
Me.Refresh
Me.Caption = " InfoBasic Smart System"
Else
MsgBox "A ação de capitura foi cancelada pelo usuário. ", vbInformation, " InfoBasic Smart System"
End If
End Sub
Já torrei milhões de neurônios e não consigo fazer a coisa funcionar quando ambas as tabelas estão vinculadas.
Sem o relacionamento volto a afirmar que funciona mas o campo Index da tabela tblPastas fica em branco.
A imagem abaixo mostra o resultado quando desfaço o relacionamento:
" />
Alguém se habilita?
Abraços, WSenna
Última edição por wsenna em 22/3/2015, 12:20, editado 1 vez(es)