поэкспериментировал с Формами и Lua
заполнение ComboBox значениями из словаря при загрузке формы: (из БД
Primer)
Код:function Форма_Load( form, event )
local base_voc=CroApp.GetBank():GetVocabulary() -- получаем словари
local voc=base_voc:GetBase("AD"):GetRecordSet() -- получаем конкретный словарь
Me.combobox1:Clear() -- на всякий случай очищаем наш Control
if voc then -- проверка существования
for rec in voc.Records do -- в цикле проходим по всем записяк
local vol=rec:GetValue("Понятие") -- получаем непосредственно значение
if vol ~= "" then -- почему-то всегда появляется первым элементом пустая строка
Me.combobox1:Add(vol) -- добавляем значение в список нашего ComboBox
end
end
end
end
в текстовое поле заносим (по нажатию кнопки) каждое выбранное значение из нашего ComboBox и добавляем разделитель ";"
Код:function button1_Click( control, event )
local txt=Me.textbox1.Text
local txt=txt..Me.combobox1.SelectedItem..";"
Me.textbox1.Text=txt
end
Так как моя БД (если её можно так назвать) состоит из одной таблицы(на данный момент) с несколькими колонками:
дата ---- дата
название ---- текст
адрес ----- текст (без разбивания на состовляющие)
тэг ------ словарное, множественное
страна ------ словарное, множественное
функция создания новой записи будет такая:
Код:function button2_Click( control, event )
local base=CroApp.GetBank():GetBase("имя_БД")
local newRec=Record()
if newRec then
newRec:SetValue(2, Me.text2.Text)
newRec:SetValue(3, Me.text2.Text)
newRec:SetValue(4, Me.text2.Text)
local voc_1=string.split(Me.textbox1.Text, ";")
local voc_1#=table.remove(voc_1)
local voc_2=string.split(Me.textbox2.Text, ";")
local voc_2#=table.remove(voc_2)
NewRec:SetValue(5, voc_1)
NewRec:SetValue(6, voc_2)
base:AddRecord(newRec)
end
end
всё записывается нормально, специально проверял тип словарного поля - оно получается
tableу меня вопрос: т.к. я использую разделитель ";" для формирования строки словаря, то при разделении у меня получается последнее значение нулевой длинны. Я выбрал вариант его удаления
table.remove и вот оно как-то странно работает, пришлось
костыль городить. Почему так?
А ещё код
Me.NewRecord() нужен, если я форму создаю из полей БД? Я не до конца понял. А если я форму полностью создаю свою, то надо делать как в моих примерах?
Так же не совсем понял как включить проверку правильности словарного поля (если юзер абракадабру вдруг введет)
Спасибо!