Inventarliste erstellen MySQL Datenbank

  • hallo liebe gemeinde,

    sitze gerade an einem projekt für die firma dran und habe meine probleme

    eigentlich ein simples programm das nur zum einen informationen in die datenbank speichert und zum anderen die informationen ausgeben soll
    das mit dem Speichern funktioniert auch soweit sehr gut nur mit dem ausgeben habe ich meine probleme

    ich würde gerne wenn man auf inventarliste auslesen drückt die gesamte liste angezeigt bekommt die in der datenbank hinterlegt ist.

    als nächsten gedanken habe ich mir vorgestellt das man vielleicht speziel nach einem modell sucht oder nach einem benutzer. wäre sowas möglich?aber bin erstmal zufrieden wenn die ausgabe funktioniert

    ich habe es versucht aber in meiner lösung gibt er es in einer msgbox aus(was ist nicht unbedingt toll finde) und nur die letzte Information in der datenbank und nicht alles.

    Vielen Dank!


    Spoiler anzeigen

    #include <GUIConstants.au3>
    #include <MySQL.au3>
    #include <Array.au3>

    $UserName = "root"
    $Password = "*****"
    $Database = "inventar2"
    $MySQLServerName = "localhost"

    $SQLInstance = _MySQLConnect($UserName,$Password,$Database,$MySQLServerName)

    $SQLCode = "SELECT * FROM uebersicht" ;wählt aus der Tabelle accounts aus
    $TableContents = _Query($SQLInstance,$SQLCode)

    #Region ### START Koda GUI section ### Form=C:\******\Desktop\Koda\Forms\inventarliste.kxf
    $Form1 = GUICreate("Inventarliste V. 0.1 Stand 09.11.2010", 625, 443, 193, 125)
    $Labelueber = GUICtrlCreateLabel("Inventarliste ", 104, 16, 394, 36)
    GUICtrlSetFont(-1, 20, 400, 0, "MS Sans Serif")
    $Button1 = GUICtrlCreateButton("Beenden", 192, 416, 105, 17, 0)
    $Button2 = GUICtrlCreateButton("Info", 312, 416, 105, 17, 0)
    $Button3 = GUICtrlCreateButton("Inventarliste auslesen", 16, 112, 201, 41, 0)
    $Button4 = GUICtrlCreateButton("Neuer Eintrag - Notebook ", 16, 168, 201, 41, 0)
    $Button5 = GUICtrlCreateButton("Neuer Eintrag - Rechner", 16, 224, 201, 41, 0)
    GUISetState(@SW_SHOW)
    #EndRegion ### END Koda GUI section ###


    ; InfoFenster
    $Form4 = GUICreate("Info", 625, 443, 246, 121)
    $Label1 = GUICtrlCreateLabel("Changelog", 32, 40, 136, 36)
    GUICtrlSetFont(-1, 20, 400, 0, "MS Sans Serif")
    $Label2 = GUICtrlCreateLabel("Version 0.1", 16, 96, 68, 17)
    GUICtrlSetFont(-1, 8, 800, 0, "MS Sans Serif")
    $Label3 = GUICtrlCreateLabel("- Unterstützt das Eintragen der Informationen in die MySQL Datenbank", 16, 120, 336, 17)
    $Label4 = GUICtrlCreateLabel("- Unterteilt in Inventar - Rechner und Inventar - Notebook", 16, 144, 274, 17)
    $buttonzuruck = GUICtrlCreateButton("zurück", 192, 408, 177, 25, 0)

    ; AusgabeFenster
    $Form3 = GUICreate("Eintragen", 625, 443, 193, 125)
    $Buttonabsenden = GUICtrlCreateButton("abschicken", 16, 392, 137, 17, 0)
    $Input1 = GUICtrlCreateInput("", 16, 40, 145, 21)
    $Label1 = GUICtrlCreateLabel("Raum", 216, 152, 32, 17)
    $Input2 = GUICtrlCreateInput("", 176, 40, 177, 21)
    $Label2 = GUICtrlCreateLabel("Ort", 288, 152, 18, 17)
    $Input3 = GUICtrlCreateInput("", 368, 40, 153, 21)
    $Input4 = GUICtrlCreateInput("", 16, 112, 177, 21)
    $Label3 = GUICtrlCreateLabel("Vorname", 424, 88, 46, 17)
    $Label4 = GUICtrlCreateLabel("Nachname", 16, 152, 56, 17)
    $Input5 = GUICtrlCreateInput("", 208, 112, 200, 21)
    $Input6 = GUICtrlCreateInput("", 424, 112, 113, 21)
    $Input7 = GUICtrlCreateInput("", 16, 176, 177, 21)
    $Input8 = GUICtrlCreateInput("", 216, 176, 50, 21)
    $Input9 = GUICtrlCreateInput("", 288, 176, 177, 21)
    $Label5 = GUICtrlCreateLabel("Inventarnummer", 16, 16, 80, 17)
    $Label6 = GUICtrlCreateLabel("Hersteller", 176, 16, 48, 17)
    $Label7 = GUICtrlCreateLabel("Modell", 368, 16, 35, 17)
    $Label8 = GUICtrlCreateLabel("Betriebssystem", 16, 88, 74, 17)
    $Label9 = GUICtrlCreateLabel("Service Pack", 208, 88, 68, 17)
    $Label10 = GUICtrlCreateLabel("Seriennummer", 16, 216, 71, 17)
    $Input11 = GUICtrlCreateInput("", 16, 240, 281, 21)
    $Label11 = GUICtrlCreateLabel("Kommentar", 16, 280, 57, 17)
    $Input10 = GUICtrlCreateInput("", 16, 312, 400, 21); Kommentar
    $Label12 = GUICtrlCreateLabel("Beispiel : HD0002/08 Toshiba Satellite Pro Windows XP Professional Service Pack 3 Max Musterman 203 Heidelberg xxxxx", 16, 352, 599, 17)
    $Buttonzuruck2 = GUICtrlCreateButton("zurück", 192, 392, 137, 17, 0)


    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $GUI_EVENT_CLOSE
    Exit

    Case $Button1
    Exit
    Case $Button2
    GUISetState(@SW_HIDE,$Form1)
    GUISetState(@SW_SHOW,$Form4)
    While 1
    $msg = GUIGetMsg($Form4)
    Switch $msg
    Case $GUI_EVENT_CLOSE
    GUISetState(@SW_HIDE,$Form4)
    GUISetState(@SW_SHOW,$Form1)
    ExitLoop
    Case $buttonzuruck
    GUISetState(@SW_HIDE,$Form4)
    GUISetState(@SW_SHOW,$Form1)
    ExitLoop
    EndSwitch
    WEnd
    Case $Button3
    With $TableContents
    While Not .EOF
    $NameList = .Fields ("ID").value & " " & .Fields ("Inventarnummer").value & " " & .Fields ("Hersteller").value & " " & @CRLF
    .MoveNext
    WEnd
    EndWith
    MsgBox(0,"Accountliste",$NameList)

    Case $Button4
    GUISetState(@SW_HIDE,$Form1)
    GUISetState(@SW_SHOW,$Form3)
    While 1
    $msg = GUIGetMsg($Form3)
    Switch $msg
    Case $GUI_EVENT_CLOSE
    GUISetState(@SW_HIDE,$Form3)
    GUISetState(@SW_SHOW,$Form1)
    ExitLoop
    case $Buttonzuruck2
    GUISetState(@SW_HIDE,$Form3)
    GUISetState(@SW_SHOW,$Form1)
    ExitLoop
    Case $Buttonabsenden
    $Input1_inhalt = GUICtrlRead($Input1)
    $Input2_inhalt = GUICtrlRead($Input2)
    $Input3_inhalt = GUICtrlRead($Input3)
    $Input4_inhalt = GUICtrlRead($Input4)
    $Input5_inhalt = GUICtrlRead($Input5)
    $Input6_inhalt = GUICtrlRead($Input6)
    $Input7_inhalt = GUICtrlRead($Input7)
    $Input8_inhalt = GUICtrlRead($Input8)
    $Input9_inhalt = GUICtrlRead($Input9)
    $Input10_inhalt = GUICtrlRead($Input10)
    $Input11_inhalt = GUICtrlRead($Input11)

    Dim $ColumnNames[13]
    $ColumnNames[0]= "ID"
    $ColumnNames[1]= "Inventarnummer"
    $ColumnNames[2]= "Hersteller"
    $ColumnNames[3]= "Modell"
    $ColumnNames[4]= "Betriebssystem"
    $ColumnNames[5]= "ServicePack"
    $ColumnNames[6]= "Name"
    $ColumnNames[7]= "Nachname"
    $ColumnNames[8]= "Raum"
    $ColumnNames[9]= "Ort"
    $ColumnNames[10]= "Seriennummer"
    $ColumnNames[11]= "Kommentar"
    $ColumnNames[12]= ""

    Dim $Room[13]
    $Room[0]=""
    $Room[1]=$Input1_inhalt
    $Room[2]=$Input2_inhalt
    $Room[3]=$Input3_inhalt
    $Room[4]=$Input4_inhalt
    $Room[5]=$Input5_inhalt
    $Room[6]=$Input6_inhalt
    $Room[7]=$Input7_inhalt
    $Room[8]=$Input8_inhalt
    $Room[9]=$Input9_inhalt
    $Room[10]=$Input11_inhalt
    $Room[11]=$Input10_inhalt
    $Room[12]=""

    _AddRecord($SQLInstance,"uebersicht",$ColumnNames,$Room)

    ExitLoop

    EndSwitch
    WEnd
    EndSwitch
    WEnd

  • Hi....

    Ich habe auch sowas für meine Firma gemacht... 8|
    Am schluss bin ich zu dem Ergebnis gekommen das die Verarbeitung am besten mit autoit funktioniert. Aber die Außgabe am besten über eine Interne Intranet Seite ist. Daher kann jeder ohne Installation von irgend einem Programm die Informationen abrufen.

    Ich hatte es auch mal kurz hier vorgestellt... 8o
    ( Guck dir vor allem mal das Kommunikationsmodell an, das ist ähnlich was was du willst... )
    Falls du dazu noch genauere Informationen brauchst einfach fragen....

    MFG chris :D

  • Mal was anderes. Wenn du Labels zur Laufzeit nicht änderst, brauchst du denen auch nicht Variablen geben. Und wozu brauchst du $Input1_inhalt, $Input2_inhalt, ... wenn du das ganze sowieso in ein Array speicherst? Und nimm amm besten zum speichern eine For-Schleife, spart Code ;).

    Und mir kam

    [autoit]

    $Room[10]=$Input11_inhalt
    $Room[11]=$Input10_inhalt

    [/autoit]


    ein bisschen seltsam vor, gut bei einer For-Schleife ein bisschen unvorteilhaft, aber das kann man ja ändern.

    Verwende auch bitte den Tidy und beim posten die autoit-Tags.

  • hallo,

    danke erstmal für eure antworten

    gibt es nicht eine funktion wo man die datenbank ausdrucken/ausgeben lassen kann. suche schon die ganze zeit aber finde nichts.

    wäre wirklich super wenn ihr mir da was vorschlagen könnt

    Einmal editiert, zuletzt von hela (12. November 2010 um 13:56)

    • Offizieller Beitrag

    gibt es nicht eine funktion wo man die datenbank ausdrucken/ausgeben lassen kann. suche schon die ganze zeit aber finde nichts.

    Also DIE Datenbank als solches gibt es ja nicht. ;) Das ist eine Ansammlung von Tabellen, die auf verschiedene Weise miteinander verknüpft werden. Dir nützt es sicher wenig jede Tabelle einzeln auszugeben. Sondern es soll ja dann z.B. rauskommen: Ausgabe aller Artikel, die dem Kunden X verkauft worden. Dazu mußt du natürlich eine SQL-Abfrage starten, die alle erforderlichen Infos aus den einzelnen Tabellen herausfiltert.

  • hi,
    eine sql abfrage habe ich ja bereits


    [autoit]

    $UserName = "root"
    $Password = "trabzon88"
    $Database = "inventar2"
    $MySQLServerName = "localhost"

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

    $SQLInstance = _MySQLConnect($UserName,$Password,$Database,$MySQLServerName)

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

    $SQLCode = "SELECT * FROM uebersicht" ;wählt aus der Tabelle accounts aus
    $TableContents = _Query($SQLInstance,$SQLCode) ;führt ein Query aus mit der vorhergehenden Variable $SQLInstance, die ja eine Instanz der DB enthält
    With $TableContents
    While Not .EOF
    $NameList = .Fields ("ID").value & " " & .Fields ("Inventarnummer").value & " " & .Fields ("Hersteller").value & " " & @CRLF
    .MoveNext
    WEnd
    EndWith

    [/autoit]

    aber er gibt mir nur den aktuellsten auszug und nicht die gesamte liste aus, die spaltennamen fehlen auch

  • hallo,

    danke für deine schnelle antwort
    wenn ich

    [autoit]

    1

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

    SELECT `ID`, `Inventarnummer`, `Hersteller` FROM `uebersicht`

    [/autoit]

    eingebe bekomme ich nur die spaltennamen angezeigt

    wenn ich

    [autoit]

    1

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

    SELECT ID, Inventarnummer, Hersteller FROM uebersicht

    [/autoit]

    also ohne hochkomme reinschreibe bekomme ich nur einen eintrag ausgelesen, aber in der datenbank sind 7 einträge ich will das er mir alle anzeigt

    • Offizieller Beitrag

    eingebe bekomme ich nur die spaltennamen angezeigt


    Ja, die Bedingung gehört natürlich dazu. Ohne Where-Klausel wird natürlich nichts selektiert. Du brauchst also eine Bedingung, die für alle Datensätze zutrifft. Da ID nicht NULL sein kann verwende einfach dieses:

    SQL
    SELECT `ID`, `Inventarnummer`, `Hersteller` FROM `uebersicht` WHERE `ID` NOT NULL
  • vielleicht stell ich mich ein wenig dum man aber wenn ich es nach deiner sql formel mache bekomme ich

    [autoit]

    C:\Program Files\AutoIt3\Include\MySQL.au3 (48) : ==> The requested action with this object has failed.:
    Return $oConnectionobj.execute ($sQuery)
    Return $oConnectionobj.execute ($sQuery)^ ERROR
    >Exit code: 1 Time: 0.316

    [/autoit]

    danke für deine geduld mit mir :D

    • Offizieller Beitrag

    Nun, ich kann nicht ausschließen, dass was daneben geht. Mit MySQL hab ich eher wenig am Hut. Ich nutze Firebird.
    Dann versuch doch mal die ganz allgemeine Ausgabe, wie aus deinem ersten SQL-String (aber Felder und Tabellen gehören bei MySQL in "`").

    SQL
    SELECT * FROM `uebersicht`
    • Offizieller Beitrag

    ich bekomme immer nur einen eintrag angezeigt :(


    Dann machst du in der Auswertung etwas falsch.
    Die Abfrage gibt dir ein Recordset zurück, das du wie folgt weiter bearbeiten kannst.

    [autoit]


    ; Ausführung eines SQL-Statements mit Methode Execute ==> liefert Recordset zurück:
    $oRecSet = _oSQLDB_Execute($oConn, $sql_str) ;<== sollte der MySQL-Query-Funktion entsprechen

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

    ; Recordset in Array wandeln, es wird immer ein 2D-Array zurückgegeben:
    $array = $oRecSet.GetRows
    If Not IsArray($array) Then
    MsgBox(0, 'Array', 'kein Ergebnis')
    ; close connection
    EndIf

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

    _ArrayDisplay($array)

    [/autoit]

    Kannst ja auch mal hier schauen, vllt. hilft dir das weiter.

  • Hi...

    Also mir hat das Programm Toad sehr gut geholfen um größere SQL Abfragen zu erstellen. Vieleicht kannst du es ja auch gebrauchen...
    hier :thumbup:

    Ich hab in meinser Software die Daten immer so ausgelesen...

    [autoit]

    $MySQL= "SELECT * FROM `plattenbeobachtung`"
    _MySQL_Real_Query($MysqlConn, $MySQL)
    $res = _MySQL_Store_Result($MysqlConn)
    $array = _MySQL_Fetch_Result_StringArray($res)
    _MySQL_Free_Result($res)
    _ArrayDisplay($array)

    [/autoit]

    Ich benutze dabei die MYSQL UDF von progandy

    MFG chris :D

  • hi,
    super tipp danke ich kann endlich eine abfrage machen die auch super angezeigt wird , echt danke!!

    aber das hatte zur folge das ich keine insert befehle mehr machen kann , also was in die datenbank reinschreiben kann,

    [autoit]

    Case $Buttonabsenden
    $Input1_inhalt = GUICtrlRead($Input1)
    $Input2_inhalt = GUICtrlRead($Input2)
    $Input3_inhalt = GUICtrlRead($Input3)
    $Input4_inhalt = GUICtrlRead($Input4)
    $Input5_inhalt = GUICtrlRead($Input5)
    $Input6_inhalt = GUICtrlRead($Input6)
    $Input7_inhalt = GUICtrlRead($Input7)
    $Input8_inhalt = GUICtrlRead($Input8)
    $Input9_inhalt = GUICtrlRead($Input9)
    $Input10_inhalt = GUICtrlRead($Input10)
    $Input11_inhalt = GUICtrlRead($Input11)

    Dim $ColumnNames[13]
    $ColumnNames[0]= "ID"
    $ColumnNames[1]= "Inventarnummer"
    $ColumnNames[2]= "Hersteller"
    $ColumnNames[3]= "Modell"
    $ColumnNames[4]= "Betriebssystem"
    $ColumnNames[5]= "ServicePack"
    $ColumnNames[6]= "Name"
    $ColumnNames[7]= "Nachname"
    $ColumnNames[8]= "Raum"
    $ColumnNames[9]= "Ort"
    $ColumnNames[10]= "Seriennummer"
    $ColumnNames[11]= "Kommentar"
    $ColumnNames[12]= ""

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

    Dim $Room[13]
    $Room[0]=""
    $Room[1]=$Input1_inhalt
    $Room[2]=$Input2_inhalt
    $Room[3]=$Input3_inhalt
    $Room[4]=$Input4_inhalt
    $Room[5]=$Input5_inhalt
    $Room[6]=$Input6_inhalt
    $Room[7]=$Input7_inhalt
    $Room[8]=$Input8_inhalt
    $Room[9]=$Input9_inhalt
    $Room[10]=$Input11_inhalt
    $Room[11]=$Input10_inhalt
    $Room[12]=""

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

    _AddRecord($connected,"uebersicht",$ColumnNames,$Room)

    [/autoit]

    sagt mir dann

    C:\Users\*****\Documents\AutoIT\Inventarliste\inventar_home2.au3 (175) : ==> Unknown function name.:
    _AddRecord($connected,"uebersicht",$ColumnNames,$Room)
    ^ ERROR

    und noch sicherheitshalber noch eine fragen ,wie wird es dann aussehen , wenn ich einen eintrag mache, kann ich dann die felder löschen und dann gleich einen nächsten eintrag machen oder muss ich das programm schließen dann nochmal öffnen um den nächsten eintrag machen zu können?

    danke!

  • gibst keine möglichkeit einen insert into befehl zu machen

    weil addrecord anscheinend nicht mehr funktioniert????

    benutze jetzt diese MYSQL UDF von progandy

  • gibst keine möglichkeit einen insert into befehl zu machen

    weil addrecord anscheinend nicht mehr funktioniert????

    benutze jetzt diese MYSQL UDF von progandy

    huhu

    sorry ich hab gerade nicht so viel Zeit deshalb etwas kürzer...
    etwas aktualisieren geht in etwa so...

    [autoit]

    $MySQL = "UPDATE `infosys`.`options` SET `serveronline` = '1' LIMIT 1"
    _MySQL_Real_Query($MysqlConn, $MySQL)

    [/autoit]

    etwas hinzufügen geht so..

    [autoit]

    $MySQL = "INSERT INTO `infosys`.`security` (" _
    &"`id` ," _
    &"`lasttimestamp`" _
    &")" _
    &"VALUES (" _
    &"NULL ," _
    &"'"&$jetzt&"'" _
    &");"
    _MySQL_Real_Query($MysqlConn, $MySQL)

    [/autoit]

    MFG chris :D

  • super danke!!!

    meine hoffentlich letzte frage :)

    momentan kann ich immer nur einen datensatz einfügen , dann prgramm beenden , neustarten wieder einen datensatz einfügen.

    wie mache ich das er mir soviele datensätze einfüllt bis auf den button zurück gehe zum beispiel

    [autoit]

    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $GUI_EVENT_CLOSE
    Exit

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

    Case $Button1
    Exit
    Case $Button2
    GUISetState(@SW_HIDE,$Form1)
    GUISetState(@SW_SHOW,$Form4)
    While 1
    $msg = GUIGetMsg($Form4)
    Switch $msg
    Case $GUI_EVENT_CLOSE
    GUISetState(@SW_HIDE,$Form4)
    GUISetState(@SW_SHOW,$Form1)
    ExitLoop
    Case $buttonzuruck
    GUISetState(@SW_HIDE,$Form4)
    GUISetState(@SW_SHOW,$Form1)
    ExitLoop
    EndSwitch
    WEnd
    Case $Button3
    $array = _MySQL_Fetch_Result_StringArray($res)
    _ArrayDisplay($array)
    Case $Button4
    GUISetState(@SW_HIDE,$Form1)
    GUISetState(@SW_SHOW,$Form3)
    While 1
    $msg = GUIGetMsg($Form3)
    Switch $msg
    Case $GUI_EVENT_CLOSE
    GUISetState(@SW_HIDE,$Form3)
    GUISetState(@SW_SHOW,$Form1)
    ExitLoop
    case $Buttonzuruck2
    GUISetState(@SW_HIDE,$Form3)
    GUISetState(@SW_SHOW,$Form1)
    ExitLoop
    Case $Buttonabsenden
    $Input1_inhalt = GUICtrlRead($Input1)
    $Input2_inhalt = GUICtrlRead($Input2)
    $Input3_inhalt = GUICtrlRead($Input3)
    $Input4_inhalt = GUICtrlRead($Input4)
    $Input5_inhalt = GUICtrlRead($Input5)
    $Input6_inhalt = GUICtrlRead($Input6)
    $Input7_inhalt = GUICtrlRead($Input7)
    $Input8_inhalt = GUICtrlRead($Input8)
    $Input9_inhalt = GUICtrlRead($Input9)
    $Input10_inhalt = GUICtrlRead($Input10)
    $Input11_inhalt = GUICtrlRead($Input11)

    $MySQL = ("INSERT INTO `uebersicht` (Inventarnummer,Hersteller,Modell,Betriebssystem,ServicePack,Name,Nachname,Raum,Ort,Seriennummer,Kommentar) VALUES ('"&$Input1_inhalt&"','"&$Input2_inhalt&"','"&$Input3_inhalt&"','"&$Input4_inhalt&"','"&$Input5_inhalt&"','"&$Input6_inhalt&"','"&$Input7_inhalt&"','"&$Input8_inhalt&"','"&$Input9_inhalt&"','"&$Input11_inhalt&"','"&$Input10_inhalt&"') ")

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


    _MySQL_Real_Query($MysqlConn, $MySQL)

    ExitLoop

    EndSwitch
    WEnd
    EndSwitch
    WEnd

    [/autoit]
  • hallo

    ich habe ja momentan localhost als mysql datenbank angegeben

    kann ich auch meine bei 1und1 angemeldetet datenbank angeben

    habe es zwar versucht bekomme aber dauert fehlermeldungen

    bräuchte dringend hilfe

    danke