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

Вниз

Подскажите в чем ошибка?   Найти похожие ветки 

 
Mariya   (2007-09-12 08:56) [0]

var strFilter: string;
       begin

tbmain.Filter := "";

if Trim(Edit1.Text) <> "" then
begin

 tbmain.Filter := "Фамилия="+QuotedStr(Edit1.Text+"*");
 strFilter :=tbmain.Filter;
 tbmain.Filtered:=True;
end;

if Trim(Edit2.Text) <> "" then
begin
if (strFilter <> "") then tbmain.Filter:= strFilter +"Имя="+QuotedStr(Edit2.Text+"*");
end;
результат у меня должен быть виден на DBGrid1. Edit1-вводим фамилию, в Edit2-имя, фильтр по обоим полям не работает, выдает ошибку. Фильтр задан не правильно. Заранее спасибо.


 
Palladin ©   (2007-09-12 08:59) [1]


>  Подскажите в чем ошибка?

А сама ошибка не подсказывает в чем она заключается?


 
sniknik ©   (2007-09-12 09:08) [2]

+
после составления фильтра получившуюся строку неплохо бы рассмотреть внимательно... глядишь и спрашивать станет нечего.

++
хозяйке на заметку:
работа фильтра(возможности) зависят от технологий(компонент. в какойто мере), работающее в одном для другого может быть ошибочно...

+++
база данный тоже имеет значение. никогда не спрашивай о базах не указав что используешь и чем пользуешься... совершенно верный ответ для одного для другого может быть ошибочным (и хорошо если просто ошибочным, а то в принципе рабочим но вредительским)


 
Mariya   (2007-09-12 09:27) [3]

filter expression incorrectly terminated.
пытаюсь написать в дельфи, данные храняться в парадокс таблицах. в дельфи нарисовала форму чтобы просматривать, написала фильтр на фамилию, попросили и по имени тоже из найденных всех Иванновых, найти Васю :).


 
Сергей М. ©   (2007-09-12 09:38) [4]


> Mariya   (12.09.07 09:27) [3]



> выдает ошибку. Фильтр задан не правильно


И правильно выдает.
Потому что выражение, заданное значением tbmain.Filter, не является правильным.

У тебя это выражение сформировано вот так
Фамилия="Иванов*"Имя="Вася*"

а должно быть так
Фамилия="Иванов*" AND Имя="Вася*"

Найди три отличия)


 
Mariya   (2007-09-12 09:53) [5]

if (strFilter <> "") then tbmain.Filter:= strFilter and "Arh_nomer="+QuotedStr(Edit2.Text+"*"); Так?


 
Сергей М. ©   (2007-09-12 10:02) [6]


> Так?


А ты выполни после этого строчку ShowMessage(tbmain.Filter) и сразу увидишь, так оно или не так..


 
Anatoly Podgoretsky ©   (2007-09-12 10:09) [7]

А как ты попала в программирование, в наказание?


 
Mariya   (2007-09-13 14:37) [8]

Здравствуйте! Это не наказание, а выбранный мой путь в жизни, но надо подучиться ( или НАУЧИТЬСЯ!!!), я разобралась, поиск по двум полям работает, только по порядку сначала вводим едит1, а затем едит2, наоборот не работает. Подскажите как сделать чтобы можно было и в обратном направлении это осуществлять?


 
Сергей М. ©   (2007-09-13 14:41) [9]

Так ты ж сама себе грабли и устроила в строчках if Trim(Edit1.Text) <> "" then и if Trim(Edit2.Text) <> "" then

)


 
Mariya   (2007-09-13 14:45) [10]

Ну не знаю как иначе1 Подскажите, плз. И еще вопрос, как добавить третье поле? Ну очень нужно, посочувствуйте тому, кто отбывает наказание :)


 
Сергей М. ©   (2007-09-13 14:52) [11]


> посочувствуйте тому, кто отбывает наказание


А ты думаешь здесь богадельня ?)


> Ну не знаю как иначе


Да просто убери эти проверки)


 
clickmaker ©   (2007-09-13 14:53) [12]


> И еще вопрос, как добавить третье поле?

так же как второе


 
Mariya   (2007-09-13 14:56) [13]

