Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

VBA SQL Strings

83 views
Skip to first unread message

Ulrich Wrede

unread,
Feb 20, 2014, 1:42:35 AM2/20/14
to
Hallo,

Access 2003 verarbeitet einen SQL-String in VBA problemlos.
Access 2013 tut dies nicht mehr. Ohne in die Tiefe gehen zu wollen, habe
ich das Gefühl, dass A13 "strenger" ist.
Hat sich intern etwas verändert?

Schönen Gruß
Ulrich

Ulrich Wrede

unread,
Feb 20, 2014, 2:44:37 AM2/20/14
to
Am 20.02.2014 07:42, schrieb Ulrich Wrede:

Ich möchte folgendes ergänzen

Access 2003:
SELECT getProjektNr, GetBearb,

Access 2013:
SELECT " & getProjektNr & ",'" & GetBearb & "',

getProjektNr und GetBearb sind Funktionen.

Gruß
Ulrich

Karl Donaubauer

unread,
Feb 20, 2014, 6:19:12 AM2/20/14
to
Hallo, Ulrich!
Kompletter Bahnhof.
Es geht wohl nicht um bloße Stringkonkatenierung im VBA-Code,
wenn deine Syntax in A03 anders war.

Falls doch:
Was veranstaltest du dann mit dem String?
Execute, QueryDef, SQL-Eigenschaft, RunSQL, OpenQuery ...?

Was passiert? Welcher Fehler?

--
Servus
Karl
*********
Access-FAQ: http://www.donkarl.com +
SQL Server und .NET-Entwicklerkonferenz am 22./23.3. in Nürnberg


Ulrich Wrede

unread,
Feb 20, 2014, 8:44:07 AM2/20/14
to
Am 20.02.2014 12:19, schrieb Karl Donaubauer:
> Hallo, Ulrich!
>
> Ulrich Wrede wrote:
>> Am 20.02.2014 07:42, schrieb Ulrich Wrede:
>>
>> Ich möchte folgendes ergänzen
>>
>> Access 2003:
>> SELECT getProjektNr, GetBearb,
>>
>> Access 2013:
>> SELECT " & getProjektNr & ",'" & GetBearb & "',
>>
>> getProjektNr und GetBearb sind Funktionen.
>
> Kompletter Bahnhof.
> Es geht wohl nicht um bloße Stringkonkatenierung im VBA-Code,
> wenn deine Syntax in A03 anders war.
>
> Falls doch:
> Was veranstaltest du dann mit dem String?
> Execute, QueryDef, SQL-Eigenschaft, RunSQL, OpenQuery ...?
>
> Was passiert? Welcher Fehler?

Hallo Karl

in 2003 funktioniert folgender Code, der in 2013 nicht mehr läuft

strSQL = "INSERT INTO ExportLog ( AuftragsNr, BearbeiterKuerzel,
Bemerkung, Projektdaten, AhDaten, "
strSQL = strSQL & " von, bis, Abrechnungsstatus, Exportdatum,
Exportzeit, Computer, ExportNr)"
strSQL = strSQL & " IN '" & strOutputDB & "' SELECT getProjektNr,
GetBearb, '" & Me.txtBemerkung & "',"
strSQL = strSQL & " getProjektDaten, GetAhDaten, GetVon, GetBis,
GetStatus,"
strSQL = strSQL & " date(), time(), getComputer, getLog"

DoCmd.SetWarnings False
DoCmd.RunSQL strSQL
DoCmd.SetWarnings True

in Access 2013 funktioniert jetzt folgendes:

strSQL = "INSERT INTO ExportLog ( AuftragsNr, BearbeiterKuerzel,
Bemerkung, Projektdaten, AhDaten, "
strSQL = strSQL & " von, bis, Abrechnungsstatus, Exportdatum,
Exportzeit, Computer, ExportNr)"
strSQL = strSQL & " IN '" & strOutputDB & "' VALUES (" & getProjektNr &
",'" & GetBearb & "', '" & Me.txtBemerkung & "',"
strSQL = strSQL & CLng(GetProjektDaten) & "," & CLng(GetAhDaten) & ", "
& SQLDatum(GetVon) & ", " & SQLDatum(GetBis) & ", '" & GetStatus & "' ,"
strSQL = strSQL & " date(), time(),'" & Nz(GetComputer) & " ' ," &
GetLog & ")"

DoCmd.SetWarnings False
DoCmd.RunSQL strSQL
DoCmd.SetWarnings True

SELECT (A03) habe ich durch VALUES (A13) ersetzt.

Ich habe das so hingefummelt. Den(anscheinend notwendigen) Unterschied
zwischen A03 und A13 verstehe ich nicht.

Gruß
Ulrich


Karl Donaubauer

