2009-05-13 20 views
2

Ich versuche, von Textdateien Abfragen in eine MS Access Queries Collection mit VBScript zu laden. Ich verwende so etwas wie: Der Code stammt aus Here.Alternative zu Application.LoadFromText für MS-Access-Abfragen

for each myFile in folder.Files 
    objecttype = fso.GetExtensionName(myFile.Name) 
    objectname = fso.GetBaseName(myFile.Name) 
    WScript.Echo " " & objectname & " (" & objecttype & ")" 

    if (objecttype = "form") then 
     oApplication.LoadFromText acForm, objectname, myFile.Path 
    elseif (objecttype = "bas") then 
     oApplication.LoadFromText acModule, objectname, myFile.Path 
    elseif (objecttype = "mac") then 
     oApplication.LoadFromText acMacro, objectname, myFile.Path 
    elseif (objecttype = "report") then 
     oApplication.LoadFromText acReport, objectname, myFile.Path 
    elseif (objecttype = "sql") then 
     'oApplication.LoadFromText acQuery, objectname, myFile.Path 
     ' Add create querydef code here 
    end if 

next 

Aber ich bin mir nicht sicher, wie Sie eine Abfragedefinition mit VBScript erstellen.

Irgendwelche Ideen?

Hinweis: ich ursprünglich in der Datei Exportiert so etwas wie dies mit:

For Each myObj In oApplication.CurrentDb.QueryDefs 
    Set f = fso.CreateTextFile(sExportpath & "\" & myObj.Name & ".sql", True) 
    f.WriteLine(myObj.SQL) 
    f.Close 
Next 

Antwort

4

Das spart die Abfrage defs

For i = 0 To db.QueryDefs.Count - 1 
    Application.SaveAsText acQuery, db.QueryDefs(i).Name, sExportpath & "\" & db.QueryDefs(i).Name & ".sql" 
Next i 

Dann sollte der LoadFromText

+2

Konst acQuery = 1 –

+1

Obwohl selten, wenn Sie eine Abfrage, die eine Unterabfrage als Eingabetabelle hat , LoadFromText wird funktionieren, aber eine beschädigte Abfrage erstellen. In der exportierten Abfragetxtdatei befindet sich ein Abschnitt mit "Begin InputTables" und der Wert der Tabelle "Name" ist Ihre Unterabfrage SQL. Nach dem Import interpretiert access diesen Namen als querydef-Name. Die Problemumgehung besteht darin, die Abfrageexportdatei zu analysieren, nach Unterabfragen zu suchen und sie während des Exportvorgangs zu "entpacken". Ich stieß darauf, weil ich eine Auto-Fix-Routine schreiben musste, die beschädigte Binärblöcke von Access Objects löschte. – DHW

3

Nur der Vollständigkeit halber ich arbeite wollte meine Lösung hinzufügen.

if (objecttype = "form") then 
    oApplication.LoadFromText acForm, objectname, myFile.Path 
elseif (objecttype = "bas") then 
    oApplication.LoadFromText acModule, objectname, myFile.Path 
elseif (objecttype = "mac") then 
    oApplication.LoadFromText acMacro, objectname, myFile.Path 
elseif (objecttype = "report") then 
    oApplication.LoadFromText acReport, objectname, myFile.Path 
elseif (objecttype = "sql") then 
    oApplication.LoadFromText acQuery, objectname, myFile.Path 
end if 

Scheinbar alles, was hinzugefügt werden musste, war:

Const acQuery = 1 

Dank DJ

Verwandte Themen