MySQL INSERT problem mit mysql.au3(dll UDF von progandy)

  • Ich hab ein Problem mit MySQL INSERT, Irgendwie wird nur etwas in die tabelle geschrieben wenn ich die tabelle erstelle. ich hab bisle rumprobiert, deshalb sieht der code so chaotisch aus.. Ich hab irgendwas falsch gemacht und wüsste gern was :)

    Spoiler anzeigen
    [autoit]

    Func MySQL_Connect()

    _MySQL_InitLibrary()
    If @error Then MsgBox(0, 'Error', '"libmysql.dll" nicht gefunden')
    ;MsgBox(0, "DLL Version:",_MySQL_Get_Client_Version()&@CRLF& _MySQL_Get_Client_Info())

    [/autoit] [autoit][/autoit] [autoit]

    Global $MysqlConn = _MySQL_Init()

    [/autoit] [autoit][/autoit] [autoit]

    $connected = _MySQL_Real_Connect($MysqlConn,$server,$user,$password,$database)
    If $connected = 0 Then
    $errno = _MySQL_errno($MysqlConn)
    MsgBox(0,"Error:",$errno & @LF & _MySQL_error($MysqlConn))
    If $errno = $CR_UNKNOWN_HOST Then MsgBox(0,"Error:","$CR_UNKNOWN_HOST" & @LF & $CR_UNKNOWN_HOST)
    Endif
    $query = "SELECT * FROM termine"
    $sqlQuery1 = _MySQL_Real_Query($MysqlConn, $query) ; gibt 0 zurück wenn die Tabelle erstellt ist


    if $sqlQuery1 == 1 Then
    ;$query = "CREATE TABLE termine("&@CR&"titel TEXT NOT NULL ,"&@CR&"zeit TIME NOT NULL ,"&@CR&"datum TEXT NOT NULL ,"&@CR&"notiz TEXT NULL)"&@CR&" ENGINE = InnoDB;"
    $query = "CREATE TABLE termine(titel TEXT NOT NULL ,zeit TEXT NOT NULL ,datum TEXT NOT NULL ,notiz TEXT NULL) ENGINE = InnoDB;"
    $sqlQuery2 = _MySQL_Real_Query($MysqlConn, $query)
    if $sqlQuery2 == 1 Then
    MsgBox(0,"" ,"Tabelle konnte nicht erstellt werden, überprüfen sie ihre Rechte")
    Else
    MsgBox(0,"","tabelle wurde angelegt")
    EndIf
    $query = "INSERT INTO termine ( titel, zeit, datum, notiz) VALUES ('TEST222s', '13:37', '12/12/2019', 'blablalba');"
    $sqlQuery3 = _MySQL_Real_Query($MysqlConn, $query)
    EndIf
    EndFunc


    Func neuerTermin()
    $titelSave = GUICtrlRead(14) ;Titel
    $stundeSave = GUICtrlRead(15) ;Stunde
    $minuteSave = GUICtrlRead(16) ;Minute
    $datumSave = GUICtrlRead(17) ;Datum
    $beschreibungSave = GUICtrlRead(18) ;Beschreibung

    ;ConsoleWrite($datumSave)
    ;tut nicht

    $query = "SELECT * FROM termine"
    $sqlQuery1 = _MySQL_Real_Query($MysqlConn, $query)

    ;$query = "INSERT INTO "&$database&".termine ( "&@CR&"titel, "&@CR&"zeit, "&@CR&"datum, "&@CR&"notiz"&@CR&") "&@CR&"VALUES ("&@CR&"'"&$titelSave&"', '"&$stundeSave&":"&$minuteSave&"', '"&$datumSave&"', '"&$beschreibungSave&"'"&@CR&");"
    $query = "INSERT INTO "&$database&".termine ( titel, zeit, datum, notiz) VALUES ('"&$titelSave&"', '"&$stundeSave&":"&$minuteSave&"', '"&$datumSave&"', '"&$beschreibungSave&"');"

    ConsoleWriteError($query)
    $sqlQuery = _MySQL_Real_Query($MysqlConn, $query)

    EndFunc

    [/autoit]

    Einmal editiert, zuletzt von J@ik (27. Mai 2011 um 12:41)

  • Nach einem _MySQL_Real_Query, das ein Ergebnis liefert, musst du erst das Ergebnis holen und dann freigeben, sonst gibt es Fehler.

    Übrigens ist deine Abfrage auf eine existierende Tabelle nicht gerade schön. SHOW TABLES LIKE ist da besser.

  • ok und wie hol ich bzw. gebe ich die daten frei? ich hab mit mysql nichts zu tun. ich will nur daten einfügen,auslesen und löschen.

    //EDIT
    mit _MySQL_Free_Result gibt man es frei oder?
    und Wie hole ich das ergebnis? mit if @error? //EDIT 2 --> quatsch ich mein if 1 bzw. if 0 oder so

    2 Mal editiert, zuletzt von J@ik (27. Mai 2011 um 11:09)

  • vergesst den Post:

    Spoiler anzeigen

    ok... jetzt bleibt mein programm immer hängen..
    wie funktioniert das mit der mysql_use_result()? brauch ich die überhaupt? ich blicks grad garnicht..

    Spoiler anzeigen
    [autoit]

    Func MySQL_Connect()

    _MySQL_InitLibrary()
    If @error Then MsgBox(0, 'Error', '"libmysql.dll" nicht gefunden')
    ;MsgBox(0, "DLL Version:",_MySQL_Get_Client_Version()&@CRLF& _MySQL_Get_Client_Info())

    [/autoit] [autoit][/autoit] [autoit]

    Global $MysqlConn = _MySQL_Init()

    [/autoit] [autoit][/autoit] [autoit]

    $connected = _MySQL_Real_Connect($MysqlConn,$server,$user,$password,$database)
    If $connected = 0 Then
    $errno = _MySQL_errno($MysqlConn)
    MsgBox(0,"Error:",$errno & @LF & _MySQL_error($MysqlConn))
    If $errno = $CR_UNKNOWN_HOST Then MsgBox(0,"Error:","$CR_UNKNOWN_HOST" & @LF & $CR_UNKNOWN_HOST)
    Endif
    $query = "SELECT * FROM termine"
    $sqlQuery1 = _MySQL_Real_Query($MysqlConn, $query) ; gibt 0 zurück wenn die Tabelle erstellt ist
    _MySQL_Free_Result($sqlQuery1)
    if $sqlQuery1 == 1 Then
    $query = "CREATE TABLE termine("&@CR&"titel TEXT NOT NULL ,"&@CR&"zeit TIME NOT NULL ,"&@CR&"datum TEXT NOT NULL ,"&@CR&"notiz TEXT NULL)"&@CR&" ENGINE = InnoDB;"
    ;$query = "CREATE TABLE termine(titel TEXT NOT NULL ,zeit TEXT NOT NULL ,datum TEXT NOT NULL ,notiz TEXT NULL) ENGINE = InnoDB;"
    $sqlQuery = _MySQL_Real_Query($MysqlConn, $query)
    _MySQL_Free_Result($sqlQuery)
    if $sqlQuery == 1 Then
    MsgBox(0,"" ,"Tabelle konnte nicht erstellt werden, überprüfen sie ihre Rechte")
    Else
    MsgBox(0,"","tabelle wurde angelegt")
    EndIf
    EndIf
    EndFunc


    Func neuerTermin()
    $titelSave = GUICtrlRead(14) ;Titel
    $stundeSave = GUICtrlRead(15) ;Stunde
    $minuteSave = GUICtrlRead(16) ;Minute
    $datumSave = GUICtrlRead(17) ;Datum
    $beschreibungSave = GUICtrlRead(18) ;Beschreibung

    ;ConsoleWrite($datumSave)
    ;tut nicht

    $query = "INSERT INTO "&$database&".termine ( "&@CR&"titel, "&@CR&"zeit, "&@CR&"datum, "&@CR&"notiz"&@CR&") "&@CR&"VALUES ("&@CR&"'"&$titelSave&"', '"&$stundeSave&":"&$minuteSave&"', '"&$datumSave&"', '"&$beschreibungSave&"'"&@CR&");"
    ;$query = "INSERT INTO "&$database&".termine ( titel, zeit, datum, notiz) VALUES ('"&$titelSave&"', '"&$stundeSave&":"&$minuteSave&"', '"&$datumSave&"', '"&$beschreibungSave&"');"
    ConsoleWriteError($query)
    MySQL_Connect()
    $sqlQuery3 = _MySQL_Real_Query($MysqlConn, $query)
    ConsoleWrite("test1")
    _MySQL_Free_Result($sqlQuery3)

    EndFunc

    [/autoit]

    Habs jetzt kapiert^^

    2 Mal editiert, zuletzt von J@ik (27. Mai 2011 um 12:27)

  • Eine INSERT bzw. CREATE-Abfrage erstellt kein Ergebnis, also musst du das Ergebnis auch nicht abholen ;)

    Eine Tabelle erstellen, falls sie noch nicht existiert funktioniert in einer einzigen SQL-Anweisung ohne dieses komische Konstrukt (zumindest bei MySQL)

    Spoiler anzeigen
    [autoit]

    $sQuery = "CREATE TABLE `tbl_einname` IF NOT EXISTS (" & _
    "`id` INT NOT NULL AUTO_INCREMENT PRIMARY KEY, " & _
    "`title` VARCHAR(100) NOT NULL, " & _
    "`note` TEXT NOT NULL, " & _
    "`date` DATETIME NOT NULL" & _
    ") ENGINE=MyISAM"
    $error = _MySQL_Real_Query($MysqlConn, $sQuery)
    If $error Then
    MsgBox(0, "", "Fehler beim senden der Abfrage")
    Else
    $error = _MySQL_Errno($MysqlConn)
    If $error Then
    MsgBox(0, "Fehler " & $error, _MySQL_Error($MysqlConn) )
    Else
    MsgBox(0, "", "Erfolg")
    EndIf
    EndIf

    [/autoit]
  • Ok thx :) des machts um einiges einfacher. ich werd mich mal bissle mit mysql befassen. hab da irgendwo noch ein buch... *such*