PDA

Vollständige Version anzeigen : SQL-Anweisungen in Visual Basic


TommyK
12.03.2004, 13:26
Hallo,

hier ein weiteres Tutorial von smaug zum Thema: SQL-Anweisungen in Visual Basic.

Das gesamte Tutorial ist im Dateianhang als Worddatei enthalten.


Download (84kb): Tutorial-SQL-Anweisungen in Visual Basic (http://www.ms-office-forum.de/forum/showpost.php?p=972156&postcount=6)

Klaus B aus D
23.03.2007, 12:40
Hallo Tommy,

ich habe mir als Forum-Mitglied deinen interessanten Beitrag heruntergeladen und darin nachvollziehbare Beispiele für meine bescheidenen Anwendungen gefunden.

Mir sind allerdings ein paar Kleinigkeiten aufgefallen:

Auf der 3. Seite steht im Textfeld: "Zeilen beginnen mit Verknüpfungsoperator und Anführungszeichen." Aber bereits im Beispiel danach ("Übergabe von Zahlen-, Datumswerten ...) und weiteren ist das innerhalb deiner Dokumentation nicht der Fall.

Auf der 4. Seite heißt es: "Will man ... Zeichenkette ... muss nach dem Ausdruck SET Feldname = ein Hochkomma (') folgen - gefolgt von einem Anführungszeichen...". Du erklärst weiter, dass Char(34) für das Anführungszeichen (") und Char(39) für das Hochkomma (') steht.
Im folgenden Beispiel mit Verwendung von ASCII-Codes lese ich dann "strSQLExe = "Update tblFall Set BAKRechnNr = " & Char(39) & strNeueNummer & Char(39) & " where ...". Damit ist nach meiner Meinung die Reihenfolge vertauscht - oder ist das egal?

Im Code auf der 6. Seite fehlt in der 3. If-Zeile ein "l" hinter "EMai". Das ist sicher das, welches in der Kommentarzeile darüber beim Wort "MailInfo" hinten dran klebt? (Scherz).

Kann es sein, dass auf der 9. Seite in der Zeile "lChange = .RecordsAffected" vor dem Punkt der Begriff "db" fehlt?

Gruß aus Dorsten
Klaus Bojert

TommyK
23.03.2007, 14:58
Hallo Klaus,

ich bin nicht der Urheber des Beitrages. Die Datei stammt von Smaug.
Ich war nur derjenige der den Thread hier im Code Archiv eingestellt hat.
Vielleicht kann Dir Smaug das erklären?

Smaug
24.03.2007, 17:40
@Klaus: Danke für Deine Infos. Ich habe mir sowieso schon vorgenommen einige der Dokus mal zu überarbeiten und neu ins Netz zu stellen. Ich werde dann Deine Hinweise bei dieser Gelegenheit gleich mit einpflegen. Vielleicht können die fleissigen Moderatoren dann die alten Dinger vom Netz nehmen.

TommyK
24.03.2007, 18:14
@Smaug

Vielleicht können die fleissigen Moderatoren dann die alten Dinger vom Netz nehmen.
Sag dann nur Bescheid. Lösche sie dann auf dem FTP.
Die neuen kannst Du dann direkt einstellen. bzw. wir als Mods können die
alten Beiträge edtieren und die Anhänge dort dann anhängen.

Smaug
27.03.2007, 14:37
Auf der 3. Seite steht im Textfeld: "Zeilen beginnen mit Verknüpfungsoperator und Anführungszeichen." Aber bereits im Beispiel danach ("Übergabe von Zahlen-, Datumswerten ...) und weiteren ist das innerhalb deiner Dokumentation nicht der Fall.
Da gibt es verschiedene Möglichkeiten. Ich denke das kommt in der neuen Lerndoku besser raus.
Auf der 4. Seite... Hoffe dass auch dies in der neuen Lerndoku etwas besser herausgestellt ist, hier ist ein weites Experimentierfeld für eigene Versuche mit debug.print Stringvariable wo man sich die Strings anschauen kann
Verwendung von ASCII-Codes lese ich dann "strSQLExe = "Update tblFall Set BAKRechnNr = " & Char(39) & strNeueNummer & Char(39) & " where ...". Damit ist nach meiner Meinung die Reihenfolge vertauscht - oder ist das egal? Sollte AFAIK so korrekt sein nach dem Motto "Update Tabelle Set Feld = NeuerFeldwert und das Ganze als Stringkette

Der Scherz auf Seite 6 dürfte ein Volltreffer sein
9. Seite in der Zeile "lChange = .RecordsAffected" vor dem Punkt der Begriff "db" fehlt?
Nein der Punkt vor RecordsAffected verweist auf den Inhalt der With-Anweisung, z.B. auch bei Formularen:
Anstelle:
Forms!FormularXY.Eigenschaft1 = Wert
Forms!FormularXY.Eigenschaft2 = Wert
geht besser:
With Forms!FormularXY
.Eigenschaft1 = Wert
.Eigenschaft2 = Wert
End With

Auf jeden Fall ein herzliches Dankeschön für Dein Feedback, ein Dank schon mal auch an unsere fleissigen Moderatoren für den Austausch

Klaus B aus D
28.03.2007, 01:39
Hi Smaug,

ich habe mir dein überarbeitetes Dokument heruntergeladen, da du es ja sicher aus diesem Grund dem Forum zur Verfügung stellst, und freue mich, dass Anregungen von mir eingeflossen sind. So macht das Forum für mich einen Sinn!

Gruß aus Dorsten

Klaus B.

Klaus B aus D
01.05.2007, 23:54
Hallo Smaug,

ich habe deine überarbeitete Version "Einsatz von SQL-Anweisungen in Visual Basic" heruntergeladen und stolpere über dieselbe Stelle, weshalb ich mich im Forum dazu gemeldet habe!
Dieses Mal zwar nicht mehr auf der Seite 4 (nach eigener Anpassung auf S. 7):
Im Erläuterungstext steht "... muss nach dem Ausdruck SET Feldname = ein Hochkomma (’) folgen – gefolgt von einem Anführungszeichen. ...".
Im Beispiel danach (Set RechNr= " & Chr(39) & strNeueNummer ..) kommt aber erst das Anführungszeichen und anschließend das Hochkomma bzw. Char(39).

Somit erneut die Frage: ist die Reihenfolge egal?

Gruß aus Dorsten
Klaus Bojert

Smaug
02.05.2007, 07:30
Hallo Klaus. Durch Deine Aufmerksamkeit merke ich erst wie nachlässig ich bin. Dafür erst mal ein grosses Danke schön. Ich hätte mehr auf diese spezielle Thematik eingehen müssen die für mich zu selbstverständlich war.
Die beiden Ausdrücke:
s = "Update Tabelle Set Feldname=' " & Stringvariable & " ' where ......
s = "Update Tabelle Set KdName=" & Chr(39) & Stringvariable & Chr(39) & " where...
sind gleichwertig da das Zeichen Chr(39) das Hochkomma ersetzt.
Wenn Du Dir beide Varianten im Testfenster ausgibst dann wirst Du feststellen, dass in beiden Fällen der gleiche String als Ergebnis ausgegeben wird:
Update Tabelle Set Feldname = 'Fritz' where Feldname = 'Andreas'
Chr(39) setzt innerhalb der SQL-Anweisung die Hochkommas. Du könntest auch Chr(34) verwenden wodurch Anführungszeichen gesetzt würden mit folgendem Resultat:
Update Tabelle Set Feldname = "Fritz" where Feldname = 'Andreas'
Die Reihenfolge Anführungszeichen und Chr(39) ist nicht egal. Wenn Du mit Chr(39) oder Chr(34) arbeitest, dann zerlegst Du den String ja in mehrere Teile. Nach jedem Teil muss wie bei jeder Stringverkettung ein Anführungszeichen stehen; also:
sResultat = "Dies ist der erste String" & " nun folgt der zweite Teil"
Nach dem Verknüpfungsoperator kann anstelle eines Strings - wie im Beispiel auch eine Variable folgen. Um VBA mitzuteilen dass der 1.String abgeschlossen ist, muss das Anführungszeichen folgen, danach die Variable oder der 2.String. Wenn dann wieder ein Verknüpfungsoperator folgt müssen immer wenn ein String folgt wieder Anführungszeichen folgen:
sResultat = "Erster String" & sStringvariable & "Text nach Variable" & ....
Ich hoffe ich konnte das so einigermassen erklären. Falls es noch nicht klar ist dann frag ruhig wieder nach. Ich stehe Dir gern zur Verfügung und danke auch nochmal für Deine Aufmerksamkeit :)

Klaus B aus D
14.05.2007, 15:28
Hallo Smaug,

danke für die Klarstellung.

In dem Beispiel "Nutzung einer SQL-Anweisung zur Erstellung einer temporären Abfrage und ..." aus deinem Schriftsatz "Einsatz von SQL-Anweisungen in Visual-Basic" fehlt meiner Meinung nach die Vorsilbe "str" für die SQL-Variable, die als strSQL innerhalb der Dim-Anweisung definiert wurde. Im Kommentar unterhalb der Zeile strUpdate = "UPDATE ... soll die Variable dann sicher auch strSQL statt SQL heißen!? Vermutlich hängt das mit dem Beispiel davor zusammen, in welchem die Variable als "SQL" definiert wurde.

Gruß aus Dorsten
Klaus Bo.

usa1119
19.05.2007, 20:14
Hallo Zusammen,

ich hätte noch eine Frage zu den QueryDef und hoffe es kann mir jemand dabei helfen.
Die Frage bezieht sich auf den von Smaug erstellen Code:


Sub Test_QueryDef()

'Test eine QueryDef mit SQL weiterverarbeiten

Dim db As Database
Dim qdf As QueryDef
Dim strSQL As String
Dim strUpdate As String

Set db = OpenDatabase("U:\Daten\Echt\Entwicklungsumgebung\Win\DB_WC6uWC7.mdb", False, False)

strSQL = "SELECT tab_QueryDefTest.tbl_002_Obj_AbzgVSt, tab_QueryDefTest.tbl_002_TestUpdate " & _
"FROM tab_QueryDefTest " & _
"WHERE (((tab_QueryDefTest.tbl_002_Obj_AbzgVSt)>0<100) AND ((tab_QueryDefTest.tbl_002_TestUpdate)=False));"

Set qdf = db.CreateQueryDef("", strSQL)
DoCmd.OpenQuery qdf '<====== Hier erscheint ein Laufzeitfehler 2498
strUpdate = "UPDATE tab_QueryDefTest SET tab_QueryDefTest.tbl_002_TestUpdate = True"
qdf.Execute strUpdate '<====== Hier erscheint ein Laufzeitfehler 3421
Set qdf = Nothing
db.Close
Set db = Nothing
End Sub

Es erscheinen beim Ausführen o. g. Fehlermeldungen in den Zeilen.
Wenn ich die Zeile: DoCmd.OpenQuery qdf auskommentiere, erscheint ein weiterer Fehler
in der weiter unten gekennzeichneten Zeile

Würde mich freuen, wenn mir hierbei jemand Hilfestellung geben könnte.

Viele Grüße
Uwe

Anne Berg
23.05.2007, 10:35
Set qdf = db.CreateQueryDef("", strSQL)
DoCmd.OpenQuery qdf '<====== Hier erscheint ein Laufzeitfehler 2498Die OpenQuery-Methode erwartet den Namen einer gespeicherten Abfrage als String, kein Objekt.
Aber auch wenn du qdf.Name hier einsetzt, funktioniert es nicht, da du dem neuen Objekt keinen Namen gegeben hast.strUpdate = "UPDATE tab_QueryDefTest SET tab_QueryDefTest.tbl_002_TestUpdate = True"
qdf.Execute strUpdate '<====== Hier erscheint ein Laufzeitfehler 3421
Was auch immer LZF 3421 sein mag (Der Text sagt mehr als eine Zahl), so wird es an der Zeichenkette TRUE liegen, die entweder außerhalb des Strings liegen (also verkettet) oder direkt mit ihrem Wert (0) eingegeben werden sollte.

@Smaug: wäre nett, wenn du Punkt 1 bei Gelegenheit in deiner Doku berücksichtigen könntest. ;)

Smaug
26.05.2007, 16:21
@Anne: herzlichen Dank, wird natürlich gemacht :)

Anne Berg
28.05.2007, 16:38
Sorry, sehe gerade dass ich einen Fehler gemacht habe: True ist natürlich -1, False ist 0!