:: Visual Foxpro, Foxpro for DOS
Re: Вывод БД на экран по реквизитам содержащихся в ListBox.
ptaxa888
Автор

Сообщений: 61
Дата регистрации: 07.03.2018
Igor Korolyov
ptaxa888
1. Формирование запроса по всем полям (вывод всех полей но с фильтром по одному из полей) поиск организован через LOCATE
Locate не делает фильтрации - он лишь перемещает указатель на первую подходящую запись - в гриде/бровзе/при экспорте всё равно будут все записи. Фильтр можно сделать по старому, через SET FILTER или опции FOR в соответствующих командах вывода (BROWSE/EXPORT/COPY TO), но лучше запросом с WHERE - потом такой отфильтрованный курсор уже можно показывать/экспортировать - всё что угодно делать.
ptaxa888
Как построить условие &lcWhere когда оно имеет следующий вид:
Условие: lcWhere=[ where a+c+b]
Так и построить.
fieldName = "tbl1.someString"
operator = ">="
filterValue = "Иванов"
lcWhere = m.fieldName + m.operator + "m.filterValue"
*для проверки что получилось "tbl1.someString>=m.filterValue"
? m.lcWhere
* потом в запросе
SELECT ... FROM ... WHERE &lcWhere INTO CURSOR ...
Можно и без переменных, сразу из элементов управления брать значения. Вот только для собственно искомого значения лучше всё-таки переменную сделать, куда и поместить значение, преобразовав его к тому же типу, что и поле - если поле строковое, то в переменной должна быть строка, если числовое - то число.
В принципе, конечно, можно и в строку запроса вместо + "m.filterValue" написать + "ThisForm.txtFilter.Value" - если в Value этого элемента будет обеспечен надлежащий тип данных. Но лучше всё же через промежуточную переменную работать. Главное обеспечить её видимость в строке с командой SELECT - это если вдруг строка условия, переменная со значением и сам SELECT находятся в разных методах.
Содержимое переменной при каждом запросе новая, поэтому брать ее например из thisform.text1.value кажется удобным.
Задумка какая была, не знаю есть ли правда в ней:
local cText1, cCombo2, cRekviz
cText1=Upper(alltrim(thisform.text1.value))
cCombo2=Alltrim(thisform.combo2.value)
Select Fields && курсор в котором лежит поле сравнения Fields.tblfld
Set filter to
Scan for lcheck=1
cRekviz=alltrim(Fields.tblfld)
Endscan
Set filter to lcheck=0
cWhere=[where cRekviz+combo2+text1] &&только включить преобразование всех переменных в один тип данных
cRekviz=[select «нужные поля» from «таблица» left join .... on ....] +;
&cWhere + [into cursor cZapros readwrite]
&cRekviz
Select cZapros
Browse



Исправлено 2 раз(а). Последнее : ptaxa888, 13.03.18 10:08
Ratings: 0 negative/0 positive
Re: Вывод БД на экран по реквизитам содержащихся в ListBox.
ptaxa888
Автор

Сообщений: 61
Дата регистрации: 07.03.2018
Люди подскажите одну вещь.
Организовал я в итоге эту задачу.
Единственная проблема не могу взять в кавычки значение переменной т.е
Text1=thisform.text1.value
Uslovie=thisform.combo2.value
cWhere= [where]+(cChoice.tblfld)+uslovie+text1
Вообщем нужно чтобы значение text1 бралось в кавычки ‘ИВАНОВ’
Ratings: 0 negative/0 positive
Re: Вывод БД на экран по реквизитам содержащихся в ListBox.
AndyNigmatec

Сообщений: 1573
Откуда: Волгоград
Дата регистрации: 28.06.2015
мне вот интерестно, ну ладно, опустим жуткое нагромождение при поиске фамилии... но сама логика то какая?
когда уже выбрали конкретное ФИО - нафига там "=" и выполнить запрос? в комбо то уже конкретное значение выбрано. И еще более не понятен тогда смыл "!=" ... загадки пряма )))

а по поводу кавычек = так чего сложного то

Text1=[']+thisform.text1.value+[']
Ratings: 0 negative/1 positive
Re: Вывод БД на экран по реквизитам содержащихся в ListBox.
ptaxa888
Автор

Сообщений: 61
Дата регистрации: 07.03.2018
AndyNigmatec
мне вот интерестно, ну ладно, опустим жуткое нагромождение при поиске фамилии... но сама логика то какая?
когда уже выбрали конкретное ФИО - нафига там "=" и выполнить запрос? в комбо то уже конкретное значение выбрано. И еще более не понятен тогда смыл "!=" ... загадки пряма )))

