Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » AutoIt » Вопрос по GUI - GUICtrlSetData

Ответить
Настройки темы
Вопрос по GUI - GUICtrlSetData

Новый участник


Сообщения: 49
Благодарности: 0

Профиль | Отправить PM | Цитировать


Изменения
Автор: Space-06
Дата: 25-06-2009
Вообщем собственно сам вопрос: есть код по созданию GUI,
Код: Выделить весь код
#include "array.au3"
#include "mysql.au3"
#include <GUIConstants.au3>

; Create GUI
GUICreate("History Show",800,500)
$clientIDs=GUICtrlCreateList ("",10,30,100,200 )
$rcvrAccs=GUICtrlCreateList ("",120,30,100,200)
$results=GUICtrlCreateEdit ("", 230,30,570,460)

_MySQL_InitLibrary()
$MysqlConn = _MySQL_Init()
$connected = _MySQL_Real_Connect($MysqlConn, "127.0.0.1", "root","", "chat")
If $connected = 0 Then
    $errno = _MySQL_errno($MysqlConn)
    MsgBox(0,"Error:",$errno & @LF & _MySQL_error($MysqlConn))
    If $errno = $CR_UNKNOWN_HOST Then MsgBox(0,"Error:","$CR_UNKNOWN_HOST" & @LF & $CR_UNKNOWN_HOST)
Endif
$query = "/*!40101 SET NAMES 'cp1251' */"
_MySQL_Real_Query($MysqlConn, $query)
$query = "SELECT DISTINCT ClientID FROM hist"
_MySQL_Real_Query($MysqlConn, $query)

$res = _MySQL_Store_Result($MysqlConn)
$gg = _MySQL_Fetch_Result_StringArray($res)
;_ArrayDelete($gg,0)
;_ArrayDisplay($gg)

GUISetState ()       ; will display an empty dialog box
; Run the GUI until the dialog is closed
Do
    $msg = GUIGetMsg()
    Select
    case $msg=$results
        GUICtrlSetData($results,$gg, "")

    EndSelect

Until $msg = $GUI_EVENT_CLOSE

_MySQL_Free_Result($res)
_MySQL_Close($MysqlConn)
_MySQL_EndLibrary()
Собственно основная часть кода обрабатывает Базу и выдает в итоге массив с значениями который необходимо в результате выполнения вставить в GUICtrlSetData, первый запрос создает первый массив значания строк кторого необходимо вставить в $clientIDs, второй ( в коде не отображен) будет в $rcvrAccs, и в последствии выбрав значения из этих контров - будет выполнен результирующий запрос к базе - результат которого будет в $results.

Прошу вашей помощи в подсказках решения, строго не судите.

Отправлено: 13:49, 22-06-2009

 

Новый участник


Сообщения: 49
Благодарности: 0

Профиль | Отправить PM | Цитировать


Ошибка на выводе в MsgBox, ругается на
Array variable has incorrect number of subscripts or subscript dimension range exceeded.:
MsgBox(0, "???? ??????", "i: " & $i & @CRLF & "??????: " & $aArray[$i])
MsgBox(0, "???? ??????", "i: " & $i & @CRLF & "??????: " & ^ ERROR
>Exit code: 1

вроде какая то ошибка в $aArray

Последний раз редактировалось Space-06, 08-07-2009 в 09:02.


Отправлено: 08:25, 08-07-2009 | #11



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Аватара для proxy

Старожил


Сообщения: 460
Благодарности: 152

Профиль | Отправить PM | Цитировать


Цитата Space-06:
вроде какая то ошибка в $aArray »
........) она была и есть в массиве.
Какой последний $i был в сообщение?
И сколько строк в массиве?

и вот так еще можно потестить
читать дальше »


Код: Выделить весь код
#include 'array.au3'
#include 'mysql.au3'
#include <GuiConstantsEx.au3>
#include <GuiListView.au3>
#include <WindowsConstants.au3>

Global $sHost = FileReadLine ("set.ini",1)
Global $sUser = FileReadLine ("set.ini",2)
Global $sPass = FileReadLine ("set.ini",3)
Global $sDbName = FileReadLine ("set.ini",4)

Global $hMainWin    = GUICreate('History Show', 800, 500)
    GUIRegisterMsg($WM_NOTIFY, 'WM_NOTIFY')

Global $clientIDs  = GUICtrlCreateListView('', 10,  30, 100, 200)
    _GUICtrlListView_SetExtendedListViewStyle($clientIDs, BitOR($LVS_EX_GRIDLINES, $LVS_EX_FULLROWSELECT))
    _GUICtrlListView_AddColumn($clientIDs, 'CLients', 96)

Global $rcvrAccs    = GUICtrlCreateListView('', 120, 30, 100, 200)
    _GUICtrlListView_SetExtendedListViewStyle($rcvrAccs, BitOR($LVS_EX_GRIDLINES, $LVS_EX_FULLROWSELECT))
    _GUICtrlListView_AddColumn($rcvrAccs, 'Access', 96)

Global $results = GUICtrlCreateEdit('', 230, 30, 570, 460)

$gg = _SQL_GetData($sHost,$sUser,$sPass,$sDbName, 'SELECT DISTINCT ClientID FROM hist')
_ArrayDisplay($gg)
_ArrayToList($clientIDs, $gg, 1)

;$gg = _SQL_GetData('127.0.0.1', 'root', 'GsM2562r', 'chat', 'SELECT DISTINCT rcvrAccs FROM hist')
;_ArrayDisplay($gg)
;_ArrayToList($rcvrAccs, $qq, 1)

Func _SQL_GetData($sHost, $sUser, $sPass, $sDbName, $sQuery)
    Local $MysqlConn, $connected, $errno, $res, $gg

    _MySQL_InitLibrary()
    $MysqlConn = _MySQL_Init()
    $connected = _MySQL_Real_Connect($MysqlConn, $sHost, $sUser, $sPass, $sDbName)
    If $connected = 0 Then
        $errno = _MySQL_errno($MysqlConn)
        MsgBox(0,'Error:',$errno & @LF & _MySQL_error($MysqlConn))
        If $errno = $CR_UNKNOWN_HOST Then MsgBox(0, 'Error:', '$CR_UNKNOWN_HOST' & @LF & $CR_UNKNOWN_HOST)
    Endif

    $query = "/*!40101 SET NAMES 'cp1251' */"
    _MySQL_Real_Query($MysqlConn, $query)
    $query = $sQuery
    _MySQL_Real_Query($MysqlConn, $query)

    $res = _MySQL_Store_Result($MysqlConn)
    $gg = _MySQL_Fetch_Result_StringArray($res)

    Return $gg
EndFunc

GUISetState()
Do
    $msg = GUIGetMsg()
;~  Select
;~      Case
;~  EndSelect
Until $msg = $GUI_EVENT_CLOSE

_MySQL_Free_Result($res)
_MySQL_Close($MysqlConn)
_MySQL_EndLibrary()

Func _ArrayToList($hList, $aArray, $iStart=0, $iEnd=0)
    If NOT IsArray($aArray) Then Exit MsgBox(48, 'Внимание', 'Ошибка: $aArray не является маасивом')
    If NOT $iEnd Then $iEnd = UBound($aArray)-1
    MsgBox(48, 'Инфо', 'В массиве всего элементов: ' & (UBound($aArray)-1) & @CRLF & 'Перебор массива с: ' & $iStart & ' по: ' & $iEnd)
    Local $i
    For $i=$iStart To $iEnd
        MsgBox(0, 'Ввод данных', 'i: ' & $i)
        _GUICtrlListView_AddItem($hList, $aArray[$i])
    Next
EndFunc

Func WM_NOTIFY($hWnd, $iMsg, $iwParam, $ilParam)
    #forceref $hWnd, $iMsg, $iwParam
    Local $hWndFrom, $iIDFrom, $iCode, $tNMHDR, $hWndListView, $tInfo
