Tabel wordt niet herkend na aanmaken via VBA

Status
Niet open voor verdere reacties.

ThaPloeg2

Nieuwe gebruiker
Lid geworden
18 mrt 2013
Berichten
2
Dag,

Ik probeer in Access (office 2003) via VBA een tabel uit de database te verwijderen en vervolgens een nieuwe tabel te creëren (vanuit een andere database). Deze tabel heet "T_ImportOrderList". Dit werkt prima. Vervolgens wil ik m.b.v. SQL code een andere tabel bijwerken op basis van de zojuist aangemaakte tabel. Dit lukt niet. Ik krijg de volgende foutmelding:

"De Microsoft Jet Database Engine kan de invoertabel of query T_ImportOrderList niet vinden. Zorg ervoor dat deze bestaat en dat de naam correct is gespeld."

Als ik de code stop en vervolgens opnieuw deze "bijwerk SQL" uitvoer werkt het wel. Maar dat vergt dus een handmatige actie, welke ik wil voorkomen. Ik vermoed dat de MS Jet Database Engine tussentijds vernieuwd moet worden ofzo. Enig idee hoe ik dit kan oplossen?

Hieronder de toegepaste code:

Code:
Function Mod_RefreshData()
'On Error GoTo ErrorMsg
Dim strDB As String

    ' Initialize string to database path.
    Const strConPathToSamples = "C:\Users\anne\Desktop\M2Carpets\Produktion M2C\M2C_SourceDataPlannung\"
    strDB = strConPathToSamples & "M2C_SourceDBS.mdb"
    
    ' Create new instance of Microsoft Access.
    Set appAccess = CreateObject("Access.Application")
        
    ' Open database in Microsoft Access window.
    appAccess.OpenCurrentDatabase strDB
   
    
    DoCmd.SetWarnings False
     
    ' Drop table
        DoCmd.OpenQuery "Q_Delete_T_ImportOrderList", acViewNormal
        
    ' Create table
        appAccess.DoCmd.OpenQuery "Q_Create_T_ImportOrderList", acViewNormal
    
    ' Close Database
    appAccess.Quit acQuitSaveNone
    
    DoCmd.RunSQL "INSERT INTO T_MainData ( [Prod-art], Auftragsnummer, Partie, Auftragsposition, Unterposition, Rollennr, Zusatz, Lagerort, [Entwicklungs-Nr], Artikelbez, Design, Farbbank, [Breite in cm], [Ist-Meter], [Soll-Meter], [zugeteilte Meter], [Ist-Gewicht gr/m²], [Ist-Gewicht], [Soll-Gewicht], Produktionsstatus, Beschichtungsart, Liefertermin, Produktionsdatum, Sachbearbeiter ) " _
    & "SELECT T_ImportOrderList.[Prod#-art], T_ImportOrderList.Auftragsnummer, T_ImportOrderList.Partie, T_ImportOrderList.Auftragsposition, T_ImportOrderList.Unterposition, T_ImportOrderList.Unterposition, T_ImportOrderList.Zusatz, T_ImportOrderList.Lagerort, T_ImportOrderList.[Entwicklungs#-Nr#], T_ImportOrderList.[Artikelbez#], T_ImportOrderList.Design, T_ImportOrderList.Farbbank, T_ImportOrderList.[Breite in cm], T_ImportOrderList.[Ist-Meter], T_ImportOrderList.[Soll-Meter], T_ImportOrderList.[zugeteilte Meter], T_ImportOrderList.[Ist-Gewicht gr/m²], T_ImportOrderList.[Ist-Gewicht], T_ImportOrderList.[Soll-Gewicht], T_ImportOrderList.Produktionsstatus, T_ImportOrderList.Beschichtungsart, T_ImportOrderList.Liefertermin, T_ImportOrderList.Produktionsdatum, T_ImportOrderList.Sachbearbeiter " _
    & "FROM T_ImportOrderList, Q_SelectMaxPartie_T_MainData " _
    & "WHERE (((T_ImportOrderList.Partie)>[Q_SelectMaxPartie_T_MainData]![Max_Partie]));"
    
    DoCmd.SetWarnings True

    MsgBox "Quelldaten aktualisiert"
    Exit Function
    