а по поводу кавычек = так чего сложного то

Text1=[']+thisform.text1.value+[']
Все эти нагромождения с IF чисто для пользователя, чтобы выскакивали Сообщения по которым можно понять где ошибка.
Супееер, спасибо))
Я все переорганизовал, без использования созданных queries.
Вечером скину как все изменилось. Все же такой избыточный бред был написан у меня до этого. Спасибо большое)
Вот только сейчас станет вопрос с как применить CTOD когда в text1 попадёт дата(D).



Исправлено 4 раз(а). Последнее : ptaxa888, 13.03.18 15:58
Ratings: 0 negative/0 positive
Re: Вывод БД на экран по реквизитам содержащихся в ListBox.
ptaxa888
Автор

Сообщений: 61
Дата регистрации: 07.03.2018
ptaxa888
Все эти нагромождения с IF чисто для пользователя, чтобы выскакивали Сообщения по которым можно понять где ошибка.
Супееер, спасибо))
Я все переорганизовал, без использования созданных queries.
Вечером скину как все изменилось. Все же такой избыточный бред был написан у меня до этого. Спасибо большое)
Вот только сейчас станет вопрос с как применить CTOD когда в text1 попадёт дата(D).
C этим разобрался.
Text1=[CTOD]+[(]+[‘]+thisform.text1.value+[‘]+[)]
Ratings: 0 negative/0 positive
Re: Вывод БД на экран по реквизитам содержащихся в ListBox.
Sawradym

Сообщений: 2244
Откуда: Винница
Дата регистрации: 15.05.2007
Text1=[CTOD(‘]+thisform.text1.value+[‘)]
Ratings: 0 negative/0 positive
Re: Вывод БД на экран по реквизитам содержащихся в ListBox.
Igor Korolyov

Сообщений: 34580
Дата регистрации: 28.05.2002
Не надо никаких кавычек. Просто сделай переменную со ЗНАЧЕНИЕМ из поля
lcFilterField = ThisForm.comboField.Value &&предполагая что там ИМЯ ПОЛЯ С АЛИАСОМ - если нет, то ищи по таблице полей соответствие и бери оттуда имя таблицы и имя поля.
lcFilterCondition = ThisForm.comboOperator.Value && предполагая что в комбо в виде строк находятся =, >, <, # и т.п.
luFilterValue = ThisForm.txtSearchText.Value
И пропиши в текст запроса, раз уж целиком весь SELECT там держишь,
lcScript = ... + " WHERE " + m.lcFilterField + m.lcFilterCondition + "m.luFilterValue " + ...

Для чисел просто проинициализируй текстбокс числом (.Value = 0), для дат - датой (.Value = {} - это пустая дата). И всё, никаких кавычек и тем более никакого г*на с CTOD не нужно


------------------
WBR, Igor
Ratings: 0 negative/0 positive
Re: Вывод БД на экран по реквизитам содержащихся в ListBox.
ptaxa888
Автор

Сообщений: 61
Дата регистрации: 07.03.2018
Igor Korolyov
Не надо никаких кавычек. Просто сделай переменную со ЗНАЧЕНИЕМ из поля
lcFilterField = ThisForm.comboField.Value &&предполагая что там ИМЯ ПОЛЯ С АЛИАСОМ - если нет, то ищи по таблице полей соответствие и бери оттуда имя таблицы и имя поля.
lcFilterCondition = ThisForm.comboOperator.Value && предполагая что в комбо в виде строк находятся =, >, <, # и т.п.
luFilterValue = ThisForm.txtSearchText.Value
И пропиши в текст запроса, раз уж целиком весь SELECT там держишь,
lcScript = ... + " WHERE " + m.lcFilterField + m.lcFilterCondition + "m.luFilterValue " + ...

