gibt es eine möglichkeit flashvideos einzubinden
Wo möchtest du das Video einbinden?
gibt es eine möglichkeit flashvideos einzubinden
Wo möchtest du das Video einbinden?
In der Schleife einfach vor die Zeile mit der MsgBox:
[autoit]_FileWriteLog($LogFilePath, $Output)
[/autoit]Aber warum in ein LogFile? Die Abfrage machst du doch einmal und dann weißt du Bescheid. Da kommt es doch sicher nicht auf Datum und Zeit der Abfrage an - oder?
Mein letzter Post dazu, Ausschnitt aus der Hilfe:
GUI Controls
All users will be familiar with controls - anything you click on or interact with in a window is a type of control.
The types of controls that can be created with AutoIt are listed below - you will have used most of them in other Windows programs.
Label A plain piece of text.
Button A simple button.
Input A single line control that you can enter text into.
Edit A multi-line control that you can enter text into.
Checkbox A box that can be "checked" or "unchecked".
Radio A set of circular buttons - only one can be active at once.
Combo A list with a dropdown box.
List A list.
Date A date picker.
Pic A picture.
Icon An icon.
Progress A progress bar.
Tab A group of controls that are contained in tabs.
UpDown A control that can be added to input controls.
Avi Display an AVI format clip.
Menu A menu across the top of the window.
ContextMenu A menu that appears when you right click inside the window.
TreeView A control similar to the windows file-explorer.
Slider A control similar to the windows sound volume control.
ListView A control displaying columns information.
ListViewItem A control displaying item in a listview control.
Graphic A control displaying graphics drawn with GUICtrlSetGraphic.
Dummy A dummy user control.
Alles anzeigen
ich denke nicht jemals welche benutzt zu haben
Nur mal hier ein Verweis auf dein eigenes Skript:
$Pic2 = GUICtrlCreatePic(@TempDir & "\Start.jpg", 38, 265, 130, 30, BitOR($SS_NOTIFY,$WS_GROUP,$WS_CLIPSIBLINGS))
$Pic3 = GUICtrlCreatePic(@TempDir & "\Options.jpg", 212, 265, 130, 30, BitOR($SS_NOTIFY,$WS_GROUP,$WS_CLIPSIBLINGS))
$Pic4 = GUICtrlCreatePic(@TempDir & "\Website.jpg", 382, 265, 130, 30, BitOR($SS_NOTIFY,$WS_GROUP,$WS_CLIPSIBLINGS))
$Pic5 = GUICtrlCreatePic(@TempDir & "\Close.jpg", 532, 0, 20, 20, BitOR($SS_NOTIFY,$WS_GROUP,$WS_CLIPSIBLINGS))
$Pic1 = GUICtrlCreatePic(@TempDir & "\BG1.jpg", 0, 0, 550, 300, BitOR($SS_NOTIFY,$WS_GROUP,$WS_CLIPSIBLINGS,$Ws_Disabled))
$Edit1 = GUICtrlCreateEdit("", 38, 168, 474, 89)
Sind das Melonen oder Zuckerstangen? - NEIN, das sind von dir noch nie benutzte Controls. ![]()
Also "will des nich" ist ja nunmal eine wirklich exakte Fehlerbeschreibung ![]()
Jo, in dem Link ist meine Session-ID ![]()
Also schreib in die SuFu: "update" und ferddisch ![]()
Banale Frage: Wenn du nicht mal weißt, was ein Control ist, warum schaust du nicht einfach in die Hilfe ?
[OT]
Auch wenn es nicht alle betrifft, aber ich habe immer mehr den Eindruck, dass in der jungen Generation der Hang zum Nichts-selber-machen größer ist, als das Streben nach eigenen Erkenntnissen.
Immer schön bei Mutti wohnen und man ja keinen Finger krumm machen. Aber gebratene Tauben möchten doch bitte schön in ausreichender Zahl in den Mund fliegen!
Echt, da kommt mir glatt die Galle hoch.
[/OT]
Na klar ![]()
; Generated by AutoIt Scriptomatic
[/autoit][autoit][/autoit][autoit]$wbemFlagReturnImmediately = 0x10
$wbemFlagForwardOnly = 0x20
$colItems = ""
$strComputer = "localhost"
$ACC_2_Search = 'Accountname'
$Output=""
$Output = $Output & "Computer: " & $strComputer & @CRLF
$Output = $Output & "==========================================" & @CRLF
$objWMIService = ObjGet("winmgmts:\\" & $strComputer & "\root\CIMV2")
$colItems = $objWMIService.ExecQuery("SELECT * FROM Win32_UserAccount", "WQL", _
$wbemFlagReturnImmediately + $wbemFlagForwardOnly)
If IsObj($colItems) then
For $objItem In $colItems
If $objItem.Name = $ACC_2_Search Then
MsgBox(0, 'Gefunden', $ACC_2_Search & ' auf PC vorhanden.')
ExitLoop
EndIf
Next
Else
Msgbox(0,"WMI Output","No WMI Objects Found for class: " & "Win32_UserAccount" )
Endif
Edit: Du kannst auch im Netzwerk abfragen, für $strComputer = "localhost" dann die IP übergeben.
; Generated by AutoIt Scriptomatic
[/autoit] [autoit][/autoit] [autoit]$wbemFlagReturnImmediately = 0x10
$wbemFlagForwardOnly = 0x20
$colItems = ""
$strComputer = "localhost"
$Output=""
$Output = $Output & "Computer: " & $strComputer & @CRLF
$Output = $Output & "==========================================" & @CRLF
$objWMIService = ObjGet("winmgmts:\\" & $strComputer & "\root\CIMV2")
$colItems = $objWMIService.ExecQuery("SELECT * FROM Win32_UserAccount", "WQL", _
$wbemFlagReturnImmediately + $wbemFlagForwardOnly)
If IsObj($colItems) then
For $objItem In $colItems
$Output = $Output & "AccountType: " & $objItem.AccountType & @CRLF
$Output = $Output & "Caption: " & $objItem.Caption & @CRLF
$Output = $Output & "Description: " & $objItem.Description & @CRLF
$Output = $Output & "Disabled: " & $objItem.Disabled & @CRLF
$Output = $Output & "Domain: " & $objItem.Domain & @CRLF
$Output = $Output & "FullName: " & $objItem.FullName & @CRLF
$Output = $Output & "InstallDate: " & WMIDateStringToDate($objItem.InstallDate) & @CRLF
$Output = $Output & "LocalAccount: " & $objItem.LocalAccount & @CRLF
$Output = $Output & "Lockout: " & $objItem.Lockout & @CRLF
$Output = $Output & "Name: " & $objItem.Name & @CRLF
$Output = $Output & "PasswordChangeable: " & $objItem.PasswordChangeable & @CRLF
$Output = $Output & "PasswordExpires: " & $objItem.PasswordExpires & @CRLF
$Output = $Output & "PasswordRequired: " & $objItem.PasswordRequired & @CRLF
$Output = $Output & "SID: " & $objItem.SID & @CRLF
$Output = $Output & "SIDType: " & $objItem.SIDType & @CRLF
$Output = $Output & "Status: " & $objItem.Status & @CRLF
if Msgbox(1,"WMI Output",$Output) = 2 then ExitLoop
$Output=""
Next
Else
Msgbox(0,"WMI Output","No WMI Objects Found for class: " & "Win32_UserAccount" )
Endif
Func WMIDateStringToDate($dtmDate)
Return (StringMid($dtmDate, 5, 2) & "/" & _
StringMid($dtmDate, 7, 2) & "/" & StringLeft($dtmDate, 4) _
& " " & StringMid($dtmDate, 9, 2) & ":" & StringMid($dtmDate, 11, 2) & ":" & StringMid($dtmDate,13, 2))
EndFunc
Ich befürchte, ich werde wirklich alt
.
Da hatte ich doch mein eigenes Testskript falsch bestückt und kam dadurch zu der Annahme, dass rekursiv standarmäßig nicht geht, stattdessen aber ein Level tief.
Tatsächlich ist es genau umgekehrt
Mit Angabe des ItemHandle werden alle Subs Aus-/Eingeklappt ( _GUICtrlTreeView_Expand($hTreeView, $hItem) ). Also genau das, was ich mit obiger Funktion mühevoll nachgebaut habe :D.
Nun gut, da ein Level Ausklappen (per Maus: Klick auf '+') per Funktion nicht geht (oder soll ich vorsichtshalber sagen, dass meine altersschwachen Augen es bis jetzt vielleicht übersehen haben ?
), reiche ich somit diese Funktion nach.
Hierbei geht es nur um das Ausklappen, da mit der Standard Expand-Funktion eingeklappt werden kann:
;==================================================================================================
; Function Name: _GUICtrlTreeView_ExpandOneLevel($hTreeView [, $hParentItem=0])
; Description:: Ausklappen nur EINER Ebene eines Items, analog zum Mausklick auf '+'
; Parameter(s): $hTreeView Handle des TreeView
; $hParentItem Handle des Auszuklappenden Parent-Items
; Standard 0 ==> Handle des ersten Item im TreeView
; Return: Erfolg nichts
; Fehler @error 1 - TreeView enthält kein Item
; @error 2 - Item hat keine Child-Item
; Note: Die Funktion sollte zwischen _GUICtrlTreeView_BeginUpdate() und _GUICtrlTreeView_EndUpdate()
; ausgeführt werden um ein Flackern zu verhindern
; Author(s): BugFix ([email='bugfix@autoit.de'][/email])
;==================================================================================================
Func _GUICtrlTreeView_ExpandOneLevel($hTreeView, $hParentItem=0)
If $hParentItem < 1 Then
Local $hCurrentItem = _GUICtrlTreeView_GetFirstItem($hTreeView)
Else
Local $hCurrentItem = $hParentItem
EndIf
If $hCurrentItem = 0 Then Return SetError(1)
Local $hChild
Local $countChild = _GUICtrlTreeView_GetChildCount($hTreeView, $hCurrentItem)
If $countChild = 0 Then Return SetError(2)
_GUICtrlTreeView_Expand($hTreeView, $hCurrentItem)
For $i = 1 To $countChild
If $i = 1 Then
$hChild = _GUICtrlTreeView_GetFirstChild($hTreeView, $hCurrentItem)
Else
$hChild = _GUICtrlTreeView_GetNextSibling($hTreeView, $hChild)
EndIf
If _GUICtrlTreeView_GetChildren($hTreeView, $hChild) Then _GUICtrlTreeView_Expand($hTreeView, $hChild, False)
Next
EndFunc ;==>_GUICtrlTreeView_ExpandOneLevel
Auch von mir ein Herzliches Willkommen und Happy Skripting. ![]()
Erstelle eine Funktion zum Befüllen der ListBox.
Diese rufst du zum ersten mal nach Erstellen der GUI auf (also wenn die ListBox existiert).
In der Funktion:
- alle Einträge der ListBox löschen ( _GUICtrlListBox_ResetContent($hWnd) )
- INI-Einträge auslesen und mit _GUICtrlListBox_AddString($hWnd, $sText) in die ListBox schreiben
Diese Funktion rufst du dann immer auf, wenn sich Einträge verändern.
Wichtig:
Du benötigst das Handle der ListBox. Also entweder gleich mit _GUICtrlListBox_Create() erzeugen (gibt das Handle zurück), oder:
$IDList = GUICtrlCreateList()
$hList = GUICtrlGetHandle($IDList)
Hi,
standardmäßig kann ich entweder alle Item eines Treeview inkl. aller Sub-Item oder nur eine Ebene tiefer zum aktuellen Item Aus-/Einklappen.
Die folgende Funktion ermöglicht es, rekursiv alle Child-Item eines Parents Aus- bzw. Einzuklappen.
Im Bsp. kann per Kontextmenü der markierte Zweig des Treeview Aus- und Eingeklappt werden.
Die Warnung beim Skriptstart ignorieren, betrifft eine Variable, die innerhalb der Funktion erstellt wird.
#include<GUIConstantsEx.au3>
#include<GuiImageList.au3>
#include<GuiTreeView.au3>
#include<TreeViewConstants.au3>
#include<WindowsConstants.au3>
_Main()
[/autoit] [autoit][/autoit] [autoit]Func _Main()
Local $hItem, $hImage, $iImage, $hTreeView
Local $iStyle = BitOR($TVS_EDITLABELS, $TVS_HASBUTTONS, $TVS_HASLINES, $TVS_LINESATROOT, $TVS_DISABLEDRAGDROP, $TVS_SHOWSELALWAYS, $TVS_CHECKBOXES)
$gui = GUICreate("TreeView Expand One Sub-Level", 400, 300)
$hTreeView = GUICtrlCreateTreeView(2, 2, 396, 268, $iStyle, $WS_EX_CLIENTEDGE)
$ContextMenu = GUICtrlCreateContextMenu($hTreeView)
$mnuExpand = GUICtrlCreateMenuItem('Zweig kpl. Ausklappen', $ContextMenu)
$mnuCollapse = GUICtrlCreateMenuItem('Zweig kpl. Einklappen', $ContextMenu)
GUISetState()
$hImage = _GUIImageList_Create(16, 16, 5, 3)
_GUIImageList_AddIcon($hImage, "shell32.dll", 110)
_GUIImageList_AddIcon($hImage, "shell32.dll", 131)
_GUIImageList_AddIcon($hImage, "shell32.dll", 165)
_GUIImageList_AddIcon($hImage, "shell32.dll", 168)
_GUIImageList_AddIcon($hImage, "shell32.dll", 137)
_GUIImageList_AddIcon($hImage, "shell32.dll", 146)
_GUICtrlTreeView_SetNormalImageList($hTreeView, $hImage)
_GUICtrlTreeView_BeginUpdate($hTreeView)
For $x = 1 To Random(3, 4, 1)
$iImage = Random(0, 5, 1)
$hItem = _GUICtrlTreeView_Add($hTreeView, 0, StringFormat("[%02d] New Item", $x), $iImage, $iImage)
For $y = 1 To Random(3, 4, 1)
$iImage = Random(0, 5, 1)
$hChild = _GUICtrlTreeView_AddChild($hTreeView, $hItem, StringFormat("[%02d] New Child", $y), $iImage, $iImage)
For $z = 1 To Random(3, 4, 1)
$iImage = Random(0, 5, 1)
_GUICtrlTreeView_AddChild($hTreeView, $hChild, StringFormat("[%02d] New Child", $y), $iImage, $iImage)
Next
Next
Next
_GUICtrlTreeView_EndUpdate($hTreeView)
Do
$msg = GUIGetMsg()
Switch $msg
Case $mnuExpand
_GUICtrlTreeView_ExpandItemRekursiv($hTreeView)
Case $mnuCollapse
_GUICtrlTreeView_ExpandItemRekursiv($hTreeView, -1, False)
EndSwitch
Until $msg = $GUI_EVENT_CLOSE
GUIDelete()
EndFunc ;==>_Main
;==================================================================================================
; Function Name: _GUICtrlTreeView_ExpandItemRekursiv($hTreeView [, $hParentItem=-1 [, $bExpand=True]])
; Description:: Aus- oder Einklappen aller Child-Items eines Item und deren Child-Items
; Parameter(s): $hTreeView Handle des TreeView
; $hParentItem Handle des Aus/Einzuklappenden Parent-Items
; Standard -1 ==> Handle des markierten Item
; $bExpand Ausklappen (Standard) = True, Einklappen = False
; Return: Erfolg nichts
; Fehler @error 1 - ItemHandle nicht übergeben und kein Item markiert
; Requirement(s): GetAllParents()
; Author(s): BugFix ([email='bugfix@autoit.de'][/email])
;==================================================================================================
Func _GUICtrlTreeView_ExpandItemRekursiv($hTreeView, $hParentItem=-1, $bExpand=True)
If $hParentItem < 1 Then
Local $hCurrentItem = _GUICtrlTreeView_GetSelection($hTreeView)
Else
Local $hCurrentItem = $hParentItem
EndIf
If $hCurrentItem = 0 Then Return SetError(1)
Global $aParentItem[1] = [0]
GetAllParents($hTreeView, $hCurrentItem)
For $i = 0 To UBound($aParentItem) -1
If $bExpand Then
_GUICtrlTreeView_Expand($hTreeView, $aParentItem[$i])
Else
_GUICtrlTreeView_Expand($hTreeView, $aParentItem[$i], False)
EndIf
Next
ReDim $aParentItem[1]
$aParentItem[0] = 0
EndFunc ;==>_GUICtrlTreeView_ExpandItemRekursiv
Func GetAllParents($hTreeView, $hItem)
Local $hChild
Local $countChild = _GUICtrlTreeView_GetChildCount($hTreeView, $hItem)
If $countChild = 0 Then Return
If $aParentItem[UBound($aParentItem)-1] <> 0 Then ReDim $aParentItem[UBound($aParentItem)+1]
$aParentItem[UBound($aParentItem)-1] = $hItem
For $i = 1 To $countChild
If $i = 1 Then
$hChild = _GUICtrlTreeView_GetFirstChild($hTreeView, $hItem)
Else
$hChild = _GUICtrlTreeView_GetNextSibling($hTreeView, $hChild)
EndIf
If _GUICtrlTreeView_GetChildren($hTreeView, $hChild) Then GetAllParents($hTreeView, $hChild)
Next
EndFunc ;==>GetAllParents
Edit 09.06.08: Die Funktion klappt einwandfrei ... aber völlig überflüssig
, s. Post 3
Ja, es lohnt auf jeden Fall. AutoIt hat einen recht großen Funktionsumfang und ermöglicht die Realisierung vielfältiger Aufgaben.
Wenn du mit AutoIt umgehen kannst, wird es dir eine Hilfe für das spätere Verständnis anderer Programmiersprachen sein.
Empfehlen würde ich auch, von Anbeginn mit Opt('MustDeclareVars',1) zu arbeiten.
Das zwingt dich eine Übersicht über deine Variablen und deren Namespace zu haben.
Ich habe es zwar gemacht aber ich habe dafür nie die Hilfe diese Forums in Anspruch genommen das war meine Idee und ich habe sie umgesetzt ich habe uíhn jetzt auch nur gepostet weil hier jemand etwas ähnliches vorhatte es heist ja nicht das er es so hätte übernehmen müssen
Welche Relevanz hat es, ob du für eine blöde Idee Hilfe in Anspruch genommen hast oder nicht?
Hoffentlich sind dir die Folgen bewußt, wenn dein Tun in der Schule auffliegt? Minimal ein Schulverweis, wahrscheinlicher noch dazu ein Hausverbot für den Computerraum (was deinen Schulabschluß zum Kippen bringen kann), nicht unmöglich ein Schulrausschmiß.
In Abwandlung eines alten Sprichwortes: Vor Beginn des Skriptens - Gehirn einschalten!
P.S. sag mir doch mal ein paar tipps was du sonst mit autoit machen willst mir fällt nichts mehr ein...
Dir fällt nix ein??
Ich bin mir sicher, dass du kaum die Hälfte der in AutoIt enthaltenen Funktionsvielfalt kennst oder verstanden hast. (Überzeuge mich eines Besseren!)
Schau dir allein die UDF-Sammlung an. Nimm dir Kapitel für Kapitel vor und gestalte die Skripte aus der Hilfe nach (nicht nur die vorhandenen ausführen). Dabei wird dir von selbst bewußt werden, was man alles damit machen kann und somit entstehen auch neue Projektideen.
Kann man das Programm so verändern, dass es im prinzip nur die eckpunkte von Linien erkennt und nur die Koordinaten dieser Punkte aufführt?
Dazu mußt du festlegen, welche Bedingungen für die "Begrenzungspixel" gelten und daraufhin alle Pixel, für die diese Bedingungen nicht zutreffen entfernen.
Ich würde in etwa so vorgehen:
- linke Begrenzung: für jedes Y der kleinste X-Wert
- rechte Begrenzung: für jedes Y der größte X-Wert
jetzt umsortieren X-aufsteigend und innerhalb von X die Y-Werte absteigend
- obere Begrenzung: für jedes X der kleinste Y-Wert
- untere Begrenzung: für jedes X der größte Y-Wert
Diese Variante erkennt nicht nur Eckpunkte, sondern alle Koordinaten des Umfangs (also auch Kreis oder Vieleck etc.).
Und ich habe noch eine Frage an BugFix: in deinem Script erstellst du sql tabellen. Muss dafür ein sql server laufen? weil du hast keinen sql dienst über _sqllie_open geöffnet, weil das sortieren funktioniert nicht richtig. Ich würde gerne die y-Koordinaten absteigend ordnenund dann die dazugehörigen x werte.
Hi,
da man in Datenbanken wunderbar mehrstufig sortieren kann, war mir die Idee gekommen einfach ein 2D-Array über den Umweg einer SQL-Tabelle mehrstufig zu sortieren.
Und wenn du mal in Zeile 110 der Sortierfunktion schaust:
_SQLite_Startup ()
If @error > 0 Then Return SetError(3,0,1)
$hSQL = _SQLite_Open ()
- wie du siehst wird hier die Datenbank temporär initialisiert. Ein SQL-Server wird nicht benötigt.
Um Y absteigend und für gleiche Y dann X aufsteigend zu sortieren wäre der Sortierstring: "1|1,0|0"
Somit würde die Reihenfolge der Koordinaten auf dem Desktop betrachtet von unten links nach oben rechts abgefahren.
Da die Reihenfolge mit der Sortierung bestimmt wird, ist es ohne Belang wie die Scanrichtung ist.
Probier mal die Funktion, hatte sie für einen anderen Zweck geschrieben, aber ich denke es könnte hier passen.
#include <SQLite.au3>
#include <SQLite.dll.au3>
Dim $DateiOut = @ScriptDir & "\Scanergebnis.txt"
Dim $Farbe = 0x000000
Dim $Schrittweite = 1
_pix_scan($Farbe, $Schrittweite, $DateiOut)
[/autoit] [autoit][/autoit] [autoit];------------------------------------------------------------------------------------------------------------
; Funktion _pix_scan($color, $step, $file)
;
; Beschreibung scannt Display nach gesuchter Farbe, Ausgabe in Datei
; Pixelbereiche 2-stufig sortiert
;
; Parameter $color: zu suchende Farbe
; $step: Rastergröße
; $file: Ausgabedatei
;
; Return Datei mit den gefundenen Pixelpositionen
;
; Erfordernisse Funktion: _Array2DSortFree( )
; Nach dem Funktionsaufruf wird der Scan erst mit {F9} gestartet
; um z.B. vorab ein Spiel starten zu können
;
; Autor BugFix ([email='bugfix@autoit.de'][/email])
;------------------------------------------------------------------------------------------------------------
#include <File.au3>
#Include <Misc.au3>
Func _pix_scan($color, $step, $file)
Local $endX = @DesktopWidth, $endY = @DesktopHeight
Local $left = 0, $top = 0, $right = $step, $bottom = $step
Local $arPos, $arSort[1][1]
Do
Sleep(100)
Until _IsPressed("78") ; F9
$fh = FileOpen($file,1)
Do
For $left = 0 To $endX Step $step
$pos = PixelSearch($left, $top, $right, $bottom, $color, 0, $step)
If IsArray($pos) Then FileWriteLine($file, $pos[0] & "|" & $pos[1])
$right += $step
Next
$left = 0
$right = $step
$top += $step
$bottom += $step
Until $bottom > $endY
FileClose($fh)
Beep(500, 2000)
_FileReadToArray($file, $arPos)
FileDelete($file)
ReDim $arSort[UBound($arPos)][2]
For $i = 0 To UBound($arPos)-1
$var = StringSplit($arPos[$i], "|")
If ( IsArray($var) And UBound($var) = 3 ) Then
$arSort[$i][0] = Number($var[1])
$arSort[$i][1] = Number($var[2])
EndIf
Next
_Array2DSortFree($arSort, '0|0,1|0')
$fh = FileOpen($file,1)
For $i = 0 To UBound($arSort)-1
If $arSort[$i][0] <> "" And $arSort[$i][1] <> "" Then _
FileWriteLine($fh, "X: " & $arSort[$i][0] & " , Y: " & $arSort[$i][1])
Next
FileClose($fh)
EndFunc
;==================================================================================================
; Function Name: _Array2DSortFree($ARRAY, $sCOL_ASC)
; Description:: Sortierung von 1D/2D-Arrays nach freier Wahl
; 1D Sortierung Auf- oder Absteigend
; 2D mehrstufige Sortierung, Reihenfolge und Sortier-
; richtung (je Spalte) frei wählbar
; auch einzelne Spalte sortierbar
; Parameter(s): $ARRAY Das zu sortierende Array
; $sCOL_ASC String mit Sortierangaben "Spalte|Richtung [, Spalte|Richtung]"
; zu sortierende Spalte (0-Index)|Richtung (0-Asc, 1-Desc)
; z.B. Spalte 2 aufsteigend und in 2 absteigend Spalte 1
; _Array2DSortFree($ar2Sort, '2|0,1|1')
; Return Value(s): Erfolg 0
; Fehler 1 Set Error 1 $ARRAY ist kein Array
; 2 1D-Array, aber Spaltenangabe für 2D
; 3 SQL-Fehler
; 4 Angaben für Spalte|Sortierrichtung fehlerhaft
; Requirements: #include <SQLite.au3>
; #include <SQLite.dll.au3>
; Author(s): BugFix ([email='bugfix@autoit.de'][/email])
;==================================================================================================
Func _Array2DSortFree(ByRef $ARRAY, $sCOL_ASC)
If Not IsArray($ARRAY) Then Return SetError(1,0,1)
Local $tableStr = "CREATE TABLE tblTEST ("
Local $insertStr = '', $insertBase = "INSERT INTO tblTEST VALUES ("
Local $sortOrder = '', $sortStr = "SELECT * FROM tblTEST ORDER BY "
Local $aResult, $iRows, $iColumns, $iRval, $asc
$sCOL_ASC = StringStripWS($sCOL_ASC, ![]()
Local $ub2nd = UBound($ARRAY, 2)
If @error = 2 Then
If (StringLen($sCOL_ASC) > 3) Or (StringLeft($sCOL_ASC, 1) <> '0') Then Return SetError(2,0,1)
If StringRight($sCOL_ASC, 1) = 0 Then
_ArraySort($ARRAY)
Else
_ArraySort($ARRAY, 1)
EndIf
Return 0
Else
Local $aOut[UBound($ARRAY)][$ub2nd]
EndIf
_SQLite_Startup ()
If @error > 0 Then Return SetError(3,0,1)
$hSQL = _SQLite_Open ()
If @error > 0 Then
_SQLite_Shutdown ()
Return SetError(3,0,1)
EndIf
For $i = 0 To UBound($ARRAY, 2) -1
$tableStr &= "'field" & $i & "',"
Next
$tableStr = StringTrimRight($tableStr, 1) & ");"
For $i = 0 To UBound($ARRAY) -1 ; Erzeuge Insert-String
$insertStr &= $insertBase
For $k = 0 To UBound($ARRAY, 2) -1
$insertStr &= "'" & $ARRAY[$i][$k] & "',"
Next
$insertStr = StringTrimRight($insertStr, 1) & ");"
Next
; Erstelle Tabelle und füge Werte ein
If _SQLite_Exec ( $hSQL, $tableStr & $insertStr ) <> $SQLITE_OK Then
_SQLite_Shutdown ()
Return SetError(3,0,1)
EndIf
If StringInStr($sCOL_ASC, ',') Then
Local $aOrder = StringSplit($sCOL_ASC, ',')
For $i = 1 To UBound($aOrder) -1
If StringInStr($sCOL_ASC, '|') Then
Local $var = StringSplit($aOrder[$i], '|')
$asc = ' ASC'
If $var[2] = 1 Then $asc = ' DESC'
$sortOrder &= 'field' & $var[1] & $asc & ','
Else
_SQLite_Shutdown ()
Return SetError(4,0,1)
EndIf
Next
$sortOrder = StringTrimRight($sortOrder, 1) & ';'
Else
If (StringLen($sCOL_ASC) = 3) And (StringInStr($sCOL_ASC, '|')) Then
Local $var = StringSplit($sCOL_ASC, '|')
$asc = ' ASC'
If $var[2] = 1 Then $asc = ' DESC'
$sortOrder &= 'field' & $var[1] & $asc
Else
_SQLite_Shutdown ()
Return SetError(4,0,1)
EndIf
EndIf
$iRval = _SQLite_GetTable2d (-1, $sortStr & $sortOrder, $aResult, $iRows, $iColumns)
If $iRval = $SQLITE_OK Then
For $i = 1 To UBound($aResult) -1
For $k = 0 To UBound($aResult,2) -1
$aOut[$i-1][$k] = $aResult[$i][$k]
Next
Next
Else
_SQLite_Shutdown ()
Return SetError(4,0,1)
EndIf
_SQLite_Exec ($hSQL, "DROP TABLE tblTEST;")
_SQLite_Close ()
_SQLite_Shutdown ()
$ARRAY = $aOut
Return 0
EndFunc ;==> _Array2DSortFree