-
Нужно передать значения через переменные в ibTable1.Locate(ТУТ, VarArrayOf([ТУТ]), [loCaseInsensitive, loPartialKey]) я вставил туда 2 стринговые переменные. компилятор пропускает, но поиск не работает. вылазиют динамические ошибки. в чём моя ошибка?
* строки имеют нужный вид типо 'edit1.text,edit2.text' ** ошибки различаются в зависимости от вариаций задействованых Edit'ов (они должны браться в расчёт при активной галочке рядом) *** я практически не знаю SQL такчто сразу в тот лес плиз не посылайте (типо юзай SQLQuery и тд)
-
> вылазиют динамические ошибки.
Приведите текст ошибок.
ibTable1.Locate(ТУТ, VarArrayOf([ТУТ]), В этом параметре нужно указать список полей для поиска, разделенных точкой с запятой а в VarArrayOf - соответствующее число параметров.
Если вы ищете по одному полю, то VarArray создавать не нужно. Два первых аргумента - это название поля и искомое значение.
-
> * строки имеют нужный вид типо 'edit1.text,edit2.text'
Приведи полный код вызова Locate
-
if checkbox1.Checked=true then begin koi1:=koi1+'IMA;'; koi2:=koi2+'edit1.text,'; end; if checkbox2.Checked=true then begin koi1:=koi1+'FAMINILA;'; koi2:=koi2+'edit2.text,'; end; if checkbox3.Checked=true then begin koi1:=koi1+'OTCHESTVO;'; koi2:=koi2+'edit3.text,'; end; if checkbox4.Checked=true then begin koi1:=koi1+'OTDEL;'; koi2:=koi2+'edit4.text,'; end; if checkbox5.Checked=true then begin koi1:=koi1+'DOLSHNOST;'; koi2:=koi2+'edit5.text,'; end; if checkbox6.Checked=true then begin koi1:=koi1+'DATA'; koi2:=koi2+'DBDateTimeEditEh2.Value'; end; label4.Caption:=koi1; label5.Caption:=koi2; if not ibTable1.Locate(koi1, VarArrayOf([koi2]), [loCaseInsensitive, loPartialKey]) then ShowMessage('Не найдено, либо ошибка ввода.');
я конечно понимаю что сделано топорно и может нарушится синтаксис строки (код я накидал чтобы быстро проверить работоспособность), но если истинны все чекбоксы, то строка должна получаться правильного вида.
если активны все чекбоксы, то вылазиет вотэто " Project Project1.exe raised exception class EVariantBadIndexError with message 'Variant of safe array index out of bounds' ".
-
> rilmeer © (19.12.11 20:09) [3]
Если вы ищете по одному полю, не используйте VarArrayOf. Т.е. замените VarArrayOf([koi2]) на koi2
-
> rilmeer © (19.12.11 20:09) [3]
[4] - я ошибся. Вы koi2 не правильно набираете. У вас должно быть [koi21, koi22, koi23] и т.д. А вы передаете единственный элемент в Vararray.
-
-
в том и соль что значение полей не фиксировано, пользователь сам галочками выбирает количество полей
-
опаздал с сообщением) .попробую как написали
-
VarArrayOf(const Values: array af Variant): Variant; вот так компилится не хочет.
V := VarArrayCreate([0,1], varVariant); if checkbox1.Checked=true then begin koi1:=koi1+'IMA;'; v[0]:=edit1.text; end; if checkbox2.Checked=true then begin koi1:=koi1+'FAMINILA'; v[1]:=edit2.text; end; а вот так после компиляции вылазиет опять 'Variant of safe array index out of bounds'
-
> И. Павел © (19.12.11 20:23) [6] > Как вариант: создайте динамический массив "Values: array > af Variant". В зависимости от checkbox-ов, набирайте в него > значения. А в VarArrayOf передавайте именно этот массив. > Вот ссылки в помощь: >
Это не вариант, единственное верное решение поставленной задачи. Ты посмотри, что он в свою koi2 пихает.
> rilmeer © (19.12.11 20:09) [3] >
В качестве второго параметра должен передаваться массив значений, а не список твоих переменных. Справку бы чтоли почитал, для начала, хотя чëй-то я, всем же известно, что справки для лохов писаны.
-
> rilmeer © (19.12.11 20:50) [9]
Переменную типа array of Variant описать, слабо?
-
Павел, спасибо, правильно подсказал- заработало. Плохиш выпились с темы.
|