unread,
Feb 20, 2014, 9:39:02 AM2/20/14
to
Ich habe nur kurz getestet: A13 verträgt bei mir auf jeden Fall ein
einfaches SELECT ohne FROM zum Anfügen. Vielleicht liegt's an:
" IN '" & strOutputDB

Hast du das mal mit einer lokalen Tabelle getestet?

Wäre interessant zu wissen und würde mich nicht wundern, wenn
das wieder so ein Fall wäre...

Je mehr (die) Leute es verwenden, desto öfter liest man von kleinen
und mittleren "Ärgernissen" mit A13 und dass es generell ein bissel
instabil sei.

Ulrich Wrede

unread,
Feb 20, 2014, 10:12:55 AM2/20/14
to
Am 20.02.2014 15:39, schrieb Karl Donaubauer:
> Hallo, Ulrich!
>

>
> Ich habe nur kurz getestet: A13 verträgt bei mir auf jeden Fall ein
> einfaches SELECT ohne FROM zum Anfügen. Vielleicht liegt's an:
> " IN '" & strOutputDB
>
> Hast du das mal mit einer lokalen Tabelle getestet?
>
Hallo Karl,

strSQL = "INSERT INTO ExportLog ( AuftragsNr, BearbeiterKuerzel,
Bemerkung, Projektdaten, AhDaten, "
strSQL = strSQL & " von, bis, Abrechnungsstatus, Exportdatum,
Exportzeit, Computer, ExportNr)"
strSQL = strSQL & " SELECT getProjektNr, GetBearb, '" &
Me.txtBemerkung & "',"
strSQL = strSQL & " getProjektDaten, GetAhDaten, GetVon, GetBis,
GetStatus,"
strSQL = strSQL & " date(), time(), getComputer, getLog"

ExportLog liegt lokal.

Für alle Werte die von selbstdefinierten Funktionen (get...) geliefert
werden sollen gibt es eine Parameterabfrage für die Systemfunktionen
nicht (date(),time()). Die Werte der Systemfunktionen landen in der Tabelle.

Karl Donaubauer

unread,
Feb 20, 2014, 11:18:41 AM2/20/14
to
Ulrich Wrede wrote:
> ...
> strSQL = "INSERT INTO ExportLog ( AuftragsNr, BearbeiterKuerzel,
> Bemerkung, Projektdaten, AhDaten, "
> strSQL = strSQL & " von, bis, Abrechnungsstatus, Exportdatum,
> Exportzeit, Computer, ExportNr)"
> strSQL = strSQL & " SELECT getProjektNr, GetBearb, '" &
> Me.txtBemerkung & "',"
> strSQL = strSQL & " getProjektDaten, GetAhDaten, GetVon,
> GetBis, GetStatus,"
> strSQL = strSQL & " date(), time(), getComputer, getLog"
>
> ExportLog liegt lokal.
>
> Für alle Werte die von selbstdefinierten Funktionen (get...) geliefert
> werden sollen gibt es eine Parameterabfrage für die Systemfunktionen
> nicht (date(),time()). Die Werte der Systemfunktionen landen in der
> Tabelle.

Naja, das ist aber in allen Access-Versionen so, wenn du keine
Klammern nach den Funktionsnamen schreibst, wie in deinen
Beispielen hier.

Wenn's da alles ist, dann muss ich A13 in Schutz nehmen. ;-)

Ulrich Wrede

unread,
Feb 20, 2014, 11:35:18 AM2/20/14
to
Am 20.02.2014 17:18, schrieb Karl Donaubauer:

>
> Naja, das ist aber in allen Access-Versionen so, wenn du keine
> Klammern nach den Funktionsnamen schreibst, wie in deinen
> Beispielen hier.


In Access 2003 sind hinter den selbstdefnierten Funktionen keine
Klammern. Und es funktioniert.

Gruß Ulrich


Ulrich Wrede

unread,
Feb 20, 2014, 11:43:13 AM2/20/14
to
Am 20.02.2014 17:18, schrieb Karl Donaubauer:

> Naja, das ist aber in allen Access-Versionen so, wenn du keine
> Klammern nach den Funktionsnamen schreibst, wie in deinen
> Beispielen hier.

strSQL = strSQL & " SELECT getProjektNr()...

Beim Ausführen meldet Access:

Laufzeitfehler 3085, Undefinierte Funktion 'getProjektNr' inAusdruck


Gruß
Ulrich

Karl Donaubauer

unread,
Feb 20, 2014, 11:44:17 AM2/20/14
to
Ulrich Wrede wrote:
> schrieb Karl Donaubauer:
>>
>> Naja, das ist aber in allen Access-Versionen so, wenn du keine
>> Klammern nach den Funktionsnamen schreibst, wie in deinen
>> Beispielen hier.
>
> In Access 2003 sind hinter den selbstdefnierten Funktionen keine
> Klammern. Und es funktioniert.

Dann hast du ein anderes Access 2003 als ich und jetzt ein
"normales" Access 2013.

