Avatar billede doto Nybegynder
28. september 2009 - 09:04 Der er 21 kommentarer og
1 løsning

Hente filnavne ind i tabel fra mappe på c:\

Hej
Jeg har en database: Hent_Fil_Navne.accdb. I denne database har en jeg en tabel: 001tblFilNvn, og i tabellen et felt: mdb. Jeg har en formular: 001frmTblFilNvn med en knap: Importer. Når jeg klikker på knappen, vil jeg gerne have at navnene på de filer, mdb filer, som ligger i mappen C:\Winfinans hentes ind i tabellen.
Jeg mangler en VB kode til at kunne udføre denne hændelse.
Det skal lige tilføjes at jeg forsøgt mig med et svar givet på et lignende spørgsmål på Eksperten fra 2003: http://www.eksperten.dk/spm/372926, men jeg kan ikke få det til at fungere.
Nogen der kan hjælpe?
Avatar billede terry Ekspert
28. september 2009 - 09:13 #1
"men jeg kan ikke få det til at fungere."

what problem are you having?
Avatar billede doto Nybegynder
28. september 2009 - 09:24 #2
Jeg har forsøgt mig med følgende kode, men når jeg compile får jeg følgende fejl: User-defined type not defined ved nr. 2 linie: Dim cnn As ADODB.Connection.

Function HentFilListe(FilMappe As String)

Dim cnn As ADODB.Connection
Dim rsFilNavne As ADODB.Recordset
Dim strQuery As String
Dim FilNavn As String
Dim FilMappe As String

Set cnn = CurrentProject.Connection
Set rsFilNavne = New ADODB.Recordset

FilNavn = "C:\winfinans\"

strQuery = "SELECT * FROM Filnavne order by mdb asc"
rsFilNavne.Open strQuery, cnn, adOpenStatic, adLockOptimistic

If rsFilNavne.RecordCount > 0 Then
rsFilNavne.MoveFirst
FilNavn = Dir(FilMappe & "*.mdb")  ' Hent det første filnavn.
Do Until FilNavn = ""
With rsFilNavne
.AddNew
!mdb = FilNavn
.Update
End With

FilNavn = Dir    ' Hent næste datafilnavn.
rsFilNavne.MoveNext
Loop

Else
MsgBox "Der findes ingen filer i " & FilMappe, vbExclamation, "Ingen filer"
End If

rsFilNavne.Close
cnn.Close

End Function
Avatar billede terry Ekspert
28. september 2009 - 09:30 #3
You need a referecne to ADO.

In tools Reference you should be able to find Mocrosoft ActiveX Data Objects  2.8 or there abouts.
Avatar billede mugs Novice
28. september 2009 - 09:46 #4
På Thomas Jepsen's hjemmeside MakeITEasy.dk ligger der en funktion indlæs filnavne:

http://www.makeiteasy.dk/Home.asp
Avatar billede doto Nybegynder
28. september 2009 - 10:07 #5
Hej terry,

Nu kan jeg godt få lov at compile.Jeg har lavet koden i en mappe, modules, i vb. Når jeg skal kopiere den over til det sted den skal bruges, nemlig i tilknytning til knappen i formularen, skal jeg vælge et eller andet 'ved klik'. Men det kan da ikke være en hændelse når det er en funktion, eller hvad?
Avatar billede doto Nybegynder
28. september 2009 - 10:08 #6
Hej mugs,

Tak for tippet. Jeg forsøger og vender tilbage...
Avatar billede mugs Novice
28. september 2009 - 10:11 #7
en hændelse når det er en funktion

Jo - En hændelsesprocedure kan være både en Function eller en Sub.
Avatar billede doto Nybegynder
28. september 2009 - 10:26 #8
Nu ser min kode således ud:

Private Sub Importer_Click()

Dim cnn As ADODB.Connection
Dim rsFilNavne As ADODB.Recordset
Dim strQuery As String
Dim FilNavn As String

Set cnn = CurrentProject.Connection
Set rsFilNavne = New ADODB.Recordset

FilNavn = "C:\winfinans\"

strQuery = "SELECT * FROM Filnavne order by mdb asc"
rsFilNavne.Open strQuery, cnn, adOpenStatic, adLockOptimistic

If rsFilNavne.RecordCount > 0 Then
rsFilNavne.MoveFirst
FilNavn = Dir(FilMappe & "*.mdb")  ' Hent det første filnavn.
Do Until FilNavn = ""
With rsFilNavne
.AddNew
!mdb = FilNavn
.Update
End With

FilNavn = Dir    ' Hent næste datafilnavn.
rsFilNavne.MoveNext
Loop

Else
MsgBox "Der findes ingen filer i " & FilMappe, vbExclamation, "Ingen filer"
End If

rsFilNavne.Close
cnn.Close

End Sub


Men når jeg klikker på knappen i formularen får jeg en fejlmedelelse: Kan ikke finde inputtabellen eller forespørgslen filnavne. Og når jeg debugger viser den gult ved: rsFilNavne.Open strQuery, cnn, adOpenStatic, adLockOptimistic
Avatar billede terry Ekspert
28. september 2009 - 10:30 #9
Isnt the name of the table "001tblFilNvn"?