добавила как второе выдает ошибки! Убрать какие проверки?

var strFilter, S: string;
       begin

strFilter := "";
S:=VarToStr(DBLookupComboBox1.KeyValue);
if Trim(S) <> "" then
begin
 tbmain.Filtered:=false;
 tbmain.Filter:="Fond="+S;
 strFilter :=tbmain.Filter;
 tbmain.Filtered:=true;
end;

if Trim(Edit1.Text) <> "" then
begin
if (strFilter<> "") then tbmain.Filter:=strFilter + " and "+"Imya="+QuotedStr(Edit1.Text+"*")
else
 begin
 tbmain.Filter:="Imya="+QuotedStr(Edit1.Text+"*");
 tbmain.Filtered:=true;
 strFilter:=tbmain.Filter;
 end;


 
Сергей М. ©   (2007-09-13 15:03) [14]


> Убрать какие проверки?


if Trim(EditN.Text) = "" then ..


 
Mariya   (2007-09-13 15:08) [15]

У меня всего 2 едита + 2 комбобокса (в примере)+2 даты (период с ...- до...).


 
Сергей М. ©   (2007-09-13 15:09) [16]


> Mariya   (13.09.07 15:08) [15]


И что ?


 
Mariya   (2007-09-13 15:13) [17]

Я не понимаю как программа будет понимать ЕдитН, какой заполняется, и что тогда нужно присваивать фильтру?
if Trim(Edit2.Text) <> "" then
if (strFilter<> "") then tbmain.Filter:=strFilter + "and" + "Arh_nom="+QuotedStr(Edit2.Text+"*").
вот здесь например будет едитН, что писать во второй строке?


 
Сергей М. ©   (2007-09-13 15:25) [18]

При первой проверке N=1 , при второй N=2, при энной равно "эн".

Это что, совсем непостижимо для самостоятельного понимания ?)


 
Mariya   (2007-09-13 15:43) [19]

Логически это все я прекрасно понимаю, а как это сделать (написать) физически, используя процедуры, функции . . .  знаний моих в дельфи не хватает, поэтому  спрашиваю. Посмотрите, пожалуйста, код, который я писала второй раз, вы не могли бы его прокомментировать конкретно, какие там нужно внести изменения. Заранее спасибо.


 
Mariya   (2007-09-13 15:49) [20]

Подскажите, возможно осуществить контекстный поиск? здесь же. На эти же поля? (*в*н*в=Иванов, Овчинников...)


 
Сергей М. ©   (2007-09-13 15:53) [21]


> Логически это все я прекрасно понимаю, а как это сделать
> (написать) физически, используя процедуры, функции . . .


Т.е. ты "плаваешь" именно в языке как средстве реализации алгоритма ?

Тогда формализуй и приведи сюда требуемый тебе алгоритм, тогда и поможем тебе в его реализации в Делфи.


> какие там нужно внести изменения


Боюсь тебя огорчить, но место этому коду  - в recycle"ре.


 
Mariya   (2007-09-13 16:05) [22]

Мне поставили задачу, написать локальную базу данных. Я создала несколько парадокс таблиц, связала их, там словари, вот. Попросили написать поиск, чтобы могли по каким-то критериям им нужным вытащить из этой базы человека с такими критериями. Все просто:

на форме поиска: ДВГрид, где видны все поля главной таблицы (tbmain).
(где и должен быть результат поиска)
1) комбобокс1-фонд (там числовые значения 10,11,12,13)
2)фамилия
3)имя
4)дата заполнения карточки на это лицо (Data_s-в едит3 вводится, Data_po-вводится в едит4). Мне нужно чтобы пользователь мог вводить данные в эти 4 поля и программка из всей базы вытаскивала человека, у которого все эти поля совпали. Пока я сделала, что все поля ищут (фильтруют) по одному полю, мне нужно по всем. Я начала это делать, код начатого я как вопрос в чем ошибка и написала.


 
Palladin ©   (2007-09-13 16:09) [23]


> Mariya   (13.09.07 16:05) [22]

У тебя алгоритм спрашивали, а не задачу


 
Palladin ©   (2007-09-13 16:12) [24]

