Что нового

Как в GUI отобразить результат запроса _SQLite_Exec, с удобной прокруткой

labudator

Новичок
Сообщения
25
Репутация
0
есть база SQLite. Я сделал простое окошко - там одно поле (Edit) и одна кнопка "поиск". и один ListwView.

я хочу при нажатии на кнопку выполнять запрос SQL в соответствии с тем что введено в поле ввода. ну все просто.

вот как мне вывести в лист вью часть всего запроса - чтоб можно было прокручивать? может есть какие готовые *.au3 которые можно подключить такой штуке? или создавать базу в памяти и подключать ListView к ней? вообще есть ли возможность просто подключить таблицу или результат запроса к ListView или придется построчно самому заполнять его
 

Вложения

  • Screenshot_1.png
    Screenshot_1.png
    9.8 КБ · Просмотры: 17
Автор
L

labudator

Новичок
Сообщения
25
Репутация
0
я к тому что там будет очень много данных, а гриду надо отобразить только несколько - те строки что влезают в него.
вот как это оптимизировать?
 
A

Alofa

Гость
- Приведите пример GUI
- Приведите пример возвращаемых данных
- Пример что ищите
- Пример что хотите получить в итоге.
 

ra4o

AutoIT Гуру
Сообщения
1,165
Репутация
246
вообще есть ли возможность просто подключить таблицу или результат запроса к ListView или придется построчно самому заполнять его
Прочитать всю таблицу в массив , масиив откорректировать по своему желанию и записать массив в ListwView.
 
A

Alofa

Гость
labudator сказал(а):
... как мне вывести в лист вью часть всего запроса - чтоб можно было прокручивать?..
labudator сказал(а):
... гриду надо отобразить только несколько - те строки что влезают в него...
Ничего не понятно.
 
Автор
L

labudator

Новичок
Сообщения
25
Репутация
0
прошу прощения, попробую объяснить.

во первых вот код


Код:
#include <StaticConstants.au3>
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
#Include <GuiButton.au3>
#include <GuiListView.au3>
#include <EditConstants.au3>
#include <SQLite.au3>
#include <SQLite.dll.au3>

$FORM1 = GUICreate("Пои Деталей",555,457,-1,-1,-1,-1)
$idListview = GUICtrlCreatelistview("Имя Детали|Путь к файлу|Имя файла",20,134,512,297,-1,BitOr($LVS_EX_GRIDLINES,$WS_EX_CLIENTEDGE))
GUICtrlCreateGroup("Введите имя детали",20,5,512,119,-1,-1)
GUICtrlSetBkColor(-1,"0xF0F0F0")
$Edit1 = GUICtrlCreateInput("",40,40,471,22,-1,$WS_EX_CLIENTEDGE)
$SearchButton = GUICtrlCreateButton("Поиск",220,80,100,30,-1,-1)


GUISetState(@SW_SHOW,$Form1) ; start main form
Local $SearchData = ''
Local $sql = ''
Global $RowCount = 0
Global $ColumnCount =0
While 1
	$nMsg = GUIGetMsg()
	Switch $nMsg
		Case $GUI_EVENT_CLOSE
			Exit
		Case $SearchButton
						
			_SQLite_Startup()
			_SQLite_Open(@ScriptDir & "\database.db")
			_SQLite_Exec (-1,$sql)
			$SearchData = GUICtrlRead($Edit1)	
			
			$sql = ""																			& _
				"SELECT [main].[PARTS].[part_name],"											& _
				"[main].[LST_FILES].[file_name],"												& _
				"[main].[LST_FILES].[file_path]"												& _
				"FROM [main].[LST_FILES]"														& _
				"INNER JOIN [main].[parts_and_file_assignment] ON [main].[LST_FILES].[file_id]" & _
				"= [main].[parts_and_file_assignment].[file_id]"								& _
				"INNER JOIN [main].[PARTS] ON [main].[PARTS].[part_id] ="						& _
				"[main].[parts_and_file_assignment].[part_id]" 
			
			
			_SQLite_Open(@ScriptDir & "\database.db")	
			_SQLite_Exec (-1,$sql,"_cb")	; эта функциф будет выполнена для каждого ряда в запросе 
			_SQLite_Close()
			_SQLite_Shutdown()
		
	EndSwitch
WEnd

Func _cb($s) 
	
		_GUICtrlListView_AddItem($idListview, $s[0], $RowCount)
		_GUICtrlListView_AddSubItem($idListview, $RowCount, $s[1], 1, 1)
		_GUICtrlListView_AddSubItem($idListview, $RowCount, $s[2], 2, 2)

		$RowCount = $RowCount +1
    ;заполняем ListView. В него забивается [b]100050000000000000[/b] значений. это во первых долго, во вторых
	;занимает память и в третих его еще надо будет как то очищать после каждого запроса.
   
EndFunc   ;==>_cb

Значит _SQLite_Exec будет кормить функцию _cb($s) массивами типа $s[3], где каждый элемент массива это текст который надо впихнуть в каждую ячейку отдельно взятого ряда ListView.

Но! мне не надо запихивать сразу ВСЕ строки в ListView. Ведь он все равно отображает только несколько десятков строк.

Я хочу получить (или может готовые есть?) элемент интерфейса для просмотра таких вот табличных данных. но чтобы не грузило проц. и память




Добавлено:
Сообщение автоматически объединено:

вот кто писал приложения работающие с базами данных тот поймет. это элемент гуя который используется в каждом таком приложении. типа грид к которому подключаешь источник данных, а задача грида отобразить пользователю только какой то кусок.

я надеюсь на то что этот велосипед уже где то кем то изобретен иначе я так понимаю мне придется каждый раз грузить всю таблицу, весь результат SQL запроса в какой то контейнер (ну там массив или база данных SQLite но уже в памяти) и при прокрутке лист вью - выгружать/подгружать очередной ряд. ну не может быть чтоб такого никто не делал??

вобщем кто писал что нибудь работающее с БД, вы же понимете что я хочу :( хелп




Добавлено:
Сообщение автоматически объединено:

вот
 

Вложения

  • Screenshot_1.png
    Screenshot_1.png
    9.8 КБ · Просмотры: 17
Верх