PDA

Vollständige Version anzeigen : Laufzeitfehler 13 Typen unverträglich


Gudula
26.10.2011, 17:35
Hallo zusammen,

ich stelle gerade eine Application von 2003 auf 2010 um. Einige Stolpersteine habe ich schon überwunden, aber an dieser Stelle komme ich nicht weiter.

Ich muss auch sagen, dass die Applikation schon sehr alt ist. Aber wir haben sie immer wieder erfolgreich von Ac 95 bis 2003 umstellen können.

Ich habe ein autoexec Makro, welches mir folgende Abfrage aufruft. Diese sitzt in einem globalen Modul.

Global db As Database
Global rs_anzbp As Recordset

Function autorun_some_global_stuff()
Set db = DBEngine.Workspaces(0).Databases(0)
Set rs_anzbp = db.OpenRecordset("pts_inside_3", DB_OPEN_DYNASET)
End Function

Beim Start des Makros kommt nun folgende Fehlermeldung (markiert wird die Zeile mit roter Schrift):

Laufzeitfehler 13
typen unverträglich

Warum? Was ist falsch?

Vielen Dank für eure Hilfe im voraus.

Thomas Möller
26.10.2011, 18:04
Hallo Gudula,

Beim Start des Makros kommt nun folgende Fehlermeldung (markiert wird die Zeile mit roter Schrift):
Laufzeitfehler 13
Typen unverträglich

bei mir lässt sich der Code kompilieren. Dabei gibt es keine Fehlermeldungen.

Um was handelt es sich bei "pts_inside_3"?
Ist das eine Abfrage oder eine Tabelle?
Handelt es sich um eine Tabelle in Deiner Datenbank oder um eine verknüpfte Tabelle?

Vielleicht kannst Du bei dieser Gelegenheit mal Deinen Code etwas "modernisieren:

Public db As DAO.Database
Public rs_anzbp As DAO.Recordset

Function autorun_some_global_stuff()

Set db = CurrentDb()
Set rs_anzbp = db.OpenRecordset("pts_inside_3", dbOpenDynaset)

End Function

CU

ebs17
26.10.2011, 18:05
Einen Typfehler würde ich primär in der Abfrage suchen.
Dazu müsste man sich aber die SQL-Anweisung der Abfrage sowie die verwendeten Datentypen anschauen.

Gudula
26.10.2011, 23:43
Hallo

vielen Dank erstmal für die Antworten.

Ja klar, dass muss alles aktualisiert werden, ich mache das jetzt auch Schritt für Schritt. Aber da lag der Fehler jetzt nicht.

pts_inside_3 ist eine Abfrage, wo die Ausgabe von Rabatt-Punkten berechnet wird, eigentlich simpel. Die Abfrage funktioniert auch, wenn ich sie direkt aufrufe.

SELECT pts_inside_2.Vorname, pts_inside_2.Nachname, pts_inside_2.Firma1, pts_inside_2.KdNr, pts_inside_2.Firma2, pts_inside_2.[Anzahl von KdNr], pts_inside_2.[Summe von Bildungspunkte1], AbBPcomp.BP_abge, AbBPcomp.BP_ges, AbBPcomp.BP_offen, pts_inside_2.eMail
FROM pts_inside_2 INNER JOIN AbBPcomp ON pts_inside_2.KdNr = AbBPcomp.KdNr;

Ich habe das Ausführen der Funktion jetzt mal aus dem Makro gelöscht, nützt aber nix, es kommt schon der nächste Laufzeitfehler

Dim DB1 As Database, DSGruppe1 As Recordset, DSGruppe2 As Recordset
Set PtrDokuAblage = Me
Set DB1 = DBEngine.Workspaces(0).Databases(0)
Set DSGruppe1 = DB1.OpenRecordset("select * from TaConfig where currentconfig=true", DB_OPEN_DYNASET) ' Dynaset erstellen.
Set DSGruppe2 = DB1.OpenRecordset("select count(*) as anzahl from TaConfig where currentconfig=true", DB_OPEN_DYNASET) ' Dynaset erstellen.
If DSGruppe1.EOF Then
MsgBox ("Keine aktive Konfiguration in Konfigurationstabelle TaConfig")
GoTo ERROR_EXIT
End If

Ist es evtl. möglich, dass mir ein Verweis fehlt? Oder eine Berechtigung?

ebs17
26.10.2011, 23:59
Recordsetobjekte gibt es in DAO und in ADODB. Daher ist es stimmig (wie Thomas das in seinem Hinweis zeigte), die verwendete Bibliothek dazu explizit anzugeben:
Dim DSGruppe1 As DAO.Recordset

Thomas Möller
27.10.2011, 08:37
Hallo Gudula,

Ist es evtl. möglich, dass mir ein Verweis fehlt? Oder eine Berechtigung?

Wenn Du in den Deklarationen der Datenbankobjekte die verwendete Bibliothek mit angibst, funktioniert entwerder Dein Code - oder Du erhältst einen Fehler beim Kompilieren. Dann weißt Du, dass diese Bibliothek fehlt.

'Bisherige Deklaration
Dim DB1 As Database, DSGruppe1 As Recordset, DSGruppe2 As Recordset

'Künftige Deklaration
Dim DB1 As DAO.Database
Dim DSGruppe1 As DAO.Recordset
Dim DSGruppe2 As DAO.Recordset

HTH

Gudula
27.10.2011, 09:02
Morgen,

vielen Dank. Das wars. Bin ich froh.
Ich habe jetzt mal gefühlte 1000 ersetzt. Macht es Sinn, die langfristig auf ADO umzustellen? Unterstützt Access 2010 auch ADO.NET?

CptChaos
27.10.2011, 10:04
Mit Access 2010 kam wieder die "Besinnung" auf DAO ;)
Bleib also ruhig dabei...

Thomas Möller
27.10.2011, 10:29
Hallo Gudula,

Ich habe jetzt mal gefühlte 1000 ersetzt.

kennst Du die MZ-Tools? Dort ist der Suchen-und-Ersetzen-Dialog etwas übersichtlicher gestaltet und die Arbeit geht so wesentlich leichter von der Hand.

Die MZ-Tools findest Du hier:
http://www.mztools.com/v3/mztools3.aspx
(Beim Download die MZ-Tools 3.0 for VBA auswählen.)

CU

Gudula
27.10.2011, 12:15
Hi

super, vielen lieben Dank für die Hilfe und die Links. :)