за 300 баксов напишу :) за 500 отдам даже с исходниками :)


 
Mariya   (2007-09-13 16:13) [25]

Все это я пишу в боттоне, я понимаю логически, что если комбобокс не пустой, фильтровать значение по нужному, дальше запомнить это значение в переменной, дальше если эта переменная не пустая, и едит1 например не пустой, то фильтровать едит1 из найденных значений в комбобоксе (а не из всей базы снова)... Мне нужно прописать этот боттон, чтобы по всем полям искало, далее все мой задачи на этом и основываются. Если бы Вы мне помогли понять и подучили, мне бы это облегчило работу на многие месяцы, задачи у меня все аналогичные,загвоздка пока только в этом.


 
Mariya   (2007-09-13 16:16) [26]

Palladin ©   (13.09.07 16:12) [24]

Это моя 3-х месячная зарплата...!!! А задач таких штук 50. Мне дешевле не работать... Но все равно спасибо за предложение...


 
Anatoly Podgoretsky ©   (2007-09-13 16:24) [27]

Mariya   (13.09.07 16:05) [22]  

filter := Критерий1 and Критерий3 ... and КритерийN

Критерии задаются так - ИмяПоля ОператорОтношения Значение


 
Anatoly Podgoretsky ©   (2007-09-13 16:25) [28]


> Это моя 3-х месячная зарплата...!!!

Действительно дешевле не работать, это не зарплата а горе


 
clickmaker ©   (2007-09-13 16:28) [29]


> [26] Mariya   (13.09.07 16:16)

даю подсказки. пока бесплатно
1. Заведи массив имен полей
2. Положи контролы для ввода значений на отдельную панель, если на форме есть другие, не участвующие в фильтре
3. Для даты лучше TDateTimePicker - юзеру удобней будет
4. Задай им Tag от 0 до количества полей в массиве - 1 соответственно
5. В цикле от 0 до ControlsCount-1 контейнера пробегись по контролам и, если это TEdit, то QuotedText + "*", если TComboBox, то просто текст (число), если TDateTimePicker, то строковый вид даты. Перед этим обнули strFilter и в цикле добавляй ИмяПоляИзМассива по Tag + "=" + собственно значение, НЕ забывая перед вставлять " and ", если фильтр уже не пустой


 
Mariya   (2007-09-13 16:36) [30]


> Заведи массив имен полей

????

> Задай им Tag от 0 до количества полей в массиве - 1 соответственно

????!!!

Я ИДУ УВОЛЬНЯТЬСЯ! МНЕ ЭТО ВСЕ НИ О ЧЕМ НЕ ГОВОРИТ! (    :(((      )


 
clickmaker ©   (2007-09-13 16:39) [31]


> [30] Mariya   (13.09.07 16:36)

а, ну тогда справочку почитай для начала или книжечку
задачка-то элементарная, чтоб сразу увольняться
то ли еще будет...


 
Германн ©   (2007-09-13 16:40) [32]


> Mariya   (13.09.07 16:36) [30]
>
>

Четвертые сутки пылает граница :-)
http://www.delphimaster.ru/cgi-bin/forum.pl?n=18&search=Mariya


 
Сергей М. ©   (2007-09-13 16:44) [33]


> ИДУ УВОЛЬНЯТЬСЯ! МНЕ ЭТО ВСЕ НИ О ЧЕМ НЕ ГОВОРИТ


Просто интересно - а когда тебя принимали на работу, какие требования к тебе как к специалисту предъявляли ?

И чем с твоей стороны были подкреплены твои потенции в плане этих требований, коль скоро тебе было оказано (авансом ?) столь высокое доверие ?


 
Mariya   (2007-09-13 16:49) [34]

Передо мной стояли совершенно иные задачи, которые я могу позволить с грдостью сказать, я очень хорошо знаю!!!А сейчас понадобилось Дельфи, котрое я знаю из 10 пар лекций в институте!


 
Mariya   (2007-09-13 16:51) [35]

Всем огромное спасибо! Кто ПЫТАЛСЯ мне помочь!


 
Anatoly Podgoretsky ©   (2007-09-13 16:53) [36]

> Сергей М.  (13.09.2007 16:44:33)  [33]

Какие требование при зарплате 100 баксов :-)
За что боролись, на то и на поролись.


 
Anatoly Podgoretsky ©   (2007-09-13 16:53) [37]

> Mariya  (13.09.2007 16:36:30)  [30]

И правильно сделаешь, неужели не найдешь зарплату хотя бы раза в три выше.


 
clickmaker ©   (2007-09-13 16:59) [38]


> котрое я знаю из 10 пар лекций в институте!

10 пар недостаточно, чтобы узнать про массив?


 
Palladin ©   (2007-09-13 17:05) [39]


> Mariya   (13.09.07 16:49) [34]

а на кого ты училась то?


 
Сергей М. ©   (2007-09-13 17:06) [40]

Арбузолитейный, наверно, пыталась осилить)


 
Mariya   (2007-09-14 10:27) [41]

