1. Dashboard
  2. Mitglieder
    1. Letzte Aktivitäten
    2. Benutzer online
    3. Team
    4. Mitgliedersuche
  3. Forenregeln
  4. Forum
    1. Unerledigte Themen
  • Anmelden
  • Registrieren
  • Suche
Dieses Thema
  • Alles
  • Dieses Thema
  • Dieses Forum
  • Artikel
  • Seiten
  • Forum
  • Erweiterte Suche
  1. AutoIt.de - Das deutschsprachige Forum.
  2. Forum
  3. AutoIt 3
  4. Skripte

romaSQL

  • 4ern
  • 24. Februar 2017 um 00:49
1. offizieller Beitrag
  • 4ern
    Fortgeschrittener
    Beiträge
    365
    • 24. Februar 2017 um 00:49
    • #1

    romaSQL

    Diese autoIt UDF ist nach dem Prinzip von Laravel Query Builder & doctrine aufgebaut. romaSQL ermöglicht eine neue, einfache & sehr bequeme Art von SQL Abfragen in autoIt. Es werden bereits fast alle gängigen SQL Abfrage unterstützt und weitere folgen demnächst.
    Ich freue mich über jede Unterstützung von euch.

    Connections
    Für die Connection wird das Object ADODB genzutzt, daher bassieren die Connection String auf ODBC.
    Natürlich kannst du auch OLEDB Connections Strings nutzen oder andere Datenbank Connections einbauen. Hierzu müssen deine Erweiterung in der Funktion __4ern_SQL_Connection erfolgen. Ich würde mich sehr freuen, wenn du deine Veränderung mit mir teilen würdest

    Derzeit unterstützte Connections

    • MySQL (odbc)
    • Microsoft SQL Server (odbc)
    • SQLite (odbc)
    • Microsoft Access (odbc)

    Befehls Referenz

    AutoIt
    $SQL_connect; stellt die Verbindung her
    $SQL_returnType; Ergebnisse in einem Array oder Dictionary ('oDict') Object (Default = Array)
    $SQL_setDefaultTable; Setzte den standard Tabellennamen
    $SQL_setDefaultKey; Setzt den standard Key (Default = id)
    $SQL_debug; Wenn TRUE wird der SQL Befehl in der Console ausgegeben.
    
    
    $SQL_get
    $SQL_update
    $SQL_delete
    $SQL_insertInto
    $SQL_take
    $SQL_limit
    $SQL_table
    $SQL_select
    $SQL_distinct
    
    
    $SQL_where
    $SQL_orWhere
    $SQL_whereBetween
    $SQL_whereNotBetween
    $SQL_whereIn
    $SQL_whereNotIn
    $SQL_whereNull
    $SQL_whereNotNull
    $SQL_having
    $SQL_orHaving
    $SQL_havingBetween
    $SQL_havingNotBetween
    $SQL_havingIn
    $SQL_havingNotIn
    $SQL_havingNull
    $SQL_havingNotNull
    $SQL_groupBy
    $SQL_orderBy
    Alles anzeigen


    Beispiele


    Create Connection (muss nur einmal erfolgen)

    AutoIt
    ;-----/
    ; SQLite Connection
    ;-----/
    $SQL_setDatabase('sqlite')
    $SQL_connect('C:\project.db')
    ;-----/
    ; Access Connection
    ; Database, User, Password
    ;-----/
    $SQL_setDatabase('access')
    $SQL_connect('C:\project.mdb')
    ;or as Admin
    $SQL_connect('C:\project.mdb', '4ern', 'root')
    ;-----/
    ; SQLServer Connection
    ; Database, User, Password, Server, Driver
    ;-----/
    $SQL_setDatabase('sqlserver')
    $SQL_connect('myDB', '4ern', 'root', 'localhost')
    ;or with Driver
    $SQL_connect('myDB', '4ern', 'root', 'localhost', 'SQL Server')
    ;-----/
    ; MySQL Connection
    ; Database, User, Password, Server, Driver
    ;-----/
    $SQL_setDatabase('mysql')
    $SQL_connect('myDB', '4ern', 'root', 'localhost')
    ;or with Driver
    $SQL_connect('myDB', '4ern', 'root', 'localhost', 'MySQL ODBC 5.2 UNICODE Driver')
    Alles anzeigen


    Einfache SQL Abfrage

    AutoIt
    $SQL_table('albums')
    $aRet = $SQL_get()
    if IsArray($aRet ) then
        _ArrayDisplay($aRet )
    else
        ConsoleWrite('Keine Ergebnisse' & @LF)
    endif


    Select

    AutoIt
    $SQL_table('albums')
    $SQL_select('id', 'Name', 'Artist', 'Song')
    
    
    ;or pass to an Array
    Local $aSelect = ['id', 'Name', 'Artist', 'Song']
    $SQL_select($aSelect)
    
    
    $aRet = $SQL_get()
    if IsArray($aRet ) then
        _ArrayDisplay($aRet )
    else
        ConsoleWrite('Keine Ergebnisse' & @LF)
    endif
    Alles anzeigen

    where


    AutoIt
    $SQL_table('albums')
    $SQL_select('id', 'Name', 'Artist', 'Song', 'Votes')
    $SQL_where('Artist', 'adele')
    $SQL_where('Votes', '>=' ,'9')
    $SQL_orWhere('Artist', '=' ,'Rag'n'Bone Man')
    
    
    ;or pass to an 2dArray
    Local $aSelect = [['Artist','adele'],['Votes', '>=' ,'9']]
    $SQL_where($aSelect)
    
    
    $aRet = $SQL_get()
    if IsArray($aRet ) then
        _ArrayDisplay($aRet )
    else
        ConsoleWrite('Keine Ergebnisse' & @LF)
    endif
    Alles anzeigen

    Ich hoffe euch gefällt meine UDF und Ihr findet ein Einsatz dafür.

    ---

    DOWNLOAD HIER
    4ern.de

    [Blockierte Grafik: http://4ern.de/4ern/wp-content/uploads/2016/11/roma_logo.png]

    by 4ern.de

    Hie im Forum: roma
    GitHub: github.com/4ern/roma

    Einmal editiert, zuletzt von 4ern (24. Februar 2017 um 13:57)

  • Bitnugger
    Poweruser
    Beiträge
    1.947
    • 2. März 2017 um 22:47
    • #2

    Also bei läuft das Example nicht...

    roma.jpg

  • BugFix
    aka McBarby
    Reaktionen
    7
    Beiträge
    11.162
    • 3. März 2017 um 09:24
    • Offizieller Beitrag
    • #3

    $ret = func.... Das ist natürlich syntaktisch falsch. Ich vermute mal Copy&Paste-Error ;)
    Einfach das func innerhalb der Funktionen löschen, dann sollte es wohl laufen.

    MfG BugFix

    Mein Git | Meine UDF | Array-Tutorial | Bit-Tutorial | Dll-Tutorial | RegExp-Beispiel

  • Bitnugger
    Poweruser
    Beiträge
    1.947
    • 3. März 2017 um 10:52
    • #4

    Ja, sicher, aber da sind noch mehr Fehler in den Scripts... in queryBuilder.au3 und romaSql.au3 - Variablen vor Aufruf nicht deklariert usw.

  • alpines
    天照大神
    Beiträge
    4.209
    • 3. März 2017 um 10:59
    • #5

    Es scheint an SciTE/Au3Check zu liegen. example.au3 ist nämlich ausführbar wenn man direkt die au3 startet ohne F5 in SciTE zu drücken.

    86152-alpi7958-png

    ►►► PassIt2 - Dateien zwischen PCs einfach und bequem übertragen!

    ► GUIScaler - GUIs automatisch zur DPI skalieren lassen (Windows 7 und Windows 10 Per-Monitor-DPI)

    ► TrackMania² Automated Server Controller (TMASECO) - Controller inklusive Manialinkpage-Support in AutoIt!

    ► Extensa - Hotkeys für unterschiedliche Eingabegeräte trennen

    ► Lust auf ein kleines Spiel in AutoIt? Snake, Tunnel, Tetris, NumberStrike, Pazaak (Star Wars)

    Der Rest meiner Werke

    A*-Algorithmus - Pathfinding

    C# / VB .NET DLLs erstellen und in AutoIt verwenden!

    Funktionsplotter

    Integralrechner
    Dezimal- zu Binär-Umrechner

    NumberConvert
    _SquareRoot
    _WinGetTitleEx
    Tap - BPM Counter
    Wake On Lan

    _ArraySortStable2D

    RingBuffer.au3

  • Bitnugger
    Poweruser
    Beiträge
    1.947
    • 3. März 2017 um 12:05
    • #6

    Ausführbar ist eine Sache, ob es Sinn macht, eine andere.

    Z. B. Zeile 1016 in queryBuilder.au3 - was ist in $C1?: __4ern_SQL_Console('error', 'ORDER BY -- QUERY BUILDER', StringFormat('(%s) ist valider ORDER BY Keyword', $C1))

  • 4ern
    Fortgeschrittener
    Beiträge
    365
    • 4. März 2017 um 23:10
    • #7

    OJE was ist den da passiert :/
    @Bitnugger ich gebe dir da vollkommen Recht, dass macht garkeinen Sinn. Wie @BugFix ja schon geschrieben hat, war das tatsächlich ein grober copyPaste patzer. Mein größter Fehler, dass ich das nicht getestet habe :thumbdown: .

    Bzgl. den AU3 Check habe ich diesen total vergessen, da ich ich den einfach nicht nutze. Hat den Hintergrund, das mein Code oft komplexer ist als dieser und ich immer und überallel mit #forcref etc. arbeiten muss und ich somit nur noch mehr arbeit habe.

    ABER für eine UDF ist das ganzklar ein muss. Daher habe ich das in die UDF mit eingebaut. Nun sollte dier AU3 Check nicht mehr meckern.

    Zu den Examples, ja diese sind noch nicht ganz optimal... Ich werde asap den Create Statement bauen und eine ordentliche Example bauen.

    Vielen Dank für das Feedback!

    Hier die Version 1.0.2

    [Blockierte Grafik: http://4ern.de/4ern/wp-content/uploads/2016/11/roma_logo.png]

    by 4ern.de

    Hie im Forum: roma
    GitHub: github.com/4ern/roma

  • Bitnugger
    Poweruser
    Beiträge
    1.947
    • 5. März 2017 um 01:09
    • #8
    Zitat von 4ern

    Bzgl. den AU3 Check habe ich diesen total vergessen, da ich ich den einfach nicht nutze. Hat den Hintergrund, das mein Code oft komplexer ist als dieser und ich immer und überallel mit #forcref etc. arbeiten muss und ich somit nur noch mehr arbeit habe.

    Ich denke, dass es sich eher umgekehrt verhält... auf dem ersten Blick mag deine Rechnung eventuell aufgehen, dass du so weniger Arbeit hast, doch auf lange Sicht ist es definitiv nicht der Fall, denn genau betrachtet, hilft dir der AU3 Check sogar enorm, indem er dich dazu zwingt deinen Code bzw. deinen Programmierstil zu verbessern, wodurch du dich dann später selbst auch besser in deinem Code zurechtfindest und insgesamt weniger Fehler machst. Viel wichtiger ist jedoch dabei, dass du den Users, die deine Tools benutzen, das Leben dadurch viel einfacher machst und sie quasi ohne dein direktes Zutun vor bösen Fehlern/Eigentoren bewahrt bleiben, nach denen sie sonst womöglich sehr lange suchen müsten.

    PS: Ist das nicht dasselbe?

    AutoIt
    Local $DB = NULL, $USER = NULL, $PASSWORD = NULL, $SERVER = NULL
    
    
    If ($DB = NULL) OR ($USER = NULL) OR ($PASSWORD = NULL) OR ($SERVER = NULL) Then $errorLogin = True
    ConsoleWrite('$errorLogin = ' & $errorLogin & @CRLF)
    
    
    If $DB Or $USER Or $PASSWORD Or $SERVER = Null Then $errorLogin = True
    ConsoleWrite('$errorLogin = ' & $errorLogin & @CRLF)

    Einmal editiert, zuletzt von Bitnugger (5. März 2017 um 01:22)

  • alpines
    天照大神
    Beiträge
    4.209
    • 5. März 2017 um 02:27
    • #9
    Zitat von Bitnugger

    PS: Ist das nicht dasselbe?

    Nein. $DB = NULL ist nicht dasselbe wie $DB.

    Allerdings bin ich mir beim zweiten nicht sicher ob das absichtlich oder unwissentlich so geschrieben wurde.
    Wenn man in einer If-Verzweigung Bedingunen mit Or verknüpft muss man sie dennoch nochmal nach dem Wert prüfen.

    If $Db oder $User oder $Password oder $Server gleich null bedeutet NICHT If $Db = Null or $User = Null or $Password = Null or $Server = null.
    Es bedeutet If $Db > 0 or $User > 0 or $Password > 0 or $Server = Null.

    Ich weiß jetzt nicht ob du den Codesnippet aus dem Source kopiert hast oder selber zusammengestellt hast.
    (Das mit den $DB = NULL explizit oben davor, dann könntem an sich die If-Abfrage auch schenken.)

    86152-alpi7958-png

    ►►► PassIt2 - Dateien zwischen PCs einfach und bequem übertragen!

    ► GUIScaler - GUIs automatisch zur DPI skalieren lassen (Windows 7 und Windows 10 Per-Monitor-DPI)

    ► TrackMania² Automated Server Controller (TMASECO) - Controller inklusive Manialinkpage-Support in AutoIt!

    ► Extensa - Hotkeys für unterschiedliche Eingabegeräte trennen

    ► Lust auf ein kleines Spiel in AutoIt? Snake, Tunnel, Tetris, NumberStrike, Pazaak (Star Wars)

    Der Rest meiner Werke

    A*-Algorithmus - Pathfinding

    C# / VB .NET DLLs erstellen und in AutoIt verwenden!

    Funktionsplotter

    Integralrechner
    Dezimal- zu Binär-Umrechner

    NumberConvert
    _SquareRoot
    _WinGetTitleEx
    Tap - BPM Counter
    Wake On Lan

    _ArraySortStable2D

    RingBuffer.au3

  • Bitnugger
    Poweruser
    Beiträge
    1.947
    • 5. März 2017 um 04:55
    • #10
    Zitat von alpines

    Nein. $DB = NULL ist nicht dasselbe wie $DB.

    Allerdings bin ich mir beim zweiten nicht sicher ob das absichtlich oder unwissentlich so geschrieben wurde.

    Oh ja, hast recht... das war ein Schnellschuss... grins. Das Beispiel habe ich so zusammengestellt. Danke, hast du gut erklärt.

    Die Klammern kann man sich aber doch sparen...

    AutoIt
    Local $DB = NULL, $USER = NULL, $PASSWORD = NULL, $SERVER = NULL, $errorLogin = False
    
    
    If ($DB = NULL) OR ($USER = NULL) OR ($PASSWORD = NULL) OR ($SERVER = NULL) Then $errorLogin = True
    ConsoleWrite('$errorLogin = ' & $errorLogin & @CRLF)
    
    
    If $DB = NULL OR $USER = NULL OR $PASSWORD = NULL OR $SERVER = Null Then $errorLogin = True
    ConsoleWrite('$errorLogin = ' & $errorLogin & @CRLF)

    Einmal editiert, zuletzt von Bitnugger (5. März 2017 um 05:15)

  • alpines
    天照大神
    Beiträge
    4.209
    • 5. März 2017 um 10:19
    • #11
    Zitat von Bitnugger

    Die Klammern kann man sich aber doch sparen...

    Keine Frage, die kann man sich sparen. In der Operatorenreihenfolge kommt = nämlich vor Or und And.
    Allerdings sehe ich ziemlich häufig, dass Leute sinnlose Klammern setzen wie z.B. Local $sVar = ("string") oder nicht mal auf die Idee kommen,
    Funktionen normal zu callen sondern Call("Funktion")stattdessen verwenden.

    86152-alpi7958-png

    ►►► PassIt2 - Dateien zwischen PCs einfach und bequem übertragen!

    ► GUIScaler - GUIs automatisch zur DPI skalieren lassen (Windows 7 und Windows 10 Per-Monitor-DPI)

    ► TrackMania² Automated Server Controller (TMASECO) - Controller inklusive Manialinkpage-Support in AutoIt!

    ► Extensa - Hotkeys für unterschiedliche Eingabegeräte trennen

    ► Lust auf ein kleines Spiel in AutoIt? Snake, Tunnel, Tetris, NumberStrike, Pazaak (Star Wars)

    Der Rest meiner Werke

    A*-Algorithmus - Pathfinding

    C# / VB .NET DLLs erstellen und in AutoIt verwenden!

    Funktionsplotter

    Integralrechner
    Dezimal- zu Binär-Umrechner

    NumberConvert
    _SquareRoot
    _WinGetTitleEx
    Tap - BPM Counter
    Wake On Lan

    _ArraySortStable2D

    RingBuffer.au3

  • Bitnugger
    Poweruser
    Beiträge
    1.947
    • 5. März 2017 um 11:28
    • #12

    Anstelle der vielen #ignorefunc würde ich es so machen...

    ; queryBuilder.au3
    #include-once
    #include <romaSql.au3>

    ; romaSql.au3
    #include-once <-- hier hast du es vergessen
    #include <Array.au3>
    #include 'queryBuilder.au3'

  • 4ern
    Fortgeschrittener
    Beiträge
    365
    • 5. März 2017 um 14:57
    • #13

    Ja ich gebe euch recht, die Klammern machen in der Funktionsweise keinen Sinn, diese dienen mir nur bei größeren if statements als optische hilfe.

    Zitat von Bitnugger

    Anstelle der vielen #ignorefunc würde ich es so machen...

    ; queryBuilder.au3
    #include-once
    #include <romaSql.au3>

    ; romaSql.au3
    #include-once <-- hier hast du es vergessen
    #include <Array.au3>
    #include 'queryBuilder.au3'

    @Bitnugger auf die Idee bin ich garnicht gekommen! Geniale Idee. Ich weis nur nicht ob es sich nicht irgendwo beist... hat hier jemand damit Erfahrung?

    [Blockierte Grafik: http://4ern.de/4ern/wp-content/uploads/2016/11/roma_logo.png]

    by 4ern.de

    Hie im Forum: roma
    GitHub: github.com/4ern/roma

  • Bitnugger
    Poweruser
    Beiträge
    1.947
    • 5. März 2017 um 16:07
    • #14

    Solange sich in den Includes nur Funktionen befinden, spielt es absolut keine Rolle, in welcher Reihenfolge sie geladen werden... in die Hose gehen würde es nur, wenn darin auch Befehle ausserhalb einer Funktion stehen und diese nicht in umgekehrter Reihenfolge ausgeführt werden dürfen.

    Ich lasse in meinen Scripten die Funktionen/Regionen z. B. bei jedem Aufruf von Tidy ordnen...

    Einmal editiert, zuletzt von Bitnugger (5. März 2017 um 16:13)

  • Bitnugger
    Poweruser
    Beiträge
    1.947
    • 5. März 2017 um 20:56
    • #15

    @4ern

    Ich habe mir mal die Mühe gemacht und alle Zeilen in der queryBuilder.au3 und romaSql.au3 geändert, bei denen ich auf den ersten Blick sehen konnte, dass ich diese Stellen andern angehen würde.
    Beide Versionen wurden mit Tidy formatiert...

    ;~ VORHER
    queryBuilder.au3 ... 52,3 k
    romaSql.au3 ........ 29,8 k

    ;~ NACHHER
    queryBuilder.au3 ... 50,1 k
    romaSql.au3 ........ 28,2 k

    In dem Archiv im Anhang sind beide Versionen zusammen mit jeweils einem Tidy-Protokoll... die beiden htm-Dateien stammen von WinMerge und zeigen beide Versionen nebeneinander an. So kannst du gut vergleichen wo was geändert wurde.

    romaSql-1.0.2_tidy\
    romaSql-1.0.2_tidy_changed!\
    queryBuilder.htm
    romaSql.htm


    In der example.au3 habe ich zur Vorsicht nun auch ein #include-once hinzugefügt...

    Dateien

    romaSql-1.0.2.rar 99,79 kB – 406 Downloads

    Einmal editiert, zuletzt von Bitnugger (5. März 2017 um 21:02)

  • 4ern
    Fortgeschrittener
    Beiträge
    365
    • 6. März 2017 um 09:02
    • #16

    @Bitnugger vielen Dank für deine Verbesserungen, die habe ich alle in die nächste Version übernommen. Jedoch habe ich Tidy weggelassen, da ich das Ding nicht leiden kann. Ich habe schon bewusst die Zeilenumbrüche und die Einrückungen genau so gemacht :rolleyes:

    Klasse vielen Dank :thumbup:

    [Blockierte Grafik: http://4ern.de/4ern/wp-content/uploads/2016/11/roma_logo.png]

    by 4ern.de

    Hie im Forum: roma
    GitHub: github.com/4ern/roma

  1. Datenschutzerklärung
  2. Impressum
  3. Shoutbox-Archiv
Community-Software: WoltLab Suite™