![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Еще раз о больном: Calculated Fields [D5, Access 2000]
VaZ © (2002-09-05 09:06:00)Так сказать SOS... Я , значит, написал прогу на диплом "База данных" в Accesse, по ходу дела мне нужна сквозная нумерация записей(т.е 1,2,3...). По глупости сначала я сделал для этих целей отдельное поле, которое и записывал при вставке записи. База выросла и нумерация стала ОЧЕНЬ тормозить, да и порядок исчез (1,3,2...). Решил сделать вычисляемое поле,
в обработчике поставил увеличение(Inc),где правильно обнуление сделать? А то либо заоблачные цифры, либо их нехватка (вместо сотен - десятки). Как вообще реализовать это дело лучше.
SOS!!!
VaZ (2002-09-09 08:42:00) [1]Anatoly Podgoretsky
> Что то ты темнишь про заказчиков, нафига им какой то абстрактный
> номер записи, если им и нужен номер, то номер человека.
На самом деле мои заказчики - профсоюзный комитет нашей академии (база данных учета членов профсоюза), и у них была база без этих номеров на FOXе - таки не устраивает. Я переделал ее на DELPHI. А вообще я попробую воспользоваться советом kavlad, мне кажется это самый незамудреный путь из предложенных. Я и спрашивал то потому, что думал есть простой путь, а я его не вижу...Думал кто наставит на путь правильный.
Anatoly Podgoretsky (2002-09-08 15:08:00) [2]Что то ты темнишь про заказчиков, нафига им какой то абстрактный номер записи, если им и нужен номер, то номер человека.
Но если уж очень хочется, то надо помучаться с InternalCalc
Если номер нужен в отчете, то все генераторы отчетов позволяют сделать это. Или используй совет kavlad © (08.09.02 14:51), но думаб ты нам можги компостируешь.
kavlad (2002-09-08 14:51:00) [3]Хочешь добиться скорости - не стоит хранить нумерацию в базе, это поле тебе вообще не нужно. Если необходимо показывать номер в гриде используй лучше TSrtingGrid, а можно показывать нумерацию в хинте или в отдельном окне с детальной информацией по записи.
V aZ (2002-09-08 08:37:00) [4]Спасибо ossза комплимент. Но не я мутный, а заказчики проги. Без этой нумерации почти все идеально работает. Mike9777я конечно попробую, потом напишу что и как...
Если честно, я думал все попроще будет. А насчет того что calcfield постоянно пересчитываются при движении я заметил...
Может у кого есть еще какие идеи?
mike9777 (2002-09-06 15:59:00) [5]По поводу RecNo - попробуй ADO table и поменять TableDirect. Или CursorLocation и CursorType
Или grid возьми string"овый и сам все вписывай. Это вообще лучше, чем доверять борландовской реализации
DarkGreen (2002-09-06 12:57:00) [6]Хм... А может попробовать создать столбец в гриде самостоятельно не назначая ему физического поля БД (он имеет тип TCollectionItem) а при открытии, фильтрации (установка, снятие), удалении, вставки или записи читать количество записей в любом столбце грида (хотя не знаю если пользоваться TTable"ом он сразу закачивает все данные или нет) и соответственно пересоздать самостоятельно созданный столбец.
Других мыслей у меня нет :-/
ЮЮ (2002-09-06 12:30:00) [7]Взять Другой Grid, например DbGridEh, в нем в onDrawCell есть доступ к DataLink.ActiveRecord, что и есть номер записи. И рисуй её на здоровье в нужный столбец.
oss (2002-09-06 12:22:00) [8]ты конечно мутный :)
сделай дополнительно поле для этого номера, как и есть у тебя,
и сделай дополнительную таблицу,
куда будешь заносить № удаленного,
при вставке будешь брать либо их этой второй таблице, а если она будет аустой, то мах+1 из основной.
Но ето полнейший бред :)
ЮЮ (2002-09-06 12:10:00) [9]>Ведь вычисл. поля, если их как-то обнулять где-нибудь, вполне нормально работают.
вычисл. поля пересчитаются постоянно при движению по DataSety.
VaZ (2002-09-06 12:07:00) [10]А нужна она не мне, нужна тем кому пишу
Они хотят видеть порядковый номер (1,2,3,4 ...N) напротив фамилии
чувака, общее кол-во в базе их не устраивает, а мне то приходится делать, диплом то всем нужен...
VaZ (2002-09-06 12:05:00) [11]так сейчас так и есть, то есть все отслеживается программно
Но тормозит... Насчет хранимых процедур не знаю, не силен.
А вот RecNo я хотел использовать, да ничего не вышло(неправильно делал видимо). Писало всегда -1. Ведь вычисл. поля, если их как-то обнулять где-нибудь, вполне нормально работают. У меня есть след. ситуации, где должна происходить перенумерация:
- при запуске
- при наложении диапазона (выборка по подразделению)
- при фильтрации (алфав. список - по буквам)
- при добавлении, удалении, редактировании
ЮЮ (2002-09-06 11:23:00) [12]Я под нумерацией понимаю поле, которое определяет порядок следования записей, отличный от того, в котором записи хранятся в таблице.
А зачем автору сквозная нумерация, бог его знает. Access должен поддерживать RecNo, ведь в его Формах показывается Запись NNN из MMM.
DarkGreen (2002-09-06 11:13:00) [13]2ЮЮ
Не советовал бы я такое делать. Даже если в табличке будет порядка 10000 записей, то удаление приведет к такому долгому процессу, что пользователи проги повешают программера на UTP шнуре.
Вообще это можно реализовать с помощью хранимых процедур, но ведь их нету в аксесе, иль есть?
ЮЮ (2002-09-06 07:19:00) [14]>По глупости сначала я сделал для этих целей отдельное поле
Если нумерация всё-таки действительно нужна, то и следи за ней программно: переписывай значения полей при удалении и вставке записей. В Вычислимом поле ты ничего такого не получишь, даже не старайся.
VaZ (2002-09-06 05:16:00) [15]Ну люди, ну помогите же
Наверняка уже не раз так делали, а я впервые - подскажите как, направьте в нужное русло. Мне бы алгоритм нумерации работающий правильно...Ну плиз...