Что нового

Вывод ячейки из базы SQLite

VasiliyRS

Новичок
Сообщения
7
Репутация
0
Версия AutoIt: 3.3.6.1

Описание:
Добрый вечер. Имеется база аналогичная по структуре скриншоту ниже:

Поле имя выводится в виде выпадающего списка, поле год и/или город будут выбираться в виде чекбокса. Как должно работать: выбираем из списка имя, отмечаем чекбокс и выводится сообщение с именем и соответствующим значением поля год и/или город:


Нужно помощь с:
* чекбокс и вывод поля(полей) соответствующих выбранному чекбоксу и значения поля "имя"

Вот, что уже есть:
[spоiler]
Код:
#include <ComboConstants.au3>
#include <GUIConstantsEx.au3>
#include <StaticConstants.au3>
#include <WindowsConstants.au3>
#include "StringSize.au3"
#include <Constants.au3>
#include <sqlite.au3>
#include <array.au3>
Dim $hQuery, $aRow, $sMsg, $sFileDB = @ScriptDir & "\null.db", $sNameTableDB = "test", $sNameColDB = "имя"
GUISetState(@SW_SHOW)

GUICreate('0111011100', 600, 500)
$left_lv = GUICtrlCreateCombo('Выбери имя', 10, 10, 550, 280, BitOr($CBS_DROPDOWNLIST, $WS_VSCROLL))
$n2 = GUICtrlCreateButton("Просмотреть данные", 10, 410, 450)

_SQLite_Startup()
$dbn = _SQLite_Open('null.db')

_SQlite_Query (-1, "SELECT " & $sNameColDB & " FROM " & $sNameTableDB & ";", $hQuery)

While _SQLite_FetchData ($hQuery, $aRow) = $SQLITE_OK
    GUICtrlSetData($left_lv, $aRow[0] & "|")
WEnd

_SQLite_Close()
_SQLite_Shutdown()

GUICtrlSetState(-1, $GUI_DROPACCEPTED)   ; to allow drag and dropping
    GUISetState()
    ; Run the GUI until the dialog is closed
    Do
        $msg = GUIGetMsg()
        If $msg = $n2 Then
			  MsgBox(0, "Вы выбрали :", GUICtrlRead($left_lv) & @LF & "Год рождения: ") 
			  EndIf
		  Until $msg = $GUI_EVENT_CLOSE
[/spоiler]
 

madmasles

Модератор
Глобальный модератор
Сообщения
7 790
Репутация
2 320
Предупреждение За нарушение правил форума (пункт В.11):
Любые отрывки AutoIt кода необходимо заключать в тег [autoit]
(подробнее), а обычный код соответственно в тег [code]
(подробнее). Также большие выдержки текста помещайте под тег [spoiler]
(подробнее), там где это поддерживается естественно. Как в случае с названием темы, также короткое и эргономичное сообщение привлекает больше внимания, и шансы на получение конкретного ответа увеличиваются.


С уважением, Модератор раздела.





Вы бы прикрепили тестовый пример null.db.
 

madmasles

Модератор
Глобальный модератор
Сообщения
7 790
Репутация
2 320
VasiliyRS,
Попробуйте так.
Код:
#include <ComboConstants.au3>
#include <GUIConstantsEx.au3>
#include <StaticConstants.au3>
#include <SQLite.au3>
#include <SQLite.dll.au3>

;без проверок на ошибки
Global $aNames, $iRows, $iColumns, $sFileDB = @ScriptDir & '\null.db', $sTable = 'test', _
		$sComboNameColumn, $sComboFirstColumn, $sName
_SQLite_Startup()
_SQLite_Open($sFileDB)

_SQLite_GetTable2d(-1, 'SELECT * FROM ' & $sTable & ' WHERE ROWID = 0;', $aNames, $iRows, $iColumns)
$sName = $aNames[0][0]
For $i = 0 To $iColumns - 1
	$sComboNameColumn &= $aNames[0][$i] & '|'
Next
$sComboNameColumn &= 'All'

_SQLite_GetTable2d(-1, 'SELECT ' & $aNames[0][0] & ' FROM ' & $sTable & ';', $aNames, $iRows, $iColumns)
For $i = 1 To $iRows
	$sComboFirstColumn &= $aNames[$i][0] & '|'
Next

$hGui = GUICreate('Test', 230, 140)
GUICtrlCreateLabel('Имя для поиска', 10, 5, 100, 15, $SS_CENTER)
$nComboWhatSearch = GUICtrlCreateCombo('', 10, 20, 100, 20, $CBS_DROPDOWNLIST)
GUICtrlSetData(-1, $sComboFirstColumn)
GUICtrlCreateLabel('Найти колонки', 120, 5, 100, 15, $SS_CENTER)
$nComboColumn = GUICtrlCreateCombo('', 120, 20, 100, 20, $CBS_DROPDOWNLIST)
GUICtrlSetData(-1, $sComboNameColumn)
$nLabelResult = GUICtrlCreateLabel('', 10, 60, 210, 20, BitOR($SS_CENTERIMAGE, $SS_CENTER))
GUICtrlSetBkColor(-1, 0xFFFFFF)
$nButtonSearch = GUICtrlCreateButton('Search', 65, 100, 100, 30)
GUISetState()