ErrorMsg:
    MsgBox "Fehler beim Aktualisieren der Quelldaten." & Chr(13) _
        & "Versuchen Sie es noch einmal. "
    Resume Next
    
End Function
 
Je probleem wordt vermoedelijk veroorzaakt doordat je veel te ingewikkeld denkt.
Zo kun je het hele eerste deel tot de Insert Into statement vervangen door 2 regels.

Code:
Function func_RefreshData()
Dim strSQL As String

    strSQL = "DROP TABLE T_ImportOrderList"
    On Error Resume Next
    DoCmd.SetWarnings False
    CurrentDb.Execute strSQL
    On Error Goto 0
    ' Create table
    DoCmd.OpenQuery "Q_Create_T_ImportOrderList", acViewNormal
    
    strSQL = "INSERT INTO T_MainData ( [Prod-art], Auftragsnummer, Partie, Auftragsposition, Unterposition, Rollennr, Zusatz, Lagerort, " _
        & "[Entwicklungs-Nr], Artikelbez, Design, Farbbank, [Breite in cm], [Ist-Meter], [Soll-Meter], [zugeteilte Meter], " _
        & "[Ist-Gewicht gr/m²], [Ist-Gewicht], [Soll-Gewicht], Produktionsstatus, Beschichtungsart, Liefertermin, Produktionsdatum, Sachbearbeiter ) " _
        & "SELECT T_ImportOrderList.[Prod#-art], T_ImportOrderList.Auftragsnummer, T_ImportOrderList.Partie, T_ImportOrderList.Auftragsposition, " _
        & "T_ImportOrderList.Unterposition, T_ImportOrderList.Unterposition, T_ImportOrderList.Zusatz, T_ImportOrderList.Lagerort, " _
        & "T_ImportOrderList.[Entwicklungs#-Nr#], T_ImportOrderList.[Artikelbez#], T_ImportOrderList.Design, T_ImportOrderList.Farbbank, " _
        & "T_ImportOrderList.[Breite in cm], T_ImportOrderList.[Ist-Meter], T_ImportOrderList.[Soll-Meter], T_ImportOrderList.[zugeteilte Meter], " _
        & "T_ImportOrderList.[Ist-Gewicht gr/m²], T_ImportOrderList.[Ist-Gewicht], T_ImportOrderList.[Soll-Gewicht], T_ImportOrderList.Produktionsstatus, " _
        & "T_ImportOrderList.Beschichtungsart, T_ImportOrderList.Liefertermin, T_ImportOrderList.Produktionsdatum, T_ImportOrderList.Sachbearbeiter " _
    & "FROM T_ImportOrderList, Q_SelectMaxPartie_T_MainData " _
    & "WHERE (((T_ImportOrderList.Partie)>[Q_SelectMaxPartie_T_MainData]![Max_Partie]));"
    CurrentDb.Execute strSQL, dbFailOnError
    
    DoCmd.SetWarnings True

    MsgBox "Quelldaten aktualisiert"
    Exit Function
    
ErrorMsg:
    MsgBox "Fehler beim Aktualisieren der Quelldaten." & Chr(13) & "Versuchen Sie es noch einmal. "
    Resume Next
    
End Function
Hierbij ga ik er overigens vanuit dat je de code start vanuit de actieve database, en dat je hele padverwijzing dus een verwijzing is naar die db.
Je probleem wordt denk ik veroorzaakt doordat je een nieuwe Access omgeving opzet, en daarin de db aanmaakt. Die bestaat dan dus nog niet in de huidige omgeving. Zoals ik al zei: het kan een stuk simpeler...
 
Dank voor de snelle reactie. In de aangedragen oplossing hou je er volgens mij geen rekening mee dat de tabel die ik in de actieve database aanmaak, wordt gecreëerd op basis van een tabel in een andere database. Er is verder geen koppeling tussen beide databases, dus volgens mij moet ik daar dan wel eerst verbinding mee maken, anders werkt het niet.
Hoe dan ook, het is inmiddels wel opgelost, want ik ben erachter gekomen dat ik de oorspronkelijke tabel niet eerst hoef te verwijderen. Door hem gewoon opnieuw aan te maken wordt het origineel overschreven en daarmee komt de foutmelding ook niet meer terug.

Bedankt.
 
Status
Niet open voor verdere reacties.
Steun Ons

Nieuwste berichten

Terug
Bovenaan Onderaan