Hallo Allerseits,
meine Frage an Euch: "Weiss jemand, wie man den intern tatsächlich ausgeführten SQL Befehl abfragen kann ?" - also was wird wirklich auf die SQL Engine einer beliebigen Datenbank geschickt.
Was ich damit meine anhand eines kleinen Testprogramms:
( Daten einlesen, Werte verändern, Update auf die Datenbank)...
Dann wird ja in "DA.Update(DS, "Liste")" einem als Programmierer alle Arbeit abgenommen. Aber manchmal gibt es Fehlermeldungen, die man nicht zuordnen kann. (welche sei mal dahingestellt).
Gern würde ich wissen, welches *exakte* SQL Befehls Syntax dann auf die Datenbank geschickt wird.
Beispielsweise müssen bei einem Update Statement bei Access oder bei MySQL die Datumsangaben anders formatiert übergeben werden. Das klappt auch meistens, aber ich würde gern wissen, was wirklich intern verarbeitet wird.
Mein einer Ansatz war, dass man das Ereignis "meinAdapter_RowUpdating" ausliest.
Dort findet man dann unter "UpdateCommand" soetwas:
UPDATE Liste SET ZeitpunktRefresh = ? WHERE ((NR = ?) AND ((? = 1 AND ProgFunktion IS NULL) OR (ProgFunktion = ?)) AND ((? = 1 AND ProgUser IS NULL) OR (ProgUser = ?)) AND ((? = 1 AND RechnerName IS NULL) OR (RechnerName = ?)) AND ((? = 1 AND Zeitpunkt IS NULL) OR (Zeitpunkt = ?)) AND ((? = 1 AND VollSperre IS NULL) OR (VollSperre = ?)) AND ((? = 1 AND Aktiv IS NULL) OR (Aktiv = ?)) AND ((? = 1 AND ZeitpunktRefresh IS NULL) OR (ZeitpunktRefresh = ?)))
Erstens finde ich dieses Statement recht verwirrend und zweitens ist das noch nicht die finale Formatierung z.B. bei "ZeitpunktRefesh = ?" - da müssen bei der JetEngine noch die Rauten davor oder bei MySQL noch Anführungszeichen.
Weiss jemand, wo man diese internen Detailinfos findet?
Danke für hilfreiche Hinweise ...
CodeTags korrigiert; bitte zukünftig darauf achten, das richtige CodeHighlighting zu verwenden ~VaporiZed
meine Frage an Euch: "Weiss jemand, wie man den intern tatsächlich ausgeführten SQL Befehl abfragen kann ?" - also was wird wirklich auf die SQL Engine einer beliebigen Datenbank geschickt.
Was ich damit meine anhand eines kleinen Testprogramms:
( Daten einlesen, Werte verändern, Update auf die Datenbank)...
VB.NET-Quellcode
- Private Sub TESTEN2()
- Dim DS As System.Data.DataSet
- Dim DT As System.Data.DataTable
- Dim DR As System.Data.DataRow
- Dim DA As System.Data.Odbc.OdbcDataAdapter
- Dim CB As System.Data.Odbc.OdbcCommandBuilder
- ' --- DataSet erzeugen
- DS = New System.Data.DataSet()
- ' --- Adapter definieren
- DA = New Odbc.OdbcDataAdapter("Select * from Liste", sConnectionString)
- ' --- SQL-DML-Befehle erzeugen
- CB = New Odbc.OdbcCommandBuilder(DA)
- ' --- Tabelle einlesen
- DA.Fill(DS, "Liste")
- ' --- Zugriff auf Tabelle
- DT = DS.Tables("Liste")
- DR = DT.Select(" NR= 4")(0)
- DR("ZeitpunktRefresh") = Now
- ' --- Speichern der Änderungen
- ' ****** die Folgende Zeile ist der entscheidene Punkt meiner Frage: Was passiert hier intern tatsächlich??
- DA.Update(DS, "Liste")
- DA.Dispose()
- DS.Dispose()
- End Sub
Dann wird ja in "DA.Update(DS, "Liste")" einem als Programmierer alle Arbeit abgenommen. Aber manchmal gibt es Fehlermeldungen, die man nicht zuordnen kann. (welche sei mal dahingestellt).
Gern würde ich wissen, welches *exakte* SQL Befehls Syntax dann auf die Datenbank geschickt wird.
Beispielsweise müssen bei einem Update Statement bei Access oder bei MySQL die Datumsangaben anders formatiert übergeben werden. Das klappt auch meistens, aber ich würde gern wissen, was wirklich intern verarbeitet wird.
Mein einer Ansatz war, dass man das Ereignis "meinAdapter_RowUpdating" ausliest.
Dort findet man dann unter "UpdateCommand" soetwas:
UPDATE Liste SET ZeitpunktRefresh = ? WHERE ((NR = ?) AND ((? = 1 AND ProgFunktion IS NULL) OR (ProgFunktion = ?)) AND ((? = 1 AND ProgUser IS NULL) OR (ProgUser = ?)) AND ((? = 1 AND RechnerName IS NULL) OR (RechnerName = ?)) AND ((? = 1 AND Zeitpunkt IS NULL) OR (Zeitpunkt = ?)) AND ((? = 1 AND VollSperre IS NULL) OR (VollSperre = ?)) AND ((? = 1 AND Aktiv IS NULL) OR (Aktiv = ?)) AND ((? = 1 AND ZeitpunktRefresh IS NULL) OR (ZeitpunktRefresh = ?)))
Erstens finde ich dieses Statement recht verwirrend und zweitens ist das noch nicht die finale Formatierung z.B. bei "ZeitpunktRefesh = ?" - da müssen bei der JetEngine noch die Rauten davor oder bei MySQL noch Anführungszeichen.
Weiss jemand, wo man diese internen Detailinfos findet?
Danke für hilfreiche Hinweise ...
CodeTags korrigiert; bitte zukünftig darauf achten, das richtige CodeHighlighting zu verwenden ~VaporiZed
Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „VaporiZed“ ()