Здравствуйте мастера! Я ЭТО СДЕЛАЛА!!! ПОИСК РАБОТАЕТ!!! По 10 полям!!!
Только осталось одно поле, где нужно написать контекстный поиск, ищет Ив* = Иванов, Ивасютин и т.д. А Мне нужно, чтобы звездочка еще и впереди читалась. Не подскажите? Как? Не зря я в  арбузолитейном институте 10 лекции отслушала!!!


 
Сергей М. ©   (2007-09-14 10:31) [42]

... + "ИмяПоля=" + QuotedStr("*" + МодельПоискаВПоле + "*");


 
Anatoly Podgoretsky ©   (2007-09-14 10:44) [43]

> Mariya  (14.09.2007 10:27:41)  [41]

А вот здесь придется отказаться от filter := и перейти на запросы


 
Mariya   (2007-09-14 12:45) [44]

"*" ....."*" я пробовала не правильно, первую "*" игнорирует. Подскажите как написать запрос? Буду ну О-О-Очень признательна!


 
clickmaker ©   (2007-09-14 13:02) [45]


> как написать запрос?

TQuery.SQL.Text :=
"select * from Table where name like " + QuotedStr("%" + Value + "%");


 
sniknik ©   (2007-09-14 13:08) [46]

> и перейти на запросы
можно "перейти" на ADO, у него фильтр более гибкий, с LIKE, что почти условие запроса.

но лучше конечно перейти сразу: с парадокса на другую базу, с BDE на ADO (вернее от типа базы варианты), с навигационных методов на SQL, с зарплаты в 100$ на побольше и с работы где заставляют выполнять не свои задачи на соответствующую...
;)


 
Mariya   (2007-09-14 13:21) [47]

если я перейду на АДО я завалю форум своими вопросами! Я не знаю, что это такое вообще! Чтобы писать эскюэль запрос, я так понимаю нужно добавить  SQL-TQuery, в свойстве в SQL написать сам запрос, а как это писать в самой кнопке?
s:=Edit5.Text;
if Trim(s) <> "" then
begin
  sql:="Primechanie="+QuotedStr("*"+s+"*")
 end;
Правильно я поняла?


 
clickmaker ©   (2007-09-14 13:33) [48]


> sql:="Primechanie="+QuotedStr("*"+s+"*")

в Local SQL такое не сработает
см. [45]


 
Mariya   (2007-09-14 13:54) [49]

У меня есть Едит5, куда я ввожу,что надо найти, нажимаю на кнопку он мне выдает в гриде ответ,
QuotedStr(s+"*"), в конце он  * принимает, неужели нельзя просто прописать, чтобы и в начале также как и в конце срабатывало?


 
Anatoly Podgoretsky ©   (2007-09-14 14:16) [50]

Сказано используй запросы, не будет твой фильтр работать.
Ну или на худой случай - OnFilterRecord, но с твоими запросами ты погибнешь. Но лучше


> но лучше конечно перейти сразу: с парадокса на другую базу,
>  с BDE на ADO (вернее от типа базы варианты), с навигационных
> методов на SQL, с зарплаты в 100$ на побольше и с работы
> где заставляют выполнять не свои задачи на соответствующую.

При том начинать с конца.


 
Плохиш ©   (2007-09-14 14:17) [51]


>   sql:="Primechanie="+QuotedStr("*"+s+"*")

"Primechanie like "+QuotedStr("*"+s+"*")
или
"Primechanie like "+QuotedStr("%"+s+"%")

PS. Уже замучился сдерживать пальцы, пытающиеся написать про три K :-(


 
Mariya   (2007-09-14 14:37) [52]

Так тоже не работает, нужно писать запрос :(((


 
Anatoly Podgoretsky ©   (2007-09-14 15:07) [53]

> Плохиш  (14.09.2007 14:17:51)  [51]

По подсчетам только два К


 
Anatoly Podgoretsky ©   (2007-09-14 15:08) [54]


> Так тоже не работает, нужно писать запрос :(((

Еще пару сотен сообщений и уговорим.


 
Washington ©   (2007-09-14 15:09) [55]

Качни книжицу "Библия Delphi" к примеру и ПЕРЕХОДИ НА ADO


 
Плохиш ©   (2007-09-14 15:15) [56]


> Anatoly Podgoretsky ©   (14.09.07 15:07) [53]
> > Плохиш  (14.09.2007 14:17:51)  [51]
>
> По подсчетам только два К

Наличие/отсутствие на количество не влияет :-P


 
Mariya   (2007-09-14 15:25) [57]


> Еще пару сотен сообщений и уговорим.

Меня не нужно уговаривать, мне нужно помочь :)
Вы не могли бы более детальнее объяснить как писать запрос и где?


 
stanislav ©   (2007-09-14 15:30) [58]

Mariya   (14.09.07 15:25) [57]
Все не читал, но незаметил где опубликованная строка, которая получается в результате формирования фильтра.


 
Сергей М. ©   (2007-09-14 15:32) [59]


> как писать запрос и где?


Текст запроса должен фигурировать в кач-ве значения св-ва SQL: TStrings компонента TQuery.

Попросту говоря, вместо танцев с бубном вокруг TTable.Filter/Filtered танцуешь с чуть другим бубном вокург TQuery.SQL, примерно вот так (см. выше по теме про содержимое текста запроса):

QueryMain.SQL := "SELECT ... FROM ... WHERE";
QueryMain.Active := True;


 
Anatoly Podgoretsky ©   (2007-09-14 15:37) [60]

Смотри clickmaker ©   (14.09.07 13:02) [45]


 
Mariya   (2007-09-14 15:40) [61]

Примерно я поняла, что писать (за синтаксис не ручаюсь верный), а вот уже в кнопке как это написать? что вот я ввела часть текста, покажите мне весь текст? Как это связать?


 
clickmaker ©   (2007-09-14 15:43) [62]


> [61] Mariya   (14.09.07 15:40)

это в дизайне
Grid.DataSource = DataSource1
DataSource1.DataSet = Query1
это "в кнопке"
Query1.SQL.Text := "...";


 
Mariya   (2007-09-14 15:53) [63]

спасибо, пробую... через минут 15 чувствую снова закидаю вопросами...


 
Washington ©   (2007-09-14 16:04) [64]

Не проще [55]?


 
Anatoly Podgoretsky ©   (2007-09-14 16:13) [65]

Тоже показано, формальный синтаксис указан в [27] и достаточно много примеров.
В [45] лучше заменить TAdoQuery на TAdoDataset


 
Mariya   (2007-09-14 16:59) [66]

Спасибо всем засодействие, рабочий день закончился! Подумаю и попробую дома, всем удачных выходных!


 
Германн ©   (2007-09-14 17:06) [67]


> Подумаю и попробую дома, всем удачных выходных!
>

Доживем до понедельника!
:-)


 
Mariya   (2007-09-17 07:36) [68]

Доброго понедельника!



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

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

Наверх




Память: 0.64 MB
Время: 0.024 c
15-1189579588
DVM
2007-09-12 10:46
2007.10.14
Подскажите программу для PINGA


2-1189617829
Kley
2007-09-12 21:23
2007.10.14
Чистка БД от задвоек


2-1189703960
delphiForever
2007-09-13 21:19
2007.10.14
таймер и процедура


15-1189419547
Галинка
2007-09-10 14:19
2007.10.14
Традиции программирования2: или ...


2-1190353520
timur
2007-09-21 09:45
2007.10.14
как остановить программу