Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Не работает Locate 
V
    Опции темы
romanыч
Дата 4.10.2008, 23:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Код

if(ADOTable1->Locate("id","10",TLocateOptions() << loCaseInsensitive)) ShowMessage("ok");
ShowMessage(IntToStr(ADOTable1->FieldByName("id")->AsInteger));

Этот код сначала выдает "ok", а потом "1".
Не пойму. Locate же вроде должен еще и перемещаться на найденную запись.
Или я в чем то не прав?
PM MAIL   Вверх
romanыч
Дата 5.10.2008, 07:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Я понял. Она не перемещает в найденную позицию, так как ADOTable1 связана с другим DataSource через MasterSource.
Подскажите, а есть какой нить другой способ переместиться на запись с определенным "id"?
PM MAIL   Вверх
Данкинг
Дата 5.10.2008, 10:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Yersinia pestis
****


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

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



Цитата(romanыч @  5.10.2008,  08:48 Найти цитируемый пост)
так как ADOTable1 связана с другим DataSource через MasterSource

Не знаю, что такое MasterSource, но почему нельзя таблицу напрямую подключить к ADOConnection ?

Цитата(romanыч @  5.10.2008,  08:48 Найти цитируемый пост)
Подскажите, а есть какой нить другой способ переместиться на запись с определенным "id"? 

Есть вроде нечто вроде этого (пишу в синтаксисе Дельфи):
Код

adotable.recno:=10;

 - т.е. перемещение на строку номер 10 (не id=10, а физический номер =10). А ещё - ну, фильтр если поставить на таблицу или же запросом выбрать данные с нужным ID.


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


Шустрый
*


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

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



Спасибо за внимание.
MasterSorce, это тоже что-то типа фильтра, только связанного с другой таблицей, т.е. у меня 2 ADOTable со связанными с ними DataSorce, и во второй таблице записи фильтруются в зависимости от того какая запись активна в первой, т.е. типа динамического запроса что то.
А фильтр поставить нелььзя так же потому что таблица уже отфильтрована.
RecNo мне не подходит так как мне нужно переместиться к определенному id, а цикл я пускать не хочу(и так уже много вложенных циклов и база большая, долго искать будет).
Но я уже нашел выход.
Оказывается - Locate ищет запись не в той таблице которая отфильтрована, а в оригинальной полной таблице, и он перемещается на первую найденную запись, но так как в моей отфильтрованой таблице эта запись под фильтр не попадает, вот он и возвращает самую первую запись.
Я настроил Locate на поиск по двум полям и тогда все ОК.
Я просто не знал что Locate может искать по нескольким полям, уже и Lookup и Seek перебрал.
PM MAIL   Вверх
Solree
Дата 21.5.2010, 14:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Чтобы не создавать новую тему напишу здесь.

TLocateOptions Opts;
        Opts << loCaseInsensitive;
        for (int Search=0;Search<DBGrid1->Columns->Count;Search++)
        {
                if (ADOTable1->Locate(DBGrid1->Columns->Items[Search]->Title->Caption,Edit1->Text,Opts)==true)
                {
                        Label1->Caption="Малаца";
                        break;
                }
                if (Search==(DBGrid1->Columns->Count)-1)
                {
                        Label1->Caption="Нима такого";
                }
        }

Если то, что надо найти находится в колонке, с которой начинается цикл - то все нормально. Но если нужное находится где-то дальше, то при изменении параметра поиска в Locate выдает ошибку "Аргументы имеют неверный тип, выходят за пределы допустимого диапазона или вступают в конфликт друг с другом". Как использовать эту функцию для такого поиска? Или посоветуйте другой способ.
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++ Builder"
Rrader

Запрещается!

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

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

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


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

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


 




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


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

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