Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2012.04.08;
Скачать: [xml.tar.bz2];

Вниз

програмное заполнение 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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.47 MB
Время: 0.102 c
2-1324044551
Chuck Bass
2011-12-16 18:09
2012.04.08
проверить пуста ли строка


15-1322944202
Юрий
2011-12-04 00:30
2012.04.08
С днем рождения ! 4 декабря 2011 воскресенье


1-1290932751
skeef
2010-11-28 11:25
2012.04.08
динамическое создание пиктограммы


2-1324306539
rilmeer
2011-12-19 18:55
2012.04.08
програмное заполнение Tibtable.locate


15-1323415640
Ega23
2011-12-09 11:27
2012.04.08
Для чего нужен Synchronzie





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский