SQL Abfragen und Updates Topic is solved

Stelle Fragen zur Programmierung mit Autohotkey

Moderator: jNizM

Schokoscherzkeks
Posts: 23
Joined: 15 Jan 2015, 03:45

SQL Abfragen und Updates

11 Dec 2023, 03:19

Moin Moin,

ich habe mehrere Fragen zum Thema SQL in AHK und bin bisher nicht so richtig fündig geworden.

1. Frage: muss das rsSql nach jeder Abfrage mit rsSql.Close() geschlossen werden?
2. Frage: kann man es auch nur zurücksetzen und direkt mit einer neuen Abfrage füllen?
3. Frage: was passiert, wenn das Programm "abstürzt" und der Befehl connection.Close() nicht ausgeführt wurde? (weil ich es beim programmieren versemmelt hab)
3.1 Frage: Gibt es eine Möglichkeit die Verbindung immer zu beenden, wenn was schief geht? (falls nötig)
4. Frage: Gibt es eine maximale Anzahl an Zeichen die im Query stehen dürfen? (bei Excel-VBA ist es begrenzt)

Vielen Dank für eure Hilfe

Gruß
Andi
just me
Posts: 9560
Joined: 02 Oct 2013, 08:51
Location: Germany

Re: SQL Abfragen und Updates

11 Dec 2023, 11:54

Moin, es würde mir helfen, wenn ich wüsste, wo ich da Skript finde, das Dein rsSql erstellt. ;)
Schokoscherzkeks
Posts: 23
Joined: 15 Jan 2015, 03:45

Re: SQL Abfragen und Updates

12 Dec 2023, 05:13

Hi,
anbei ein Programmausschnitt, um es verständlicher zu machen, wobei es ja allgemeine Verständnisfragen sind.

Code: Select all

connection := CreateDatabaseConnection()


; Überprüfen, ob die Verbindung erfolgreich hergestellt wurde----------------------------
if (connection.State = 1) {
    ;MsgBox "Verbunden"
; SQL-Abfrage zum Infos abrufen erstellen-------------------------------------------------
    sqlQuery := "Select DIDQTY from YZdb.USER.T_DID WHERE DIDDID = '" . DID . "'"

; ADODB-Recordset erstellen
    rsSql := ComObjCreate("ADODB.Recordset")
    rsSql.CursorLocation := 3 ; adUseClient
    rsSql.Open(sqlQuery, connection, 1) ; adOpenStatic

; Auf die Daten im Recordset zugreifen und Update senden-----------------------------------------------------
    if(!rsSql.EOF) {
        ;MsgBox % "DIDQTY: " . rsSql.Fields("DIDQTY").Value . "`n" . "DIDBAR: " . rsSql.Fields("DIDBAR").Value . "`n" . "DIDDID: " . rsSql.Fields("DIDDID").Value
        QTY := % rsSql.Fields("DIDQTY").Value - QTY
        sqlQuery := "Update YZdb.USER.T_DID SET DIDQTY = '" . QTY . "'WHERE DIDDID = '" . DID . "'"
        connection.Execute(sqlQuery)
    }
    else
    {
        MsgBox "DID nicht gefunden"
    }
; SQL Beenden erstellen---------------------------------------------------------------------

    Verbindung_beenden()
}
else {
    MsgBox "Keine Verbindung zum Server. Aktion wird abgebrochen!"
    Gui, Destroy
    return
}
;-----------------------------------------------------------
; Verbindung und das Recordset schließen
Verbindung_beenden(){
    rsSql.Close()
    connection.Close()
}
;-------------------------------------------------------
; ADODB-Verbindung erstellen
CreateDatabaseConnection() {
    connection := ComObjCreate("ADODB.Connection")
    server_name := "XY"
    database_name := "YZdb"
    connection.ConnectionString := "Provider=SQLNCLI11;Server=" . server_name . ";database=" . database_name . "; User ID=Karl; Password=1234"
    connection.ConnectionTimeout := 10
    connection.Open()

    ; Die Verbindung zurückgeben
    return connection
}
just me
Posts: 9560
Joined: 02 Oct 2013, 08:51
Location: Germany

Re: SQL Abfragen und Updates  Topic is solved

13 Dec 2023, 04:38

Moin,

genau genommen handelt es sich um 'allgemeine' Verständnisfragen zu ADODB.

Zu 1 - 3.1:
Ich denke, dass Du das Connection-Objekt und das Recordset-Object nur einmal erstellen musst. Das Recordset solltest Du mit der Close-Methode schließen, wenn Du damit fertig bist. Du kannst es danach jederzeit mit der Open-Methode neu füllen.
Die erstellten Objekte werden von AHK freigegeben, wenn das Programm nicht 'böse' abstürzt. Ein normales nicht erwartetes Ende zu falschen Zeitpunkt kann mit OnExit abgesichert werden.

Return to “Ich brauche Hilfe”

Who is online

Users browsing this forum: No registered users and 13 guests