;~  Local $tBuffer
    $hWndListView = $iwParam
    If Not IsHWnd($hWndListView) Then $hWndListView = GUICtrlGetHandle($hWndListView)

    $tNMHDR = DllStructCreate($tagNMHDR, $ilParam)
    $hWndFrom = HWnd(DllStructGetData($tNMHDR, "hWndFrom"))
    $iIDFrom = DllStructGetData($tNMHDR, "IDFrom")
    $iCode = DllStructGetData($tNMHDR, "Code")
    Switch $hWndFrom
        Case $hWndListView
            Switch $iCode
                Case $NM_CLICK
                    Local $iIndex = _GUICtrlListView_GetSelectedIndices($hWndListView)
                    Local $sText = _GUICtrlListView_GetItemText($hWndListView, $iIndex)
                    Switch $iwParam
                        Case $clientIDs
                            _GetClientData($sText)
                        Case $rcvrAccs
                            _GetAccessData($sText)
                    EndSwitch
            EndSwitch
    EndSwitch
    Return $GUI_RUNDEFMSG
EndFunc   ;==>WM_NOTIFY

Func _GetClientData($sText)
    MsgBox(0, 'Client выбранно:', $sText)
;~  Сформировать нужный SELECT запрос для базы:
    Local $aResult = _SQL_GetData('127.0.0.1', 'root', 'GsM2562r', 'chat', 'SELECT DISTINCT ClientID FROM hist')
    GUICtrlSetData($results, _ArrayToString($aResult, 1, UBound($aResult), @CRLF))
EndFunc

Func _GetAccessData($sText)
    MsgBox(0, 'Access выбранно:', $sText)
;~  Сформировать нужный SELECT запрос для базы:
    Local $aResult = _SQL_GetData('127.0.0.1', 'root', 'GsM2562r', 'chat', 'SELECT DISTINCT rcvrAccs FROM hist')
    GUICtrlSetData($results, _ArrayToString($aResult, 1, UBound($aResult), @CRLF))
EndFunc

-------
Мысли-читатель сломался, может подробней расскажите?
А где исходный код? Или мы стихи обсуждаем?! )) Настройки темы > Решено ?


Последний раз редактировалось proxy, 08-07-2009 в 10:04.


Отправлено: 09:48, 08-07-2009 | #12


Новый участник


Сообщения: 49
Благодарности: 0

Профиль | Отправить PM | Цитировать



вообщем вышло сообщение: в массиве всего элементов 4, перебор элементов с 1 по 4
следующее сообщение: ввод данных i=1 и после него ошибка:
Array variable has incorrect number of subscripts or subscript dimension range exceeded.:
_GUICtrlListView_AddItem($hList, $aArray[$i])
_GUICtrlListView_AddItem($hList, ^ ERROR
>Exit code: 1

Отправлено: 11:04, 08-07-2009 | #13


Аватара для proxy

Старожил


Сообщения: 460
Благодарности: 152

Профиль | Отправить PM | Цитировать


Цитата Space-06:
вообщем вышло сообщение: в массиве всего элементов 4, перебор элементов с 1 по 4
следующее сообщение: ввод данных i=1 и после него ошибка:
Array variable has incorrect number of subscripts or subscript dimension range exceeded.:
_GUICtrlListView_AddItem($hList, $aArray[$i])
_GUICtrlListView_AddItem($hList, ^ ERROR
>Exit code: 1 »
очень . очень . странный . тут . массив...который передается
хз, хз. поэксперементирую на своих базах, чуть позже

Странно, что ошибка в функции, а не результат её выполнения.

-------
Мысли-читатель сломался, может подробней расскажите?
А где исходный код? Или мы стихи обсуждаем?! )) Настройки темы > Решено ?


Последний раз редактировалось proxy, 08-07-2009 в 21:29.


Отправлено: 13:30, 08-07-2009 | #14


Новый участник


Сообщения: 49
Благодарности: 0

Профиль | Отправить PM | Цитировать


Знаю что грамоздко может получится, я вот что еще пытаюсь надумать, а если
$clientIDs и $rcvrAccs - сформировать в xml из MySQL и с ними уже эксперементировать.

может что и выйдет ...

Отправлено: 09:11, 03-08-2009 | #15


Аватара для SyDr

Старожил


Сообщения: 215
Благодарности: 62