Для чисел просто проинициализируй текстбокс числом (.Value = 0), для дат - датой (.Value = {} - это пустая дата). И всё, никаких кавычек и тем более никакого г*на с CTOD не нужно
Я в принципе так и сделал, но уйти от CTOD не получилось чисто из за незнания всех возможностей языка.
Это хорошее решение т.к. оно поможет мне уйти от IF и его длинного хвоста. IF применил т.к. пришлось поделить пути следования от выбранного типа переменной text1. Нужно переработать свою избыточность.
Пока сделал так, работает пока
LOCAL lcScript, cWhere, text1, text2, comb1
lcScript=''
cWhere=''
text1=[']+UPPER(ALLTRIM(thisform.text1.value))+[']
text2=[CTOD]+[(]+[']+UPPER(ALLTRIM(thisform.text1.value))+[']+[)]
uslovie=thisform.combo2.Value
comb1=ALLTRIM(thisform.combo1.value)
IF comb1=="4. Дата приказа" OR comb1=="12. Дата присвоения звания" OR comb1=="14. Дата приказа (присв. звания)";
OR comb1=="15. Присвоение очередного звания" OR comb1=="17. Дата рождения" OR comb1=="18. Дата поступления в органы";
OR comb1=="19. Hачало работы в службе" OR comb1=="20. Hазначение на должность" OR comb1=="27.2. Дата рождения (1)";
OR comb1=="27.4. Дата рождения (2)" OR comb1=="27.6. Дата рождения (3)" OR comb1=="30. Дата приказа (квалиф.зв.)";
OR comb1=="32. Дата увольнения/перемещения/" OR comb1=="35. Дата приказа (уволн./перемещ.)" OR comb1=="40. Дата выдачи паспорта";
OR comb1=="53. Дата действия ВУ" && Вот эта штукенция не нравится оч
SELECT Fields
SET FILTER TO
SCAN FOR lcheck=1
lcScript=lcScript+', '+ALLTRIM(Fields.tblfld)+' as '+ALLTRIM(Fields.falias)
ENDSCAN
SET FILTER TO lcheck=0
SELECT cChoice2
SCAN FOR lcheck=1
cWhere=[ WHERE ]+ALLTRIM(cChoice2.tblfld)+uslovie+(text2)
ENDSCAN
*MESSAGEBOX(cWhere)
ELSE
SELECT Fields
SET FILTER TO
SCAN FOR lcheck=1
lcScript=lcScript+', '+ALLTRIM(Fields.tblfld)+' as '+ALLTRIM(Fields.falias)
ENDSCAN
SET FILTER TO lcheck=0
SELECT cChoice2
SCAN FOR lcheck=1
cWhere=[ WHERE ]+ALLTRIM(cChoice2.tblfld)+uslovie+(text1)
ENDSCAN
*MESSAGEBOX(cWhere)
ENDIF
lcScript=[SELECT ic.id ]+lcScript+[ FROM ic LEFT JOIN fio ON ic.id=fio.id]+;
[ LEFT JOIN doljnost ON ic.a02=doljnost.a02]+;
[ LEFT JOIN ic!sprav sprav ON ic.a05=sprav.kod]+;
[ LEFT JOIN ic!sprav sprav_a ON ic.a06=sprav_a.kod]+;
[ LEFT JOIN ic!sprav sprav_b ON ic.a07=sprav_b.kod]+;
[ LEFT JOIN ic!sprav sprav_c ON ic.a11=sprav_c.kod]+;
[ LEFT JOIN ic!sprav sprav_d ON ic.a16=sprav_d.kod]+;
[ LEFT JOIN obraz ON ic.id=obraz.id]+;
[ LEFT JOIN deti ON ic.id=deti.id]+;
[ LEFT JOIN ic!sprav sprav_g ON ic.a26=sprav_g.kod]+;
[ LEFT JOIN ic!sprav sprav_h ON ic.a29=sprav_h.kod]+;
[ LEFT JOIN ic!sprav sprav_e ON ic.a31=sprav_e.kod]+;
[ LEFT JOIN passport ON ic.id=passport.id]+;
[ LEFT JOIN phone ON ic.id=phone.id]+;
[ LEFT JOIN avto ON ic.id=avto.id]+;
[ LEFT JOIN prava ON ic.id=prava.id]+;
[ LEFT JOIN ic!sprav sprav_f ON ic.a37=sprav_f.kod]+;
[ LEFT JOIN ic!sprav sprav_k ON ic.a39=sprav_k.kod]+;
cWhere+[ INTO CURSOR cOut READWRITE]
*MESSAGEBOX(lcScript)
&lcScript
SELECT cOut
BROWSE

К символьному полю применил, работает
text1=UPPER(ALLTRIM(thisform.text1.value))
cWhere=[ WHERE ]+ALLTRIM(cChoice2.tblfld)+uslovie+"m.text1"
А вот касаемо объяснения по уходу от CTOD ничего не понял. Пока от IF не избавился.
Может добавить дополнительное поле в курсор с указанием типа данный C или D!?
и тогда условие стороить
IF fields.tip==C
...
else
....
endif
так хотя бы уйду от ...OR1...OR2...ORn



