2009-05-13 10 views
2

Je tente de charger à partir de fichiers texte, des requêtes dans une collection de requêtes MS Access à l'aide de VBScript. J'utilise quelque chose comme ceci: Le code provient de Here.Alternative à Application.LoadFromText pour les requêtes MS Access

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 

Mais je ne sais pas comment créer une définition de requête en utilisant VBScript.

Des idées?

Note: Au départ, j'Exporté vers le fichier en utilisant quelque chose comme ceci:

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

Répondre

4

Cela permet d'économiser les defs de requête

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

Alors le LoadFromText devrait fonctionner

+2

Const acQuery = 1 –

+1

Bien que rare, lorsque vous avez une requête qui a une sous-requête comme une table d'entrée , LoadFromText fonctionnera, mais créera une requête corrompue. Dans le fichier txt de la requête exportée, il y aura une section avec "Begin InputTables" et la valeur de la table "Name" sera votre sous-requête SQL. Après l'importation, access interprète ce nom en tant que nom de requête. La solution de contournement consiste à analyser le fichier d'exportation de requête, rechercher des sous-requêtes et «décompresser» les lors du processus d'exportation. Je me suis heurté à cela parce que je devais écrire une routine de réparation automatique qui nettoyait les blocs binaires corrompus des objets Access. – DHW

3

Juste pour être complet, je voulait ajouter ma solution.

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 

Apparemment, tout ce qu'il fallait ajouter était:

Const acQuery = 1 

Merci à DJ