Профиль | Отправить PM | Цитировать


Код: Выделить весь код
Func _ArrayToList($hList, $aArray, $iStart=0, $iEnd=0)
	If NOT $iEnd Then $iEnd = UBound($aArray)-1
	Local $i
	For $i=$iStart To $iEnd
		MsgBox(4096, "", $iStart & " " & $iEnd & @CRLF & $i & " " & $aArray[$i])
		_GUICtrlListView_AddItem($hList, $aArray[$i])
	Next
EndFunc
Сообщение можно скопировать с помощью Ctrl+C
И покажи заодно что выводит _ArrayDisplay($gg)

-------

"Что мы думаем, знаем или во что верим в конце концов не так уж и важно.
Важно лишь то, что мы делаем."
Джон Раскин


Отправлено: 10:21, 03-08-2009 | #16


Новый участник


Сообщения: 49
Благодарности: 0

Профиль | Отправить PM | Цитировать


Сообщение
Цитата SyDr:
MsgBox(4096, "", $iStart & " " & $iEnd & @CRLF & $i & " " & $aArray[$i]) »
не вывелось ошибка:
Array variable has incorrect number of subscripts or subscript dimension range exceeded.:
MsgBox(4096, "", $iStart & " " & $iEnd & @CRLF & $i & " " & $aArray[$i])
MsgBox(4096, "", $iStart & " " & $iEnd & @CRLF & $i & " " & ^ ERROR
>Exit code: 1 Time: 2.142

_ArrayDisplay($gg) выводит все как надо:
Row Col0
[0] ClientID
[1] Elpanov
[2] Debb

Отправлено: 21:30, 03-08-2009 | #17


Аватара для SyDr

Старожил


Сообщения: 215
Благодарности: 62

Профиль | Отправить PM | Цитировать


Код: Выделить весь код
Func _ArrayToList($hList, $aArray, $iStart=0, $iEnd=0)
	If NOT $iEnd Then $iEnd = UBound($aArray)-1
	Local $i
	For $i=$iStart To $iEnd
		MsgBox(4096, "", $iStart & " " & $iEnd & @CRLF & $i)
		_GUICtrlListView_AddItem($hList, $aArray[$i])
	Next
EndFunc
А теперь что выводит прямо перед ошибкой?

-------

"Что мы думаем, знаем или во что верим в конце концов не так уж и важно.
Важно лишь то, что мы делаем."
Джон Раскин


Отправлено: 22:53, 03-08-2009 | #18


Новый участник


Сообщения: 49
Благодарности: 0

Профиль | Отправить PM | Цитировать


Вывел _ArrayDisplay($gg) и
MsgBox:
0 2
0

Отправлено: 23:04, 03-08-2009 | #19


Аватара для SyDr

Старожил


Сообщения: 215
Благодарности: 62

Профиль | Отправить PM | Цитировать


Код: Выделить весь код
Func _ArrayToList($hList, $aArray, $iStart=0, $iEnd=0)
	If NOT $iEnd Then $iEnd = UBound($aArray)-1
	Local $i
	For $i=$iStart+1 To $iEnd
		_GUICtrlListView_AddItem($hList, $aArray[$i])
	Next
EndFunc
Чем является $gg[0]?
Я не могу понять, почему он ругается на нулевой элемент массива.
Это... ClientID должно добавлятся в ListView?

-------

"Что мы думаем, знаем или во что верим в конце концов не так уж и важно.
Важно лишь то, что мы делаем."
Джон Раскин


Отправлено: 23:24, 03-08-2009 | #20



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » AutoIt » Вопрос по GUI - GUICtrlSetData

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
[решено] Вопрос по GUI DenNC AutoIt 15 28-06-2009 21:28
[решено] Вопрос по GUI FlatX007 AutoIt 5 22-05-2009 16:17
Не работает GUI после выхода другова GUI sashadeg AutoIt 3 15-05-2009 22:03
[решено] [GUI] Вопрос с отображением формы и циклом D_Master AutoIt 4 05-03-2009 19:20
c++ с gui sad koder Программирование и базы данных 3 16-06-2004 08:51




 
Переход