Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Как узнать номер активной строки в TQuery? 
:(
    Опции темы
Dayana
Дата 2.10.2003, 17:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник Клуба
Сообщений: 352
Регистрация: 6.10.2002
Где: Тель-Авив

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



Есть TQuery. Как узнать номер активной на данный момент строки запроса? Т.е. номер строки, где сейчас стоит указатель запроса?
PM MAIL ICQ   Вверх
x77
Дата 2.10.2003, 17:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



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


--------------------
Я никогда не сопротивлялся искушению, поскольку узнал: что мне
не нравится, то меня не искушает.
© Джордж Бернард Шоу (Ирландия)
PM MAIL ICQ   Вверх
x77
Дата 2.10.2003, 17:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



я правльно понимаю, что под запросом имеется в виду результирующий набор данных, а под указателем - текущая запись?


--------------------
Я никогда не сопротивлялся искушению, поскольку узнал: что мне
не нравится, то меня не искушает.
© Джордж Бернард Шоу (Ирландия)
PM MAIL ICQ   Вверх
Dayana
Дата 2.10.2003, 17:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник Клуба
Сообщений: 352
Регистрация: 6.10.2002
Где: Тель-Авив

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



Мне именно и нужен порядковый номер текущей записи в результирующем наборе данных... мне не нужен физический порядок на сервере...
PM MAIL ICQ   Вверх
pigas
Дата 3.10.2003, 04:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



это с-во recno:integer /
PM MAIL   Вверх
pigas
Дата 3.10.2003, 04:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



или в этом духе
PM MAIL   Вверх
pigas
Дата 3.10.2003, 04:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



ок
PM MAIL   Вверх
x77
Дата 3.10.2003, 08:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



это я и имел в виду - RecNo. но вот вчера попробовал... пакость, однако, получается, господа.

RecNo - это действительно номер записи, на которой стоит курсор (DBI - курсор, не квери и тем более не грида!) но квери начитывает записи по несольку штук в буфер. в итоге значение RecNo скачет безобразным образом: открыли квери - 1, пролистали страницу - 10, ещё страницу - 20 и т.д. и самое обидное, что он прав - текущая физическая запись такая и есть. но мы то видим запись из буфера smile.gif и какой у неё номер - мне лично выкупить не удалось. существует тип (рекорд), описывающий каждую запись. в нём для каждой записи прошит номер последовательности либо номер самой записи. я вытаскивал эту запись через крэк класса, приводил к ней текущее значение буфера - и всё равно нефига smile.gif

так что если кто-то мне объяснит, как дорваться до номера записи в кэше bde - с меня пиво smile.gif


--------------------
Я никогда не сопротивлялся искушению, поскольку узнал: что мне
не нравится, то меня не искушает.
© Джордж Бернард Шоу (Ирландия)
PM MAIL ICQ   Вверх
p0s0l
Дата 3.10.2003, 09:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Г-н Посол
****


Профиль
Группа: Экс. модератор
Сообщений: 3668
Регистрация: 13.7.2003
Где: 58°38' с.ш. 4 9°41' в.д.

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



Цитата
существует тип (рекорд), описывающий каждую запись

Что за тип ?



--------------------
С уважением, г-н Посол.
PM   Вверх
x77
Дата 3.10.2003, 10:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



DbTables.pas
Код
 PRecInfo = ^TRecInfo;
 TRecInfo = packed record
   RecordNumber: Longint;
   UpdateStatus: TUpdateStatus;
   BookmarkFlag: TBookmarkFlag;
 end;


с буфером bde работает именно через этот тип.


--------------------
Я никогда не сопротивлялся искушению, поскольку узнал: что мне
не нравится, то меня не искушает.
© Джордж Бернард Шоу (Ирландия)
PM MAIL ICQ   Вверх
Cashey
Дата 3.10.2003, 13:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бессмертный
****


Профиль
Группа: Завсегдатай
Сообщений: 3441
Регистрация: 13.11.2002
Где: в столице

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



x77, не понимаю о чем ты. Св-во RecNo возвращаетномер записи не зависимо от того в квери оно или в тэйбдле. И в квери оно вернет номер текущей записи резулбтирующего набора данных, что кажется и требуется. И кэш здесь сам по себе не причем.



--------------------
библия учит любить ближнего, а камасутра обучает как именно
PM Jabber   Вверх
p0s0l
Дата 3.10.2003, 13:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Г-н Посол
****


Профиль
Группа: Экс. модератор
Сообщений: 3668
Регистрация: 13.7.2003
Где: 58°38' с.ш. 4 9°41' в.д.

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



Думаю также, как и Cashey...
Сделал table, query, вывел запрос в грид. RecNo всегда показывает ту запись, которая выбрана в гриде. Если просто в цикле делать next или менять RecNo, тоже нормально всё. Я не понял, что имел в виду x77 тут:
Цитата
текущая физическая запись такая и есть. но мы то видим запись из буфера

где видим и что ?



--------------------
С уважением, г-н Посол.
PM   Вверх
x77
Дата 3.10.2003, 14:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



у меня он не является номером текущей записи. сначала равен одному. листаю грид. спустя сколько-то там строк становится равным десяти. дохожу до конца грида. делаю вставку. -1. отменяю вставку - 28. т.е. он меняется скачкообразно, по мере того, как квери начитывает данные из таблицы в буфер. и становится равным номеру последней, начитанной в буфер записи. что это за фигня - я пока не знаю, сейчас эксперементировать - времени нет, вечером разберусь и отвечу.

з.ы.
я тоже, почему-то, был уверен, что recno всегда возвращает номер текущей записи в результирующем НД. однако вот.


--------------------
Я никогда не сопротивлялся искушению, поскольку узнал: что мне
не нравится, то меня не искушает.
© Джордж Бернард Шоу (Ирландия)
PM MAIL ICQ   Вверх
x77
Дата 3.10.2003, 17:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



кажется, есть. на *.db, *.dbf всё так, как полагается - в RecNo живёт номер текущей записи. а вот на Ib - полная фигня.
Код
procedure TForm1.Query1AfterScroll(DataSet: TDataSet);
begin
 Label1.Caption := IntToStr (Query1.RecNo);
end;


чушь это, конечно, работать с Ib через BDE, но тем не менее.


--------------------
Я никогда не сопротивлялся искушению, поскольку узнал: что мне
не нравится, то меня не искушает.
© Джордж Бернард Шоу (Ирландия)
PM MAIL ICQ   Вверх
Dayana
Дата 3.10.2003, 17:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник Клуба
Сообщений: 352
Регистрация: 6.10.2002
Где: Тель-Авив

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



Вот и я о том же... пробовала через RecNo... обрабатываю на событие OnCalcFields (или почти так называется), считываю RecNo, а он мне -1 всегда возвращает. Думаю, RecNo содержит номер выделеной строки на db гриде. А OnCalcFields с выделением строки в db гриде не связано.
Задача у меня такая. В db гриде надо вывести колонку с нумерацией всех строк. Я подумала, что самое простое это завести поле в TQuery, которое калькулейтит, и в OnCalcFields заносить туда номер текущей записи. Оказалось проблема с номером текущей записи. Но, и по-другому, как пересчитать строки я до сих пор не знаю. Ведь в db гриде напрямую добраться к ячейки нельзя (как, например, в string гриде). А квери у меня большой, и делать его еще больше, чтобы он сам возвращал номер строки не хочется, т.к. я выяснила, что это не так уж и тривиально. Может есть мысли на этот счет?
PM MAIL ICQ   Вверх
Страницы: (3) Все [1] 2 3 
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Базы данных и репортинг"
Vit
Петрович

Запрещено:

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

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


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

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

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


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

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


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

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


 




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


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

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