Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Работа метода Locate 
:(
    Опции темы
PsiMagistr
Дата 22.7.2011, 14:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 479
Регистрация: 31.12.2009

Репутация: нет
Всего: 1



Ребята, есть некоторая таблица PredmetsTeached модуля DataM

При попытке использовать if DataM.PredmetsTeached.Locate('LinkToPredmets', 1, []) then ShowMessage('Есть поле') вызова сообщения не происходит. Перехода курсора также непроисходит. (В гриде он точно не отображается);

Причем убежден, что поле LinkToPredmets хотя бы одной записи содержит значение 1.

Вот. На рисунке отчетливо видно, что это поле существует и имеет соответствующее значение.


Если меняю Locate на ручной поиск в цикле все работает.

Код

procedure TfrmNastroyki.SpeedButton1Click(Sender: TObject);
var i:Integer;
begin
//if DataM.PredmetsTeached.Locate('LinkToPredmets', 1, []) then  ShowMessage('Есть поле');
for i := 1 to DataM.PredmetsTeached.RecordCount do
begin
DataM.PredmetsTeached.MoveBy(i);
if DataM.PredmetsTeached.FieldByName('LinkToPredmets').AsInteger = 1 then

begin
ShowMessage('12345');
break;
end;

end;
end;





Это сообщение отредактировал(а) PsiMagistr - 22.7.2011, 15:20

Присоединённый файл ( Кол-во скачиваний: 17 )
Присоединённый файл  screen.JPG 196,12 Kb


--------------------
"Арфы нет? Возьмите бубен!

Ребята, будем жить!"

 (с) "В бой идут одни старики"

---

"ИЕ" - один из самых сумасшедших браузеров в нашей галактике.
PM MAIL   Вверх
14SatanA88
Дата 22.7.2011, 15:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 393
Регистрация: 13.5.2010

Репутация: 1
Всего: 5



у меня недавно была такая же проблема, только в Delphi 7.
так как не было времени разбираться, я до сих пор не знаю в чем была проблема.

но то что я искал с помощью Locate, нашел с помощью Filter.
PM MAIL ICQ   Вверх
Данкинг
Дата 22.7.2011, 15:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Yersinia pestis
****


Профиль
Группа: Завсегдатай
Сообщений: 8302
Регистрация: 7.11.2006
Где: მოსკოვი

Репутация: 35
Всего: 130



А там в квадратных скобках ещё параметры есть. Если их заюзать?


--------------------
There's nothing left but silent epitaphs.
PM MAIL WWW   Вверх
PsiMagistr
Дата 22.7.2011, 15:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 479
Регистрация: 31.12.2009

Репутация: нет
Всего: 1



Данкинг,  а смысл их юзать? Это же не строковые поля, а интегровые. Тут их юзай, не юзай.

Таблица является связанной. Дочерней по отношению к таблице с персонажами.

Можно цикл заюзать, но это меня убивает. Зачем тогда Locate?

Это сообщение отредактировал(а) PsiMagistr - 22.7.2011, 15:26


--------------------
"Арфы нет? Возьмите бубен!

Ребята, будем жить!"

 (с) "В бой идут одни старики"

---

"ИЕ" - один из самых сумасшедших браузеров в нашей галактике.
PM MAIL   Вверх
Poseidon
Дата 22.7.2011, 15:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Delphi developer
****


Профиль
Группа: Комодератор
Сообщений: 5273
Регистрация: 4.2.2005
Где: Гомель, Беларусь

Репутация: 3
Всего: 133



Мне уже очень давно не нравится Locate. Советую познакомится с TQuery. Чуть сложнее, но если разобраться...


--------------------
Если хочешь, что бы что-то работало - используй написанное, 
если хочешь что-то понять - пиши сам...
PM MAIL ICQ   Вверх
PsiMagistr
Дата 22.7.2011, 15:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 479
Регистрация: 31.12.2009

Репутация: нет
Всего: 1



Poseidon,  Арфы нет, возьмите бубен! ЭТо конечно интересно, но что все-таки с локейтом делать? Ведь он же существует... И даже как-то работает.


--------------------
"Арфы нет? Возьмите бубен!

Ребята, будем жить!"

 (с) "В бой идут одни старики"

---

"ИЕ" - один из самых сумасшедших браузеров в нашей галактике.
PM MAIL   Вверх
Poseidon
Дата 22.7.2011, 15:42 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Delphi developer
****


Профиль
Группа: Комодератор
Сообщений: 5273
Регистрация: 4.2.2005
Где: Гомель, Беларусь

Репутация: 3
Всего: 133



Ну что я могу тебе ответить без отладчика? Может быть все что угодно. Вплоть до того, что в PredmetsTeached загружена не та база, которая открыта на скиншоте


--------------------
Если хочешь, что бы что-то работало - используй написанное, 
если хочешь что-то понять - пиши сам...
PM MAIL ICQ   Вверх
Akella
Дата 22.7.2011, 16:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Творец
****


Профиль
Группа: Модератор
Сообщений: 18485
Регистрация: 14.5.2003
Где: Корусант

Репутация: 29
Всего: 329



Цитата(PsiMagistr @  22.7.2011,  14:38 Найти цитируемый пост)
 if DataM.PredmetsTeached.Locate('LinkToPredmets', 1, []) then ShowMessage('Есть поле')

locate не ищет наличие поля smile

Добавлено через 2 минуты и 26 секунд
Цитата(Poseidon @ 22.7.2011,  15:25)
Мне уже очень давно не нравится Locate. Советую познакомится с TQuery. Чуть сложнее, но если разобраться...

При чем здесь TQuery и запрос? Ведь требуется программно спозиционировать курсор на нужную запись, так?
PM MAIL   Вверх
Poseidon
Дата 22.7.2011, 16:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Delphi developer
****


Профиль
Группа: Комодератор
Сообщений: 5273
Регистрация: 4.2.2005
Где: Гомель, Беларусь

Репутация: 3
Всего: 133



Цитата(Akella @  22.7.2011,  16:33 Найти цитируемый пост)
Ведь требуется программно спозиционировать курсор на нужную запись, так?
Возможно и так, но зачем? Ведь все-равно все сводится к получению данных. БУдь то данные под курсором или иные. По мне так селектом пользоваться удобнее, чем Locate



--------------------
Если хочешь, что бы что-то работало - используй написанное, 
если хочешь что-то понять - пиши сам...
PM MAIL ICQ   Вверх
PsiMagistr
Дата 22.7.2011, 17:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 479
Регистрация: 31.12.2009

Репутация: нет
Всего: 1



Akella,  Локейт не только позиционирует курсор, но и возвращает True, если значение поля совпадает со значением в локайт.

http://webcache.googleusercontent.com/sear...e=www.google.ru


--------------------
"Арфы нет? Возьмите бубен!

Ребята, будем жить!"

 (с) "В бой идут одни старики"

---

"ИЕ" - один из самых сумасшедших браузеров в нашей галактике.
PM MAIL   Вверх
superVad
Дата 22.7.2011, 19:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 735
Регистрация: 6.4.2006
Где: Черкассы, Украина

Репутация: 3
Всего: 15



Кто такой PredmetsTeached?

Один раз сталкивался с проблемами локейта в фибах - это было в определенной версии и при стечении некоторых обстоятельств.
Но так больше никогда проблем не было.

PM MAIL   Вверх
14SatanA88
Дата 22.7.2011, 20:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 393
Регистрация: 13.5.2010

Репутация: 1
Всего: 5



PsiMagistr, еще вчера я фиксил прогу по работе.
проблема была такая же, как у тебя.

Цитата

возвращает True, если значение поля совпадает со значением в локайт


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

с уважением, 14SatanA88
PM MAIL ICQ   Вверх
Akella
Дата 22.7.2011, 22:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Творец
****


Профиль
Группа: Модератор
Сообщений: 18485
Регистрация: 14.5.2003
Где: Корусант

Репутация: 29
Всего: 329



Цитата(Poseidon @  22.7.2011,  16:43 Найти цитируемый пост)
Цитата(Akella @  22.7.2011,  16:33 Найти цитируемый пост)
Ведь требуется программно спозиционировать курсор на нужную запись, так?
Возможно и так, но зачем? 


После переоткрытия запроса, чтобы пользователь даже не заметил, что НД был переоткрыт smile

Добавлено через 1 минуту и 8 секунд
Цитата(PsiMagistr @ 22.7.2011,  17:23)
Akella,  Локейт не только позиционирует курсор, но и возвращает True, если значение поля совпадает со значением в локайт.

http://webcache.googleusercontent.com/sear...e=www.google.ru

Если тебе нужно только убедиться, существует ли запись, то для этого правильнее использовать Lookup. Lookup работает в разы быстрее.

Добавлено через 1 минуту и 58 секунд
Цитата(PsiMagistr @ 22.7.2011,  17:23)
Akella,  Локейт не только позиционирует курсор, но и возвращает True, если значение поля совпадает со значением в локайт.

http://webcache.googleusercontent.com/sear...e=www.google.ru

Вот правильная ссылка:
http://base.vingrad.ru/view/43-Poisk-nuzhnyih-dannyih

Добавлено через 3 минуты и 5 секунд
Цитата(PsiMagistr @  22.7.2011,  17:23 Найти цитируемый пост)
возвращает True, если значение поля совпадает со значением в локайт.

Правильнее сказать так: возвращает Истину, если метод locate нашёл запись.

Добавлено через 4 минуты и 34 секунды
Цитата(14SatanA88 @  22.7.2011,  20:15 Найти цитируемый пост)
возвращает True, если значение поля совпадает со значением в локайт


с тем же успехом можно применить фильтр или запрос,


ни фильтр, ни запрос, не спозиционируются на нужной записи, если, конечно, запрос/фильтр вернёт много записей и нужная запись будет не перовой.
PM MAIL   Вверх
14SatanA88
Дата 23.7.2011, 11:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 393
Регистрация: 13.5.2010

Репутация: 1
Всего: 5



Цитата

ни фильтр, ни запрос, не спозиционируются на нужной записи, если, конечно, запрос/фильтр вернёт много записей и нужная запись будет не перовой.


1. запрос/фильтр вернул 0 записей --> сойдет за false в Locate.
2. запрос/фильтр вернул 1 запись (то что надо) --> сойдет за true, получим нужную запись.
3. запрос/фильтр вернул 2 и больше записей --> берем первую запись из полученных. то же что и Locate.

вся разница в том, что Locate почему-то глючит. причину я так и не выяснил.
PM MAIL ICQ   Вверх
Akella
Дата 23.7.2011, 14:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Творец
****


Профиль
Группа: Модератор
Сообщений: 18485
Регистрация: 14.5.2003
Где: Корусант

Репутация: 29
Всего: 329



Цитата(14SatanA88 @  23.7.2011,  11:17 Найти цитируемый пост)
1. запрос/фильтр вернул 0 записей --> сойдет за false в Locate.

 smile  smile  smile  smile  smile  smile не сойдёт
PM MAIL   Вверх
Страницы: (3) Все [1] 2 3 
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Базы данных и репортинг"
Vit
Петрович

Запрещено:

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами


Обязательно указание:

1. Базы данных (Paradox, Oracle и т.п.)

2. Способа доступа (ADO, BDE и т.д.)


  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи
  • Вопросы по SQL и вопросы по базам данных не связанные с Дельфи задавать здесь

FAQ раздела лежит здесь!


Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Vit, Петрович.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Базы данных и репортинг | Следующая тема »


 




[ Время генерации скрипта: 0.0579 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.