Исправлено 3 раз(а). Последнее : ptaxa888, 14.03.18 01:44
Ratings: 0 negative/0 positive
Re: Вывод БД на экран по реквизитам содержащихся в ListBox.
of63

Сообщений: 25244
Откуда: Н.Новгород
Дата регистрации: 13.02.2008
Ты вобще не спишь )
Посмотри как выглядят даты в фоксе
? DTOC(DATE()) && вот так и выглядит дата-строка, зависит от SET DATE, как и все нижележащее
? DATE() && такой вида значения "дата" по человечески. Ее вид на твоем экране может отличаться от моего вида этой даты, это просто следствия твоих установок SET DATE и подобных. Ты можешь получить эту же строку "изображение даты" из ф-ии TRANSFORM(), она все возвращает в C-виде, как CSTR() ...вроде в VBA... забыл)
Ratings: 0 negative/0 positive
Re: Вывод БД на экран по реквизитам содержащихся в ListBox.
ptaxa888
Автор

Сообщений: 61
Дата регистрации: 07.03.2018
of63
Ты вобще не спишь )
Посмотри как выглядят даты в фоксе
? DTOC(DATE()) && вот так и выглядит дата-строка, зависит от SET DATE, как и все нижележащее
? DATE() && такой вида значения "дата" по человечески. Ее вид на твоем экране может отличаться от моего вида этой даты, это просто следствия твоих установок SET DATE и подобных. Ты можешь получить эту же строку "изображение даты" из ф-ии TRANSFORM(), она все возвращает в C-виде, как CSTR() ...вроде в VBA... забыл)
Сплю прямо на клаве)
Была бы такая функция которая переводила Char в Char т.е. не ломала символьный тип. и в тоже время тип Data переводила в Char
cXXXXX(Иванов) - тип Char
cXXXXX(12.12.2012) - тип Char
Ratings: 0 negative/0 positive
Re: Вывод БД на экран по реквизитам содержащихся в ListBox.
AndyNigmatec

Сообщений: 1573
Откуда: Волгоград
Дата регистрации: 28.06.2015
ptaxa888
Была бы такая функция которая переводила Char в Char т.е. не ломала символьный тип. и в тоже время тип Data переводила в Char
- так напиши свою )))) ... типа (тупо смысл):
FUNCTION MyConvert
LPARAMETRS lcValue
local lcRetValue
lcRetValue=''
DO CASE
CASE TYPE('lcValue')='D'
lcRetValue = ... делаем одно ...
CASE TYPE('lcValue')='T'
lcRetValue = ... делаем другое ...
CASE TYPE('lcValue')='С'
lcRetValue = ... делаем третье ...
и .т.д.
OTHERWISE
ENDCASE
RETURN lcRetValue



Исправлено 1 раз(а). Последнее : AndyNigmatec, 14.03.18 08:38
Ratings: 0 negative/0 positive
Re: Вывод БД на экран по реквизитам содержащихся в ListBox.
ptaxa888
Автор

Сообщений: 61
Дата регистрации: 07.03.2018
AndyNigmatec
ptaxa888
Была бы такая функция которая переводила Char в Char т.е. не ломала символьный тип. и в тоже время тип Data переводила в Char
- так напиши свою )))) ... типа (тупо смысл):
FUNCTION MyConvert
LPARAMETRS lcValue
local lcRetValue
lcRetValue=''
DO CASE
CASE TYPE('lcValue')='D'
lcRetValue = ... делаем одно ...
CASE TYPE('lcValue')='T'
lcRetValue = ... делаем другое ...
CASE TYPE('lcValue')='С'
lcRetValue = ... делаем третье ...
и .т.д.
OTHERWISE
ENDCASE
RETURN lcRetValue
Ну да, мысль ясна. Можно конечно и через IF т.к. всего два типа данных С и D.
Я так понял функцию можно запихнуть в .prg а в форму прописать к примеру DO MyConvert в нужном месте!?
Но это чуть позже, нарисовалась новая задача, пока попробую сам реализовать)
Ratings: 0 negative/0 positive
Re: Вывод БД на экран по реквизитам содержащихся в ListBox.
AndyNigmatec

Сообщений: 1573
Откуда: Волгоград
Дата регистрации: 28.06.2015
да, ф-ю можно в prg ... а вызывать где требуется, типа

