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

Вниз

Фильтрация Loockup поля   Найти похожие ветки 

 
DenProx   (2010-03-03 11:21) [0]

Доброго времени суток. У меня такой вопрос, я пытаюсь сделать фильтрацию по полю подстановки (loockup), пишу такой код:
Код:

ADOQuery3.Active:=False;
ADOQuery3.SQL.Clear;
ADOQuery3.SQL.Add("SELECT *");
ADOQuery3.SQL.Add("FROM tblDetail");
if Edit1.Text<>EmptyStr then
ADOQuery3.SQL.Add("WHERE Section_ID IN (SELECT Key FROM tblSection WHERE SectionName LIKE """+Edit1.Text+"%"+""")");
ADOQuery3.Active:=True;


где tblDetail таблица с ссылками, т.е. содеожит коды полей
tblSection - таблица с соответствующими именами

проблема в следующем, при вводе в Едит текста, таблица становится пустой, и фильтрация соответственно не осуществляется... но если данный запрос проверить в Access"e то все работает... в чем может быть проблема?


 
Sergey13 ©   (2010-03-03 11:37) [1]

Регистр букв соблюдается как в БД?


 
DenProx   (2010-03-03 11:42) [2]

Да, все соблюдал, и с учетом регистра и без ...


 
Sergey13 ©   (2010-03-03 11:53) [3]

И все равно в запросе я бы все привел к одному регистру.
Кроме того лучше бы пользоваться параметрами LIKE :NameSection
Выведи текст запроса перед выполнением в showmessage и убедись, что там все как надо.


 
Sergey13 ©   (2010-03-03 11:53) [4]

И Loockup тут совершенно ни при чем, кстати.


 
DenProx ©   (2010-03-03 12:14) [5]

вот попробывал так:

ADOQuery3.Active:=False;
ADOQuery3.SQL.Clear;
ADOQuery3.SQL.Add("SELECT *");
ADOQuery3.SQL.Add("FROM tblDetail");
if Edit1.Text<>EmptyStr then
ADOQuery3.SQL.Add("WHERE Section_ID IN (SELECT Key FROM tblSection WHERE SectionName LIKE """+"#39"+Edit1.Text+"#39"+"%"+""")");
ShowMessage(ADOQuery3.SQL.Text);
ADOQuery3.Active:=True;


результат тот же... или регистр по другому нужно делать?


 
Sergey13 ©   (2010-03-03 12:16) [6]

> [5] DenProx ©   (03.03.10 12:14)
> или регистр по другому нужно делать?

Вообще то по другому. Есть наверное в аксесе UPPER.
И все таки параметры надежнее.
Что показывает ShowMessage(ADOQuery3.SQL.Text);?


 
DenProx ©   (2010-03-03 12:27) [7]

запрос сделал такой:

ADOQuery3.SQL.Add("WHERE Section_ID IN (SELECT Key FROM tblSection WHERE SectionName LIKE """+UpperCase(Edit1.Text)+"%"+""")");


в сообщении выводит:
SELECT *
FROM tblDetail
WHERE Section_ID IN (SELECT Key FROM tblSection WHERE SectionName LIKE "Д%");

результат не изменился...


 
12 ©   (2010-03-03 12:36) [8]

а если написать конкретно, не едит1.текст, а
SELECT *
FROM tblDetail
WHERE Section_ID IN (SELECT Key FROM tblSection WHERE SectionName LIKE "Д%");

что-то кажет?


 
DenProx ©   (2010-03-03 12:42) [9]

в том и фишка, что Нет...


 
Sergey13 ©   (2010-03-03 12:57) [10]

> [7] DenProx ©   (03.03.10 12:27)

А поле таблицы SectionName кто будет к верхнему регистру приводить?


 
Вариант   (2010-03-03 12:59) [11]


> DenProx ©   (03.03.10 12:27) [7]

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

Второе, как вариант (если все остальное нормально) - есть подозрение еще, что кодировка буквы Д в базе и буквы Д в Edit не совпадает(юникод и анси).


 
DenProx ©   (2010-03-03 13:04) [12]

Нашел в чем проблема... Просто этот компонент ADO имел связь с другим, по этому запрос не работал...


 
DenProx ©   (2010-03-03 13:22) [13]

Только теперь получается фильтр, работает по всей таблице, а не по записям которые относятся к кокому либо разделу... как это возможно совместить?


 
Sergey13 ©   (2010-03-03 13:27) [14]

> [13] DenProx ©   (03.03.10 13:22)

У тебя вообще про фильтр нет ничего. Давай уж с терминологией разбирайся. Запрос не работает?


 
DenProx ©   (2010-03-03 13:34) [15]

Дак запрос на фильтрацию реализован... если у ADOQuery убрать связь (DataSourse) то запрос работает, но по всей таблице.... если Связь восстановить, то запрос не работает.
Смысл в следующем: на форме два Грида, один содержит Разделы, другой подразделый относящиеся к какому либо разделу, т.к. подразделов много нужно сделать фильтрацию... что я и делал выше описанным способом...
сложность в том что поля во втором гриде подстановочные... Lookup...


 
Sergey13 ©   (2010-03-03 13:44) [16]

> [15] DenProx ©   (03.03.10 13:34)

О чем то своем рассказываешь? Связи какие то, датасорсы, лукапы. О чем ты? Кто это видел? Кроме тебя?


 
DenProx ©   (2010-03-03 13:52) [17]

просто подумал, так будет легче понять суть того что мне нужно, и что не получается....


 
Sergey13 ©   (2010-03-03 14:00) [18]

> [17] DenProx ©   (03.03.10 13:52)

Так ты еще больше все запутал.
Прежде, чем понимать что тебе нужно, нужно понять что у тебя есть. Конкретно и по пунктам.


 
DenProx ©   (2010-03-03 14:25) [19]

в БД есть таблицы: tblBlock, tblDetail, tblSection
tblBlock - таблица содержащая названия блоков (изделия)
tblDetail - таблица содержащая все детали, где имена деталец берутся из таблицы tblSection.
в Delphi:
Есть форма, на ней Два DBGrid"a, по 3-и ADOQuery и DataSourse.
Первый Грид отображает данные из таблицы tblBlock, второй Грид отображает детали относящиеся к выбранному блоку (по связи один-ко-многим), в поле SectionName(подстановочное поле). Необходимо отфильтровать это поле.


 
Sergey13 ©   (2010-03-03 14:36) [20]

> [19] DenProx ©   (03.03.10 14:25)

А что мешает показывать набор данных из tblSection в каком нибудь ДБЛукапКомбоБоксе и просто подставлять еще одну переменную в набор с деталями?
Только от стандартного механизма мастер-деталь придется отказаться. На атерскрол обоих родителей вешаешь процедуру переоткрытия деталей с параметрами. И все.

ЗЫ: Вместо ADOQuery лучше юзать АДОДатасет.


 
DenProx ©   (2010-03-03 14:41) [21]

Нужна наглядность, а если использовать КомбоБокс то это уже не Гуд...


 
Sergey13 ©   (2010-03-03 14:56) [22]

> [21] DenProx ©   (03.03.10 14:41)

Ну третий грид прилепи с секциями.



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

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

Наверх




Память: 0.52 MB
Время: 0.009 c
15-1312526088
Kilkennycat
2011-08-05 10:34
2011.11.27
ФАС против смсной дискриминации


11-1239944824
Ken
2009-04-17 09:07
2011.11.27
Modaless Form


15-1311711837
tesseract
2011-07-27 00:23
2011.11.27
Чтиво на отпуск.


15-1312015859
PreDatoR
2011-07-30 12:50
2011.11.27
Операция прервана по таймауту


1-1272455088
RAN-II
2010-04-28 15:44
2011.11.27
Доступ к документу FireFox