Access erkennt klammernlose Namen nicht als Funktionen.
Das geht im VBA-Code, also hier außerhalb des Strings,
aber nicht in irgendwelchen Ausdrücken.

--
Servus
Karl
*********

Karl Donaubauer

unread,
Feb 21, 2014, 5:56:00 AM2/21/14
to
Hallo, Ulrich!

Ulrich Wrede wrote:
> schrieb Karl Donaubauer:
> ...
>> Naja, das ist aber in allen Access-Versionen so, wenn du keine
>> Klammern nach den Funktionsnamen schreibst, wie in deinen
>> Beispielen hier.
>
> strSQL = strSQL & " SELECT getProjektNr()...
>
> Beim Ausführen meldet Access:
>
> Laufzeitfehler 3085, Undefinierte Funktion 'getProjektNr' inAusdruck

Hatte ich gestern bei einem Test mit A13 übrigens auch.
Dann habe ich "irgendwas" getan, Modul oder Abfrage gespeichert
oder dergl., und danach war der Fehler weg und wurde die Funktion
(und alle weiteren neuen) vom Expression Service immer gefunden.

Solche ES-Wackeleien hatte ich aber auch schon in älteren Versionen,
und Berichte über diesbez. permanente Probleme auf manchen
Maschinen gibt's auch seit ewig (nicht die schlichte Verweis-Fehlt-
Geschichte). Ohne dass jmd. Ursache oder Abhilfe wüsste, außer
manchmal Neuinstallation.

Die Frage ist also, ob A13 diesbez. schlechter ist. Bisher habe ich
noch keine anderen Berichte gelesen oder gefunden. Nur etliche
Problem mit instabilen Ribbons, Speicher, Performance etc.
Arbeit für mind. 1-2 SPs.

--
Servus
Karl
*********

Ulrich Wrede

unread,
Feb 21, 2014, 6:38:27 AM2/21/14
to
Am 21.02.2014 11:56, schrieb Karl Donaubauer:

>
> Die Frage ist also, ob A13 diesbez. schlechter ist. Bisher habe ich
> noch keine anderen Berichte gelesen oder gefunden. Nur etliche
> Problem mit instabilen Ribbons, Speicher, Performance etc.
> Arbeit für mind. 1-2 SPs.
>

Hallo Karl,

Access97wiederhabenwollen, 2003 werkelt für unsere Bedürfnisse recht gut.

Wie findet eigentlich Rückmeldung an Microsoft statt. Kann man da als
"Normalanwender" mit jemanden ernsthaft reden?

Gruß Ulrich

Karl Donaubauer

unread,
Feb 21, 2014, 7:36:07 AM2/21/14
to
Hallo, Ulrich!

Ulrich Wrede wrote:
> ...
> Wie findet eigentlich Rückmeldung an Microsoft statt.

Naja, bei Abstürzen wählt man im Dialog aus, ob man das jetzt an MS
senden will und ob dieser Dialog hilfreich war. :-)
Das meintest du vielleicht nicht, aber derartige Telemetriewerte spielen
eine große Rolle. Ansonsten:

Wechselt mit jeder Jahreszeit, unübersichtlich, oft mühsam zu finden
und zu bedienen, wenn überhaupt vorhanden, abhängig von div. Faktoren,
z.B. welches Produkt (für Access/Office extrem dürftig), Bereiche wie
MSDN, MVP, MS-Foren etc. haben manchmal und ständig wechselnde
Feedback-Mechanismen.

> Kann man da als "Normalanwender" mit jemanden ernsthaft reden?

Nein.

Ist natürlich nicht ganz einfach bei vielen Millionen "Normalanwendern".
Dennoch sollte MS es wesentlich besser gestalten in beide Richtungen,
also Reality-Check nach innen und kundenfreundlicher nach außen.
Da haben sie große Schwächen.

Ulrich Wrede

unread,
Feb 21, 2014, 9:18:20 AM2/21/14
to
Am 21.02.2014 13:36, schrieb Karl Donaubauer:
Hallo Karl

ich bedanke mich für die ausführlichen Hintergrundinformationen.

> Ist natürlich nicht ganz einfach bei vielen Millionen "Normalanwendern"
> Dennoch sollte MS es wesentlich besser gestalten in beide Richtungen,
> also Reality-Check nach innen und kundenfreundlicher nach außen.
> Da haben sie große Schwächen.
>

Es ist schon schade das große Unternehmen oft den Bezug zur Basis verlieren.
Leider habe ich in dem Anwendungspektrum und auf den Know-How Niveau auf
ich mich bewege, keine echte Alternative zu Access gefunden.
Dies ist sicher ein abendfüllendes Thema und für diesen thread ungeeignet.

Ich bedanke mich für Deinen Einsatz und würde diesen thread dann gerne
schließen.

Gruß
Ulrich





0 new messages