Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 2002.09.30;
Скачать: [xml.tar.bz2];

Вниз

Еще раз о больном: Calculated Fields   Найти похожие ветки 

 
VaZ   (2002-09-05 09:06) [0]

Так сказать SOS... Я , значит, написал прогу на диплом "База данных" в Accesse, по ходу дела мне нужна сквозная нумерация записей(т.е 1,2,3...). По глупости сначала я сделал для этих целей отдельное поле, которое и записывал при вставке записи. База выросла и нумерация стала ОЧЕНЬ тормозить, да и порядок исчез (1,3,2...). Решил сделать вычисляемое поле,
в обработчике поставил увеличение(Inc),где правильно обнуление сделать? А то либо заоблачные цифры, либо их нехватка (вместо сотен - десятки). Как вообще реализовать это дело лучше.
SOS!!!


 
VaZ   (2002-09-06 05:16) [1]

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


 
ЮЮ   (2002-09-06 07:19) [2]

>По глупости сначала я сделал для этих целей отдельное поле

Если нумерация всё-таки действительно нужна, то и следи за ней программно: переписывай значения полей при удалении и вставке записей. В Вычислимом поле ты ничего такого не получишь, даже не старайся.


 
DarkGreen   (2002-09-06 11:13) [3]

2ЮЮ
Не советовал бы я такое делать. Даже если в табличке будет порядка 10000 записей, то удаление приведет к такому долгому процессу, что пользователи проги повешают программера на UTP шнуре.
Вообще это можно реализовать с помощью хранимых процедур, но ведь их нету в аксесе, иль есть?


 
ЮЮ   (2002-09-06 11:23) [4]

Я под нумерацией понимаю поле, которое определяет порядок следования записей, отличный от того, в котором записи хранятся в таблице.
А зачем автору сквозная нумерация, бог его знает. Access должен поддерживать RecNo, ведь в его Формах показывается Запись NNN из MMM.


 
VaZ   (2002-09-06 12:05) [5]

так сейчас так и есть, то есть все отслеживается программно
Но тормозит... Насчет хранимых процедур не знаю, не силен.
А вот RecNo я хотел использовать, да ничего не вышло(неправильно делал видимо). Писало всегда -1. Ведь вычисл. поля, если их как-то обнулять где-нибудь, вполне нормально работают. У меня есть след. ситуации, где должна происходить перенумерация:
- при запуске
- при наложении диапазона (выборка по подразделению)
- при фильтрации (алфав. список - по буквам)
- при добавлении, удалении, редактировании


 
VaZ   (2002-09-06 12:07) [6]

А нужна она не мне, нужна тем кому пишу
Они хотят видеть порядковый номер (1,2,3,4 ...N) напротив фамилии
чувака, общее кол-во в базе их не устраивает, а мне то приходится делать, диплом то всем нужен...


 
ЮЮ   (2002-09-06 12:10) [7]

>Ведь вычисл. поля, если их как-то обнулять где-нибудь, вполне нормально работают.

вычисл. поля пересчитаются постоянно при движению по DataSety.


 
oss   (2002-09-06 12:22) [8]

ты конечно мутный :)
сделай дополнительно поле для этого номера, как и есть у тебя,
и сделай дополнительную таблицу,
куда будешь заносить № удаленного,
при вставке будешь брать либо их этой второй таблице, а если она будет аустой, то мах+1 из основной.
Но ето полнейший бред :)


 
ЮЮ   (2002-09-06 12:30) [9]

Взять Другой Grid, например DbGridEh, в нем в onDrawCell есть доступ к DataLink.ActiveRecord, что и есть номер записи. И рисуй её на здоровье в нужный столбец.


 
DarkGreen   (2002-09-06 12:57) [10]

Хм... А может попробовать создать столбец в гриде самостоятельно не назначая ему физического поля БД (он имеет тип TCollectionItem) а при открытии, фильтрации (установка, снятие), удалении, вставки или записи читать количество записей в любом столбце грида (хотя не знаю если пользоваться TTable"ом он сразу закачивает все данные или нет) и соответственно пересоздать самостоятельно созданный столбец.
Других мыслей у меня нет :-/


 
mike9777   (2002-09-06 15:59) [11]

По поводу RecNo - попробуй ADO table и поменять TableDirect. Или CursorLocation и CursorType

Или grid возьми string"овый и сам все вписывай. Это вообще лучше, чем доверять борландовской реализации


 
V aZ   (2002-09-08 08:37) [12]

Спасибо oss за комплимент. Но не я мутный, а заказчики проги. Без этой нумерации почти все идеально работает. Mike9777 я конечно попробую, потом напишу что и как...
Если честно, я думал все попроще будет. А насчет того что calcfield постоянно пересчитываются при движении я заметил...
Может у кого есть еще какие идеи?


 
kavlad   (2002-09-08 14:51) [13]

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


 
Anatoly Podgoretsky   (2002-09-08 15:08) [14]

Что то ты темнишь про заказчиков, нафига им какой то абстрактный номер записи, если им и нужен номер, то номер человека.
Но если уж очень хочется, то надо помучаться с InternalCalc
Если номер нужен в отчете, то все генераторы отчетов позволяют сделать это. Или используй совет kavlad © (08.09.02 14:51), но думаб ты нам можги компостируешь.


 
VaZ   (2002-09-09 08:42) [15]

Anatoly Podgoretsky
> Что то ты темнишь про заказчиков, нафига им какой то абстрактный
> номер записи, если им и нужен номер, то номер человека.

На самом деле мои заказчики - профсоюзный комитет нашей академии (база данных учета членов профсоюза), и у них была база без этих номеров на FOXе - таки не устраивает. Я переделал ее на DELPHI. А вообще я попробую воспользоваться советом kavlad, мне кажется это самый незамудреный путь из предложенных. Я и спрашивал то потому, что думал есть простой путь, а я его не вижу... Думал кто наставит на путь правильный.



Страницы: 1 вся ветка

Форум: "Базы";
Текущий архив: 2002.09.30;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.48 MB
Время: 0.007 c
3-97991
Spooky
2002-09-09 12:54
2002.09.30
SQL-запрос из двух БД


14-98293
Сатир
2002-09-03 19:01
2002.09.30
---|Ветка была без названия|---


1-98088
nikolo
2002-09-19 17:25
2002.09.30
Обхождение графов


1-98183
Андрусь
2002-09-17 20:19
2002.09.30
откуда пришёл фокус


7-98367
SerVS
2002-07-18 23:12
2002.09.30
Адрессная книга Outlook Express





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский