Tafels linken met VBA code resulteert in Type Mismatch.

Status
Niet open voor verdere reacties.

petervanN

Gebruiker
Lid geworden
3 mrt 2008
Berichten
23
De onderstaande VBA code wil maar niet werken. Ik heb al het andere verwijderd om te zorgen dat ik geen conflicten ergens mee zou krijgen, en namen van Tabel e.d. zijn allemaal correct.Toch krijg ik bij het zetten van een recordset een foutmelding, Runtime Error 13, Type Mismatch. Ik krijg het maar niet voor elkaar dit weg te krijgen. Iemand enig idee?

Code:
Private Sub LINKTABLES_Click()

Dim PfadTxt As String
Dim AktuelleDB As Database
Dim tblLink, tblName, tblNewName As String
Dim MeinPfadTxt As Recordset

    Set AktuelleDB = CurrentDb
    Set MeinPfadTxt = AktuelleDB.OpenRecordset("LinkPath")

        MeinPfadTxt.Move (3)
            tblLink = MeinPfadTxt.Fields(1).Value
            tblName = MeinPfadTxt.Fields(2).Value
            tblNewName = MeinPfadTxt.Fields(3).Value

DoCmd.TransferDatabase acLink, "Microsoft Access", tblLink, acTable, tblName, tblNewName, False

End Sub
 
Je recordset heeft een vreemd pad.
Code:
Set MeinPfadTxt = AktuelleDB.OpenRecordset("LinkPath")
LinkPath is vast geen goed goede naam.

Als dat wel het geval is: op welke regel krijg je die foutmelding?
 
Dat is wel precies de regel waarin ik een foutmelding krijg ja. Maar dat LinkPath is gewoon mijn tabelnaam, daar kan toch niet zoveel mis aan zijn? Of hoort daar wat anders te staan?
 
Dat is wel precies de regel waarin ik een foutmelding krijg ja. Maar dat LinkPath is gewoon mijn tabelnaam, daar kan toch niet zoveel mis aan zijn? Of hoort daar wat anders te staan?
Lijkt oke dan.
Kan je een voorbeeld database posten? Gezipt?
 
Omdat je references niet goed staan wordt voor het recordset object een ADO recordset genomen ipv de default DAO recordset. Verwissel je "Microsoft DAO 3.6 Object Library" met "Microsoft ActiveX Data Object 2.1 Library" zodat "Microsoft DAO 3.6 Object Library" boven "Microsoft ActiveX Data Object 2.1 Library" staat, dan gaat alles goed.

Een opmerking over je code de declaratie
Code:
Dim tblLink, tblName, tblNewName As String
resulteert in tweemaal een variant en eenmaal een string. Ik denk dat je drie strings wilt.
Code:
Dim tblLink As String
Dim tblName As String
Dim tblNewName As String
Ik zie in je code dat je gebruik maakt van optionele parameters. Je controleert daarna of ze zijn doorgegeven met behulp van de functie IsMissing. Deze functie werkt alleen op variabelen van het type variant. Die hebben daar een speciaal bitje voor. Je kan het best je optionele parameters een default waarde meegeven:
Code:
Public Function FileDialog(Optional OpenSave As Boolean = True, _
    Optional Titel As String = "Titel", Optional Filter As String = "Access (*.mdb)", _
...
Verder wil ik je attent maken op het bestaan van de built-in filedialog
Code:
Public Function SelectSingleFile(strCurDir As String, strDialogTitle As String, intFilter As FileType) As String
   ' Hetzelfde als SelectOneFile maar dan met behulp van de built-in Application.FileDialog.
   On Error GoTo Err_SelectSingleFile

   Dim fd As FileDialog
   Dim varSelectedItem As Variant
   Dim strFile As String
   
   'Create a FileDialog object as a Folder Picker dialog box.
   Set fd = Application.FileDialog(msoFileDialogFilePicker)
   strFile = ""
   
   With fd
      .Title = strDialogTitle
      .ButtonName = "&Select"
      .InitialView = msoFileDialogViewDetails
      'Add a filter that includes MDB or XLS files and make it the first item in the list.
      .Filters.Clear
      Select Case intFilter
        Case FileType.Access
            .Filters.Add "Access databases", "*.mdb", 1
        Case FileType.Excel
            .Filters.Add "Excel spreadsheet", "*.xls", 1
      End Select
      .Filters.Add "Alle bestanden", "*.*", 2
      'Sets the initial file filter to number 1.
      .FilterIndex = 1
      If .Show = -1 Then
         For Each varSelectedItem In .SelectedItems
            If Len(strFile) > 0 Then
                strFile = strFile & ", " & varSelectedItem
            Else
                strFile = varSelectedItem
            End If
         Next varSelectedItem
      Else
         strFile = ""
      End If
   End With

    SelectSingleFile = strFile
        
    Set fd = Nothing

Exit_SelectSingleFile:
   Set fd = Nothing
   Exit Function

Err_SelectSingleFile:
   ErrorProc Err, Error$, "SelectSingleFile", "basFileDialog"
   Resume Exit_SelectSingleFile

End Function
HTH:D
 
Die Modules zijn niet van mij, die heb ik gekregen van een collega om een file dialog te krijgen. Ik zit het even te proberen, ik kom alweer een eind verder, SUPER bedankt!
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan