Ключевое поле в dBase (Table)
Есть файл базы данных dBase. Доступ с помощью компонента TTable. В БД есть поле NUM целого типа, характеризующая (в моём приложении) номер документа. Значения полей должна быть уникальны. Как это можно организовать?
Видел в Database Desktop при просмотре существующих записей помимо всех введёных мной полей есть поле (в крайнем левом столбце) наименование которого аналогично с наименованием файла БД и в нём указаны номера записей (допустим 1,3,4 (второе было удалено при работе с БД)). Как к ниму добраться, или расчитать.
Всем привет. Такой вопрос.
Есть файл базы данных dBase. Доступ с помощью компонента TTable. В БД есть поле NUM целого типа, характеризующая (в моём приложении) номер документа. Значения полей должна быть уникальны. Как это можно организовать?
Видел в Database Desktop при просмотре существующих записей помимо всех введёных мной полей есть поле (в крайнем левом столбце) наименование которого аналогично с наименованием файла БД и в нём указаны номера записей (допустим 1,3,4 (второе было удалено при работе с БД)). Как к ниму добраться, или расчитать.
Если тебе нужно чтобы поле само заполнялось, то в таких древних базах был тип autoincrement, который в DatabaseDesktop задавался плюсиком(если мне память не изменяет). А если не нужно, то просто посылаешь пальзователя на... и просишь его ввести другое значение.
Если тебе нужно чтобы поле само заполнялось, то в таких древних базах был тип autoincrement, который в DatabaseDesktop задавался плюсиком(если мне память не изменяет). А если не нужно, то просто посылаешь пальзователя на... и просишь его ввести другое значение.
Вот именно, нужно, чтобы поле заполнялось само.
autoincrement таким образом не задаётся (это есть в Paradox, а в dBase не реагирует).
Пока я сам сделал перебор всех записей, в поиске максимального значения в поле NUM. При Insert ввожу значение на 1 больше. Но при большой базе будет большая задержка, да к томуже, ведь должно же быть разработчиками эта так часто возникаемая ситуация продумана.
Вот именно, нужно, чтобы поле заполнялось само.
autoincrement таким образом не задаётся (это есть в Paradox, а в dBase не реагирует).
Пока я сам сделал перебор всех записей, в поиске максимального значения в поле NUM. При Insert ввожу значение на 1 больше. Но при большой базе будет большая задержка, да к томуже, ведь должно же быть разработчиками эта так часто возникаемая ситуация продумана.
в dBase есть параметр unicue, а для ускорения поиска можно все номера выгружать в шаблон класса типа того же меп или set - производить поиск там можно достаточно быстро и эффективно - а загрузить его можно в момент загрузки формы - тогда задержка будет сравнительно небольшой.
в dBase есть параметр unicue, а для ускорения поиска можно все номера выгружать в шаблон класса типа того же меп или set - производить поиск там можно достаточно быстро и эффективно - а загрузить его можно в момент загрузки формы - тогда задержка будет сравнительно небольшой.
Сейчас таблица индексированна по NUM. Поиск МАХ значения происходит при создании формы. Затем я оперирую с МАХ значением. Но ведь есть же какой то алгоритм расчёта, ведь Database Desktop как то определяет номер поля.
Сейчас таблица индексированна по NUM. Поиск МАХ значения происходит при создании формы. Затем я оперирую с МАХ значением. Но ведь есть же какой то алгоритм расчёта, ведь Database Desktop как то определяет номер поля.
Что бы определить как ДД определяет номер поля - проще всего использовать SoftIce - я этим как то не озадачивался...:) Только не забывай запустить Frogice - иначе ругаться будет...:D Но думаю что алгоритм примерно такой же - ведь вся база выгружается в память целиком - но это мои предположения. Я в своей работе использую именно то что предложил тебе, только данные хранятся не в базе данных а в обычном бинарнике. Скорость работы вполне приемлимая, и при сравнимых объемах получается быстрее чем у dbase и тем более чем BDE. В любом случае решение задачи будет сводится к оптимальному поиску MAX.