While 1
	Switch GUIGetMsg()
		Case $GUI_EVENT_CLOSE
			_SQLite_Close()
			_SQLite_Shutdown()
			Exit
		Case $nButtonSearch
			$sWhatSearch = ''
			$sColumn = ''
			$sResult = ''
			GUICtrlSetData($nLabelResult, '')
			$sWhatSearch = GUICtrlRead($nComboWhatSearch)
			If Not $sWhatSearch Then ContinueLoop
			$sColumn = GUICtrlRead($nComboColumn)
			If Not $sColumn Then ContinueLoop
			If $sColumn == 'All' Then $sColumn = '*'
			_SQLite_GetTable2d(-1, 'SELECT ' & $sColumn & ' FROM ' & $sTable & ' WHERE ' & $sName & ' = "' & _
					$sWhatSearch & '";', $aNames, $iRows, $iColumns)
			For $i = 0 To $iColumns - 1
				$sResult &= $aNames[1][$i] & '|'
			Next
			GUICtrlSetData($nLabelResult, StringTrimRight($sResult, 1))
	EndSwitch
WEnd
 

XpycT

Скриптер
Сообщения
380
Репутация
132
Мой Вариант :
Код:
#include <ComboConstants.au3>
#include <GUIConstantsEx.au3>
#include <StaticConstants.au3>
#include <SQLite.au3>
#include <SQLite.dll.au3>

Global $sFileDB = @ScriptDir & '\null.db', $sTable = 'test'

_SQLite_Startup()
_SQLite_Open($sFileDB)

$hGui = GUICreate('Test', 230, 140)
GUICtrlCreateLabel('Имя для поиска', 10, 5, 100, 15, $SS_CENTER)
$nComboWhatSearch = GUICtrlCreateCombo('', 10, 20, 100, 20, $CBS_DROPDOWNLIST)
_GetNames() ; Получаем список имен, и добавляем их в ComboBox

GUICtrlCreateLabel('Найти колонки', 120, 5, 100, 15, $SS_CENTER)
$nComboColumn = GUICtrlCreateCombo('', 120, 20, 100, 20, $CBS_DROPDOWNLIST)
_GetColumns() ; Получаем список колонок, и добавляем их в ComboBox

$nLabelResult = GUICtrlCreateLabel('', 10, 60, 210, 20, BitOR($SS_CENTERIMAGE, $SS_CENTER))
GUICtrlSetBkColor(-1, 0xFFFFFF)

$nButtonSearch = GUICtrlCreateButton('Search', 65, 100, 100, 30)

GUISetState()

While 1
    Switch GUIGetMsg()
        Case $GUI_EVENT_CLOSE
            _SQLite_Close()
            _SQLite_Shutdown()
            Exit
        Case $nButtonSearch
					_Search()
    EndSwitch
WEnd

Func _GetNames()
	Local $hQuery, $aRow, $aRet = ""

	_SQLite_Query(-1, "SELECT [имя] FROM " & $sTable, $hQuery)

	While _SQLite_FetchData($hQuery, $aRow, False, False) = $SQLITE_OK ; Read Out the next Row
		$aRet &= $aRow[0] & "|"
	WEnd
	$aRet &= "All"

	GUICtrlSetData($nComboWhatSearch, $aRet)
EndFunc   ;==>_GetNames

Func _GetColumns()
	Local $hQuery, $aRow, $aRet = ""

	_SQLite_Query(-1, "pragma table_info(" & $sTable & ")", $hQuery)

	While _SQLite_FetchData($hQuery, $aRow, False, False) = $SQLITE_OK ; Read Out the next Row
		$aRet &= $aRow[1] & "|"
	WEnd
	$aRet = StringTrimRight($aRet, 1)

	GUICtrlSetData($nComboColumn, $aRet)
EndFunc   ;==>_GetNames

Func _Search()
	Local $hQuery, $aRow, $aRet = ""

	GUICtrlSetData($nLabelResult, "")

	$sColumn = "[" & GUICtrlRead($nComboColumn) & "]"
	If $sColumn = "[]" Then $sColumn = "*"

	$sWhatSearch = GUICtrlRead($nComboWhatSearch)
	If Not $sWhatSearch Then Return

	_SQLite_Query(-1, "SELECT " & $sColumn & " FROM " & $sTable & " WHERE [имя] = '" & $sWhatSearch & "'", $hQuery)

	While _SQLite_FetchData($hQuery, $aRow, False, False) = $SQLITE_OK ; Read Out the next Row
		If UBound($aRow) = 1 Then
			$aRet &= $aRow[0] & "|"
		Else
			For $r = 0 To UBound($aRow, 1) - 1
				$aRet &= $aRow[$r] & "|"
			Next
		EndIf
	WEnd
	$aRet = StringTrimRight($aRet, 1)

	GUICtrlSetData($nLabelResult, $aRet)
EndFunc
 
Автор
V

VasiliyRS

Новичок
Сообщения
7
Репутация
0
madmasles и XpycT, спасибо Вам огромное.
 
Верх