Access 2007 Eintrag erstellen (UPDATE)

  • Hallo Zusammen,

    ich stehe nun nach einer längeren Programmierpause vor einem kleinen Problem:

    Ich besitzte eine Datenbank, die vier Spalten enthält: ID | Stick | Box | User
    in dieser soll ein Update eingespielt werden.

    Hier zum Programm:
    Im ersten Schritt meines Programms meldet man sich an, also User + Kennwort (alles über .ini, soll auch erstmal so bleiben)
    Im zweiten Schritt gibt man dann eine Box und einen Sticknummer ein z.B.:

    Box: 201
    Stick: 002.003

    Diese Werte werden in der Datenbank gesucht, wenn die beiden Werte neben einander stehen, gibt es eine Erfolgsmeldung und wenn nicht eben eine Fehlermeldung.

    Nun möchte ich, dass in der Spalte User, der Name eingetragen wird, den man am Anfang verwendet. Dieser Name soll dann neben der Box eingetragen werden, also in etwa so:


    ID | Stick | Box | User
    3 002.003 201 MadCatz


    Ich verwende dazu folgenden Befehl:


    [autoit]

    "Update "&$tabellenname&" Set User = '"&$iName&"' Where ID = '"&$strData&"'"

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

    $strData ist die ID
    $iName ist der Username
    $tabellenname ist die Tabelle

    [/autoit]

    Wenn ich das ganze in eine MsgBox ausgeben wird auch alles richtig ausgegeben, aber der Name wird nicht in die Datenbank eingetragen =(

    Kann mir jemand helfen?

  • ich dachte, hier im forum wurde das schonmal gefragt ...

    hab hier mal paar beispiele aus meiner Sammlung ...

    access read ... sollte ab Version 2007 gehen

    Spoiler anzeigen
    [autoit]


    ;$datenbankpfad = @ScriptDir & "\Test.accdb"
    $datenbankpfad = "d:\Test.accdb"
    $tabellenname = "Tabellentest"
    $Spalte0 = "ID" ;nicht ID Spalte
    $Spalte1 = "Stick" ;nicht ID Spalte
    $Spalte2 = "Box" ;nicht ID Spalte

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

    $query = "SELECT * FROM " & $tabellenname & " WHERE Box = '12' AND Stick = '3'"
    $strData1 = _ReadOneFld($query, $datenbankpfad,$Spalte0)

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

    ConsoleWrite($query& @CRLF &$strData1)
    MsgBox(0,"",$query & @CRLF & "Ergebnis: " & $strData1)

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

    Func _ReadOneFld($_sql, $_datenbankpfad, $_field)
    Dim $_output
    $adoCon = ObjCreate("ADODB.Connection")
    $adoCon.Open("Provider=Microsoft.ACE.OLEDB.12.0; Data Source=" & $datenbankpfad & ";")
    $adoRs = ObjCreate("ADODB.Recordset")
    $adoRs.CursorType = 1
    $adoRs.LockType = 3
    $adoRs.Open($_sql, $adoCon)

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

    With $adoRs
    If .RecordCount Then
    While Not .EOF
    $_output = $_output & .Fields($_field).Value
    .MoveNext
    WEnd
    EndIf
    EndWith
    $adoCon.Close
    Return $_output
    EndFunc

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

    Access Write ... für Access 2003

    Spoiler anzeigen
    [autoit][/autoit] [autoit][/autoit] [autoit]

    _access_write($w1, $w2, $w3, $w4)

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

    Func _access_write($w1, $w2, $w3, $w4)

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

    $FULL_MDB_FILE_NAME = $dbname
    ;$SQL_CODE = "select * from epayslip"
    $CONN = ObjCreate("ADODB.Connection")
    $CONN.Open('Driver={Microsoft Access Driver (*.mdb)};Dbq=' & $FULL_MDB_FILE_NAME & ';')
    $RecordSet = ObjCreate("ADODB.Recordset")

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

    Local $sQuery = "INSERT INTO Reporting (`spalte1`,`spalte2`,`spalte3`,`spalte4`)" & _
    "VALUES ('" & $w1 & "',"& _ ;
    "'" & $w2 & "'," & _ ;
    "'" & $w3 & "'," & _ ;
    "'" & $w4 & "')" ;
    ;ConsoleWrite($sQuery)
    $CONN.Execute($sQuery)
    $CONN.Close

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

    EndFunc

    [/autoit]

    Access Write Update ... Access 2003

    Spoiler anzeigen
    [autoit]


    Func _access_write_update()

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

    ;$dbname = "d:\epayslip.mdb"
    $tblname = "epayslip"
    $s_data07 = _Now()

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

    $FULL_MDB_FILE_NAME = $dbname
    ;$SQL_CODE = "select * from epayslip"
    $CONN = ObjCreate("ADODB.Connection")
    $CONN.Open('Driver={Microsoft Access Driver (*.mdb)};Dbq=' & $FULL_MDB_FILE_NAME & ';')
    $RecordSet = ObjCreate("ADODB.Recordset")

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

    ;Local $sQuery = "UPDATE " & $tblname & " SET check = 1, date = " & $s_data07 & " WHERE user = " & "'" & @UserName & "'"
    Local $sQuery = "UPDATE " & $tblname & " SET " & $tblname & ".[check] = 1, " & $tblname & ".[date] = '" & $s_data07 & "' WHERE " & $tblname & ".[user] = " & "'" & @UserName & "'"
    ;ConsoleWrite($sQuery)
    $CONN.Execute($sQuery)
    $CONN.Close

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

    EndFunc

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

    eventuell hilft dir das weiter ...
    am besten auch vorher die SQL befehle im access selbst testen ...

    gruß gmmg

  • Hey,

    Danke für deine Antwort. Den ersten Teil hab ich auch schon einmal von dir bekommen, der ist auch umgesetzt.

    Allerdings möchte ich eine .accdb updaten.
    Also das Auslesen funktioniert einwandfrei, da hattest du mir auch im April, meine ich, sogar sehr gut bei geholfen :)

    Hier mal Ausschnitte des Quellcode, die dafür wichtig sind:

    [autoit]

    ;~ --Voreinstellungen--------------------------------------------------------------------------------------------------------------------------------------------------------
    GUICtrlSetState ($Rueckgabe,$GUI_Disable)
    GUICtrlSetState ($Ausleihen,$GUI_Disable)
    GUICtrlSetState ($Techniker,$GUI_FOCUS)
    DirCreate(@ScriptDir&"\Daten")
    DirCreate(@ScriptDir&"\Daten\Lend_Date")
    DirCreate(@ScriptDir&"\Daten\Return_Date")
    DirCreate(@ScriptDir&"\Daten\Temp")
    $Date = Date()
    $Pfad_Techniker = @ScriptDir&"\Daten\Techniker.ini"
    $datenbankpfad = @ScriptDir&"\USB_Stick_Anlage.accdb"
    $Ausgeliehen_Stick = @ScriptDir&"\Daten\Temp\Ausgeliehene_Sticks.ini"
    $Ausgeliehen_Datum_Name_Stick_Box = @ScriptDir&"\Daten\Lend_Date"&$Date&".ini"
    $Rueckgabe_Stick = @ScriptDir&"\Daten\Rueckgabe_Sticks.ini"
    $Rueckgabe_Datum_Name_Stick_Box = @ScriptDir&"\Daten\Return_Date"&$Date&".ini"
    @WorkingDir
    $Overview = @ScriptDir&"\Daten\Temp\Overview.ini"
    $tabellenname = "Stickübersicht"
    $Spalte = "ID"
    $Spalte1 = "Box"
    $Spalte2 = "Stick"
    $Spalte3 = "User"
    $time = 0

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

    Case $Ausleihen2
    $iStick = String(GUICtrlRead($Sticknummer2))
    MsgBox(0,"Stick",$iStick)
    $iBox = String(GUICtrlRead($StickBox2))
    MsgBox(0,"Box",$iBox)
    $iName = GUICtrlRead($Techniker2)
    MsgBox(0,"Name",$iName)
    If $iStick = "" And $iBox = "" Then
    MsgBox(0+64,"","Bitte die Sticknummer und StickBox angeben.",4)
    ElseIf $iBox = "" Then
    MsgBox(0+64,"","Bitte die StickBox angegeben.",3)
    ElseIf $iStick = "" Then
    MsgBox(0+64,"","Bitte die Sticknummer angeben.",3)
    EndIf
    MsgBox(0,"","Kein Fehler aufgetreten, alle Felder ausgefüllt.")
    If $iBox <> "" and $iStick <> ""Then
    $query = "SELECT * FROM "&$tabellenname&" WHERE Stick = '"&$iStick&"' and Box = '"&$iBox&"'"
    $strData = String(_ReadOneFld($query, $datenbankpfad, $Spalte))
    MsgBox(0,"Read",$strData&$Spalte)
    If $strData = True Then
    ;~ SplashTextOn("","")
    $adoCon = ObjCreate("ADODB.Connection")
    $adoCon.Open("Provider=Microsoft.ACE.OLEDB.12.0; Data Source="&$datenbankpfad&";")
    $adoRs = ObjCreate("ADODB.Recordset")
    $update = "UPDATE "&$tabellenname&" SET User = '"&$iName&"' WHERE Stick = '"&$iStick&"'" <-------- Das Funktioniert nicht und ich komm hier nicht weiter :(
    $adoRs.Open($update,$adoCon)
    ;~ MsgBox(0,"Update",$update)
    $adoCon.Close
    ;~ SplashOff()
    EndIf
    EndIf

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

    Funktion:
    ;~ --Access auslesen---------------------------------------------------------------------------
    Func _ReadOneFld($_access,$_datenbankpfad,$_field)
    Dim $_output
    $adoCon = ObjCreate("ADODB.Connection")
    $adoCon.Open("Provider=Microsoft.ACE.OLEDB.12.0; Data Source="&$_datenbankpfad&";")
    $adoRs = ObjCreate("ADODB.Recordset")
    $adoRs.CursorType = 1
    $adoRs.LockType = 3
    $adoRs.Open($_access,$adoCon)
    With $adoRs
    If .RecordCount Then
    While Not .EOF
    $_output = $_output&.Fields($_field).Value&@CRLF
    .MoveNext
    WEnd
    EndIf
    EndWith
    $adoCon.Close
    Return $_output
    EndFunc

    [/autoit][autoit][/autoit][autoit][/autoit]
  • Beispiel für ein Update einer access accdb ...

    [autoit]


    #include <Date.au3>

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

    _access_write_update()

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

    Func _access_write_update()

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

    $dbname = "D:\Data\scripte\MS_AccessCom\access_01\db_test.accdb"
    $tblname = "epayslip"
    $s_data07 = _Now()

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

    $FULL_MDB_FILE_NAME = $dbname
    ;$SQL_CODE = "select * from epayslip"
    $CONN = ObjCreate("ADODB.Connection")
    ;$CONN.Open('Driver={Microsoft Access Driver (*.mdb)};Dbq=' & $FULL_MDB_FILE_NAME & ';')
    $CONN.Open("Provider=Microsoft.ACE.OLEDB.12.0; Data Source=" & $FULL_MDB_FILE_NAME & ";")
    $RecordSet = ObjCreate("ADODB.Recordset")

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

    ;Local $sQuery = "UPDATE " & $tblname & " SET check = 1, date = " & $s_data07 & " WHERE user = " & "'" & @UserName & "'"
    Local $sQuery = "UPDATE " & $tblname & " SET " & $tblname & ".[check] = 1, " & $tblname & ".[date] = '" & $s_data07 & "' WHERE " & $tblname & ".[user] = " & "'" & @UserName & "'"
    ;ConsoleWrite($sQuery)
    $CONN.Execute($sQuery)
    $CONN.Close

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

    EndFunc

    [/autoit]

    gruß gmmg