_ArrayDisplay verursacht Absturz von AutoIT

  • Hallo,
    mir pasiert es häufig, dass sich bei der einfachen Verwendung von _ArrayDisplay Autoit aufhängt, also das Array Fenster öffnet sich, aber es wird nichts angezeigt und autoit reagiert nicht mehr. Ich könnte mir vorstellen, das durch die häufige verschachtelung in Schleifen, der Befehl iwie nicht mehr mitkommt:


    [autoit]

    Func InitAutoIndex()
    Local $delimiter[5] = ['32', '124', '44', '59', '46']

    $text = GUICtrlRead($Input1)
    If StringLen($text) >= 2 Then
    $count = StringLen($text)
    $char = StringTrimLeft($text, $count-1)
    $ascii = StringToASCIIArray($char,0 ,0, 1)

    $query = "Select a.Artikelbezeichnung From Artikel a Where a.Artikelbezeichnung Like " & "'%" & $text & "%'"

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


    If _ArraySearch($delimiter, $ascii[0]) <> -1 And Not $split Then
    $split = 1
    Global $delim = StringFromASCIIArray($ascii)
    ElseIf $split Then
    $substr = StringSplit($text, $delim)

    $query = "Select a.Artikelbezeichnung From Artikel a Where a.Artikelbezeichnung Like "
    For $i = 1 To $substr[0]
    $query &= "'%" & $substr[$i] & "%'"

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

    If $i = $substr[0] Then ExitLoop
    $query &= " AND a.Artikelbezeichnung LIKE "
    Next

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

    EndIf

    $errcode = Query($query)
    If $errcode = 0 Then
    Global $abc[4]
    $abc[0] = "1"
    $abc[1] = "2"

    _ArrayDisplay($abc) ; absturz
    EndIf
    EndIf
    EndFunc

    [/autoit]

    Danke schonmal!

  • Versuch mal die Deklaration von $abc[4]
    entweder als Global $abc[4] am Beginn des Scripts, vor Aufruf der Func InitAutoIndex()
    oder als Local $abc[4] direkt nach dem Funktionsheader Func InitAutoIndex() .

    _ArrayDisplay() selbst ist normalerweise sehr stabil.

    MfG ThPfund

    "Es könnte alles so einfach sein..."

  • Hier der Rest:

    [autoit]

    #include <Misc.au3>
    #include <ButtonConstants.au3>
    #include <ComboConstants.au3>
    #include <EditConstants.au3>
    #include <GUIConstantsEx.au3>
    #include <ListViewConstants.au3>
    #include <StaticConstants.au3>
    #include <TabConstants.au3>
    #include <WindowsConstants.au3>
    #Include <GuiEdit.au3>
    #Include <File.au3>
    #include <Array.au3>
    #Include <GuiListView.au3>
    #Include <GuiComboBox.au3>
    #include <_sql.au3>
    #include <SQLite.au3>
    #include <SQLite.dll.au3>
    #include <Constants.au3>
    #Include <GuiTab.au3>
    #Include <GuiButton.au3>
    #Include <GuiToolTip.au3>

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

    Opt('GUIOnEventMode', 1)
    DBAccess()

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

    Global $split
    Global $mode
    Global $list = ""

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

    #Region ### START Koda GUI section ### Form=C:\Users\configcenteruser\Desktop\Lagerverwaltung\neu\formular_main.kxf
    $Form2 = GUICreate("Form2", 405, 296, 300, 212)
    $Radio1 = GUICtrlCreateRadio("Zu", 18, 48, 35, 17)
    $Radio2 = GUICtrlCreateRadio("Ab", 58, 48, 41, 17)
    $Radio3 = GUICtrlCreateRadio("Edit", 100, 48, 40, 17)
    $Radio4 = GUICtrlCreateRadio("seriennummer", 150, 48, 113, 17)
    $Input1 = GUICtrlCreateInput("", 6, 98, 105, 21) ; artikel
    $Input2 = GUICtrlCreateInput("", 142, 98, 121, 21)
    $Input3 = GUICtrlCreateInput("", 296, 98, 65, 21) ; sn
    GUICtrlSetState(-1, $GUI_HIDE)
    $Label1 = GUICtrlCreateLabel("Artikel", 8, 82, 33, 17)
    $Label2 = GUICtrlCreateLabel("Menge", 142, 80, 37, 17)
    $Label3 = GUICtrlCreateLabel("SN", 298, 80, 19, 17)
    GUICtrlSetState(-1, $GUI_HIDE)
    $Button1 = GUICtrlCreateButton("Buchen", 266, 220, 123, 59, $WS_GROUP)
    GUICtrlSetOnEvent(-1, "Booking")
    $Input4 = GUICtrlCreateInput("", 142, 22, 159, 21)
    $Label4 = GUICtrlCreateLabel("Buchung #", 142, 4, 57, 17)
    $Label5 = GUICtrlCreateLabel("Regal", 8, 152, 32, 17)
    $Label6 = GUICtrlCreateLabel("Koordinate", 144, 154, 55, 17)
    $Combo1 = GUICtrlCreateCombo("", 6, 176, 121, 25)
    GUICtrlSetData(-1, "1|2|3|4|5|6|7|8|9|10")
    $Combo2 = GUICtrlCreateCombo("", 136, 178, 113, 25)
    GUICtrlSetData(-1, "A|B|C|44|33|22|11|90")
    $Combo3 = GUICtrlCreateCombo("", 10, 232, 145, 25)
    GUICtrlSetData(-1, "abuettge|dthiel|atews")
    $Label7 = GUICtrlCreateLabel("User", 10, 212, 26, 17)
    GUISetState(@SW_SHOW)
    GUISetOnEvent($GUI_EVENT_CLOSE, '_End')
    GUISetState()
    #EndRegion ### END Koda GUI section ###

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

    Setstate($GUI_HIDE)

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

    Func Setstate($state)

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

    GUICtrlSetState($Input1, $state)
    GUICtrlSetState($Input2, $state)
    GUICtrlSetState($Label1, $state)
    GUICtrlSetState($Label2, $state)
    GUICtrlSetState($Button1, $state)
    GUICtrlSetState($Label5, $state)
    GUICtrlSetState($Combo2, $state)
    GUICtrlSetState($Combo1, $state)
    GUICtrlSetState($Label6, $state)

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

    EndFunc

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

    GUIRegisterMsg ( $WM_COMMAND, "WM_COMMAND_Events" )

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

    Func DBAccess()
    ; Verbindung zur Access Datenbank
    Global $iRows, $iColumns, $aResult, $defcol, $hQuery, $aNames
    _SQL_RegisterErrorHandler()

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

    $oADODB = _SQL_Startup()
    If $oADODB = $SQL_ERROR Then Msgbox(0 + 16 + 262144, "Error", _SQL_GetErrMsg())
    If _SQL_AccessConnect($oADODB, @ScriptDir & "\dba.accdb") = $SQL_ERROR Then
    Msgbox(0 + 16 + 262144, "Error", _SQL_GetErrMsg())
    ;_SQL_Close()
    Exit
    EndIf
    EndFunc

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

    Func WM_COMMAND_Events($hWnd, $iMsg, $iwParam, $ilParam)
    #forceref $hWnd, $iMsg
    Local $hWndFrom, $iIDFrom, $iCode, $hWndInput
    If Not IsHWnd($Input1) Then $hWndInput = GUICtrlGetHandle($Input1)
    $hWndFrom = $ilParam
    $iIDFrom = _WinAPI_LoWord($iwParam)
    $iCode = _WinAPI_HiWord($iwParam)
    Switch $hWndFrom
    Case $Input1, $hWndInput
    Switch $iCode
    Case $EN_CHANGE

    InitAutoIndex()
    EndSwitch
    EndSwitch
    Return $GUI_RUNDEFMSG
    EndFunc ;==>WM_COMMAND

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

    ; bei jedem Tastenschlag
    Func InitAutoIndex()
    Local $delimiter[5] = ['32', '124', '44', '59', '46']

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


    $text = GUICtrlRead($Input1)
    If StringLen($text) >= 2 Then
    $count = StringLen($text)
    $char = StringTrimLeft($text, $count-1)
    $ascii = StringToASCIIArray($char,0 ,0, 1)


    $query = "Select a.Artikelbezeichnung From Artikel a Where a.Artikelbezeichnung Like " & "'%" & $text & "%'"

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


    If _ArraySearch($delimiter, $ascii[0]) <> -1 And Not $split Then
    $split = 1
    Global $delim = StringFromASCIIArray($ascii)
    ElseIf $split Then

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

    $substr = StringSplit($text, $delim)

    $query = "Select a.Artikelbezeichnung From Artikel a Where a.Artikelbezeichnung Like "
    For $i = 1 To $substr[0]
    $query &= "'%" & $substr[$i] & "%'"
    If $i = $substr[0] Then ExitLoop
    $query &= " AND a.Artikelbezeichnung LIKE "
    Next
    EndIf

    ;~ MsgBox(0, "query", $query)
    $errcode = Query($query)
    If $errcode = 0 Then
    $count = UBound($aResult, 1)
    MsgBox(0, "asdfa", $count)

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

    _ArrayDisplay($aResult)
    EndIf

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

    EndIf

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

    EndFunc

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

    Local $tmp, $text
    While 1
    If GUICtrlRead($Radio1) = $GUI_CHECKED Then
    GUICtrlSetData($Button1, "Einbuchen")
    Setstate($GUI_SHOW)
    $mode = 0
    ElseIf GUICtrlRead($Radio2) = $GUI_CHECKED Then
    GUICtrlSetData($Button1, "Ausbuchen")
    Setstate($GUI_SHOW)
    $mode = 1
    ElseIf GUICtrlRead($Radio3) = $GUI_CHECKED Then
    GUICtrlSetData($Button1, "Editieren")
    GUICtrlSetState($Input2, $GUI_HIDE)
    $mode = 2
    EndIf

    If GUICtrlRead($Radio4) = $GUI_CHECKED Then
    GUICtrlSetState($Input3, $GUI_SHOW)
    GUICtrlSetState($Label3, $GUI_SHOW)
    EndIf

    sleep(1000)
    WEnd

    [/autoit]

    Also abc[4] als Global vor InitAutoIndex() = absturz, als Local nach dem Funktionsheader

    [autoit]

    Func InitAutoIndex()
    Local $abc[4]
    $abc[0] = "1"
    $abc[1] = "2"

    [/autoit]


    ...

    auch = Absturz und wenn ich es nach SetState() setzte geht es ?(

    Edit: Es geht eigentlich überall, aber sobald ich über die WM Funktion gehe, sofort Absturz, also innerhalb der wm Funktion und allen Unterroutinen die über die wm Funktion aufgerufen werden. Kann man da was machen??

    Einmal editiert, zuletzt von Trolleule (30. April 2010 um 16:02)

  • okay verstehe. Ich lese ja nach jedem Keypress Daten aus der Datenbank aus. Hast du eine Lösung, wie ich mir die Ergebnisse anschauen kann.