none
[Access] Abfragen in andere Datenbank kopieren

    Frage

  • Hallo,

    ich möchte aus meiner aktuellen Datenbank alle Abfragen in eine weitere Datenbank per VBA kopieren.

    Jedoch habe ich dabei noch 2 Probleme:

    1. Das Kopieren haut noch nicht immer hin. Warum ?
    2. Wie kann ich abfragen, ob eine Abfrage mit gleichem Namen in der ZielDB schon vorhanden ist ?

    mein bisheriger Ansatz sieht wie folgt aus:

    Sub CopyAllQueryDefs()
     
    On Error GoTo Fehler
       Dim item As Variant
       Dim strSQL As String
       Dim strName As String
       Const c_strDatabasePath As String = "\\snas401\idvit$\_install\idvit0092\VA_Execute_v1.32.mdb"
       
       
       For Each item In CurrentDb.QueryDefs
           strName = item.Name
           strSQL = item.SQL
           Call CreatNewQueryDef(strName, strSQL, c_strDatabasePath)
       Next
    Ausgang:
        Exit Sub
    Fehler:
        MsgBox Err.Description, vbCritical, Err.Number
        Resume Ausgang
    End Sub
    
    
    Public Function CreatNewQueryDef(ByVal pstrName As String, ByVal pstrSQL As String, ByVal pstrDatabasePath As String)
     
     On Error Resume Next
     Dim db As Database
    
     Set db = DBEngine(0).OpenDatabase(pstrDatabasePath)
     
     Call db.CreateQueryDef(pstrName, pstrSQL)
     
      db.Close
     Set db = Nothing
    Ausgang:
        Exit Function
    Fehler:
        MsgBox Err.Description, vbCritical, Err.Number
        Resume Ausgang
    Freitag, 15. Januar 2010 11:44

Antworten

Alle Antworten

  • Hallo RQ-1,

    zu 1: Gibt es eine Fehlermeldung oder wird die Abfrage nicht angelegt oder nicht mit abgespeichert?

    zu 2: geht so; einfach noch das Datenbank-Objekt übergeben und CurrentDB ersetzen.

    Public Function QueryExists(ByVal queryName As String) As Boolean

        Dim qry As DAO.QueryDef

       

        On Error Resume Next

        Set qry = CurrentDb.QueryDefs(queryName)

        If Err.Number <> 0 Then

            Err.Clear

            QueryExists = False

        Else

            QueryExists = True

        End If

     

    End Function


    Olaf Helper ----------- * cogito ergo sum * errare humanum est * quote erat demonstrandum * Wenn ich denke, ist das ein Fehler und das beweise ich täglich http://olafhelper.over-blog.de
    Freitag, 15. Januar 2010 14:08
  • Am 15.01.2010 12:44, schrieb RQ-1:


    > 1. Das Kopieren haut noch nicht immer hin. Warum ?


    Wie genau kopierst Du die Abfragen? Schau dir DoCmd.CopyObject genau an,

    Du kannst damit Abfragen und Tabellen von einer DB in die andere kopieren
    .


    > 2. Wie kann ich abfragen, ob eine Abfrage mit gleichem Namen in der

    > ZielDB schon vorhanden ist ?


    Dim i As Long, AnzTD As Long

    AnzTD = db.TableDefs.Count - 1

    Anz_Tab_gelöscht = 0

    For i = AnzTD To 0 Step -1

    Set Tabelle = db.TableDefs(i)

    If Tabelle.Name = "DeineAbfrage" Then

    db.TableDefs.Delete (Tabelle.Name)

    Anz_Tab_gelöscht = Anz_Tab_gelöscht + 1

    End If

    Next i


    Du mußt das db.TableDefs(i) auf Abfragen (Querys) abändern.






    Winfried
    Samstag, 16. Januar 2010 17:30
  • Habs inzwischen anders lösen können, trotzdem vielen Dank !
    Mittwoch, 20. Januar 2010 10:56
  • RQ-1 schrieb:

    > Habs inzwischen anders lösen können, trotzdem vielen Dank !

    Und wie hast Du es gelöst?

    Servus
    Winfried
    --
    Connect2WSUS: http://www.grurili.de/tools/Connect2WSUS.exe
    GPO's: www.gruppenrichtlinien.de
    Gruppenrichtlinien Mailingliste "gpupdate":
    http://frickelsoft.net/cms/index.php?page=mailingliste
    Freitag, 22. Januar 2010 21:59