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

Вниз

Фильтрация 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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.49 MB
Время: 0.004 c
15-1311859760
Дмитрий С
2011-07-28 17:29
2011.11.27
threadvar


15-1312489794
Юрий
2011-08-05 00:29
2011.11.27
С днем рождения ! 5 августа 2011 пятница


2-1312641641
avi9526
2011-08-06 18:40
2011.11.27
Где находится функция прорисовки TCheckBox


15-1312748992
Юрий
2011-08-08 00:29
2011.11.27
С днем рождения ! 8 августа 2011 понедельник


15-1312133491
SQLEXPRESS
2011-07-31 21:31
2011.11.27
Кто и почему делает бесплатный софт?





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский