Oger SQL

  • Ich weiß nicht ob die Sache überhaupt nützlich ist oder ob es so etwas schon gibt und es daher vollkommener schwachsinnig ist.

    Da ich die ganzen letzte Woche nichts zu programmieren hatte und mir schon langweilig wurde habe ich heute eine Art SQL System erstellt, mit dem man die Möglichkeiten von Mysql hat, was aber alle Werte in einer Textdatei speichert. Das heißt man kann natürlich keine großen Tabellen Bearbeiten, aber um normales SQL zu benutzten muss man es ja erstmal installieren und ich denke das ist für viele kleinere Programme ziemlich nervig, wenn die Andwender dan erstmal SQL installieren müssen.

    [autoit]


    #include <array.au3>

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

    ;==========Tabelle erstellen========
    $eigenschaften= "CREATE TABLE (id aut,vorname str,nachname str,hausnummer int)" ;"aut" wird automatisch hochgezälhlt
    $tabelle=_OSQLcreate("C:\Daten.dat", $eigenschaften)

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

    ;==========Eintrag erstellen========
    $eintrag="INSERT (hausnummer,vorname,nachname) VALUES ('12','Hans', 'Dieter')"
    _OSQLinsert($tabelle,$eintrag)

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

    ;==========Einträge anzeigen lassen=========
    ;sql = "SELECT * Where (id) = '1'"
    ;array=_OSQLselect($tabelle,$sql)
    ;_arraydisplay($array)

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

    ;==========Alle Einträge anzeigen lassen=========
    $sql = "SELECT * ALL"
    $array=_OSQLselect($tabelle,$sql)
    _arraydisplay($array)

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

    ;==========Spezieller Wert=========
    $wert=_OSQLget($tabelle,$array[0],"vorname")
    Msgbox(0,"Ausgabe","Der Wert ist " & $wert)

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

    ;==========Eintrag Löschen=========
    ;$loeschen = "DELETE WHERE (id)='2'"
    ;_OSQLdelete($tabelle,$loeschen)

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

    ;==========Eintrag Updaten=========
    ;$query = "Update SET (vorname,nachname) VALUES ('Peter','Njet') WHERE (id)='1'";
    ;_OSQLupdate($tabelle,$query)

    [/autoit]

    So arbeitet das ganze, ich denke der code sagt mehr als 1000 Worte. Ich habe es an dem arbeiten mit MYSQL & PHP orientiert.

    Da ich das Projekt erst heute angefangen habe steckt es natürlich noch so ziemlich in den Kinderschuhen und wenn man schon ein "and" oder einbaut oder einen Sache etwas anders übernimmt funktioniert das ganze nicht mehr. Aber Bevor ich mich jetzt noch viel intensiver damit befasse wollte ich erstmal eure Meinung wissen? Wie Sinnlos ist es wirklich und wie ist meine herangehensweise?

    Hier noch der Anfangs Code:

    Spoiler anzeigen

    #include-once
    #include <string.au3>

    ;===============================================================================
    ;
    ; Function Name: __OSQLcreate()
    ; Description: Creates an OSQL session/file.
    ; Parameter(s): $file - Filename. (with path)
    ; $befehle - Table Values (Example: "CREATE TABLE (id int,vorname str,nachname str,hausnummer int)" )
    ; Return Value(s): On Success - Returns an indentifier.
    ; Author(s): Oger-lord
    ;
    ;===============================================================================
    func _OSQLcreate($file, $befehle)

    if fileexists($file)=0 Then
    $text=$befehle & "¤" & @crlf
    local $dat=Fileopen($file,2)
    filewrite($dat,$text)
    fileclose($dat)
    Else
    local $dat=fileopen($file,0)
    local $bla=fileread($dat)
    fileclose($dat)
    local $linien=_stringsplit($bla,"¤" & @crlf)
    if $linien[0]<>$befehle Then

    $text=$befehle & "¤" & @crlf
    local $dat=Fileopen($file,2)
    filewrite($dat,$text)
    fileclose($dat)

    endif
    endif

    local $bef=_stringbetween($befehle,"(",")")
    local $return=stringsplit($bef[0],",")
    $return[0]=$file
    return $return
    endfunc

    ;===============================================================================
    ;
    ; Function Name: __OSQLinsert)
    ; Description: Insert a new entry in a OSQL table
    ; Parameter(s): $handle - the value returned from _OSQLcreate()
    ; $befehl - Table Values (Example: "INSERT (hausnummer,vorname,nachname,id) VALUES ('12','Hans', 'Dieter', '2')" )
    ; Return Value(s): Nothing
    ; Author(s): Oger-lord
    ;
    ;===============================================================================
    func _OSQLinsert($handle,$befehl)

    local $bef=_stringbetween($befehl,"(",")")

    local $a=_stringsplit($bef[0],",")
    local $b=_stringbetween($bef[1],"'","'")
    local $text= "("
    for $i=1 to ubound($handle)-1
    local $r=0
    local $ergebnis=false
    while $r<=ubound($a)-1

    if stringmid($handle[$i],1,stringlen($handle[$i])-4)=$a[$r] Then
    $text=$text & "'" & $b[$r] & "',"
    $ergebnis=true
    $r=100
    endif
    $r=$r+1
    wend

    if $ergebnis=false Then
    if stringright($handle[$i],3)="aut" Then

    local $file=fileopen($handle[0],0)
    local $bla=fileread($file)
    fileclose($file)
    local $linien=_stringsplit($bla,"¤" & @crlf)
    _ArrayDeleteEmpty($linien)

    if ubound($linien)-1 <>0 then

    local $wert=_stringbetween($linien[ubound($linien)-1],"'","'")

    $aut=$wert[$i-1]+1
    $text=$text & "'" & $aut & "',"
    Else
    $text=$text & "'1',"
    endif

    Else
    $text=$text & "'',"
    endif
    endif

    next

    $text=stringmid($text,1,stringlen($text)-1) & ")¤" & @crlf
    local $file=fileopen($handle[0],1)
    filewrite($file,$text)
    fileclose($file)
    endfunc


    ;===============================================================================
    ;
    ; Function Name: __OSQLselect()
    ; Description: Search entrys in a table.
    ; Parameter(s): $handle - Handle
    ; $befehl - Search Values (Example: "SELECT * Where (id) = '1'" )
    ; Return Value(s): On Success - Returns an indentifier.
    ; Author(s): Oger-lord
    ;
    ;===============================================================================
    func _OSQLselect($handle,$befehl)
    local $bef=_stringbetween($befehl,"(",")")
    local $wert=_stringbetween($befehl,"'","'")
    if @error and stringinstr($befehl,"ALL") then

    local $file=fileopen($handle[0],0)
    local $bla=fileread($file)
    fileclose($file)
    local $linien=_stringsplit($bla,"¤" & @crlf)
    $linien[0]=""
    _ArrayDeleteEmpty($linien)
    return $linien

    else

    local $position=0
    for $r=1 to ubound($handle)-1
    if $bef[0]=stringmid($handle[$r],1,stringlen($handle[$r])-4) then
    $position=$r-1
    endif
    Next

    local $file=fileopen($handle[0],0)
    local $bla=fileread($file)
    fileclose($file)
    local $linien=_stringsplit($bla,"¤" & @crlf)

    for $i=1 to ubound($linien)-1
    if $linien[$i]<>"" then

    local $test=_stringbetween($linien[$i],"'","'")
    if $test[$position] = $wert[0] Then
    Else
    $linien[$i]=""
    endif

    endif
    next

    $linien[0]=""

    _ArrayDeleteEmpty($linien)
    return $linien
    endif

    endfunc


    ;===============================================================================
    ;
    ; Function Name: __OSQLdelete()
    ; Description: Search and delete entrys in a table.
    ; Parameter(s): $handle - Handle
    ; $befehl - Search value (Example: ´DELETE WHERE (id)='2'" )
    ; Return Value(s): -
    ; Author(s): Oger-lord
    ;
    ;===============================================================================
    func _OSQLdelete($handle,$befehl)
    local $bef=_stringbetween($befehl,"(",")")
    local $wert=_stringbetween($befehl,"'","'")

    local $position=0
    for $r=1 to ubound($handle)-1
    if $bef[0]=stringmid($handle[$r],1,stringlen($handle[$r])-4) then
    $position=$r-1
    endif
    Next

    local $file=fileopen($handle[0],0)
    local $bla=fileread($file)
    fileclose($file)
    local $linien=_stringsplit($bla,"¤" & @crlf)


    local $text=$linien[0] & "¤" & @crlf

    for $i=1 to ubound($linien)-1
    if $linien[$i]<>"" then

    local $test=_stringbetween($linien[$i],"'","'")
    if $test[$position] = $wert[0] Then
    Else
    $text=$text & $linien[$i] & "¤" & @crlf
    endif

    endif
    next

    local $file=fileopen($handle[0],2)
    filewrite($file,$text)
    fileclose($file)
    endfunc


    ;===============================================================================
    ;
    ; Function Name: __OSQLget()
    ; Description: llll
    ; Parameter(s): $handle - Handle
    ; $value
    ; $befehl -
    ; Return Value(s): On Success - Returns the value
    ; Author(s): Oger-lord
    ;
    ;===============================================================================
    func _OSQLget($handle,$value,$befehl)

    local $position=0
    for $r=1 to ubound($handle)-1
    if stringmid($handle[$r],1,stringlen($handle[$r])-4) = $befehl Then
    $position=$r-1
    endif
    next

    local $wupp=_stringbetween($value,"'","'")
    return $wupp[$position]
    endfunc


    ;===============================================================================
    ;
    ; Function Name: __OSQLupdate()
    ; Description: Update an entry in a table.
    ; Parameter(s): $handle - Handle
    ; $befehl - Table Values (Example: "Update SET (vorname,nachname) VALUES ('Peter','Njet') WHERE (id)='1'")
    ; Return Value(s): On Success - ---
    ; Author(s): Oger-lord
    ;
    ;===============================================================================
    func _OSQLupdate($handle,$befehl)

    local $befehle=_stringbetween("WWWW" & $befehl,"WWWW","WHERE")
    local $befehlee=_stringbetween($befehl & "WWWW","WHERE","WWWW")

    local $beff=_stringbetween($befehle[0],"(",")")
    local $a=_stringsplit($beff[0],",")
    local $b=_stringbetween($beff[1],"'","'")


    local $bef=_stringbetween($befehlee[0],"(",")")
    local $wert=_stringbetween($befehlee[0],"'","'")

    local $position=0
    for $r=1 to ubound($handle)-1
    if $bef[0]=stringmid($handle[$r],1,stringlen($handle[$r])-4) then
    $position=$r-1
    endif
    Next

    local $file=fileopen($handle[0],0)
    local $bla=fileread($file)
    fileclose($file)
    local $linien=_stringsplit($bla,"¤" & @crlf)


    local $text=$linien[0] & "¤" & @crlf

    for $i=1 to ubound($linien)-1
    if $linien[$i]<>"" then

    local $test=_stringbetween($linien[$i],"'","'")
    if $test[$position] = $wert[0] Then


    local $zeile= "("
    for $t=1 to ubound($handle)-1
    local $w=0
    local $ergebnis=false
    while $w<=ubound($a)-1

    if stringmid($handle[$t],1,stringlen($handle[$t])-4)=$a[$w] Then
    $zeile=$zeile & "'" & $b[$w] & "',"
    $ergebnis=true
    $w=100
    endif
    $w=$w+1
    wend

    if $ergebnis=false Then
    $zeile=$zeile & "'" & $test[$t-1] & "',"
    endif
    next
    $zeile=stringmid($zeile,1,stringlen($zeile)-1) & ")¤" & @crlf

    $text=$text & $zeile


    Else
    $text=$text & $linien[$i] & "¤" & @crlf
    endif

    endif
    next


    local $file=fileopen($handle[0],2)
    filewrite($file,$text)
    fileclose($file)


    endfunc


    ;============================Zusatz==================================
    Func _ArrayDeleteEmpty(ByRef $ARRAY)


    If Not IsArray($ARRAY) Then Return 0
    Local $arTMP[1]
    For $i = 0 To UBound($ARRAY) -1
    If $ARRAY[$i] <> '' Then
    If $arTMP[0] = '' Then
    $arTMP[0] = $ARRAY[$i]
    Else
    ReDim $arTMP[UBound($arTMP)+1]
    $arTMP[UBound($arTMP)-1] = $ARRAY[$i]
    EndIf
    EndIf
    Next
    $ARRAY = $arTMP
    EndFunc

    • Offizieller Beitrag

    aber um normales SQL zu benutzten muss man es ja erstmal installieren und ich denke das ist für viele kleinere Programme ziemlich nervig, wenn die Andwender dan erstmal SQL installieren müssen.


    Na da liegst du aber falsch. ;)
    Schau dir mal SQLite an, ist in AutoIt integriert. Da brauchst du nix installieren, kannst du einfach in deine Anwendung einbinden.

  • Das hätte ich mal vorher wissen sollen :rofl:
    Naja, stört mich nicht so besonders (ist nur peinlich^^), hatte heute eh nichts zu tun und programmieren macht immer Spaß :D