Frage

Kann jemand mir Details

  

Laufzeitfehler 3734

in Access vba.

Als Referenz Ich erhalte es von einem Code in dem folgenden Thread

Wie eine Schleife von Abfragen in dem Zugang zu laufen?

Sub plausibt_check()

Dim rs As DAO.Recordset
Dim rs2 As ADODB.Recordset
Dim db As database
Dim strsql As String
Dim tdf As TableDef




Set db = opendatabase("C:\Codebook.mdb")
Set rs = db.OpenRecordset("querycrit")

Set rs2 = CreateObject("ADODB.Recordset")
rs2.ActiveConnection = CurrentProject.Connection


For Each tdf In CurrentDb.TableDefs ' in this line the error occurs
War es hilfreich?

Lösung

Es scheint, dass Sie ADO in der aktuellen Datenbank ohne Speicher verwenden. Sie müssen vor speichern Code ausführen, die ADO enthält.

Andere Tipps

Ich verstehe nicht, was Sie zu tun versuchen. Warum verwenden Sie einen DAO-Cord und ein ADO? Das macht überhaupt keinen Sinn. Wenn Sie Abfragen in einem Access-Frontend gespeichert haben, dann, auch wenn Ihr hinteres Ende ist, sagt sie, SQL Server mit ODBC-Tabelle Links, gibt es wirklich keinen Nutzen überhaupt ADO zu verwenden.

Es gibt keinen Beweis einer Schleife im Code, so dass, wenn Sie Ihren Code durch eine Schleife aufgerufen wird, ist es nicht, scheint mir, dass die KB-Artikel Erklärung gelten würde.

Ich weiß nicht, was es ist, was Sie tun wollen, aber der Punkt, um Ihre Datenbank einmal zu öffnen, anstatt in jeder Wiederholung der Schleife, sollte ziemlich offensichtlich sein, für jeden, der darüber nachdenkt. Wenn Sie eine Schleife laufen lassen und immer wieder die gleiche Datenbank in jeder Wiederholung der Schleife zu öffnen, sollte es offensichtlich sein, dass der Betrieb außerhalb der Schleife gehört.

Das wäre etwa so:

  Dim db As DAO.Database
  Dim qdf As DAO.QueryDef

  Set db = CurrentDB()

  For Each qdf in db.QueryDef
    [do whatever here]
  Next qdf

  Set qdf = Nothing
  Set db = Nothing

In diesem Code, sind Sie die MDB verwenden derzeit offen in der Benutzeroberfläche, aber es spielt keine Rolle -. Unabhängig davon, welche Datenbank Sie öffnen und Schleife durch ihre Objekte nur einmal geöffnet werden, außerhalb der Schleife

Wenn Sie Ihre Schleife in einem Unterprogramm von Ihrem Haupt-Code aufgerufen werden haben wollen, dann die Datenbank übergeben Variable als Argument an die Unterroutine. Das Unterprogramm würde wie folgt sein:

  Public Sub ProcessQueries(db As DAO.Database)
    Dim qdf As DAO.QueryDef

    For Each qdf in db.QueryDef
      [do whatever here]
    Next qdf

    Set qdf = Nothing
  End Sub

Und Sie nennen würde, dass also:

  Dim db As DAO.Database

  Set db = CurrentDB()    
  Call ProcessQueries(db)    
  Set db = Nothing

Nun, wenn Sie auf dem Erhalten Quelldaten aus DAO bestehen und dann mit ihm über ADO, etwas zu tun, dann würden Sie eine DAO-Schleife haben und im Innern, und ADO-Schleife. Dieser Grund, würden Sie Ihre ADO-Verbindung außerhalb Ihrer DAO-Schleife zu definieren, anstatt in seinem Innern. Die einzige Ausnahme, dass wäre, wenn die Daten, die Sie von Ihrer DAO Schleife sind ziehen legen fest, welche Datenbank Sie mit ADO zu öffnen sind. Da wir nicht wissen, was Sie wirklich zu tun versuchen, ist es ziemlich unmöglich ist, auf genau guten Rat zu geben, was Sie in Ihrem Code ändern sollten.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top