# Access-Abfrage mit dao öffnen



## essar (16. Dezember 2002)

Hi Leute...


Ich habe mit Access ein programm geschrieben.....


ich möchte mit dao eine schon bestehende Abrage öffnen und dessen werte in einem Recordset weiterverwenden...


ich bekomm langsam ne makkkkkkkcke im Internet finde ich nichts diesbezüglicb nur wie ich einen SQL String ausführe ich habe den stand:



Public Sub modul()


    Dim db As Database
    Dim rs As Recordset
    Dim qry As QueryDef
    Dim stDocName As String
    Dim nummer, Max_RechnungsNr As Integer


    stDocName = "rechnungsnr_max"
    DoCmd.OpenQuery stDocName, , acReadOnly


    Set db = CurrentDb


    Set qry = db.QueryDefs("rechnungsnr_max")
    Set rs = qry.OpenRecordset(dbOpenDynaset, dbForwardOnly, readonly)



    'rs.MoveFirst
    nummer = rs![nummer]
    Max_RechnungsNr = rs![Max_RechnungsNr]
    Summe_steigerungNr = rs![Summe_steigerungNr]

    rs.Close

    Debug.Print nummer

End Sub



irgend ein Argument fehlt????!!!!



bis dann 

essar


----------



## Dario Linsky (16. Dezember 2002)

Öhm... wieso nicht einfach so:

```
Dim db As Database
Dim rs As Recordset

Set db = CurrentDb
Set rs = db.OpenRecordset("rechnungsnr_max")

' ...
```

Sollte eigentlich ohne weitere Probleme funktionieren.


----------



## essar (16. Dezember 2002)

probiers doch selber mal das funktioniert so nicht einfach weil ich irgendwelche Argumente übergeben muß......


----------



## Dario Linsky (16. Dezember 2002)

Ich kann das hier nicht ausprobieren, weil ich hier Windows XP hab und weil da keine DAO-Komponenten mehr drauf sind. DAO ist schliesslich veraltet, und wie Microsoft veraltete Technologien handhabt, kannst Du in dem anderen Thema nachlesen.

In welcher Zeile tritt der Fehler denn genau auf?


----------



## essar (16. Dezember 2002)

der fehlercode ist 
a. 3061
b. es wurde ien argument erwartet u.s.w.

ich habe aber alle Argumente übergeben die ich eigendlich brauche....

ich kann aber meine Anwendung nicht auf ado XX umschreiben da diese ziehmlich komplex aufgebaut ist und keiner die konvertierung bezahlen möchte......


es muß aber möglich sein denn es gibt doch viele Programme die mit dieser Abfrage arbeiten müssen.....


ich schau mal wo anders vielleicht finde ich was halte dich auf dem laufenden....


----------



## Dario Linsky (16. Dezember 2002)

Das mit der Umstellung kenn ich leider zu gut. Das Problem hab ich auch ständig. Dabei wäre es eigentlich sinnvoller, das ganze einfach mal umzustellen, damit man auch in Zukunft noch was davon hat.

Welcher Fehler das ist, weiss ich schon. Aber ich wollte wissen, in welcher Zeile von Deinem Code das passiert.


----------



## Dario Linsky (16. Dezember 2002)

Hast Du mal in den Verweisen nachgesehen, ob nicht vielleicht noch irgendwo ein Verweis auf die ADO-Komponenten steht? Dann müsstest Du im Code nämlich explizit sagen, dass die Objekte aus dem DAO-Katalog kommen sollen. Oder Du änderst die Verweis-Reihenfolge so ab, dass der Verweis auf die DAO-Komponenten weiter oben steht.


```
Dim db As Database
Dim rs As Recordset

Set db = CurrentDb
Set rs = db.OpenRecordset("rechnungsnr_max")
```
Das bringt mir den Fehler, dass die Typen inkompatibel sind. Was ja auch logisch ist, weil hier ein ADODB-Recordset erwartet wird.


```
Dim db As DAO.Database
Dim rs As DAO.Recordset

Set db = CurrentDb
Set rs = db.OpenRecordset("rechnungsnr_max")
```
So geht das bei mir ohne Probleme.

Ich hab hier jetzt die DAO 3.6 und die ADO 2.1 installiert, wobei der Verweis auf die ADO-Bibliothek weiter oben steht.


----------



## essar (16. Dezember 2002)

wenn ich mein Recordset öffnen möchte


so z.B.

set record = datenbank.openRecordset("Meine Abfrage")

dann bringt er die error meldung


----------



## derGugi (17. Dezember 2002)

das heisst, deine Abfrage ist falsch. jedenfalls hat er bei mir immer diesen Fehler gebracht, wenn das SQL-Statement nicht korrekt war. Überprüf das mal.

@asphyxia: Also bei mir sind mit Win XP und Access XP die DAO-Komponenten installiert...


----------



## Dario Linsky (17. Dezember 2002)

> Also bei mir sind mit Win XP und Access XP die DAO-Komponenten installiert...


Bei mir (XP Home, Access 2000) auch, ich war anscheinend einfach nur blind und hab den Verweis nicht in der Liste gefunden. 



> das heisst, deine Abfrage ist falsch. jedenfalls hat er bei mir immer diesen Fehler gebracht, wenn das SQL-Statement nicht korrekt war. Überprüf das mal.


Dabei sollte dann aber eigentlich nicht unbedingt ein Fehler auftreten der darauf hinweist, dass irgendwas im Code falsch ist. Aber bei Visual Basic und Access Basic kann man sowas ja eh nie mit absoluter Sicherheit ausschliessen.


----------



## derGugi (17. Dezember 2002)

doch es kommt ein fehler. wenn du zum beispiel ein feld aus tabelle1 selektieren willst, du aber nur tabelle 2 angibst (also so: Set rst = dbs.OpenRecordset("SELECT table1.[feld1] FROM Table2;") dann generiert er diesen Fehler.

Das ist also ziemlich sicher ein Abfrage-Fehler. Überprüfe dein Query und dann sollte es gehen.


----------



## Dario Linsky (17. Dezember 2002)

Ach das meintest Du... Bei sowas sollte aber eigentlich schon der "Abfrage-Assistent" meckern, weil das sowieso nicht geht. Eigentlich bin ich nicht mal sicher, ob Access sowas überhaupt zulässt oder ob es schon beim Speichern der Abfrage einen Fehler gibt.
Auf jeden Fall find ich das verwirrend, dass dann eine Fehlermeldung kommt, die auf einen Fehler im Code hinweist.

Ich dachte eher an eine Abfrage, die bestimmte Werte aus einem Formular benötigt. Das macht sich nämlich anders bemerkbar...


----------

