Fehler beim Öffnen von DOA-Recordset

Hallo Forum,

ich habe ein Problem beim Öffnen von einem DOA-Recordset. Eine kleine Problemschilderung soll das etwas verdeutlichen.

Ich war beim Kunden und habe die Access-Kunden-Datenbank (.mdf) kopiert und in der Kopie (liegt in dem Ordner Eigene Dateien) neue Formulare entworfen.
Nach der Vollendung der Formulare,die mittels DOA-Recordset auf einen SQL-Server zugreifen bzw. Abfragen ausführen, wurden diese mit der Importmethode von Access-2000 in die Orginal-Datenbank importiert.

Beim Öffnen der Fomulare auf einem anderen Rechner, kommt eine Fehlermeldung beim OpenRecordset() in der steht „Es konnte die db0.mdf in dem Ordner …/EigeneDateien nicht gefunden werden“.

Ich habe schon lange gesucht und keine Infos gefunden, wo dieses Formular die Referenz auf die Entwicklungsdatenbank enthält, kopiere ich die db0.mdf auf den entsprechenden PC in den Ordner Eingen Dateien, dann funktioniert es.

Liegt es vielleicht im Quellcode selber? Ich benutze

Set RS = CurrentDB().OpenRecordset(SQL-Anweisung,OpenDynaset,DbSeeChanges)

PS: An dem Statement liegt es nicht, das ist ein einfaches „Select * from Tabelle“. Bin für jeden Hilfe dannkbar.

Gruß

Hallo,

Access-2000

die DB ist mit Access2000 gebaut und Du liest die per DAO? Mit VB6?
Das klappt bei mir auch nicht, schreib das Programm um, nimm ADO.
DAO finde ich bequem, verwende ich persönlich viel lieber als ADO (ja immer noch Alex! :smile:) aber dazu baue ich die DB entweder mit dem Manager in VB oder mit Access97. Die Access2000-Datenbanken kann ich mit DAO nicht lesen.

Gruß Rainer

Hallo, Christian!

Schau Dir mal Deine Tabellen an, öffne eine solche im Entwurf und öffne dann das Eigenschaften-Fenster. Schau dort mal nach, ob in der Beschreibung ein Verweis auf die ursprüngliche Quelldatenbank eingetragen ist. Das kann durchaus bei eingebundenen Tabellen passieren… Scheint ja so zu sein, dass die ursprüngliche Kundendatenbank Verknüpfungen auf die (ODBC-) SQL-Server-Datenbank hat. Ich weiß dann nicht wirklich, was Access beim Import der Tabellen in eine andere Datenbank unternimmt.

Ggf. müsstest Du die Tabellen mit RefreshLink neu einbinden.

Gruß, Manfred

Hallo Manfred,

Schau Dir mal Deine Tabellen an, öffne eine solche im Entwurf
und öffne dann das Eigenschaften-Fenster. Schau dort mal nach,
ob in der Beschreibung ein Verweis auf die ursprüngliche
Quelldatenbank eingetragen ist. Das kann durchaus bei
eingebundenen Tabellen passieren… Scheint ja so zu sein,
dass die ursprüngliche Kundendatenbank Verknüpfungen auf die
(ODBC-) SQL-Server-Datenbank hat. Ich weiß dann nicht
wirklich, was Access beim Import der Tabellen in eine andere
Datenbank unternimmt.

Ggf. müsstest Du die Tabellen mit RefreshLink neu einbinden.

Das Formular bezieht seine Daten aus einer eingebundenen View vom SQL-Server (wird aber als Tabelle dargestellt in Access), das funktioniert auch soweit, nur wenn ich das Select-Statement auf eine andere Tabelle ausführen möchte erscheint der Fehler.
Habe ich dich richtig verstanden und soll das Formular in der Entwurfsansicht öffnen und dort nachschauen ob eine Verweis auf die „alte“ Datenbank existiert?
Das habe ich schon getan und nichts gefunden… *schnief. Ich wüsste auch nicht wo im Formular bzw. der Datentabelle für das Formular diese Eigenschaft hinterlegt sein könnnte.

Gruß Christian

Also die Version ist MS Access 9.0.3821 SR-1
Visual Basic 6.0 Version 9108 Retail 6.3.8863 Forms3: 2.01

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

Hallo, Christian!

Das Formular bezieht seine Daten aus einer eingebundenen View
vom SQL-Server (wird aber als Tabelle dargestellt in Access),
das funktioniert auch soweit, nur wenn ich das
Select-Statement auf eine andere Tabelle ausführen möchte
erscheint der Fehler.

Genau diese Tabelle solltest Du Dir mal genauer anschauen.

Habe ich dich richtig verstanden und soll das Formular in der
Entwurfsansicht öffnen und dort nachschauen ob eine Verweis
auf die „alte“ Datenbank existiert?

