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
Alles
  • Alles
  • Artikel
  • Seiten
  • Forum
  • Erweiterte Suche
  1. AutoIt.de - Das deutschsprachige Forum.
  2. Mitglieder
  3. misterspeed

Beiträge von misterspeed

  • Dynamische Namen für Array Variablen

    • misterspeed
    • 21. Mai 2013 um 20:49
    [autoit]


    global $aTotal[10][2] ; array mit insgesamt 10 Zeilen und 2 Spalten, wobei die erste Spalte deine 10 variablen SQL Strings enthält und die 2. Spalte die Ergebnisse der SQL Queries
    ; ich gehe mal davon aus, dass du die erste Spalte selbst befüllt bekommst, haste ja schon im eigenen Beispiel so...

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

    For $i = 0 To UBound($aTestArray) -1
    $aQuery = _SQLAbfrage(".... hier dann dein variabler Qry Teil, also..." & $aTotal[$i][0])
    $aTemp = $aQuery.GetRows
    $aTotal[$i][1] = $aTemp ; das temporäre Ergebnisarray in die zweite Spalte des Gesamt Arrays kopieren
    Next

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

    ; Alle Ergenisarrays anzeigen
    For $i = 0 To UBound($aTestArray) -1
    _arraydisplay($aTotal[$i][1]) ; alle Inhalte der zweiten Spalte sind selbst Arrays und können somit in den Array Funktionen verwendet werden
    next

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

    ; einen Bestimmten Wert aus einem der Ergebnisarrays ausgeben
    $aTemp = $aTotal[2][1] ; Ergebnis Array des dritten SQL Queries
    consolewrite("1. Wert vom dritten SQL Query Ergebnis: " & $aTemp[0] & @crlf)

    [/autoit]

    So sollte es zumindestens theoretisch gehen, aber ich habe noch nie ineinander verschachtelte Arrays verwendet.

  • Combobox auslesen mit Textdatei vergleicheun und einen Wert wiedergeben

    • misterspeed
    • 21. Mai 2013 um 17:38

    Und wo ist die ominöse Textdatei? Solange wir nicht wissen wie diese aufgebaut ist kann man dir nicht wirklich weiterhelfen.
    Für den Anfang kannst du dir schonmal diese Befehle anschauen, da du diese wohl aufjedenfall brauchst, egal wie die textdatei nun aufgebaut ist:

    [autoit]


    guictrlread(...)
    _filereadtoarray(...)
    _arraysearch(...) ; oder eben allgemein der Umgang mit Arrays und Schleifen

    [/autoit]

    EDIT:
    Da die Frage aber wohl immernoch die Selbe ist hättest du dein Anliegen auch in deinem anderen Thread nochmals wie dir nahegelegt wurde ordentlich beschreiben können: https://autoit.de/index.php?page=Thread&threadID=40602

  • Bitcoin Miner mit AutoIt programmieren. Möglich?

    • misterspeed
    • 21. Mai 2013 um 11:35

    Nicht böse gemeint, aber wenn du nichts über Bitcoin weißt solltest du dich erstmal selbst schlau darüber machen. Ein guter Anfang wäre z.B. der deutschsprachige Wikipedia Artikel: http://de.wikipedia.org/wiki/Bitcoin

    Und ja Bitcoin war in letzter Zeit aufgrund diverser virtueller "Raubüberfälle", Steuerhinterziehung usw. öfter mal in den Medien. Was wohl auch daran liegt, dass es sich um eine recht anonyme Online Währung handelt die von vielen Amateuren verwaltet wird. Ein ideales Milieu für Kriminelle.

  • Bios win7 kein reinkommen mehr

    • misterspeed
    • 20. Mai 2013 um 11:28

    Alle Mutmaßungen und wilde Tasten drückereien nach dem Zufallsprinzip sind doch überflüssig. Ein einfacher Blick in die Anleitung des Laptops sollte genügen um die richtige Taste oder Tastenkombination für den Bios Zugriff zu finden. Bei Laptops muss manchmal auch die "Fn" Taste in Verbindung mit der dafür gedachten genutzt werden. In seltenen Fällen könnte auch die Tastatur beschädigt sein und der Zugriff daher scheitern. In diesem Fall würde ich es über eine externe USB Tastatur versuchen.

  • Proxy Schleife mit HttpSetProxy

    • misterspeed
    • 20. Mai 2013 um 10:52

    Wie stellst du fest ob der Proxy funktioniert / gesetzt wird? Da du etwas von einem Array Fehler erzählt hast ist davon auszugehen, dass das Script bereits in der Schleife abstürzt, weil eben keiner der Proxys erreichbar war.


    EDIT:

    Ahja, Proxy ist nicht gleich Proxy...

    Zitat von wieistmeineip.de


    Mit wieistmeineip.de finden Sie schnell und einfach heraus, mit welcher IP-Adresse Sie gerade online sind.
    (Funktioniert auch bei eingeschaltetem Proxy*)

    *Manche Proxy-Server unterdrücken die Weitergabe der eigentlichen Client-IP (HTTP_X_FORWARDED_FOR), in diesem Fall wird die IP-Adresse des Proxy-Servers angezeigt.

  • Proxy Schleife mit HttpSetProxy

    • misterspeed
    • 20. Mai 2013 um 10:41

    Zum einen das, zum anderen ist ein Logikfehler drin. Wenn keiner der Proxys erreichbar ist sprichst du im vierten Durchlauf einen Arrayindex an, welcher nicht existiert, da du bei jedem nicht erfolgreichen Durchlauf den betreffenden Eintrag entfernst.

  • Bitcoin Miner mit AutoIt programmieren. Möglich?

    • misterspeed
    • 20. Mai 2013 um 09:27

    Kann man wohl in jeder Sprache programmieren, wenn man denn kann bzw. Lust hat sich damit auseinanderzusetzen.

    Da es sich hier aber um sehr zeitintensive Berechnungen handelt kannst du Autoit mehr oder weniger vergessen (es wird lediglich ein "virtueller" core ausgelastet, der ScriptCode wird außerdem zur Laufzeit interpretiert, kein Maschinencode). Wenn du das unbedingt mit Autoit machen willst bleibt dir nur die Möglichkeit mit multiplen Scriptinstanzen zur besseren Auslastung zu arbeiten oder aber du informierst dich näher darüber wie man Berechnungen auf die Grafikkarte auslagert, was prinzipiell auch mit Autoit gehen sollte (siehe Forensuche "OpenCL" --> https://autoit.de/index.php?page…enCL#post319367 ). Aber dafür benötigst du dann letztlich ohnehin auch Wissen über andere Sprachen, kannst es also auch gleich in C oder anderen performanteren Hochsprachen programmieren.

    Realistischer und einfacher ist es wohl lediglich eine Autoit GUI zu schreiben und bereits fertige / compilierte Miner (exe / dll) darüber anzusteuern. Da ich Bitcoin Mining für Zeit- und Stromverschwendung halte hab ich mich aber nie damit auseinandergesetzt was es da alles an Miningtools / Bibliotheken gibt. Prinzipiell sollten auf der offiziellen Projektpage genügend Code Beispiele / Dokumentationen zum Mining zu finden sein.

  • SQL und Error handling

    • misterspeed
    • 19. Mai 2013 um 20:48

    Am einfachsten geht das wohl so, auch wenn ich es nicht testen kann:

    [autoit]


    Global $showError = True
    $oMyError = ObjEvent("AutoIt.Error", "MyErrFunc") ; --> error handling
    ; ...
    ; Wunsch: Hier Errorhandling ausschalten
    $showError = False
    If $result.Fields( "id" ).Value = "" Then MsgBox(0,"","Datensatz nichtvorhanden, ok") ; --> hier kommt dann die Meldung vom Errorhandler
    ; Wunsch: Hier Errorhandling wieder aktivieren
    $showError = True
    ;...

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

    Func MyErrFunc()
    ;...
    if $showError = False then
    consolewrite("hidden Error:" & @crlf & "...der selbe mist der sonst in der msgbox landen würde...")
    else
    MsgBox(0,"COM Error Test", "... dein fehler gedöns")
    endif
    SetError(1); to check for after this function returns
    EndFunc ;==>MyErrFunc

    [/autoit]

    Sinnvollerweise schreibste den Fehler String erst in eine Variable und fügst diesen dann in der if...then...else Bedingung in die msgbox bzw. consolewrite Funktion ein. Alternativ wenns dich wirklich garnicht juckt kannste statt consolewrite natürlich auch einfach ein return reinsetzen.

  • SQL und Error handling

    • misterspeed
    • 19. Mai 2013 um 15:00

    Mit simpler Programmlogik? Du müsstest schon deinen Quellcode posten wenn man dir diesbezüglich behilflich sein soll. Wir wissen nicht wie du das Errorhandling letztlich realisiert hast.

  • FileOpenDialog

    • misterspeed
    • 19. Mai 2013 um 12:12

    Laut Hilfe kann man das btw erkennen, wenn man @error auswertet, da sollte dann eine 2 zurückkommen ("Falscher Dateifilter").

  • ISN AutoIt Studio

    • misterspeed
    • 18. Mai 2013 um 15:18
    Zitat von ISI360

    Da muss ich dir allerdings recht geben...wäre wirklich besser nur die Skripte zu durchsuchen die auch in der Hauptdatei included sind...ist nicht sonderlich schwer zu realisieren.
    Danke für die Idee ;)

    Ahja ich habe da nochmal darüber nachgedacht, bin mir aber jetzt nicht sicher ob das nicht eh schon so ist. Wenn du "externe" Scripte in die Variablen Suche einbeziehst würde es genügen nur die globalen Variablen/Konstanten zu berücksichtigen, denn lokale Variablen von Includes dürften völlig uninteressant sein. Prinzipiell sind lokale Variablen ohnehin nur innerhalb der aktuellen Funktion relevant, daher würde ich grundsätzlich nur "funktions-lokale" lokale Variablen und globale vorschlagen.

    Beispiel:

    1. Ich befinde mich im Editor gerade außerhalb einer Funktion, was grundsätzlich leicht zu erkennen sein sollte. Dann benötige ich auch nur globale Vorschläge an Variablen.
    2. Ich befinde mich im Editor gerade in Function1(). Jetzt interessieren mich lediglich lokale Variablen die ich in dieser Funkton1() bereits verwende und natürlich auch die globalen Variablen. Lokale Variablen von Funktion2() jucken mich hingegen nicht wirklich.

    Durch diese Einschränkungen kann die Suche möglicherweise beschleunigt werden und die Suchergebnisse fallen deutlich übersichtlicher aus.


    Mir ist dann noch etwas anderes störend aufgefallen:

    Problem: Wenn ich nun eine neue Variable deklariere, so wird diese nicht bei erneuter Nutzung vorgeschlagen.
    Grund: Der Scriptbaum wird erst aktualisiert wenn die Datei gespeichert wird. Solange der Scriptbaum die Variable nicht kennt wird diese auch nicht vorgeschlagen.
    Lösung: Scriptbaum aktualisieren sobald Signalwörter wie "Global" / "Local" oder sofern der Request erfüllt wird auch "Func" in einer Zeile vorkommen die mit "Enter" abgeschlossen wird. Wird eine Zeile gelöscht (oder geändert!) die eines der Signalwörter enthält sollte der Scriptbaum ebenfalls aktualisiert werden.


    Noch ein Request wenn ich schon dabei bin:

    Wenn ich eine Variable deklarieren möchte gebe ich normalerweise "glo" gefolgt von "Enter" ein. Bin ja schreibfaul....
    Nun wenn man schon die Autovervollständigung nutzt könnte die Kurzform "glo" doch auch gleich durch "global $" ersetzt werden, denn nach global/local folgt immer ein Variablenname. Das selbe gilt auch für andere Signalwörter wie z.B. "ReDim".
    Beim Signalwort "EndFunc / EndIf / Next / Wend..." könnte man z.B. auch noch einen Zeilenumbruch, oder wie man es aus manchen Scripten kennt ein Kommentar "EndFunc ; ende functionsname & @CRLF" einfügen. Grundsätzlich werden ja auch Standardfunktionen vorgeschlagen, also z.B. Filecopy. Hier könnte man noch die Klammern einfügen, bei UDF Funktionen oder selbst geschriebenen Funktionen könnte evtl auch noch der Funktionskopf ergänzt werden, so dass man nur noch die Eingabeparameter ändern/ergänzen muss.

  • dll´s automatisch registrieren

    • misterspeed
    • 18. Mai 2013 um 13:04

    Sorry für den tripple Post, aber jetzt weiß ich auch wieder wer du bist. Du warst der "Updater-Thread Typ", davon ab hast du schon etliche Threads zum Thema DLL registrieren / Version prüfen. Gelernt hast du aus deinen vergangenen Threads scheinbar nichts. Du solltest mal anfangen die Hilfe zu lesen und weniger Copy & Paste Programmierung betreiben.

  • dll´s automatisch registrieren

    • misterspeed
    • 18. Mai 2013 um 12:51

    Ahja nochmal was:

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

    Func _Version()

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

    Local $Fileversion1 = FileGetVersion($hSearch, 1)
    If @error Then _Time()
    Local $Fileversion2 = FileGetVersion($tSearch, 1)
    If @error Then _Time()

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

    If $Fileversion1 > $Fileversion2 Then
    FileDelete($Fileversion2)
    Sleep(50)
    FileCopy($Fileversion1 , $Fileversion2, 9)
    Sleep(50)
    ShellExecute("regsvr32.exe" , ' /s ' & $tPath & "/" & $tFile & "'")
    ConsoleWrite("Dll registriert: " & $tFile & @CRLF)
    Sleep(50)
    Else
    FileDelete($Fileversion1)
    Sleep(50)
    ConsoleWrite("KEINE Dll registriert: " & $tFile & @CRLF)
    Sleep(50)
    Endif

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

    EndFunc

    [/autoit]

    Du vergleichst hier zwei Strings miteinander, das wird sehr wahrscheinlich nicht das gewünschte Ergebnnis liefern, sondern eher zufällige Ergebnisse. In deinem Fall verwendest du im Übrigen auch noch einen ungültigen Wert für den 1. Parameter (Suchhandele statt Dateiname) und einen falschen 2. Parameter von filegetversion() (Zahl statt String, siehe Hilfe). Das Ergebnis ist daher immer ein leerer String.

    Wenn du zwei Dateiversionen vergleichen willst verwende

    [autoit]


    #Include <Misc.au3>
    _VersionCompare($sVersion1, $sVersion2)

    [/autoit]

    Danach willst du die ältere von beiden Dateien löschen, aber dann solltest du dazu wohl auch den Dateipfad angeben und nicht die Versionsnummer. Eine Versionsnummer kannst du schlecht löschen. Genausowenig kannst du Versionsnummern kopieren.

    Die selben Fehler machst du auch in deiner Funktion _Time(). Du verwendest falsche Parameter um die Erstellzeit zu ermitteln und du versuchst Uhrzeiten zu löschen bzw. zu kopieren.

  • dll´s automatisch registrieren

    • misterspeed
    • 18. Mai 2013 um 12:28
    Zitat von timyboy

    was ist an dem code falsch?

    Die Frage ist eher, was überhaupt richtig ist. Alleine beim Überfliegen der ersten Zeilen sehe ich schon etliche Fehler.

    1. Du rufst isAdmin() auf kümmerst dich aber nicht um das Ergebnis, also kannste die Zeile auch weglassen.
    2. Du deklarierst die Variablen $tPath, durchs Deklarieren hat diese Variable aber noch garkeinen Inhalt.

    [autoit]


    Global $sFile,$tFile,$tPath

    [/autoit]


    3. Diese leere Variablen verwendest du nun um ein Suchhandel zu bekommen, was natürlich nichts bzw. nur einen Fehler zurückgeben dürfte

    [autoit]

    Global $tSearch = FileFindFirstFile($tPath & "\*.dll")

    [/autoit]


    4. Jetzt wo es schon zu spät ist versuchst du $tPath mit Inhalt zu befüllen, das machst du aber falsch

    [autoit]

    If @OSArch = "64" Then
    $tPath = "\%Systemroot%\System32\" ;Die 64-Bit-Version ist
    Else
    If @OSArch = "86" Then
    $tPath = "\%Systemroot%\SysWoW64\" ;Die 32-Bit-Version ist
    EndIf
    EndIf

    [/autoit]

    Warum?

    Zitat von Hilfe

    @OSArch --> Gibt eines der folgendes zurück:"X86","IA64","X64" - dies ist der Architekturtyp des aktuell laufenden Betriebssystems.

    Du prüfst also auf ungültige Werte, somit wird deine Variable keinen Inhalt haben, aber dafür ists ja ohnehin zu spät...

    5. Du hast eine while Schleife, die grundsätzlich nach dem ersten Durchlauf verlassen wird, wozu dann überhaupt eine Schleife?

    [autoit]

    While True
    $sFile = FileFindNextFile($hSearch)
    If @error Then ExitLoop
    $tFile = FileFindNextFile($tSearch)
    If @error Then _Neu()
    _Version()
    ExitLoop ; <--------------------- Verlässst die Schleife !!!!
    WEnd

    [/autoit]

    Ich habe hier dann aufgehört weiter zu suchen, vermutlich schlummern aber noch mehr Fehler im Code.

  • Variable "variabel" machen

    • misterspeed
    • 17. Mai 2013 um 17:33

    Du programmierst doch schon ne ganze Weile in Autoit, daher bin ich echt ein wenig verwundert, dass du nachwievor nicht mit arrays arbeiten kannst. Wie dem auch sei:


    [autoit]


    dim $aSpaltenNamen[4] = ["s1","s2","s3","s4"]

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

    for $i = 0 to ubound($aSpaltenNamen)-1
    ConsoleWrite ($aSpaltenNamen[$i] & @CRLF)
    _GUICtrlListView_InsertColumn($listview, $i, $aSpaltenNamen[$i], 50)
    next

    [/autoit]

    Gibt hier btw auch irgendwo ein Tutorial bezüglich Arrays.

    Da du letzlich ein Listview befüllen willst bietet es sich evtl auch an ein 2D Array für die Daten zu verwenden, hier könntest du in Zeile 0 z.B. die Spaltennamen gleich mit unterbringen.

    [autoit]


    #include <array.au3>

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

    dim $aDaten[1][4] = [["s1","s2","s3","s4"]] ; irgendwann am programm anfang
    _ArrayDisplay($aDaten)

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

    ; irgendwann kommen dann noch die eigentlichen Daten von deinen SQL Querys dazu:

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

    $dummyLoop = 0
    while $dummyLoop < 10; deine resultset auswertung...
    redim $aDaten[UBound($aDaten)+1][UBound($aDaten,2)] ; fügt neue Zeile zum Array hinzu, lässt es also dynamisch anwachsen
    $zeile = UBound($aDaten)-1 ; nur zur veranschaulichung...
    $aDaten[UBound($aDaten)-1][0] = $zeile & " ergebnis deines sql qrys für spalte 1 in die letzte Zeile des Arrays schreiben"
    $aDaten[UBound($aDaten)-1][1] = $zeile & " ergebnis deines sql qrys für spalte 2 in die letzte Zeile des Arrays schreiben"
    $aDaten[UBound($aDaten)-1][2] = $zeile & " ergebnis deines sql qrys für spalte 3 in die letzte Zeile des Arrays schreiben"
    $aDaten[UBound($aDaten)-1][3] = $zeile & " ergebnis deines sql qrys für spalte 4 in die letzte Zeile des Arrays schreiben"
    $dummyLoop += 1
    WEnd

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

    _ArrayDisplay($aDaten)

    [/autoit]
  • Variable "variabel" machen

    • misterspeed
    • 17. Mai 2013 um 15:50

    "Öhm wozu gibts Arrays?" wäre meine Idee.

  • Abfrage einer MS SQL 2008 DB mit Autoit

    • misterspeed
    • 15. Mai 2013 um 14:18
    Zitat von TheLuBu

    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.

  • Beziehungen zwischen Tabellen

    • misterspeed
    • 11. Mai 2013 um 10:56

    Mit einem select über beide Tabellen (join). Da FK von Daten1 = PK von Daten2 (JOIN Bedingung) kannst du dies in der select Anweisung prüfen (WHERE Klausel)

    Beispiel:

    [autoit]


    dim $reihen, $spalten, $aErgebnis
    _SQLite_GetTable2d ( -1, "SELECT * FROM (Daten1 t1, Daten2 t2) WHERE t1.Nummer = t2.Nummer;", $aErgebnis, $reihen, $spalten)
    _ArrayDisplay($aErgebnis)

    [/autoit]

    Ergebnis ist eine Tabelle, die alle 7 Spalten enthält. Willst du nicht alle Spalten schränkst du das select z.B. auf die Spalten ein die dich wirklich interessieren.

    [autoit]


    _SQLite_GetTable2d ( -1, "SELECT t1.Spalte1 AS T1S1, t1.Spalte3 AS T1S3, t2.Spalte3 AS T2S3, t2.Nummer AS UniqueKey FROM (Daten1 t1, Daten2 t2) WHERE t1.Nummer = t2.Nummer;", $aErgebnis, $reihen, $spalten)
    _ArrayDisplay($aErgebnis)

    [/autoit]

    Gibt natürlich noch zig andere Möglichkeiten für joins in der SQL Syntax, aber ich gestehe, dass ich da auch nicht wirklich den Durchblick habe und die oben genannte Möglichkeit für mich am besten nachvollziehbar ist. Zusätzlich zur join Bedingung kannst du natürlich noch weitere Vergleichsbedingungen in den WHERE Teil packen, das ist mit deinem nichts sagenden Datenbeispiel aber schwer. Ich empfehle dir wie in meinem ursprünglichen Beispiel Daten zu verwenden die man sich bildlich vorstellen und nachvollziehen kann um das ganze zu üben/lernen. Als erstes solltest du dir schriftlich Formulieren welche Daten es gibt und wie diese zusammenhängen, was die Attribute und was die Entitätstypen sind, welche Attribute der Entitätstypen als eindeutiger Schlüssel in Frage kommen, dann wie in einem meiner Links ein ERD Zeichnen (also diese Kästchen (Entitätstypen) mit den Beziehungen und Attributen), danach setzt du das in Tabellen um. Da du sowas nur einmal machen musst solltest du da auch etwas Zeit in die Datenmodulierung stecken und im Hinterkopf behalten, dass die Daten vielleicht später mal erweitert werden sollen. Wenns dich interessiert kannst du dich dann auch noch mit dem Thema "Normalisierung von Tabellen" beschäftigen und dein Modell ggf. optimieren.


    http://de.wikipedia.org/wiki/Normalisierung_%28Datenbank%29

  • Beziehungen zwischen Tabellen

    • misterspeed
    • 11. Mai 2013 um 00:11

    Habs dir mal kommentiert und entsprechend angepasst.

    Spoiler anzeigen
    [autoit]


    #include <SQLite.au3>
    #include <SQLite.dll.au3>

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

    Global $hQuery, $aRow

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

    _SQLite_Startup()

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

    _SQLite_Open()

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

    _SQlite_Query(-1, "PRAGMA foreign_keys = ON;", $hQuery) ; aktiviert ForeignKey support, siehe doku
    _SQLite_QueryFinalize($hQuery)

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

    _SQlite_Query(-1, "PRAGMA foreign_keys;", $hQuery) ; DEBUG: prüft ob ForeignKey aktiviert ist, 0=disabled, 1=enabled
    While _SQLite_FetchData($hQuery, $aRow) = $SQLITE_OK
    _ArrayDisplay($aRow)
    WEnd
    _SQLite_QueryFinalize($hQuery)

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

    ; sqlite nutzt variant als Datentyp, das kann probleme machen, daher sollten die Datentypen der Spalten eindeutig deklariert werden,
    ; außerdem muss ein PrimaryKey deklariert werden, denn einen ForeignKey gibt es nur in Verbindung mit einem PK in der referenzierten Tabelle
    ; da du schlecht einen ForeignKey eines nicht existierenden Datensatz referenzieren kannst muss die ParentTable natürlich zuerst mit Daten befüllt werden,
    ; bei dir also Daten2, ansonsten bekommst du einen ForeignKey Missmatch beim befüllen von Daten1
    ; der Logik nach würde ich auch zuerst die ParentTable Daten2 erstellen, scheinbar kann mans aber auch "falsch rum" machen...

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

    ; Nummer ist hier sowohl PK als auch FK, du könntest aber auch eine oder mehrere andere Spalten als PK deklarieren
    _SQLite_Exec(-1,"CREATE TABLE Daten1 (Spalte1 TEXT," & _
    "Spalte2 TEXT," & _
    "Spalte3 TEXT," & _
    "Nummer INTEGER PRIMARY KEY," & _
    "FOREIGN KEY(Nummer) REFERENCES Daten2(Nummer) ON UPDATE CASCADE ON DELETE CASCADE)" & _
    ";")

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

    ; deine ParentTable, hier ist Nummer der PK
    _SQLite_Exec(-1, "CREATE TABLE Daten2 (Nummer INTEGER PRIMARY KEY," & _
    "Spalte2 TEXT," & _
    "Spalte3 TEXT)" & _
    ";")

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

    _SQLite_Exec(-1, "INSERT INTO Daten2 VALUES ('1','111a','111b');")
    _SQLite_Exec(-1, "INSERT INTO Daten2 VALUES ('2','222a','222b');")
    _SQLite_Exec(-1, "INSERT INTO Daten2 VALUES ('3','333a','333b');")

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

    _SQLite_Exec(-1, "INSERT INTO Daten1 VALUES ('abc1','abc2','abc3','1');")
    _SQLite_Exec(-1, "INSERT INTO Daten1 VALUES ('def1','def2','def3','2');")
    _SQLite_Exec(-1, "INSERT INTO Daten1 VALUES ('ghi1','ghi2','ghi3','3');")

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

    _SQlite_Query(-1, "SELECT * FROM Daten1;", $hQuery)
    While _SQLite_FetchData($hQuery, $aRow) = $SQLITE_OK
    _ArrayDisplay($aRow)
    WEnd
    _SQLite_QueryFinalize($hQuery)

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

    _SQLite_Exec(-1, "UPDATE Daten2 SET Nummer='4' WHERE Nummer='2';")

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

    _SQlite_Query(-1, "SELECT * FROM Daten1;", $hQuery)
    While _SQLite_FetchData($hQuery, $aRow) = $SQLITE_OK
    _ArrayDisplay($aRow)
    WEnd
    _SQLite_QueryFinalize($hQuery)

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

    _SQLite_Exec(-1, "DROP TABLE Daten1;")
    _SQLite_Exec(-1, "DROP TABLE Daten2;")
    _SQLite_Exec(-1, "VACUUM;")
    _SQLite_Close()
    _SQLite_Shutdown()

    [/autoit]
  • ISN AutoIt Studio

    • misterspeed
    • 10. Mai 2013 um 17:07

    Ich wähle Variante 2. Allerdings schlage ich vor, dass du das Verhalten der Autovervollständigung trotzdem änderst, denn prinzipiell macht es keinen Sinn die Variablen anderer au3 Dateien vorzuschlagen, wenn diese nicht im Script includet wurden. Sprich du solltest nur dann andere au3 Dateien des Projektes durchsuchen wenn es inkludiert wurde. (und natürlich die Standardinkludes ignorieren, was du ja scheinbar schon machst)

Spenden

Jeder Euro hilft uns, Euch zu helfen.

Download

AutoIt Tutorial
AutoIt Buch
Onlinehilfe
AutoIt Entwickler
  1. Datenschutzerklärung
  2. Impressum
  3. Shoutbox-Archiv
Community-Software: WoltLab Suite™