asd = MyConvert(lcInData)
или сразу в select-е
SELECT field1, MyConvert(field2) as field2 ... и .т.д.

а можно ее вообще как метод формы сделать и в самой форме уже пользовать : asd = thisform.MyConvert(lcInData)



Исправлено 1 раз(а). Последнее : AndyNigmatec, 14.03.18 09:34
Ratings: 0 negative/0 positive
Re: Вывод БД на экран по реквизитам содержащихся в ListBox.
Igor Korolyov

Сообщений: 34580
Дата регистрации: 28.05.2002
ptaxa888
Это хорошее решение т.к. оно поможет мне уйти от IF и его длинного хвоста. IF применил т.к. пришлось поделить пути следования от выбранного типа переменной text1. Нужно переработать свою избыточность.
От этого IF, а точнее CASE и не уйти. Можно поместить на форме 3 текстбокса друг под другом и переключать их видимость в зависимости от требуемого "типа данных". Можно собственно в одном текстбоксе делать переключение (присваивая в его .Value "пустое" значение нужного типа - т.е. "", 0 или {} )
Делать это нужно в коде связанном с выбором поля в комбо со списокм - скажем в .Valid()

Проблема с кавычками возникнет моментально как только пользователь введёт в качестве поисковой фразы что-то с этими самыми кавычками - всё сломается. Про SQL-инъекцию (т.е. возможность через штатный интерфейс программы выполнить ну совсем "нештатное" действие) я вообще молчу.
Проблема CTOD() - разнообразие форматов даты представленной в виде строки. При том если текстбокс проинициализировать значением даты (пустой если присвоить ={} или, к примеру, текущей если присвоить =DATE()) то он ещё и не позволит абы чего вводить - т.е. сразу заработает ограничение по формату, и по допустимым значениям для элементов даты - т.е. "забесплатно" получаем какие-никакие а удобства - по сравнению с текстбоксом принимающем строки, где юзер может ввести к примеру "14 марта" и потом жаловаться что система его "не понимает" - т.к. ты же не запретил вводить в такое поле что угодно

ptaxa888
Может добавить дополнительное поле в курсор с указанием типа данный C или D!?
Да, это имеет смысл. В перспективе - ещё и размер (число символов, или диапазон чисел для числовых полей) ограничивать.


------------------
WBR, Igor
Ratings: 0 negative/0 positive
Re: Вывод БД на экран по реквизитам содержащихся в ListBox.
ptaxa888
Автор

Сообщений: 61
Дата регистрации: 07.03.2018
Спасибо, поковыряюсь.
Есть вопрос, как в ListBox организовывается что то на подобии Multiselect? вообщем нужен одновременный выбор нескольких значений поля
Ratings: 0 negative/0 positive
Re: Вывод БД на экран по реквизитам содержащихся в ListBox.
Igor Korolyov

Сообщений: 34580
Дата регистрации: 28.05.2002
По тупому - через свойство MultiSelect. Но это для пользователя (для 90% типичных) весьма недружественно - надо всякие Crtl зажимать чтобы прокликать нужные элементы, слетает выбор если чуть не туда кликнул...
А по хорошему - классом листбокса который картинки показывает перед каждым элементом, и ловит нажатия мышкой на них - ну плюс к тому контекстное меню для "выбрать всё, снять выбор со всего, инвертировать выбор"... Выглядит он примерно так:
[attachment 29137 checklist.png]
Исходник я приложу, только он писался больше 15 лет назад и ещё под 7 фокс
Он точно некорректно работает будучи размещён внутри контейнера (координаты клика мышки неверно считаются - надо было на OBJTOCLIENT переделать).
[attachment 29139 CheckList.zip]


------------------
WBR, Igor
Ratings: 0 negative/0 positive
Re: Вывод БД на экран по реквизитам содержащихся в ListBox.
AndyNigmatec

Сообщений: 1573
Откуда: Волгоград
Дата регистрации: 28.06.2015
а в случАе испольхования грида а лист - все еще проще )))
Ratings: 0 negative/0 positive
Re: Вывод БД на экран по реквизитам содержащихся в ListBox.
Igor Korolyov

Сообщений: 34580
Дата регистрации: 28.05.2002
Нет, не проще. Ты глянь для начала на объём кода
А с гридом довольно много возни/борьбы - сделай автопереход по нажатию первых буковок (встроен в листбокс), сделай не уползающий вверх список при прокрутке вниз - с огромной пустой простынёй, повесь меню - и на контролы и на грид.
Всякому контролу своё применение - листбокс вполне адекватен для указанной простой цели. Даже просто нагенерить кодом чекбоксов было бы можно, если бы элементов в списке выбора было с пяток


