Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Ключевое поле в dBase (Table)

1.6K
06 октября 2003 года
Kadet
101 / / 26.03.2003
Всем привет. Такой вопрос.
Есть файл базы данных dBase. Доступ с помощью компонента TTable. В БД есть поле NUM целого типа, характеризующая (в моём приложении) номер документа. Значения полей должна быть уникальны. Как это можно организовать?
Видел в Database Desktop при просмотре существующих записей помимо всех введёных мной полей есть поле (в крайнем левом столбце) наименование которого аналогично с наименованием файла БД и в нём указаны номера записей (допустим 1,3,4 (второе было удалено при работе с БД)). Как к ниму добраться, или расчитать.
348
06 октября 2003 года
Saris
389 / / 14.03.2003
Цитата:
Originally posted by Kadet
Всем привет. Такой вопрос.
Есть файл базы данных dBase. Доступ с помощью компонента TTable. В БД есть поле NUM целого типа, характеризующая (в моём приложении) номер документа. Значения полей должна быть уникальны. Как это можно организовать?
Видел в Database Desktop при просмотре существующих записей помимо всех введёных мной полей есть поле (в крайнем левом столбце) наименование которого аналогично с наименованием файла БД и в нём указаны номера записей (допустим 1,3,4 (второе было удалено при работе с БД)). Как к ниму добраться, или расчитать.



Если тебе нужно чтобы поле само заполнялось, то в таких древних базах был тип autoincrement, который в DatabaseDesktop задавался плюсиком(если мне память не изменяет). А если не нужно, то просто посылаешь пальзователя на... и просишь его ввести другое значение.

1.6K
06 октября 2003 года
Kadet
101 / / 26.03.2003
Цитата:
Originally posted by Saris


Если тебе нужно чтобы поле само заполнялось, то в таких древних базах был тип autoincrement, который в DatabaseDesktop задавался плюсиком(если мне память не изменяет). А если не нужно, то просто посылаешь пальзователя на... и просишь его ввести другое значение.



Вот именно, нужно, чтобы поле заполнялось само.
autoincrement таким образом не задаётся (это есть в Paradox, а в dBase не реагирует).
Пока я сам сделал перебор всех записей, в поиске максимального значения в поле NUM. При Insert ввожу значение на 1 больше. Но при большой базе будет большая задержка, да к томуже, ведь должно же быть разработчиками эта так часто возникаемая ситуация продумана.

1
06 октября 2003 года
kot_
7.3K / / 20.01.2000
Цитата:
Originally posted by Kadet


Вот именно, нужно, чтобы поле заполнялось само.
autoincrement таким образом не задаётся (это есть в Paradox, а в dBase не реагирует).
Пока я сам сделал перебор всех записей, в поиске максимального значения в поле NUM. При Insert ввожу значение на 1 больше. Но при большой базе будет большая задержка, да к томуже, ведь должно же быть разработчиками эта так часто возникаемая ситуация продумана.


в dBase есть параметр unicue, а для ускорения поиска можно все номера выгружать в шаблон класса типа того же меп или set - производить поиск там можно достаточно быстро и эффективно - а загрузить его можно в момент загрузки формы - тогда задержка будет сравнительно небольшой.

1.6K
07 октября 2003 года
Kadet
101 / / 26.03.2003
Цитата:
Originally posted by kot_

в dBase есть параметр unicue, а для ускорения поиска можно все номера выгружать в шаблон класса типа того же меп или set - производить поиск там можно достаточно быстро и эффективно - а загрузить его можно в момент загрузки формы - тогда задержка будет сравнительно небольшой.



Сейчас таблица индексированна по NUM. Поиск МАХ значения происходит при создании формы. Затем я оперирую с МАХ значением. Но ведь есть же какой то алгоритм расчёта, ведь Database Desktop как то определяет номер поля.

1
07 октября 2003 года
kot_
7.3K / / 20.01.2000
Цитата:
Originally posted by Kadet


Сейчас таблица индексированна по NUM. Поиск МАХ значения происходит при создании формы. Затем я оперирую с МАХ значением. Но ведь есть же какой то алгоритм расчёта, ведь Database Desktop как то определяет номер поля.


Что бы определить как ДД определяет номер поля - проще всего использовать SoftIce - я этим как то не озадачивался...:) Только не забывай запустить Frogice - иначе ругаться будет...:D Но думаю что алгоритм примерно такой же - ведь вся база выгружается в память целиком - но это мои предположения. Я в своей работе использую именно то что предложил тебе, только данные хранятся не в базе данных а в обычном бинарнике. Скорость работы вполне приемлимая, и при сравнимых объемах получается быстрее чем у dbase и тем более чем BDE. В любом случае решение задачи будет сводится к оптимальному поиску MAX.

Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог