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

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

AutoInc [D7, Paradox]


Maza ©   (2003-08-29 16:08:00) 

Народ!!!
Можно ли реализовать в АвтоИнк такую фишку:
1 напр. есть 5 строк в DBGrid, столбец "№" содержит нумерацию данных строк (от 1 до 5).
2 потом удаляется строка №2, 3, т.е. "№" содержит 1, 4, 5, а как сделать 1, 2, 3?

P.S. В принципе, мона и без АвтоИнк


Langolier   (2003-08-31 23:23:00) [1]

Маленкое исправление к вышесказанному...

TextOut(Rect.Left, Rect.Top, IntToStr(ADOTable1.RecNo));

С Парадоксом эта структура тож работает, но маленькое уточнение: при фильтрации DBE видит отфильтрованные записи и в итоге выдает номера типа: 2, 3, 6, 7, и т.д. При связи Master-Detail и при Сортировки все проходит отлично...
При использовании ADO даже при фильтрациии итог : 1, 2, 3, и т.д.
ЗЫ Повторюсь, данный алгоритм (см. выше) только для визуализации... :-)


Langolier   (2003-08-30 01:19:00) [2]

Попробую... :-)


Anatoly Podgoretsky   (2003-08-30 01:09:00) [3]

Так не про Акцесс же спрашивают, а про Парадокс, вот попробуй поставить фильтр и посмотри, будет ли последовательная нумерация или нет.


Langolier   (2003-08-30 01:00:00) [4]

Данный код служит ТОЛЬКО для нумерации строк при визуализации (во какое словцо-то..) таблицы в DBGrid"е... И RecNo по барабану отфильтрована это таблица или проиндексирована... Я такую конструкцию применил для Detail таблицы, причем ее можно индексировать по любому полю, нумерация эта будет все равно 1, 2, 3, и т.д. (DB MS Access) ;-)


Anatoly Podgoretsky   (2003-08-30 00:25:00) [5]

Не стоит надеяться на RecNo, это хоть и логический тип для Парадокса, но совсем не работает для фильтров. Физических как в dBase нет.


Langolier   (2003-08-29 22:05:00) [6]

2Maza
Используй RecNo... Только используй в перерисовке DBGrid"а:

procedure TForm1.DBGrid1DrawColumnCell(Sender: TObject; const Rect: TRect; DataCol: Integer; Column: TColumn; State: TGridDrawState);
begin
with DBGrid1.Canvas do
begin
if Column.Index = 0 then
begin
FillRect(Rect);
TextOut(Rect.Left, Rect.Top, ADOTable1.RecNo);
end
else
DBGrid1.DefaultDrawColumnCell(Rect, DataCol, Column, State);
end;
end;


В DBGrid"е не забудь добавить пустой столбец и перетащи его в начало: Column.Index = 0...
P.S. Посмотри как это работает и при переиндексации таблицы, и при удалении промежуточных записей... ;-) Удачи...


MsGuns   (2003-08-29 16:59:00) [7]

Событие OnGetText поля НД, на которое ссылается колонка грида, предназначенная для №. При этом само поле не отображается, а вместо него будет:

Text := Format("%6d",[RecNo]);

Format - чтоб выровнить на правую границу


Dred2k   (2003-08-29 16:47:00) [8]

> Stas © (29.08.03 16:14) [1]

С AutoInc такого не сделаешь.
Нужно будет создать новую таблицу.
А вообще, я этот тип данных не советую использовать - глючит, зараза. Порой выдает key violation при вставке, таблица слетает.


GRAND   (2003-08-29 16:22:00) [9]

2 Maza (29.08.03 16:08):

А зачем? Ведь на клиенте Table1.RecNo всегда тебе вернет порядковый номер записи. А если надо в гриде, например, показывать номер КАЖДОЙ записи, то создай вычисляемое поле и в OnCalcField пропиши Table1MYAUTOINC.AsInteger:=Table1.RecNo
И все дела...


Vlad   (2003-08-29 16:21:00) [10]

Без извращений не получится.
Вопрос - а для чего это надо ?
Может тебе кто нибудь по умней что-то посоветует ?


Stas   (2003-08-29 16:14:00) [11]

Можно сделать перенумерацию строк в цикле.

Только это будет долго.


Наверх

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