SQL DELETE Befehl funktioniert nicht

  • Hallo zusammen,

    ich habe ein kleines Problem mit meinem Script. Dieses soll einen Eintrag in der Datenbank löschen.

    Die Verbindung selbst funktioniert, der DELETE Befehl jedoch nicht, da der SELECT-Befehl den Eintrag noch immer findet.

    Hier der Code:

    Irgendwie komme ich generell bei den SQL-Befehlen für AutoIT nicht vorran bzw. blicke da nicht durch. Ich habe auch schon in anderen Beiträgen gelesen, dass es verschiedene Befehle gibt, jedoch ist es alles etwas kompliziert für mich, weil relativ wenig mit SQL gemacht habe.

  • Hallo @ValleAIT

    Du mischst hier verschiedenes. Ich kenne einerseits deine _sql.au3 nicht. Also kann ich dir jetzt auch nicht den passenden Befehl nennen..

    Damit verbindest du dich zur Datenbank und damit liest du auch aus. Löschen willst du jedoch mit einem Befehl aus der sqlite.au3.

    Allerdings kannst du nicht _SQLite_Exec nutzen ohne zuvor _SQLite_Startup zu benutzen. Damit will ich dich nicht motivieren, das auch noch einzufügen. Du solltest aufhören zu mischen. Wenn es um sqlite geht, dann nimm nur die Befehle aus der SQLite.au3.

    PS: Wenn du mal eine @error-Prüfung nach der _SQLite_Exec-Zeile einfügen würdest, würdest du auch einen Fehlerwert erhalten. Das sollte immer der erste Test sein ;)

    EDIT: Wobei es hier wohl einfacher ist, den äquivalenten Befehl zu _SQLite_Exec aus deiner _sql.au3 zu suchen und zu nutzen und stattdessen _SQLite rauszuschmeißen. Immerhin hast du ja schon alles andere damit umgesetzt.

    Grüße autoiter

    Einmal editiert, zuletzt von autoiter (17. Oktober 2018 um 11:19)

  • Mir ist bisher nicht bekannt, daß man ADO-DB und SQLite mischen könnte. Füge daher:

    Code
    If @error Then MsgBox(64, 'SQLite', 'Fehler: ' & @error)

    nach der Zeile (_SQLite_Exec ...) ein. Es sollte eine Fehlermeldung kommen, da die DB nicht für SQLite geöffnet wurde.

    Sollte es sich um eine SQLite-DB handeln empfehle ich _SQLite_* Funktionen zu arbeiten. Ansonsten suche dir einne passende UDF aus dieser Liste.

    mfg (auto)Bert

  • Hallo, danke für die Antworten.

    @autoiter

    Ich bin offen für bessere oder einfachere Vorschläge, da ich noch relativ am Anfang bin und ich natürlich hierbei dann ein Verbesserungspotential habe :)

    @autoBert

    Nachdem ich die Zeile eingefügt habe, erhalte ich den Fehlercode 1

  • Ich habe mir die Befehle zusammengesucht und eingefügt. Das ist verschiedene UDFs benutz, war mir so gar nicht bewusst :(

    Ja, den Befehl mit ' habe ich schon mehrfach umgebaut mit " und ' und andere Konstellationen, aber leider ohne Erfolg.

  • Nein Kanashius

    der (Haupt-)Fehler liegt hier nicht im Befehl. (Auch wenn die Angabe der Datenbank in der Logik der UDF wegfallen würde (die ist ja der erste Parameter..). Das Problem ist wirklich, dass ValleAIT nie die Datenbank per SQlite3.dll geöffnet hat, sondern ADODB verwendet.

    Es ist wie autobert und ich geschrieben haben.


    @ValleAIT

    Ich bin offen für bessere oder einfachere Vorschläge, da ich noch relativ am Anfang bin und ich natürlich hierbei dann ein Verbesserungspotential habe

    Benutzt du SciTE4AutoIt als IDE? Dann kannst du einfach den Textcursor auf das Wort _SQLite_Exec setzen (etwa in dem du es anklickst) und dann F1 drücken. Schon öffnet sich die Hilfe zur Funktion _SQLite_Exec. Andernfalls kannst du ihn dir ja auch manuell suchen. Zu jedem der _SQLite_*-Befehle findest du in der Hilfe auch Beispiele. Da siehst du, was du wie machen musst.

    Im Grunde ist es genau so kurz, wie das was du bisher machst:

    _SQLite_Startup

    _SQLite_Open

    _SQLite_Exec

    _SQLite_GetTable2d

    _SQLite_Close

    _SQLite_Shutdown

    Grüße autoiter

  • autoBert

    Nachdem ich die Zeile eingefügt habe, erhalte ich den Fehlercode 1

    wie vermutet:

    Mir ist bisher nicht bekannt, daß man ADO-DB und SQLite mischen könnte. Füge daher ... ein. Es sollte eine Fehlermeldung kommen, da die DB nicht für SQLite geöffnet wurde.

    Um welchen DB-Typ (MySQL, SQLite etc.) dreht sich dein Problem denn überhaupt?

  • Danke für die Hilfe. Die "Beschreibung" für die Befehle habe ich bereits im Internet ausfindig machen können, da unter https://www.autoitscript.com/autoit3/docs/libfunctions/ alle Funktionen stehen.

    So wie ich das verstanden habe, vermische ich unterschiedliche UDFs ? Was wäre denn ratsam zu benutzen?

  • Das war ja eine sehr gute Frage von autoBert. :D

    Die SQLite-UDF mit allen Befehlen ist für SQLite-Datenbanken. Du kannst die UDF nicht auf MSSQL anwenden. Suche in deiner _sql.au3 nach der Funktion, mit der du allgemeine Queries absetzen kannst.

    Grüße autoiter

  • Okay, danke für die Hilfe. Habe mir schon irgendwie sowas gedacht, dass es für Lite optimiert ist

    EDIT: Ich sollte mir einfach mal die UDFs genauer anschauen. Lösung war:

    _SQL_Execute($oADODB, "DELETE FROM [DATABASE].[dbo].[TABLE] WHERE IPnode = 'COMPUTERNAME123';")

    Einmal editiert, zuletzt von ValleAIT (17. Oktober 2018 um 15:25)