Форум: "Начинающим";
Текущий архив: 2007.10.14;
Скачать: [xml.tar.bz2];
ВнизПодскажите в чем ошибка? Найти похожие ветки
← →
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;
Скачать: [xml.tar.bz2];
Память: 0.62 MB
Время: 0.05 c