In the SQL you have ""SELECT * FROM Filnavne ..."!
Avatar billede terry Ekspert
28. september 2009 - 10:34 #10
I can also see another problem in your code

First you have

FilNavn = "C:\winfinans\"

Then you have which overwrites FilNavn

FilNavn = Dir(FilMappe & "*.mdb")  ' Hent det første filnavn.

I havent tested your code but I think you should have

FilMappe = "C:\winfinans\"
Avatar billede doto Nybegynder
28. september 2009 - 10:36 #11
Jeg har nu skiftet to liner ud med:

strQuery = "SELECT * 001tblFilNvn order by mdb asc"
rs001tblFilNvn.Open strQuery, cnn, adOpenStatic, adLockOptimistic

Men det virker ikke?
Avatar billede doto Nybegynder
28. september 2009 - 10:38 #12
Jeg er ingen ørn til vb.
Er der en af jer som kan skrive den nøjagtige kode?
Avatar billede terry Ekspert
28. september 2009 - 10:49 #13
If you can send me your db then I'll take a look for you.

ekspertenATsanthell.dk

AT = @
Avatar billede doto Nybegynder
28. september 2009 - 10:55 #14
Hej terry,

Tak - det gør jeg.
Avatar billede hugopedersen Nybegynder
28. september 2009 - 11:06 #15
Private Sub Command0_Click()
On Error GoTo Error_Command0_Click
  Const strFilmappe = "C:\Temp\"
  Dim rst As ADODB.Recordset
  Dim strSQL As String
  Dim FilNavn As String
 
  Set rst = New ADODB.Recordset
  strSQL = "SELECT fldFilename FROM 001tblFilNvn"
 
  rst.Open strSQL, CurrentProject.Connection, adOpenStatic, adLockOptimistic

  FilNavn = Dir(strFilmappe & "*.mdb")

  Do Until FilNavn = ""
    With rst
      .AddNew
      !fldFilename = FilNavn
      .Update
    End With
    FilNavn = Dir
  Loop

  rst.Close
  Set rst = Nothing

Exit_Command0_Click:
  Exit Sub

Error_Command0_Click:
  Select Case Err.Number
    Case 3219
    Case 3021
    Case 2501
    Case Is < 0
      Resume Next
    Case Else
      MsgBox Err.Number & ": " & Err.Description, vbOKOnly + vbCritical, "Error in procedure 'Command0_Click'"
  End Select
  Resume Exit_Command0_Click

End Sub
Avatar billede hugopedersen Nybegynder
28. september 2009 - 11:09 #16
Al din sortering og movefirst m.m. er unødvendig kode.
Dir tager filnavne 'in no particular order' så du har først noget ud af at sortere bagefter og det gør du bare i den query du bygger på din tabel.

Min kode har fejlcheck for eksisterende filnavne så hvis der ikke er nye, så dukker der ikke flere op i tabellen.
Der er ingen check for om filer er slettet.
Avatar billede terry Ekspert
28. september 2009 - 11:18 #17
Dim cnn As ADODB.Connection
Dim rsFilNavne As ADODB.Recordset
Dim strQuery As String
Dim FilNavn As String

Set cnn = CurrentProject.Connection
Set rsFilNavne = New ADODB.Recordset

FilMappe = "C:\winfinans\"

strQuery = "SELECT * FROM 001tblFilNvn order by Filnavne asc"
rsFilNavne.Open strQuery, cnn, adOpenStatic, adLockOptimistic

If rsFilNavne.RecordCount > 0 Then
rsFilNavne.MoveFirst
FilNavn = Dir(FilMappe & "*.mdb")  ' Hent det første filnavn.
Do Until FilNavn = ""
With rsFilNavne
.AddNew
!Filnavne = FilNavn
.Update
End With

FilNavn = Dir    ' Hent næste datafilnavn.
rsFilNavne.MoveNext
Loop

Else
MsgBox "Der findes ingen filer i " & FilMappe, vbExclamation, "Ingen filer"
End If

rsFilNavne.Close
cnn.Close


And as Hugo points out the code could be slightly different, but this works.
Avatar billede doto Nybegynder
28. september 2009 - 11:26 #18
DET VIRKER, TERRY!

TAK! Du skal have dine points!
Avatar billede doto Nybegynder
28. september 2009 - 11:30 #19
øh hvordan er det lige at man tildeler points?
Avatar billede terry Ekspert
28. september 2009 - 11:32 #20
You should be able to select from a list of those who have given an answer
Avatar billede terry Ekspert
28. september 2009 - 11:45 #21
Thanks Dorthe

Hugo points out that you could optimize the code a little by removing the ORDER BT inthe SQL and also .MoveNext on the recordset which isnt really necessary when you are just adding records.
Avatar billede doto Nybegynder
28. september 2009 - 12:39 #22
Hej Terry og Hugo,

Tak for det ekstra tip.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Dyk ned i databasernes verden på et af vores praksisnære Access-kurser

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester





Premium
Søstrene Grene skifter Microsoft ud med SAP og rykker for første gang i clouden i stor ERP-transformation: Der er brug for en helt ny tilgang