Конференция "Начинающим" » програмное заполнение Tibtable.locate [D7, IB6.x]
 
  • rilmeer © (19.12.11 18:55) [0]
    Нужно передать значения через переменные в
    ibTable1.Locate(ТУТ, VarArrayOf([ТУТ]),   [loCaseInsensitive, loPartialKey])
    я вставил туда 2 стринговые переменные. компилятор пропускает, но поиск не работает. вылазиют динамические ошибки.
    в чём моя ошибка?

    * строки имеют нужный вид типо 'edit1.text,edit2.text'
    ** ошибки различаются в зависимости от вариаций задействованых Edit'ов (они должны браться в расчёт при активной галочке рядом)
    *** я практически не знаю SQL такчто сразу в тот лес плиз не посылайте (типо юзай SQLQuery и тд)
  • И. Павел © (19.12.11 19:56) [1]

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

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

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

    Если вы ищете по одному полю, то VarArray создавать не нужно. Два первых аргумента - это название поля и искомое значение.
  • Ega23 © (19.12.11 19:57) [2]

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


    Приведи полный код вызова Locate
  • rilmeer © (19.12.11 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' ".
  • И. Павел © (19.12.11 20:18) [4]

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

    Если вы ищете по одному полю, не используйте VarArrayOf. Т.е. замените
    VarArrayOf([koi2])
    на
    koi2
  • И. Павел © (19.12.11 20:20) [5]

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

    [4] - я ошибся.
    Вы koi2 не правильно набираете. У вас должно быть [koi21, koi22, koi23] и т.д. А вы передаете единственный элемент в Vararray.
  • И. Павел © (19.12.11 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 © (19.12.11 20:23) [7]
    в том и соль что значение полей не фиксировано, пользователь сам галочками выбирает количество полей
  • rilmeer © (19.12.11 20:24) [8]
    опаздал с сообщением) .попробую как написали
  • rilmeer © (19.12.11 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'
  • Плохиш © (19.12.11 20:51) [10]

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

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

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

    В качестве второго параметра должен передаваться массив значений, а не список твоих переменных. Справку бы чтоли почитал, для начала, хотя чëй-то я, всем же известно, что справки для лохов писаны.
  • Плохиш © (19.12.11 20:55) [11]

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

    Переменную типа
    array of Variant

    описать, слабо?
  • rilmeer © (19.12.11 21:10) [12]
    Павел, спасибо, правильно подсказал- заработало.
    Плохиш выпились с темы.
 
Конференция "Начинающим" » програмное заполнение Tibtable.locate [D7, IB6.x]
Есть новые Нет новых   [134431   +13][b:0][p:0.001]