Abfrage einer MS SQL 2008 DB mit Autoit

  • Hallo,


    so nachdem ich meine GUI um einige SQL Statements erweitert habe, komme ich an ein neues Problem, welches ich gerne im Vorfeld mal besprechen würde.
    Als momentanes Ergebnis bekomme ich eine ListView mit z.B. 4 Zeilen aufgebaut. Da ich jedoch einige Werte ausgeben lasse, ist die Bildschirmbreite recht schnell erreicht, sodass sich der Scrollbalken aktiviert.


    Jetzt kam mir folgende Idee.


    Ich baue mir dort wo ich bisher die Listview aufgebaut habe ein Tab Controll mit z.B. 2 Tabulatoren (wie das geht muss ich noch schauen, habe damit noch nie was gemacht, aber das wir schon nicht so schwierig sein).
    Auf dem ersten Tab möchte ich dann die Listview in einer abspeckten Version ausgeben.


    Gehen wir mal davon aus, das mein

    SQL
    SELECT * FROM NACHWEIS where NACHWEISNR = '1234';

    als Ergebnis die Tabellennamen NACHWEISNR, NACHWEIS_ID, MENGE und DATUM ausgibt (natürlich viel mehr, nur so als Beispiel), könnte es jedoch sein, das die NACHWEISNR 1234 in der Datenbank öfter vorkommt, jedoch die NACHWEIS_ID immer eindeutig ist. Es wird jetzt z.B. eine Listview aufgebaut mit 4 Zeilen.


    Pro Zeile lasse ich nur die "wichtigsten" Dinge optisch erscheinen, damit der Scrollbalken erst gar nicht benötigt wird.


    So und jetzt kommt mein Problem :-)


    Ich würde jetzt gerne mit der Maus eine Listviewzeile anklicken (also irgendeine von den 4 Zeilen), dann sollte im Hintergrund nochmals ein

    SQL
    SELECT * FROM NACHWEIS where NACHWEIS_ID = 4711;

    stattfinden, wobei die NACHWEIS_ID hier auch "irgendwie" dynamisch ausgelesen werden müsste. Und das "große Ergebnis" von diesem SELECT möchte ich dann mit Labels und Inputfelder sauber aufgeteilt im zweiten Tab darstellen, also eine Arte Detailansicht


    BTW: Gibt es eigentlich eine einfache und elegante Methode Labels und Inputfelder sauber anzuordnen, d.h. das Sie senkrecht und waagerecht über eine Logik sauber stehen. Momentan ist das bei mir noch ganz viel versuchen und testen, bis es halt sauber aussieht.


    Vorab schon mal Danke, ich werde jetzt mal loslegen und schauen wie weit ich komme.


    Gruss Hassan

  • also zum auslesen kannst du das hier benutzen


    um herauszufinden, wann ein Item im Listview angeklickt wurde, benötigst du WM_NOTIFY


  • Servus TheLuBu


    erst mal vielen Dank. Ich habe jetzt mal mit WM_Notifiy herumgespielt. Da wird man ja in der Console förmlich erschlagen. Aus diesem Grund habe ich mal alle die auskommentiert, die mich aktuell nicht interessieren. Das sieht jetzt so aus:


    Leider ist es so, das ich bisher nur Ausgabe in der Console bekomme habe, wenn ich auf die Spaltenname geklickt hatte. Eigentlich erwarte ich jetzt beim linken Mausklick auf die erste oder zweite Zeile eine Reaktion in der Console, aber da passiert nix ;(


    Die Funktion CheckPosOnListView() ist hier
    Func CheckPosOnListView()
    $mark = _GUICtrlListView_GetSelectionMark(GUICtrlGetHandle($listview))
    ConsoleWrite("$mark = " & $mark & @CRLF)
    $erste_spalte = _GUICtrlListView_GetItemText(GUICtrlGetHandle($listview), $mark, 0)
    ConsoleWrite("$erste_spalte = " & $erste_spalte & @CRLF)
    $zweite_spalte = _GUICtrlListView_GetItemText(GUICtrlGetHandle($listview), $mark, 1)
    ConsoleWrite("$zweite_spalte = " & $zweite_spalte & @CRLF)
    $dritte_spalte = _GUICtrlListView_GetItemText(GUICtrlGetHandle($listview), $mark, 2)
    ConsoleWrite("$dritte_spalte = " & $dritte_spalte & @CRLF)
    EndFunc ;==>CheckPosOnListView
    Was mache ich hier falsch ? Bei den ersten Starts wurden auch ganz viele Variablen als nicht deklariert angemeckert. Die habe ich dann in der Funktion WM_Notify als Local nachdeklariert. Da meine Listview die Variable $listview hat, habe ich das ab Zeile 4 der Funktion auch angepasst. Sorry ich finde die Funktion echt heftig, da steig ich leider nicht wirklich durch.

  • Ich hab den Include vergessen :)
    #include <WindowsConstants.au3>
    #include <GuiConstantsEx.au3>


    Entferne die Variablen, die du als Local deklariert hast nochmal und versuche es dann bitte

  • Ok, hier kommt Sie schon, die weitere Frage :-)


    Ich habe jetzt ein TabControll mit 2 Tabs erstellt. Einer mit dem Namen "Tabelle" der andere zweite Tab mit dem Namen "Details". "Tabelle" steht im Focus.
    Wenn ich jetzt die Listview auf "Tabelle" erzeugen lasse ist alles OK, jedoch sehe ich die Listview auch, wenn ich "Details" drücke.


    Wie kann ich die Listview dem Tab "Tabelle" fest zuweisen ?

  • Hier mal ein Beispiel zu Tabs:


    Die Reihenfolge, in der du die Controls anlegst, ist bei den Tabs wichtig.

  • Die Reihenfolge, in der du die Controls anlegst, ist bei den Tabs wichtig.


    Was wohl auch das Problem sein dürfte, denn er löscht das listview zum Neuaufbau und erstellt dann ein neues. Habe zwar mit tab controls keine Erfahrung, aber ich denke mal man müsste in diesem Fall die beiden listviews einmailg zu Beginn erzeugen und dann nur noch die Inhalte aktualisieren/setzen anstatt es komplett neu zu erzeugen.

  • Guten morgen zusammen,


    ich glaube die Ansätze von misterspeed könnten hier passen. Das Beispiel (ich in der Hilfe) sieht ja den Aufbau folgendermaßen vor.


    1. GUI
    2. erster Tab
    3. Inhalt erster Tab
    4. zweiter Tab
    5. Inhalt zweiter Tab
    6. Endtab


    Ich lasse aber 2 leere Tabs erzeugen, und möchte dann im zweiten Schritt auf Tab 1 die "Tabelle" anzeigen und wenn ich eine Zeile markiere einen zweiten Select durchführen, welcher mit dann in der "Detail" Ansicht auf dem 2. Tab dargestellt wird.


    Vielleicht hat mir da jemand auch ein kleines Beispiel, damit der Groschen fällt :-)


    Danke