Bei den Formularen sollte das „unkritisch“ sein. Wenn alle Tabellen (und Abfragen) sauber sind, sollte alles laufen. Aber sicherheitshalber könntest Du Dir, wenn die Tabellen nicht in eine externe Datei verzweigen, dann noch mal die Datensatzherkunft der Formulare und sonstwie verwendeten Controls (Listen, Komboboxen) anschauen…

Zur Not schicke mal Deine Access-DB gezippt vorbei…

Gruß, Manfred

Hallo,

ich habe wieder VB unter den Fingern … :smile:

Ein Beispielcode für Dich.
Starte ein neues Projekt mit VB-Pro.
Lege auf die Form einen Button Command1, ein Steuerelement ADODC1 und ein MSHFlexgrid1. Füge den Code ein und trage Pfad und Namen Deiner Datenbank ein. Trage den Namen der existierenden Tabelle oder Abfrage ein.

Starten und den Button klicken. Wenn die Datenbank nicht korrupt ist, wird der Inhalt angezeigt.

Dim strSQL As String
Dim objRS As ADODB.Recordset
Dim objConnection As ADODB.Connection

Private Sub Command1\_Click()
 Anzeige
End Sub

Private Sub Anzeige()
 Dim DB As String
 DB = "C:\DeineDatenbank.mdb"
 strSQL = "SELECT \* " & \_
 "FROM DeineTabelleOderAbfrage;"
 Set objConnection = New ADODB.Connection

 With objConnection
 .CursorLocation = adUseClient
 .Mode = adModeShareDenyNone
 .Provider = "Microsoft.Jet.OLEDB.4.0"
 .ConnectionString = DB
 .Open
 End With

 Set objRS = New ADODB.Recordset
 With objRS
 Set .ActiveConnection = objConnection
 .CursorLocation = adUseClient
 .CursorType = adOpenStatic
 .LockType = adLockOptimistic
 .Source = strSQL
 Call .Open
 End With

 Set Adodc1.Recordset = objRS
 Adodc1.Refresh
 objRS.Close
End Sub

Gruß Rainer

Hallo Manfred,

okay, habe ich soweit verstanden. Aber das Formular zeigt ja alle Daten von der eingebundenen Tabelle an. Wenn der User dann auf einen Button im Formular klickt, möchte ich über ein DOA.Recordset eine SQL-Anfrage auf eine ganz andere Tabelle auführen. z.B.

Das Formular zeigt mit alle Kunden mit den jeweiligen bestellten Artikel (Die Summe) an. Der User kann auf einen Button klicken neben der Summendarstellung und soll auf ein Formular gelangen, welches die einzelnen Auträge anzeigt.
Bevor ich das Formular öffne, prüfen ich in einem SQL-Statement, ob die Artikel noch Aktiv sind.
Beim Ausführen der Methode OpenRecordset des DOA.Recordsets kommt dann der fehlende Verweis auf die DB. Also muss es doch an dem Recordset liegen oder? Ich kann mit nicht vorstellen, dass die Grunddaten des Formulars falch verknüpft sind, sonst könnte ich das Hauptfomular gar nicht erst öffnen.

Folgende Methode benutze ich:
Dim RS As DAO.Recordset

sql = "SELECT Firmen_Name, Auftrags_ID, Auftrags_Datum, uftragsbezeichnung " & _
"FROM dbo.Werkstattaufträge WA " & _
"WHERE WA.Auftrag_Abnahme IS NULL AND " & _
"WA.Fahrzeug_ID = " & Me.F_ID.Value & " AND " & _
"WA.Auftragsbezeichnung IN " & _
"(SELECT AB.Auftragsbezeichnung " & _
"FROM Auftragsbezeichnungen AB " & _
"WHERE " & where_kriterium & „)“

'Statement ist soweit richtig, denke daran liegt es nicht.

'exisitiert Auftrag ?
Set RS = CurrentDb.OpenRecordset(sql, dbOpenDynaset, dbSeeChanges)
If RS.RecordCount > 0 Then

Ist echt zum verrückt werden, blöde Importmethode von Access. Sieht beim Kunden auch doof aus wenn man keine Ahnung hat wie und warum das passiert?!.

Gruß Christian

Hallo, Christian!

Beim Ausführen der Methode OpenRecordset des DOA.Recordsets
kommt dann der fehlende Verweis auf die DB. Also muss es doch
Folgende Methode benutze ich:
Dim RS As DAO.Recordset

"FROM dbo.Werkstattaufträge WA " & _

Da ist der Übeltäter. Tabellennamen dürfen keinen Punkt beinhalten! Ansonsten will Access das aus der Datenbank „dbo.mdb“ holen. Zumindest dann, wenn Du das ganze als Access-Abfrage laufen lässt. Schau mal, wie in Deiner Datenbank die Tabelle wirklich heißt. Ich vermute mal dbo_Werkstattaufträge.

Gruß, Manfred

1 Like

Hallo Manfred,

das war tatsächlich der Fehler. Jetzt funktioniert es.

Vielen Dank für die schnelle Hilfe, wäre ich nie drauf gekommen.

Gruß Christian