Форум: "Начинающим";
Текущий архив: 2009.07.19;
Скачать: [xml.tar.bz2];
ВнизПоиск через Table и Query, в чем разница? Найти похожие ветки
← →
Чипырик © (2009-05-23 08:04) [0]Доброго времени суток!
Подскажите пожалуйста, почему эти две строки кода не работают одинаково?Table1.Locate("Nazvan", Edit1.Text, [loPartialKey, loCaseInsensitive]);
иQuery1.Locate(s, Edit1.Text,[loCaseInsensitive, loPartialKey]);
Отчего-то в первом случае (Table) не срабатывают параметры [loPartialKey, loCaseInsensitive]. и поиск осуществляется только по точному значению поля "Nazvan".
Во втором случае (Query) все работает отлично.
Эти два кода стоят в TEdit по OnChange (в разных TEdit) и отчего-то работают по-разному.
← →
sniknik © (2009-05-23 13:20) [1]> Подскажите пожалуйста, почему эти две строки кода не работают одинаково?
бес вселился... нужно вызвать священника чтобы покропить комп святой водой.
ничем другим различную работу одного и того же метода наследуемого от TBDEDataSet объяснить нельзя. (ну ты же наверняка все правильно сделал... т.е. глюк с твоей стороны исключаем)
← →
Игорь Шевченко © (2009-05-23 16:15) [2]
> Подскажите пожалуйста, почему эти две строки кода не работают
> одинаково?
Потому что в программе ошибка
← →
Чипырик © (2009-05-24 19:59) [3]2 Игорь Шевченко
А в каком месте?
[loPartialKey, loCaseInsensitive] пробовал местами переставлять, не помогает...
← →
sniknik © (2009-05-24 20:03) [4]> А в каком месте?
как всегда, в 17й строке.
← →
MsGuns © (2009-05-24 20:16) [5]>Чипырик © (24.05.09 19:59) [3]
>[loPartialKey, loCaseInsensitive] пробовал местами переставлять, не >помогает...
Святой водой окропил ?
← →
turbouser © (2009-05-24 20:25) [6]
> Чипырик © (24.05.09 19:59) [3]
> [loPartialKey, loCaseInsensitive] пробовал местами переставлять
ндаааа...
я думал, все помнят со школьной скамьи, что "от перестановки мест слагаемых, сумма не меняется"
как я ошибался!!! :))))
← →
turbouser © (2009-05-24 20:30) [7]
> Чипырик © (23.05.09 08:04)
>
> Доброго времени суток!
> Подскажите пожалуйста, почему эти две строки кода не работают
> Table1.Locate("Nazvan", Edit1.Text, [loPartialKey, loCaseInsensitive]);
>
> и
> Query1.Locate(s, Edit1.Text,[loCaseInsensitive, loPartialKey]);
>
s<>"Nazvan"
← →
Чипырик © (2009-05-24 21:03) [8]а по делу???
s - это имя поля, по которому будет производиться поиск...
оно определяется перед функцией Locate.
s может быть равна и "Nazvan" и другим...
ну и естественно s:string;
← →
turbouser © (2009-05-24 21:05) [9]
> Чипырик © (24.05.09 21:03) [8]
нда :) мой телепатор окончательно сломан...
← →
Чипырик © (2009-05-24 21:08) [10]2 turbouser
не пойму ты о чем?
← →
turbouser © (2009-05-24 21:17) [11]
> Чипырик © (24.05.09 21:08) [10]
>
> 2 turbouser
> не пойму ты о чем?
значит и не надо :)
хотел задать наводящий вопрос.. ну нафиг.. надоело..
← →
Чипырик © (2009-05-24 21:21) [12]2 turbouser
в море твоего флуда довольно тяжело уловить нить твоих рассуждений.
Если ты об этом
> s<>"Nazvan"
То не понятно, толи это вопрос, толи это утверждение???
Если ты об этом
> ндаааа...я думал, все помнят со школьной скамьи, что "от
> перестановки мест слагаемых, сумма не меняется"как я ошибался!
> !! :))))
то, отвечу... Реплика не уместна..
если об этом...
.
> нда :) мой телепатор окончательно сломан...
Сходи в телесервис... отремонтируют.
← →
turbouser © (2009-05-24 21:26) [13]
> Чипырик © (24.05.09 21:21) [12]
> > s<>"Nazvan"
>
> То не понятно, толи это вопрос, толи это утверждение???
и то и другое.
> то, отвечу... Реплика не уместна..
гы :)
> Сходи в телесервис... отремонтируют.
о как! =))))
зы
LOL =)
← →
Чипырик © (2009-05-24 21:30) [14]Удалено модератором
← →
Чипырик © (2009-05-24 21:39) [15]Хорошо, попробую так...
Вопрос описаный в первом сообщении так и не решен...
← →
turbouser © (2009-05-24 22:33) [16]
> Чипырик © (24.05.09 21:39) [15]
> Вопрос описаный в первом сообщении так и не решен...
Ясный пень.. Если не прилагать усилий - не решится до скончания веков...
← →
Dennis I. Komarov_ (2009-05-24 22:38) [17]
> Чипырик © (24.05.09 21:39) [15]
> Хорошо, попробую так...
> Вопрос описаный в первом сообщении так и не решен...
Почитай самый первый ответ и тыковку не забудь почесать
← →
sniknik © (2009-05-24 22:40) [18]> Хорошо, попробую так...
а попробуй так -> реальные данные + реальный код или реальный тестовый пример в котором однозначно показывает то что ты считаешь проблемой.
← →
turbouser © (2009-05-24 23:17) [19]
> sniknik © (24.05.09 22:40) [18]
бесполезно :(
← →
MonoLife © (2009-05-25 03:52) [20]
> Чипырик © (23.05.09 08:04)
Если ты не веришь в то, что тебе сказали в [1]
Попробуй так:
Table1.First;
Table1.Locate("Nazvan", Edit1.Text, [loPartialKey, loCaseInsensitive]);
а потом, так:
Query1.First;
Query1.Locate("Nazvan", Edit1.Text,[loCaseInsensitive, loPartialKey]);
← →
Чипырик © (2009-05-25 07:40) [21]Еси вы об этом
> бес вселился... нужно вызвать священника чтобы покропить
>
> комп святой водой.
> ничем другим различную работу одного и того же метода наследуемого
> от 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.
← →
Чипырик © (2009-05-25 07:45) [22]да и еще, если это имее значение Table, DBGrid находятся на одной форме, а Edit находится на другой форме (это для 2-ого куска кода, который не фурычит как надо)
← →
Сергей М. © (2009-05-25 08:18) [23]
> искал хоть какое-нибудь свойство, отвечающее за поиск
> (ну или типа того) не нашел
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
← →
sniknik © (2009-05-25 11:56) [24]> 2 sniknik
> Вот 2 куска реального кода:
чем тут кода больше и он реальней чем в [0]? при том что есть еще куча зависимых форм, кода...
если ты считаешь, что "виноват" только он и обсуждаешь только его, то сделай тестовый пример в котором ничего другого тоже нет, на одной (единственной) форме. и запрос без преобразований (сейчас они у тебя есть судя по названиям поля, или таблица другая) на ту же таблицу, причем проверить лучше не стандартной (не твоей) таблице, а например на country.db из борландовских примеров, чтобы исключить и глюки в таблице.
p.s. обсуждаться должно не гипотетическое "у меня там кое что есть, не скажу что, покажу только то на, что сам думаю, и оно не работает, скажите точно почему, в какой строке/букве я ошибся", а только то, что реально показано и можно проверить.
← →
MsGuns © (2009-05-25 12:11) [25]>Чипырик © (25.05.09 07:40) [21]
Из приведенных кусков абсолютно неясно, ОДИН ЛИ И ТОТ список полей содержится в табице и запросе
Далее - так же неясно ЧТО лежит в эдите в 1-м и во 2-м случае. Отладчик пробовал для проверки чего же все-таки валяется в эдите ? И вообще неясно ОДИН ЛИ И ТОТ ЖЕ эдит. При твоей манере именовать компонеты вполне может быть на форме с таблицей какой-нибудь "посторонний" эдит, к которому и "обращается" код, в то время как ты думаешь что он типа использует нужный.
И последнее. Из сабжа очевидно, что одна и та же фича используется для разных датасетов - почему бы ее реализацию не вынести в отдельную функцию с параметрами, например в датамодуле ? Тогда и ошибки надо было бы искать в единственном месте проекта, а не лизать по сути идентичный код в разных юнитах
← →
Плохиш © (2009-05-25 12:31) [26]А вот мне интересно, в анкете образование по-умолчанию "высшее" подставляется?
← →
Игорь Шевченко © (2009-05-25 12:54) [27]
> в анкете образование по-умолчанию "высшее" подставляется?
Да
← →
Нат © (2009-05-25 20:05) [28]
s:="Название";
...Locate(s, Edit1...Table1.Locate("Nazvan",...
С чего бы им работать одинаково, неужели "Название"="Nazvan"?
Почему Вы думаете, что Table и Query содержат одинаковые наборы?
Наверняка в Query.SQL имеется where.
Наверняка в обоих используются фильтры.
Страницы: 1 вся ветка
Форум: "Начинающим";
Текущий архив: 2009.07.19;
Скачать: [xml.tar.bz2];
Память: 0.53 MB
Время: 0.004 c