Datenbank

  • Hallo,

    ich bin mir nicht ganz sicher ob ich für mein Problem eine Datenbank brauche oder ob es das einfach so abspeichern kann.

    Vorstellung:
    Ein einfaches Programm wo ich Daten abfragen kann, die ich vorhin eingegeben haben. Z.b. ich gebe ich in das Suchfeld "Dokument" ein und jetzt soll es mir alle Ergebnisse ausliefern die ich mit Dokument gekennzeichnet habe.

    Problem:
    Die Umsetztung da ich neu bin weiß ich nicht ob ich dazu eine Datenbank brauche oder ob es auch so funktioniert.

    Lösung:
    So einfach wie möglich wenns geht oder besser gesagt das es auch ein newbie versteht :S

    Vielen Dank
    Gruß Steff

  • kommt drauf an, wie du die Datein kennzeichnest und wie viele Datein du hast

  • ich denk das sind dann höchstens 100 oder paar mehr, Also nicht viel. Was meinst du mit kennzeichnen? Ich möchte dem "Text" einfach ein Stichwort zuweisen.

  • ja wo und wie du es zuweist z.B. in einer extra Datei mit den Namen und der Zuweisung

  • also ich hab mir das so ungefähr vorgestellt:

    [Blockierte Grafik: http://www.imagehack.eu/bild.php/2,10961,dbjpgQQH0Z.jpg]

    Spoiler anzeigen
  • Hi,
    du brauchst einfach ein Mehrdimensionales array, in das die ganzen Sachen gespeichert werden.
    Da du 3 Kriterein hast würde ich auch 3 Spalten anlegen.
    Dann brauchst du einen Counter der am Anfang denWert 0 Besitzt.
    Beim Klick auf den Button hinzufügen liest du den Counter aus fügst die Daten dem Array hinzu und erhöhst den Counter um 1.
    Zu der Suchfunktion, nach was willst du suchen, Name? Gugg dir mal in der Hilfe die _Arrayfunktionen an.

    Sollte nur ien ANsatz sein, bin jetzt zu müde um ein ganzes Script zu schreiben, weiteres morgen.

  • Ich würde gerne nach Name oder Stichwort suchen wollen bzw. einen teil des Namens oder Stichwort :huh:

    • Offizieller Beitrag

    Ich würde gerne nach Name oder Stichwort suchen wollen bzw. einen teil des Namens oder Stichwort :huh:

    Willst du Name / Stichwort vorher vergeben zu jedem Eintrag oder soll automatisch jeder Eintrag geprüft werden auf Vorkommen des Suchbegriffs?

    Edit:
    Mal auf die Schnelle:
    Sucht nach Stichwort und Name, Treffer werden in einem Array gesammelt und über die Eingabefelder nacheinander ausgegeben. Bin davon ausgegangen, dass Name ein Primary Key ist, also immer vergeben wird.
    Habe mal deine GUI etwas geordnet, wenn du Controls nicht ändern willst (z.B. Label) spare dir einfach, dafür eine Variable zu vergeben. Und versuche die Reihenfolge im Code, so wie in der grafischen Darstellung zu haben, macht es übersichtlicher.

    Spoiler anzeigen
    [autoit]

    #include <GUIConstants.au3>
    Global $aEntry[1][3] ;Name/Stichwort/Beschreibung
    Global $aFound[1][3]
    Global $Hinzu = True, $posFound
    $Form1 = GUICreate("Form1", 350, 471, 283, 146)
    GUICtrlCreateGroup("Suche", 16, 40, 281, 129)
    GUICtrlCreateLabel("Suche:", 32, 88, 38, 17)
    $inSuche = GUICtrlCreateInput("", 96, 88, 145, 21)
    $bSuchen = GUICtrlCreateButton("Suchen", 128, 120, 81, 25, 0)
    GUICtrlCreateGroup("", -99, -99, 1, 1)
    GUICtrlCreateGroup("Neu", 16, 184, 289, 257)
    $inName = GUICtrlCreateInput("", 104, 200, 145, 21)
    $inStichwort = GUICtrlCreateInput("", 104, 240, 145, 21)
    GUICtrlCreateLabel("Name:", 32, 200, 51, 17)
    GUICtrlCreateLabel("Stichwort", 32, 240, 56, 17)
    $eBeschreibung = GUICtrlCreateEdit("", 104, 280, 153, 113)
    $bHinzufuegen = GUICtrlCreateButton("Hinzufuegen", 96, 408, 145, 25, 0)
    GUICtrlCreateLabel("Beschreibung", 32, 280, 69, 17)
    GUICtrlCreateGroup("", -99, -99, 1, 1)
    GUISetState(@SW_SHOW)

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

    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $GUI_EVENT_CLOSE
    Exit
    Case $bHinzufuegen
    If $Hinzu Then
    _NewEntry()
    Else
    _ShowNext()
    EndIf
    Case $bSuchen
    _Search()
    EndSwitch
    WEnd

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

    Func _NewEntry()
    If $aEntry[UBound($aEntry)-1][0] <> '' Then ReDim $aEntry[UBound($aEntry)+1][3]
    $aEntry[UBound($aEntry)-1][0] = GUICtrlRead($inName)
    $aEntry[UBound($aEntry)-1][1] = GUICtrlRead($inStichwort)
    $aEntry[UBound($aEntry)-1][2] = GUICtrlRead($eBeschreibung)
    GUICtrlSetData($inName,'')
    GUICtrlSetData($inStichwort,'')
    GUICtrlSetData($eBeschreibung,'')
    EndFunc

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

    Func _Search()
    Local $sSuch = GUICtrlRead($inSuche)
    If $sSuch = '' Then Return
    For $i = 0 To UBound($aEntry) -1
    For $k = 0 To 1
    If $aEntry[$i][$k] = $sSuch Then
    If $aFound[UBound($aFound)-1][0] <> '' Then ReDim $aFound[UBound($aFound)+1][3]
    $aFound[UBound($aFound)-1][0] = $aEntry[$i][0]
    $aFound[UBound($aFound)-1][1] = $aEntry[$i][1]
    $aFound[UBound($aFound)-1][2] = $aEntry[$i][2]
    EndIf
    Next
    Next
    If $aFound[UBound($aFound)-1][0] = '' Then Return GUICtrlSetData($eBeschreibung,'KEINE TREFFER')
    GUICtrlSetData($bHinzufuegen, 'Nächster Treffer')
    GUICtrlSetData($inName, $aFound[0][0])
    GUICtrlSetData($inStichwort, $aFound[0][1])
    GUICtrlSetData($eBeschreibung, $aFound[0][2])
    $Hinzu = False
    $posFound = 1
    EndFunc

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

    Func _ShowNext()
    If (UBound($aFound) > 1) And ($posFound < UBound($aFound)) Then
    GUICtrlSetData($inName, $aFound[$posFound][0])
    GUICtrlSetData($inStichwort, $aFound[$posFound][1])
    GUICtrlSetData($eBeschreibung, $aFound[$posFound][2])
    $posFound += 1
    Else
    GUICtrlSetData($inName,'')
    GUICtrlSetData($inStichwort,'')
    GUICtrlSetData($eBeschreibung,'KEINE WEITEREN TREFFER')
    GUICtrlSetData($bHinzufuegen, 'Hinzufügen')
    $Hinzu = True
    ReDim $aFound[1][3]
    $aFound[0][0] = ''
    $aFound[0][1] = ''
    $aFound[0][2] = ''
    EndIf
    EndFunc

    [/autoit]
  • Hallo,

    danke BugFix... ich werds mal ausprobieren und mich dann nochmal melden!

  • das sieht ja schonmal ganz gut aus.

    Aber mal ne andere Frage: Es ist doch möglich eine Text Datei zu öffnen und für jeden eintrag eine neue Zeile anzulegen. Könnte man das auch so machen das er sie speichert und ausliest ohne das sich das .txt fenster öffnet? Bzw. das man nur die GUI sieht?

    • Offizieller Beitrag

    Wenn du die Daten in eine Textdatei schreibst, am Besten alle Daten eines Datensatzes in eine Zeile. Als Trennzeichen zwischen den einzelnen Feldern mußt du etwas wählen, was nicht im Text vorkommen kann. Vermutlich wäre hier Tabulator (also @TAB) geeignet.
    Dann sieht eine Zeile so aus:

    [autoit]

    $zeile = "Name" & @TAB & "Stichwort" & @TAB & "Beschreibung"

    [/autoit]


    Beim Auslesen kannst du dann die Daten wieder vereinzeln mit

    [autoit]

    $ArrayZeile = StringSplit($zeile, @TAB)

    [/autoit]