------------------
WBR, Igor
Ratings: 0 negative/0 positive
Re: Вывод БД на экран по реквизитам содержащихся в ListBox.
ptaxa888
Автор

Сообщений: 61
Дата регистрации: 07.03.2018
Igor Korolyov
По тупому - через свойство MultiSelect. Но это для пользователя (для 90% типичных) весьма недружественно - надо всякие Crtl зажимать чтобы прокликать нужные элементы, слетает выбор если чуть не туда кликнул...
А по хорошему - классом листбокса который картинки показывает перед каждым элементом, и ловит нажатия мышкой на них - ну плюс к тому контекстное меню для "выбрать всё, снять выбор со всего, инвертировать выбор"... Выглядит он примерно так:
[attachment 29137 checklist.png]
Исходник я приложу, только он писался больше 15 лет назад и ещё под 7 фокс
Он точно некорректно работает будучи размещён внутри контейнера (координаты клика мышки неверно считаются - надо было на OBJTOCLIENT переделать).
[attachment 29139 CheckList.zip]
Пример как вариант, но хочу понять есть ли тот путь который я воображаю.
На данный момент выбор справочного значения построен на ComboBox3 (скрин во вложении), НО в нем допустим одновременный выбор только единственного значения, а т.к. нужен множественный выбор приходится менять Combo3 на List3.
Выбор значения в combo3 формирует следующее условие where в динамическом запросе:
LOCAL cWhere, tipC2, comb3
cWhere=''
uslovie=thisform.combo2.Value
tipC2=ALLTRIM(cChoice2.tip)
comb3=ALLTRIM(thisform.combo3.value)
*.....бла бла бла
CASE tipC2=('S')
*построение условия WHERE если переменная из словаря
SELECT cChoice2
SCAN FOR lcheck=1
cWhere=[ WHERE ]+ALLTRIM(cChoice2.tblfld)+uslovie+"m.comb3"
ENDSCAN
*.....бла бла бла
Но когда Combo3 заменим на ListBox3 с использованием Multiselect=.T. то условие должно рисоваться совершенно иначе, вопрос как подсвеченным значениям присвоить переменную и потом это кидать в cWhere для формирования условия с несколькими фильтрами?
cWhere=[ WHERE ]+ALLTRIM(cChoice2.tblfld)+uslovie+"m.list(i)"+' OR '+ALLTRIM(cChoice2.tblfld)+uslovie+"m.list(i)"+;
' OR '+ALLTRIM(cChoice2.tblfld)+uslovie+"m.list(i)"
Или проще пойти по Вашему примеру и не забивать голову!?



Исправлено 1 раз(а). Последнее : ptaxa888, 16.03.18 23:01
Ratings: 0 negative/0 positive
Re: Вывод БД на экран по реквизитам содержащихся в ListBox.
Igor Korolyov

Сообщений: 34580
Дата регистрации: 28.05.2002
В принципе, конечно, можно и через OR насобирать условий. Но есть и другие способы:
- если выбранных значений не очень много, то можно использовать условие вида
поле IN (1, 2, 6, 8)
- собирая "список кодов" в строку через запятую, и используя макро. Не самое красивое, но вполне рабочее решение.
- если выбранных значений может быть больше десятка, то использовать выбор отмеченных в курсор (типа как мой класс делает) и в запросе прописать
поле IN (SELECT id FROM csrSelected)
Если для выбора использовать мувер (он ведь тоже по сути выбирает произвольное множество элементов из списка - от нуля до всех) и он работает на курсоре с полем Check, то безо всяких лишних телодвижений в запрос прописывается

поле IN (SELECT id FROM csrMover WHERE lCheck)

P.S. обычно префикс l имеют логические поля, там не будет никаких 0/1, там будет .T. и .F. и потому условие будет выглядеть вот так вот "просто" если там всё же число, то условие в подзапросе будет nCheck=1 - т.к. и поле уж тогда надо назвать с префиксом n


------------------
WBR, Igor
Ratings: 0 negative/0 positive


Извините, только зарегистрированные пользователи могут оставлять сообщения в этом форуме.

On-line: 28 (Гостей: 28)

© 2000-2024 Fox Club 
Яндекс.Метрика