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

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

Вопрос по RecNO [D7, Access]


Yurikon ©   (2007-09-25 17:13:00) 

Здраствуйте!

Использую TADOTable. Считываю RecNo, обновляю таблицу (так как записи могут удаляться и вставляться другим приложением), присваиваю RecNo считанное ранее значение. Оказывается, что у двух записей RecNo=2. Как такое может быть?

ЗЫ код такой:

procedure TfmMain.RefreshTable(tb: TDataSet);
var
 rn: integer;
begin
 with tb do
 begin
   try
     tb.Active := True;
     rn := tb.RecNo;
     tb.DisableControls;
     tb.Active := False;
     tb.Active := True;
     tb.RecNo := rn;
   finally
     tb.EnableControls;
   end;
 end;
end;


Anatoly Podgoretsky   (2007-09-26 16:13:00) [1]

У тебя вероятно ошибка в прорамме, с вычислимым полем.


Anatoly Podgoretsky   (2007-09-26 16:12:00) [2]

Что за вирусный сайт, кто просил мне лохотрон втюхивать


sniknik   (2007-09-26 15:57:00) [3]

> сделал через  Locate ... поле счетчик с одинаковым именем
надо(желательно) не счетчик, а ключ, который впрочем по совместительству может быть и счетчиком.

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

> Походит на то, что описал sniknik.
если действительно то же самое, то проверь так, сделай еще одно(или используй существующее) поле и у него в обработчике OnGetText делай Text-у то же значение рекно.
после воспроизведи ту же ситуацию с задвоениями, и сравни поля рядом... должны различаться. (для OnGetText нет ситуаций с не вызовом как у калькулируемого) либо не сумеешь получить задвоение ... (если второй вызов рекно спровоцирует "онкальк")


Yurikon   (2007-09-26 15:32:00) [4]

Вот скриншот таблицы, где recno - это вычислимое поле (= RecNo).

http://img261.imageshack.us/my.php?image=examplerecnoqj9.png

Походит на то, что описал sniknik.

Для других таблиц, где нет удаления записи из вне - такой код отлично работает, так что "валидный" вызов RecNo.

В итоге сделал через  Locate, но пришлось добавить во все таблицы поле счетчик с одинаковым именем, а хотелось написать универсальный код для любой таблицы.


Anatoly Podgoretsky   (2007-09-25 20:48:00) [5]

> Ping  (25.09.2007 20:44:14)  [14]

А RecNO тем более.


Ping   (2007-09-25 20:44:00) [6]

А чтобы перемещаться между записями тебе нужно ... использовать Bookmark.

В примере из [0] набор данных переоткрывается и Bookmark будет невалидным.


Anatoly Podgoretsky   (2007-09-25 19:34:00) [7]

> Yurikon  (25.09.2007 17:13:00)  [0]

RecNo оно логическое, не привязано к конкретной записи.
Ферштейн?


sniknik   (2007-09-25 18:08:00) [8]

> Но можно подробно описать это чудо...:)
это не чудо, он может как художник просто "так видеть"...

типа читает, смотрит запись, удаляет, переходит по рекно, опять смотрит... а они одинаковые. (понятно почему)
+ есть вариант не столь очевидный... сделал показ рекно в калькулируемом поле, удаляет смотрит, а в грида 2 одинаковых рядом. рекно удаленной пересчиталось а старое в записи рядом нет (сталкивался у первой и последней записи. не помню при каких условиях но практичекки на 95% уверен у него будет не середина грида с "задвоениями" ;)


sniknik   (2007-09-25 18:00:00) [9]

> Сюда скриншот можна как-то выложить?
ложи на общие, типа
http://imageshack.us/
сюда давай ссылку


Johnmen   (2007-09-25 17:59:00) [10]

Нельзя.
Но можно подробно описать это чудо...:)


stanislav   (2007-09-25 17:59:00) [11]

Свойство RecNo разве не ReadOnly?
Если это так, то ты просто меняешь номер текущей записи на номер, который ты запомнил...
А чтобы перемещаться между записями тебе нужно Locate Плохиш ©   (25.09.07 17:16) [2]
или использовать Bookmark.


Yurikon   (2007-09-25 17:53:00) [12]

Сюда скриншот можна как-то выложить?


Johnmen   (2007-09-25 17:51:00) [13]


> То есть такого быть не может? Это Вы  хотели сказать?

Да.


Yurikon   (2007-09-25 17:45:00) [14]


> Бред пьяного тракториста...:)


То есть такого быть не может? Это Вы  хотели сказать?


Johnmen   (2007-09-25 17:28:00) [15]


> RecNo начинает дублироваться

Бред пьяного тракториста...:)


Плохиш   (2007-09-25 17:21:00) [16]


> RecNo начинает дублироваться с добавленных другим приложением
> записей...

Чукча - писатель...


Yurikon   (2007-09-25 17:19:00) [17]

Сейчас, обнаружил, что RecNo начинает дублироваться с добавленных другим приложением записей...


Desdechado   (2007-09-25 17:16:00) [18]

> Использую TADOTable. Считываю RecNo,
Забыть как страшный сон и то, и другое.
Использовать ADODataSet и первичный/уникальный ключ в таблице/запросе.


Плохиш   (2007-09-25 17:16:00) [19]

Другая запись имеет RecNo=2.

Запоминай ключевое поле и переходи на запись используя Locate.


Наверх

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