![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Поиск через Table и Query, в чем разница?
Чипырик © (2009-05-23 08:04:00)Доброго времени суток!
Подскажите пожалуйста, почему эти две строки кода не работают одинаково?
Table1.Locate('Nazvan', Edit1.Text, [loPartialKey, loCaseInsensitive]);
и
Query1.Locate(s, Edit1.Text,[loCaseInsensitive, loPartialKey]);
Отчего-то в первом случае (Table) не срабатывают параметры [loPartialKey, loCaseInsensitive]. и поиск осуществляется только по точному значению поля 'Nazvan'.
Во втором случае (Query) все работает отлично.
Эти два кода стоят в TEdit по OnChange (в разных TEdit) и отчего-то работают по-разному.
Нат (2009-05-25 20:05:00) [1]
s:='Название';
...Locate(s, Edit1...
Table1.Locate('Nazvan',...
С чего бы им работать одинаково, неужели 'Название'='Nazvan'?
Почему Вы думаете, что Table и Query содержат одинаковые наборы?
Наверняка в Query.SQL имеется where.
Наверняка в обоих используются фильтры.
Игорь Шевченко (2009-05-25 12:54:00) [2]
> в анкете образование по-умолчанию "высшее" подставляется?
Да
Плохиш (2009-05-25 12:31:00) [3]А вот мне интересно, в анкете образование по-умолчанию "высшее" подставляется?
MsGuns (2009-05-25 12:11:00) [4]>Чипырик © (25.05.09 07:40) [21]
Из приведенных кусков абсолютно неясно, ОДИН ЛИ И ТОТ список полей содержится в табице и запросе
Далее - так же неясно ЧТО лежит в эдите в 1-м и во 2-м случае. Отладчик пробовал для проверки чего же все-таки валяется в эдите ? И вообще неясно ОДИН ЛИ И ТОТ ЖЕ эдит. При твоей манере именовать компонеты вполне может быть на форме с таблицей какой-нибудь "посторонний" эдит, к которому и "обращается" код, в то время как ты думаешь что он типа использует нужный.
И последнее. Из сабжа очевидно, что одна и та же фича используется для разных датасетов - почему бы ее реализацию не вынести в отдельную функцию с параметрами, например в датамодуле ? Тогда и ошибки надо было бы искать в единственном месте проекта, а не лизать по сути идентичный код в разных юнитах
sniknik (2009-05-25 11:56:00) [5]> 2 sniknik
> Вот 2 куска реального кода:
чем тут кода больше и он реальней чем в [0]? при том что есть еще куча зависимых форм, кода...
если ты считаешь, что "виноват" только он и обсуждаешь только его, то сделай тестовый пример в котором ничего другого тоже нет, на одной (единственной) форме. и запрос без преобразований (сейчас они у тебя есть судя по названиям поля, или таблица другая) на ту же таблицу, причем проверить лучше не стандартной (не твоей) таблице, а например на country.db из борландовских примеров, чтобы исключить и глюки в таблице.
p.s. обсуждаться должно не гипотетическое "у меня там кое что есть, не скажу что, покажу только то на, что сам думаю, и оно не работает, скажите точно почему, в какой строке/букве я ошибся", а только то, что реально показано и можно проверить.
Сергей М. (2009-05-25 08:18:00) [6]
> искал хоть какое-нибудь свойство, отвечающее за поиск
> (ну или типа того) не нашел
Locate uses the fastest possible method to locate matching records. If the search fields in KeyFields are indexed and the index is compatible with the specified search options, Locate uses the index. Otherwise Locate creates a filter for the search
Чипырик (2009-05-25 07:45:00) [7]да и еще, если это имее значение Table, DBGrid находятся на одной форме, а Edit находится на другой форме (это для 2-ого куска кода, который не фурычит как надо)
Чипырик (2009-05-25 07:40:00) [8]Еси вы об этом
> бес вселился... нужно вызвать священника чтобы покропить
>
> комп святой водой.
> ничем другим различную работу одного и того же метода наследуемого
> от TBDEDataSet объяснить нельзя.
Я в магию и религию не верю, поэтому не поможет...
если об этом
> (ну ты же наверняка все правильно сделал... т.е. глюк с
> твоей стороны исключаем)
то глюк возможен у любого смертного, даже если он сам в него не верит...
В чем я мог ошибиться?
1. Название поля... Еслиб ошибка была, то функция вобще бы не работала и выдавала бы ошибку.
2. В свойствах Table? Я искал хоть какое-нибудь свойство, отвечающее за поиск (ну или типа того) не нашел... Значит ошибки быть не может, наверное.
2 MonoLife
пробовал, как ты сказал. не помогло...
2 sniknik
Вот 2 куска реального кода:
1 кусочег
procedure TForm4.Edit1Change(Sender: TObject);
var s:string;
begin
if ComboBox3.ItemIndex = 0 then s:='Название';
if ComboBox3.ItemIndex = 1 then s:='Принадлежность';
if ComboBox3.ItemIndex = 2 then s:='Класс';
if ComboBox3.ItemIndex = 3 then s:='Тип';
if ComboBox3.ItemIndex = 4 then s:='Базирование';
Query2.First;
Query2.Locate('Название', Edit1.Text,[loCaseInsensitive, loPartialKey]);
end;
2 кусочег
procedure TForm9.Edit1Change(Sender: TObject);
begin
Form1.Table1.First;
Form1.Table1.Locate('Nazvan', Edit1.Text, [loCaseInsensitive, loPartialKey]);
end;
Когда использую первый кусок кода, то во время набора в поле TEdit символов, поочередно, слева-направо: "вальхайм". То при наборе 1-ого символа "в" DBGrid выделяет первую запись начинающуюся на букву "В", при наборе 2-ого символа "а" (не удаляя первого) DBGRid выделяет нужную мне запись "Вальхайм".
Когда использую второй кусок кода. Во время набора этих же символов быстрый поиск не происходит. В DBGrid запись выделяется только тогда, когда я ввожу полностью, с учетом регистра "Вальхайм".
З.Ы. У меня мысля возникла... Может быть я какую-то библиотеку пропустил??? Которая отвечает за эти параметры в функции Locate.
MonoLife (2009-05-25 03:52:00) [9]
> Чипырик © (23.05.09 08:04)
Если ты не веришь в то, что тебе сказали в [1]
Попробуй так:
Table1.First;
Table1.Locate('Nazvan', Edit1.Text, [loPartialKey, loCaseInsensitive]);
а потом, так:
Query1.First;
Query1.Locate('Nazvan', Edit1.Text,[loCaseInsensitive, loPartialKey]);
turbouser (2009-05-24 23:17:00) [10]
> sniknik © (24.05.09 22:40) [18]
бесполезно :(
sniknik (2009-05-24 22:40:00) [11]> Хорошо, попробую так...
а попробуй так -> реальные данные + реальный код или реальный тестовый пример в котором однозначно показывает то что ты считаешь проблемой.
Dennis I. Komarov_ (2009-05-24 22:38:00) [12]
> Чипырик © (24.05.09 21:39) [15]
> Хорошо, попробую так...
> Вопрос описаный в первом сообщении так и не решен...
Почитай самый первый ответ и тыковку не забудь почесать
turbouser (2009-05-24 22:33:00) [13]
> Чипырик © (24.05.09 21:39) [15]
> Вопрос описаный в первом сообщении так и не решен...
Ясный пень.. Если не прилагать усилий - не решится до скончания веков...
Чипырик (2009-05-24 21:39:00) [14]Хорошо, попробую так...
Вопрос описаный в первом сообщении так и не решен...
Чипырик (2009-05-24 21:30:00) [15]Удалено модератором
turbouser (2009-05-24 21:26:00) [16]
> Чипырик © (24.05.09 21:21) [12]
> > s<>'Nazvan'
>
> То не понятно, толи это вопрос, толи это утверждение???
и то и другое.
> то, отвечу... Реплика не уместна..
гы :)
> Сходи в телесервис... отремонтируют.
о как! =))))
зы
LOL =)
Чипырик (2009-05-24 21:21:00) [17]2 turbouser
в море твоего флуда довольно тяжело уловить нить твоих рассуждений.
Если ты об этом
> s<>'Nazvan'
То не понятно, толи это вопрос, толи это утверждение???
Если ты об этом
> ндаааа...я думал, все помнят со школьной скамьи, что "от
> перестановки мест слагаемых, сумма не меняется"как я ошибался!
> !! :))))
то, отвечу... Реплика не уместна..
если об этом...
.
> нда :) мой телепатор окончательно сломан...
Сходи в телесервис... отремонтируют.
turbouser (2009-05-24 21:17:00) [18]
> Чипырик © (24.05.09 21:08) [10]
>
> 2 turbouser
> не пойму ты о чем?
значит и не надо :)
хотел задать наводящий вопрос.. ну нафиг.. надоело..
Чипырик (2009-05-24 21:08:00) [19]2 turbouser
не пойму ты о чем?
turbouser (2009-05-24 21:05:00) [20]
> Чипырик © (24.05.09 21:03) [8]
нда :) мой телепатор окончательно сломан...