Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 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
9-1179055650
Frol
2007-05-13 15:27
2009.07.19
Физика велосипеда


2-1243329904
Phoenix
2009-05-26 13:25
2009.07.19
Работа с почтой


2-1243069984
@!!ex
2009-05-23 13:13
2009.07.19
Удаление объекта после Assign


4-1208260980
тимохов
2008-04-15 16:03
2009.07.19
Как задать права доступа к мьютексу


15-1242636295
@!!ex
2009-05-18 12:44
2009.07.19
Реализация JumpHook на Delphi





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