Warum eigentlich nicht auch das RecordSet-Objekt (ADO) als Alternative zum Array nutzen?
Spoiler anzeigen
AutoItSetOption('MustDeclareVars', 1)
[/autoit] [autoit][/autoit] [autoit]Dim Const $adInteger = 3
Dim Const $adVarChar = 200
Dim Const $adFilterNone = 0
Dim Const $adSearchForward = 0
Dim Const $adBookmarkFirst = 1
Dim Const $adAffectCurrent = 1
Dim Const $adPersistXML = 1
Dim Const $adSaveCreateOverWrite = 2
Dim Const $DefinedSize = 255
Dim $err = ObjEvent('AutoIt.Error', '_ErrorHandler')
Dim $rs = ObjCreate('ADODB.RecordSet')
; --- Aufbau der dynamischen Tabelle
$rs.Fields.Append('ID', $adInteger)
$rs.Fields.Append('Name', $adVarChar, $DefinedSize)
$rs.Fields.Append('Vorname', $adVarChar, $DefinedSize)
$rs.Fields.Append('Telefon', $adVarChar, $DefinedSize)
$rs.Open()
; --- Tabelle befüllen
$rs.AddNew()
$rs('ID') = 1
$rs('Name') = 'Dosenkohl'
$rs('Vorname') = 'Hans'
$rs('Telefon') = '099/999999'
$rs.Update()
$rs.AddNew()
$rs('ID') = 2
$rs('Name') = 'Wumpe'
$rs('Vorname') = 'Klaus'
$rs('Telefon') = '088/8888888'
$rs.Update()
$rs.AddNew()
$rs('ID') = 3
$rs('Name') = 'Dampf'
$rs('Vorname') = 'Hans'
$rs('Telefon') = '077/777777'
$rs.Update()
ConsoleWrite('Tabelle ausgeben' & @CRLF)
_PrintTable()
; --- Tabelle sortieren
$rs.Sort = 'Telefon'
ConsoleWrite('Sortierte Tabelle ausgeben' & @CRLF)
_PrintTable()
; --- Tabelle filtern
$rs.Filter = 'Vorname = ''Hans'''
ConsoleWrite('Gefilterte Tabelle ausgeben' & @CRLF)
_PrintTable()
; --- Filterung entfernen
$rs.Filter = $adFilterNone
$rs.MoveFirst()
; --- Datensatz suchen
$rs.Find('Vorname = ''Hans''')
ConsoleWrite('Suchergebnis ausgeben' & @CRLF)
If Not $rs.BOF And Not $rs.EOF Then
While Not $rs.EOF
ConsoleWrite(StringFormat('%s %s %s %s %s\n', _
$rs('ID').Value, $rs('Name').Value, $rs('Vorname').Value, $rs('Telefon').Value))
$rs.Find('Vorname = ''Hans''', 1)
WEnd
Else
ConsoleWrite('Keine Übereinstimmung gefunden!' & @CRLF)
EndIf
ConsoleWrite(@CRLF)
; --- Einen Datensatz von der aktullen Position nach vorne springen
$rs.Move(1, $adBookmarkFirst)
If Not $rs.BOF And Not $rs.EOF Then
ConsoleWrite('Der Datensatz ...' & @CRLF)
ConsoleWrite(StringFormat('%s %s %s %s %s\n', _
$rs('ID').Value, $rs('Name').Value, $rs('Vorname').Value, $rs('Telefon').Value))
ConsoleWrite('... wird gelöscht!' & @CRLF)
; --- aktuellen Datensatz löschen
$rs.Delete($adAffectCurrent)
EndIf
ConsoleWrite(@CRLF)
_PrintTable()
; --- Tabelle persistent speichern
Dim $stm = ObjCreate('ADODB.Stream')
$rs.Save($stm, $adPersistXML)
$stm.SaveToFile('c:\user.xml', $adSaveCreateOverWrite)
; --- Tabelle schliessen
$rs.Close()
$stm.Close()
Func _PrintTable()
$rs.MoveFirst()
While Not $rs.EOF
ConsoleWrite(StringFormat('%s %s %s %s %s\n', $rs('ID').Value, $rs('Name').Value, $rs('Vorname').Value, $rs('Telefon').Value))
$rs.MoveNext()
WEnd
ConsoleWrite(@CRLF)
EndFunc ;==>_PrintTable
Func _ErrorHandler()
ConsoleWrite(StringFormat('Fehlernr .....: %s\n', Hex($err.number, 8)))
ConsoleWrite(StringFormat('Beschreibung .: %s\n', $err.description))
ConsoleWrite(StringFormat('Skriptzeile ..: %s\n', $err.line))
Return SetError(1)
EndFunc ;==>_ErrorHandler