Werte aus SQLite in eine ListView Tabelle integrieren

  • Hey Leute,

    Ich bin nach jahrelanger Abtrünnigkeit wieder zu AutoIt zurückgekehrt und habe viele meiner einstigen Kentnisse über AutoIt vergessen und brauche jetzt eure Hilfe um wieder ins Thema einsteigen zu können :P


    Erstmal ne Info zum Projekt:

    Dieses Projekt ist für meinen Arbeitgeber. Wir reparieren Geräte unserer Kunden und liefern für die Dauer der Reparatur Leihgeräte.
    Im Laufe der Zeit haben sich allerdings so viele Kunden angehäuft das es langsam unübersichtlich wird und man nicht mehr wissen kann welches Leihgerät jetzt bei welchem Kunden steht und von wem alles Geräte bei uns zur Reparatur sind.
    Mein Vorschlag an den Chef:
    Geräte mit Barcodes versehen ( Leihgeräte und Kundengeräte) und jedes mal, wenn ein Gerät die Werkstatt verlässt oder betritt, den Code zu scannen.
    Die Geräte sollen dann schön übersichtlich in einem kleinen Programm angezeigt werden sodass jeder gleich sehen kann wo welches Gerät ist.


    Mein(e) Problem(e):

    Ein GUI zu erstellen hab ich noch hinbekommen und solange ich auf die Lieferung des Barcodescanners warte wollte ich schonmal eine Datenbank anlegen in der alle Kunden und Leihgeräte verzeichnet sind.
    Mein Hauptproblem ist das ich allerdings noch nie mit Datenbanken gearbeitet habe.

    Hier mal ein Beispiel wie ich momentan versuche die Daten aus der Datenbank auszulesen und in einer Tabelle darzustellen:

    [autoit]


    #include <SQLite.au3>
    #include <SQLite.dll.au3>
    #include <GUIConstantsEx.au3>
    #include <WindowsConstants.au3>
    #include <MsgBoxConstants.au3>

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

    Local $hQuery, $aRow, $listview, $button, $item1, $item2, $item3, $msg

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

    GUICreate("listview items", 220, 250, 100, 200, -1, $WS_EX_ACCEPTFILES)
    $listview = GUICtrlCreateListView("col1|col2|col3", 10, 10, 200, 150)
    GUICtrlCreateInput("", 20, 200, 150)
    GUICtrlSetState(-1, $GUI_DROPACCEPTED)
    GUISetState(@SW_SHOW)

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

    _SQLite_Startup()
    _SQLite_Open()
    _SQLite_Exec(-1, "Create table tblTest (a,b,c);" & _
    "Insert into tblTest values (1,2,3);" & _
    "Insert into tblTest values (Null,5,6);")
    Local $d = _SQLite_Exec(-1, "Select * From tblTest", "_cb") ; _cb will be called for each row

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

    Func _cb($aRow)

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

    For $s In $aRow
    ;~ MsgBox(1,"",$aRow)
    ConsoleWrite($s&"|")
    GUICtrlCreateListViewItem($s&"|", $listview)
    Next

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

    ConsoleWrite(@CRLF)
    ; Return $SQLITE_ABORT ; Would Abort the process and trigger an @error in _SQLite_Exec()
    EndFunc ;==>_cb
    _SQLite_Close()
    _SQLite_Shutdown()

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

    While 1
    Switch GUIGetMsg()
    Case $GUI_EVENT_CLOSE
    ExitLoop
    EndSwitch
    WEnd

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

    Ich bin schon froh, dass ich wenigstens alle Daten aus der DB auslesen konnte. Leider werden diese nicht so wie ich es gerne hätte angezeigt.
    Ich weis auch wo der Fehler liegt aber ich hab einfach keine Idee wie ich die eingelesenen Daten einer Spalte auch einer Spalte in einer Tabelle zuweisen soll.
    Was ich bräuchte wäre ein Beispiel wie ich die Daten in ein ListView format bekomme. Die Spalten-Namen aus der Datenbank ( a, b, c) brauche ich natürlich nicht in der Tabelle sondern nur die reinen Daten.
    So wie ich AutoIt kenne gibt es dafür eine Funktion die ich bloß noch nicht kenne :P

    BTW: Falls jemand der Ansicht ist das eine Datenbank viel zu kompliziert ist und das doch viel einfacher mit einer anderen Methode geht bin ich da vollkommen offen für Vorschläge.
    Die Datenbank könnte im extremfall bis zu 1000 Kunden (mit Anschrift usw) enthalten.
    Und in einer zweiten DB-Tabelle kommen dann die ganzen (Leih-)Geräte rein.


    Ich werde in diesem Thread dann Folge-Probleme / Fragen zu dem Projekt posten und bedanke mich schonmal herzlichst fürs helfen :)


    MfG,
    Die Blubkuh

    Dieser Beitrag wurde 9521 mal editiert, zum letzten Mal von Blubkuh: Morgen, 02:28.

    [autoit]

    If Not $Elephant Then $Irelephant = True

    [/autoit]
  • Ich gehe mal davon aus, dass das so aussehen soll:

    Spoiler anzeigen
    [autoit]

    #include <SQLite.au3>
    #include <SQLite.dll.au3>
    #include <GUIConstantsEx.au3>
    #include <WindowsConstants.au3>
    #include <MsgBoxConstants.au3>

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

    Local $hQuery, $aRow, $listview, $button, $item1, $item2, $item3, $msg

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

    GUICreate("listview items", 220, 250, 100, 200, -1, $WS_EX_ACCEPTFILES)
    $listview = GUICtrlCreateListView("col1|col2|col3", 10, 10, 200, 150)
    GUICtrlCreateInput("", 20, 200, 150)
    GUICtrlSetState(-1, $GUI_DROPACCEPTED)
    GUISetState(@SW_SHOW)

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

    _SQLite_Startup()
    _SQLite_Open()
    _SQLite_Exec(-1, "Create table tblTest (a,b,c);" & _
    "Insert into tblTest values (1,2,3);" & _
    "Insert into tblTest values (Null,5,6);")
    Local $d = _SQLite_Exec(-1, "Select * From tblTest", "_cb") ; _cb will be called for each row

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

    Func _cb($aRow)
    Local $sItem
    For $s In $aRow
    $sItem &= $s & "|"
    Next
    GUICtrlCreateListViewItem(StringTrimRight($sItem, 1), $listview)
    EndFunc ;==>_cb

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

    _SQLite_Close()
    _SQLite_Shutdown()

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

    While 1
    Switch GUIGetMsg()
    Case $GUI_EVENT_CLOSE
    ExitLoop
    EndSwitch
    WEnd

    [/autoit]


    Du hast für jeden einzelnen Eintrag einer Reihe (bzw. jeden Durchgang der For Schleife) ein ListViewItem erstellt, also eine Zeile.


  • Super. Das ist zu 90% das was ich brauche. Das einzige was stört sind die namen der spalten( a,b,c) die sollten eigentlich nicht mit in die tabelle.
    Gibts da nen SQL command mit dem man alles auslesen kann außer den Spaltennamen?

    Hab mal gegoogled aber leider nix passendes gefunden.

    Falls da einer ne Lösung hat wär super. Sonst muss ich morgen wohl meine Arbeitszeit dafür opfern :P

    Dieser Beitrag wurde 9521 mal editiert, zum letzten Mal von Blubkuh: Morgen, 02:28.

    [autoit]

    If Not $Elephant Then $Irelephant = True

    [/autoit]
  • Wo bitte siehst du im der geposteten Lösung die Spaltennamen a,b,c im Listview?

    [Blockierte Grafik: http://i.imgur.com/iXsCssZ.png]


    Also bei mir kommt folgendes:
    [Blockierte Grafik: http://i.imgur.com/xqmwfik.png]

    Welchen Code benutzt du denn? ^^

    Dieser Beitrag wurde 9521 mal editiert, zum letzten Mal von Blubkuh: Morgen, 02:28.

    [autoit]

    If Not $Elephant Then $Irelephant = True

    [/autoit]

    Einmal editiert, zuletzt von Blubkuh (15. Januar 2014 um 20:58)

  • Laut Hilfe spuckt SQLite_Exec im ersten Callback die Namen der Spalten aus. Man kann auch einfach eine andere Funktion verwenden:

    Spoiler anzeigen
    [autoit]

    #include <SQLite.au3>
    #include <SQLite.dll.au3>
    #include <GUIConstantsEx.au3>
    #include <WindowsConstants.au3>
    #include <MsgBoxConstants.au3>
    #include<Array.au3>

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

    Local $listview, $aResult, $iRows, $iColumns, $iRval, $sItem

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

    GUICreate("listview items", 220, 250, 100, 200, -1, $WS_EX_ACCEPTFILES)
    $listview = GUICtrlCreateListView("col1|col2|col3", 10, 10, 200, 150)
    GUICtrlCreateInput("", 20, 200, 150)
    GUICtrlSetState(-1, $GUI_DROPACCEPTED)
    GUISetState(@SW_SHOW)

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

    _SQLite_Startup()
    _SQLite_Open()
    _SQLite_Exec(-1, "Create table tblTest (a,b,c);" & _
    "Insert into tblTest values (1,2,3);" & _
    "Insert into tblTest values (Null,5,6);")

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

    _SQLite_GetTable2d(-1, "Select * From tblTest", $aResult, $iRows, $iColumns)

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

    For $iR = 1 To $iRows
    $sItem = ""
    For $iC = 0 To $iColumns - 1
    $sItem &= $aResult[$iR][$iC] & "|"
    Next
    GUICtrlCreateListViewItem(StringTrimRight($sItem, 1), $listview)
    Next

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

    _SQLite_Close()
    _SQLite_Shutdown()

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

    While 1
    Switch GUIGetMsg()
    Case $GUI_EVENT_CLOSE
    ExitLoop
    EndSwitch
    WEnd

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

  • Perfekt. Das ist genau die Funktion die ich gebraucht, aber nicht gefunden habe :D
    Damit sollte ich erstmal weiterarbeiten können
    <3

    Dieser Beitrag wurde 9521 mal editiert, zum letzten Mal von Blubkuh: Morgen, 02:28.

    [autoit]

    If Not $Elephant Then $Irelephant = True

    [/autoit]
  • Hallo,

    eine kurze Frage: kann man den Header auch bei _GUICtrlListView_AddArray statt GUICtrlCreateListViewItem entfernen?


    VG


    horphi

  • Wollte nur kurz mitteilen. Auch ich bin gerade dabei SQLite zu lernen und anzuwenden.
    Siehe : "DB-2-ListView" so sollte es in der SuFu zu finden sein.

    Lieben Gruß,
    Alina

    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

    Geheime Information: ;)
    OuBVU5ebLhHu5QvlnAyQB4A7SzBrvWulwL7RLl2BdH5tI6sIYspeMKeXMSXl

  • Moin horphi.
    Magst Du den Beitrag noch als "gelöst" markieren?

    Lieben Gruß,
    Alina

    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

    Geheime Information: ;)
    OuBVU5ebLhHu5QvlnAyQB4A7SzBrvWulwL7RLl2BdH5tI6sIYspeMKeXMSXl

  • Sorry orphi. Frau ist müde gewesen. ;)

    Lieben Gruß,
    Alina

    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

    Geheime Information: ;)
    OuBVU5ebLhHu5QvlnAyQB4A7SzBrvWulwL7RLl2BdH5tI6sIYspeMKeXMSXl