Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2012.04.08;
Скачать: CL | DM;

Вниз

програмное заполнение Tibtable.locate   Найти похожие ветки 

 
rilmeer ©   (2011-12-19 18:55) [0]

Нужно передать значения через переменные в
ibTable1.Locate(ТУТ, VarArrayOf([ТУТ]),   [loCaseInsensitive, loPartialKey])
я вставил туда 2 стринговые переменные. компилятор пропускает, но поиск не работает. вылазиют динамические ошибки.
в чём моя ошибка?

* строки имеют нужный вид типо "edit1.text,edit2.text"
** ошибки различаются в зависимости от вариаций задействованых Edit"ов (они должны браться в расчёт при активной галочке рядом)
*** я практически не знаю SQL такчто сразу в тот лес плиз не посылайте (типо юзай SQLQuery и тд)


 
И. Павел ©   (2011-12-19 19:56) [1]


> вылазиют динамические ошибки.

Приведите текст ошибок.

ibTable1.Locate(ТУТ, VarArrayOf([ТУТ]),
В этом параметре нужно указать список полей для поиска, разделенных точкой с запятой а в VarArrayOf - соответствующее число параметров.

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


 
Ega23 ©   (2011-12-19 19:57) [2]


> * строки имеют нужный вид типо "edit1.text,edit2.text"


Приведи полный код вызова Locate


 
rilmeer ©   (2011-12-19 20:09) [3]

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" ".


 
И. Павел ©   (2011-12-19 20:18) [4]


> rilmeer ©   (19.12.11 20:09) [3]

Если вы ищете по одному полю, не используйте VarArrayOf. Т.е. замените
VarArrayOf([koi2])
на
koi2


 
И. Павел ©   (2011-12-19 20:20) [5]


> rilmeer ©   (19.12.11 20:09) [3]

[4] - я ошибся.
Вы koi2 не правильно набираете. У вас должно быть [koi21, koi22, koi23] и т.д. А вы передаете единственный элемент в Vararray.


 
И. Павел ©   (2011-12-19 20:23) [6]

Как вариант: создайте динамический массив "Values:  array af Variant". В зависимости от checkbox-ов, набирайте в него значения. А в VarArrayOf передавайте именно этот массив. Вот ссылки в помощь:
http://docwiki.embarcadero.com/RADStudio/XE2/en/Using_Locate
http://valera.asf.ru/delphi/help/name.php?name=VarArrayOf


 
rilmeer ©   (2011-12-19 20:23) [7]

в том и соль что значение полей не фиксировано, пользователь сам галочками выбирает количество полей


 
rilmeer ©   (2011-12-19 20:24) [8]

опаздал с сообщением) .попробую как написали


 
rilmeer ©   (2011-12-19 20:50) [9]

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"


 
Плохиш ©   (2011-12-19 20:51) [10]


> И. Павел ©   (19.12.11 20:23) [6]
> Как вариант: создайте динамический массив "Values:  array
> af Variant". В зависимости от checkbox-ов, набирайте в него
> значения. А в VarArrayOf передавайте именно этот массив.
>  Вот ссылки в помощь:
>

Это не вариант, единственное верное решение поставленной задачи.
Ты посмотри, что он в свою koi2 пихает.

> rilmeer ©   (19.12.11 20:09) [3]
>

В качестве второго параметра должен передаваться массив значений, а не список твоих переменных. Справку бы чтоли почитал, для начала, хотя чëй-то я, всем же известно, что справки для лохов писаны.


 
Плохиш ©   (2011-12-19 20:55) [11]


> rilmeer ©   (19.12.11 20:50) [9]

Переменную типа array of Variant описать, слабо?


 
rilmeer ©   (2011-12-19 21:10) [12]

Павел, спасибо, правильно подсказал- заработало.
Плохиш выпились с темы.



Страницы: 1 вся ветка

Текущий архив: 2012.04.08;
Скачать: CL | DM;

Наверх




Память: 0.5 MB
Время: 0.009 c
15-1323418760
_Андрей_
2011-12-09 12:19
2012.04.08
Наложение прозрачного изображения на сканируемые документы


2-1324104343
ШК
2011-12-17 10:45
2012.04.08
Обмен данными между приложениями через интернет


15-1323234832
Генсек
2011-12-07 09:13
2012.04.08
Законность. Программа использует другую программу.


2-1324146298
SQLEX
2011-12-17 22:24
2012.04.08
Почему? Value assigned to ... never used


15-1323289803
Юрий
2011-12-08 00:30
2012.04.08
С днем рождения ! 8 декабря 2011 четверг