PDA

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


Christoph Eick
29.04.2011, 20:04
Hallo,
ich habe mal wieder ein Problem mit SQL in VBA. Bei folgendem Code erhalte ich die Fehlermeldung: "Laufzeitfehler 13, Typen unverträglich"
strSQL1 = "SELECT ([txtFunkName1] & " - " & [txtFunkName2]) AS RufNrAktuell, " & _
"([txtFunkName1] & " - " & [txtFunkName2]) AS RufNrStandard, " & _
"([txtOkz] & "" & [txtErkennBuchst] & "" & [txtErkennZiff]) AS amtlKenz1, " & _
"tblRettungsmittelTyp.Kurz, tblRettungswachen.RwName AS RwAktuell, " & _
"tblRettungswachen_1.RwName AS RwStandard, " & _
"tblRettungsmittel.Aktiv, " & _
"FROM tblRettungswachen AS tblRettungswachen_1 INNER JOIN, " & _
"(tblRettungswachen INNER JOIN (tblRettungsmittelTyp INNER JOIN tblRettungsmittel ON tblRettungsmittelTyp.RMTyp_ID = tblRettungsmittel.ID_RMTyp), " & _
"ON tblRettungswachen.ID_RettWache = tblRettungsmittel.ID_RettWache) ON tblRettungswachen_1.ID_RettWache = tblRettungsmittel.ID_RettWaStandart, " & _
"WITH OWNERACCESS OPTION "

Der Originalcode aus der Abfrage lautet:
SELECT [txtFunkName1] & "-" & [txtFunkName2] AS RufNrAktuell, [txtFunkName1] & "-" & [txtFunkName2] AS RufNrStandard, [txtOkz] & " " & [txtErkennBuchst] & " " & [txtErkennZiff] AS amtlKenz1, tblRettungsmittelTyp.Kurz, tblRettungswachen.RwName AS RwAktuell, tblRettungswachen_1.RwName AS RwStandard, tblRettungsmittel.Aktiv
FROM tblRettungswachen AS tblRettungswachen_1 INNER JOIN (tblRettungswachen INNER JOIN (tblRettungsmittelTyp INNER JOIN tblRettungsmittel ON tblRettungsmittelTyp.RMTyp_ID = tblRettungsmittel.ID_RMTyp) ON tblRettungswachen.ID_RettWache = tblRettungsmittel.ID_RettWache) ON tblRettungswachen_1.ID_RettWache = tblRettungsmittel.ID_RettWaStandart
WITH OWNERACCESS OPTION;

Wo habe ich mir jetzt hier den Fehler eingebaut, ich suche schon seit Stunden und finde ihn nicht.

Gruß
Christoph

Maxel
29.04.2011, 20:10
Hallo Christoph,

auf die Schnelle fallen mir hier mehrere deplacierte " auf, an deren Stelle Hochkommata zu verwenden sind. Zwei habe ich gekennzeichnet:

strSQL1 = "SELECT ([txtFunkName1] & " - " & [txtFunkName2]) AS RufNrAktuell, " & _
"([txtFunkName1] & " - " & [txtFunkName2]) AS RufNrStandard, " & _
"([txtOkz] & "" & [txtErkennBuchst] & "" & [txtErkennZiff]) AS amtlKenz1, " & _
"tblRettungsmittelTyp.Kurz, tblRettungswachen.RwName AS RwAktuell, " & _
"tblRettungswachen_1.RwName AS RwStandard, " & _
"tblRettungsmittel.Aktiv, " & _
"FROM tblRettungswachen AS tblRettungswachen_1 INNER JOIN, " & _
"(tblRettungswachen INNER JOIN (tblRettungsmittelTyp INNER JOIN tblRettungsmittel ON tblRettungsmittelTyp.RMTyp_ID = tblRettungsmittel.ID_RMTyp), " & _
"ON tblRettungswachen.ID_RettWache = tblRettungsmittel.ID_RettWache) ON tblRettungswachen_1.ID_RettWache = tblRettungsmittel.ID_RettWaStandart, " & _
"WITH OWNERACCESS OPTION "

Darüber hinaus sind im Ausdruck " - " die beiden Leerzeichen im Vergleich zum Original überflüssig.

Teste doch mal mittels Debug.Print, was Dein Konstrukt ergibt.

ebs17
29.04.2011, 21:09
"den Fehler"? Optimist.

Da ein String in VBA in Anführungszeichen eingekleidet wird, kriegst Du Probleme mit den in der Anweisung vorhandenen Anführungszeichen. Wenn Du die letzteren in Hochkommata änderst, dürfte eine Störungsquelle behoben sein.
Warum Du bei den INNER JOIN´s zusätzliche Kommata einbaust (auch vor dem FROM), musst Du Dir selber erklären.

sw-blitz007
30.04.2011, 07:40
Hallo,

ohne Bezug auf Deine Fehler, möchte ich Dir empfehlen, Deine SQL-Anweisungen
besser zu strukturieren. Hierzu verwende ich SQLinForm (http://www.sqlinform.com/).

Beispiel (mit weiteren Änderungen):

Public Function sql_strBaKo(iTop As Integer, Optional sSort As String = "") As String
Dim s As String

s = ""
s = s & "SELECT TOP " & iTop & " t.BAID , "
s = s & " t.BADV_ID AS [lfd Nr] , "
s = s & " Format(t.Datum, 'dd.mm.yy') AS Datum , "
s = s & " Format(t.Uhrzeit, 'hh:nn') AS Uhrzeit , "
s = s & " tk1.Kategorie AS Abfertiger , "
s = s & " t.FLNR , "
s = s & " t.POS , "
s = s & " tk.Kategorie AS Beanstandung , "
s = s & " t.Beanstandung AS Details , "
s = s & " t.TimeStamp AS erfasst , "
s = s & " t.TimeStamp "
s = s & "FROM (tblBADV_Kontrollen AS t "
s = s & " LEFT JOIN tblKategorie AS tk1 "
s = s & " ON t.KatAbfertiger = tk1.KatID) "
s = s & " LEFT JOIN tblKategorie AS tk "
s = s & " ON t.KatBeanstandung = tk.KatID "
If sSort = "" Then
s = s & "ORDER BY t.TimeStamp DESC;"
Else
s = s & "ORDER BY " & sSort & ";"
End If

sql_strBaKo = s

End Function

Christoph Eick
30.04.2011, 18:54
Hallo,
es ist geschafft, es funktioniert!
Warum Du bei den INNER JOIN´s zusätzliche Kommata einbaust ...
Das ist wohl unbewusst passiert bei der Eingabe, ich hab's dann anschließend übersehen.
zu #4
Danke für den Link, hat mir sehr geholfen!

Gruß
Christoph

Lanz Rudolf
30.04.2011, 20:23
Hallo
nur So:
Format(t.Datum, 'dd.mm.yy') AS Datum
AS Datum ist nicht bessonder gut :(
Datum ist ein Reseviertes Wort in Access ;)

Maxel
30.04.2011, 21:24
@Rudolf
Format(t.Datum, 'dd.mm.yy') AS Datum
AS Datum ist nicht bessonder gut
AS Datum schon, nur nicht t.Datum. ;)