Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Как установить курсор в TTable на определенную запись ?


Страницы:   1 2 3 4 5

Kostafey ©   (2008-05-02 17:30:00) 

Сначала вопрос казался глупым...

function Locate(...
Searches the dataset for a specified record and makes that record the current record.
Попробовал - находит-то запись он находит, а курсор не устанавливает.

FindKey или EditKey & GotoKey требуют чтобы поле было индексированным,
но в моем случае это не так.

P.S.
Использование возможностей СУБД и SQL по ряду причин
нежелательно. Требуется именно установить курсор в TTable.

Как проше всего это сделать?


Kostafey   (2008-05-02 18:19:00) [61]

> [30] Loginov Dmitry ©   (02.05.08 18:14)
> Проблема в чем-то другом. Поле любое может быть. Проверь
> обработчики (AfterScroll прежде всего)

Что именнно проверять?
procedure TForm1.Table1AfterScroll(DataSet: TDataSet);
begin
 ShowMessage('scrol');
end;

Да, действительно scrol возникает при Locate...


> [31] {RASkov} ©   (02.05.08 18:14)

Да, все так, но почему-то пока у меня это работает только для ключевых полей.


{RASkov}   (2008-05-02 18:14:00) [62]

> [24] Kostafey ©   (02.05.08 18:06)
> > [21] {RASkov} ©   (02.05.08 18:03)
>
> Оказывается обязательно...

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.

? Я вообще-то не знаю англ, но по моему здесь говориться о том, что я сказал в [21].... только вместо "перебора" - фильтр...


Loginov Dmitry   (2008-05-02 18:14:00) [63]

> Делаем TDBGrid. Щелкаем в ней куда-нибудь.
>
> жмем на упомянутую в
> > [16] Kostafey ©   (02.05.08 17:57)
>
> кнопку - оказываемся на 1 записи


Проблема в чем-то другом. Поле любое может быть. Проверь обработчики (AfterScroll прежде всего)


Kostafey   (2008-05-02 18:12:00) [64]

> [27] Palladin ©   (02.05.08 18:08)
> все прямо как в Kostafey ©   (02.05.08 17:57) [16]
>
> давай параметры соединения

Нет никаих параметров.
Просто TTable и в ней DataBaseName
установлен на один из алиасов ODBC


Kostafey   (2008-05-02 18:10:00) [65]

> [25] Palladin ©   (02.05.08 18:08)
>
> > Kostafey ©   (02.05.08 18:00) [18]
>
> нет

Гм. Как поле делаю ключевым все работает,
как ключик снимаю - перестает.


Palladin   (2008-05-02 18:08:00) [66]

все прямо как в Kostafey ©   (02.05.08 17:57) [16]

давай параметры соединения


Kostafey   (2008-05-02 18:08:00) [67]

> [23] Loginov Dmitry ©   (02.05.08 18:05)
> Locate() возвращает True, если он нашел запись по заданному
> значению поля/полей. Зачем ему возвращаться на первую запись?

Делаем TDBGrid. Щелкаем в ней куда-нибудь.

жмем на упомянутую в
> [16] Kostafey ©   (02.05.08 17:57)

кнопку - оказываемся на 1 записи


> Всегда работало. Ни разу не бажило. Проверяй результат функции.

true


Palladin   (2008-05-02 18:08:00) [68]


> Kostafey ©   (02.05.08 18:00) [18]

нет


Kostafey   (2008-05-02 18:06:00) [69]

> Попробуй перед locate сделать FetchAll

Имеется в виду
Table1.FetchAll;

Не помогло.


> [21] {RASkov} ©   (02.05.08 18:03)

Оказывается обязательно...


Loginov Dmitry   (2008-05-02 18:05:00) [70]

Locate() возвращает True, если он нашел запись по заданному значению поля/полей. Зачем ему возвращаться на первую запись?


> Ну откройте Delphi, не поленитесь киньте пару компонентиков
> и конопку.


Всегда работало. Ни разу не бажило. Проверяй результат функции.


Kostafey   (2008-05-02 18:04:00) [71]

> [19] Kostafey ©   (02.05.08 18:02)

Убить надо этих мега-прогеров...:)

В этом-то оказыватся все и дело.
Хм. А базу править нельзя.

Можно ли сделать подобное для
не ключевого и не идентифицирующего поля?


{RASkov}   (2008-05-02 18:03:00) [72]

> [18] Kostafey ©   (02.05.08 18:00)

Методу Locate необязательны ключевые поля.... Если они есть то он их использует, если их нет, то "перебор"...


oxffff   (2008-05-02 18:03:00) [73]

Попробуй перед locate сделать FetchAll


Kostafey   (2008-05-02 18:02:00) [74]

> > у меня все выставило...
>
> Поле ключевое?

В моем случае это поле не ключевое и не идентифицирующее,
хотя и используется в этих целях.


Kostafey   (2008-05-02 18:00:00) [75]

> у меня все выставило...

Поле ключевое?


Palladin   (2008-05-02 17:57:00) [76]

у меня все выставило...


Kostafey   (2008-05-02 17:57:00) [77]

> Да работало это.

procedure TForm1.Button1Click(Sender: TObject);
begin
 Table1.Locate('ind1', '4', []);
end;
установит на 1-ю запись

ind1 - числовое поле

Table1.Locate('ind1', 4, []);
тот же эффект


oxffff   (2008-05-02 17:55:00) [78]

Приведи ключ таблицы и параметры вызова.


Kostafey   (2008-05-02 17:55:00) [79]

> А возвращает TRUE?

Да


> А что за БД?

MS SQL Server 2000


oxffff   (2008-05-02 17:54:00) [80]


> Palladin ©   (02.05.08 17:53) [12]
>
> > Kostafey ©   (02.05.08 17:53) [10]
>
> ща попробую...


Да работало это.


Страницы:   1 2 3 4 5

Наверх

Титульная страница Поиск, карта сайта Написать письмо