Подскажите пожалуйста локальную базу данных
Модератор: Модераторы
Подскажите пожалуйста локальную базу данных
Мне нужна локальная база данных (компонент) для Lazarus не нуждающаяся в драйверах, библиотеках, серверах и прочей мути... тоесть компилирующаяся в EXE'шник проекта. Необходимо: поддержка блоб полей, создание баз огромного размера. Что нибудь навроде AbsoluteDataBase было бы близко к идеалу... посоветуйте кто знает
Attid писал(а):а длл можно встроить в бинарник и выгружать по необходимости.
Так ему надо чтобы не было ничего, но это ничего делало всё.
qivi писал(а):Мне нужна локальная база данных (компонент) для Lazarus не нуждающаяся в драйверах, библиотеках, серверах и прочей мути... тоесть компилирующаяся в EXE'шник проекта. Необходимо: поддержка блоб полей, создание баз огромного размера. Что нибудь навроде AbsoluteDataBase было бы близко к идеалу... посоветуйте кто знает
Если sql ненужен - DBF есть в lazarus
perlpunk писал(а):Если sql ненужен - DBF есть в lazarus
Сначала нужно узнать, "...создание баз огромного размера." - это сколько будет в мегакилобайтах. А то ведь человек будет одними только индексами заниматься, если таблицы в базе будут действительно огромного размера...
Так ему надо чтобы не было ничего, но это ничего делало всё.
VolgaDB и Absolute DataBase - мне это делать позволяли... но это было в делфи (хочу от него отказаться)
"...создание баз огромного размера."
На самом деле мне нужно не так много, всего 1 таблица на 12 полей, хотябы несколько сотен тысяч записей я предпологаю будет достаточно... но дело в том, что одно из полей типа блоб, из за чего файл базы очень быстро начинает раздувать.
К примеру с Absolute DataBase у меня возникла такая проблемма: при достижении размера в 21.5 гигабайта, база (я сперва думал моё приложение) выдавала сообщение гласящее что у меня переполнен тип интегер... в моей программе переменной данного типа которая могла переполнится. По заявленным харрактеристикам производителя база могла достигать теробайтных размеров файла и иметь милионов записей. В моём случае это не достигало 21000 записей варьируясь в зависимости от размера записываемого в блоб поле файла.
Если sql ненужен - DBF есть в lazarus
SQL даром не надо. Я прошу извенения за наверное беспредельно элементарные вопросы, но я всего месяца 3 - 4 изучаю делфи (а теперь лазарус). Правильно ли я понимаю что DBF не требует библиотек и драйверов синтегрируется в EXE'шник и моя программа без плясок с бубном запустится на любом ПК? Она поддерживает блоб поля?
Да, кстати индексы на самом деле то же не нужны
Компонент TDBF, который работает с DBF файлами, действительно не требует ничего, окромя себя самого, т.к. структура DBF файла очень проста.
Если посмотреть возможности только самого файла таблицы (без индексов), то в спецификации к FoxPro (а оно использует именно формат DBF) написано:
Максимальное число записей - 1 миллиард
Максимальное число символов в записи - 65500.
Если посчитать 65500 * 10Е9, то получится максимальный размер файла 65,5 ТераБайт.
Увы, Микрософт резко охлаждает наш пыл.
Максимальный размер файла таблицы - 2 ГБ.
Максимальный размер файла для блоб-полей - 2 ГБ.
Таким образом, если у Вас таблица будет состоять из одних блоб-полей размером по 100 МБ, то записей в таблице будет не более 20 шт. (Расчёт приблизительный
)
Конечно, можно заводить новую таблицы, если старая имеет тенденцию выхода за пределы 2 ГБ (учитывайте вместе с размером блоб-полей и размер одной записи оставшихся типов).
Так что смотрите сами...
Если посмотреть возможности только самого файла таблицы (без индексов), то в спецификации к FoxPro (а оно использует именно формат DBF) написано:
Максимальное число записей - 1 миллиард
Максимальное число символов в записи - 65500.
Если посчитать 65500 * 10Е9, то получится максимальный размер файла 65,5 ТераБайт.
Увы, Микрософт резко охлаждает наш пыл.
Максимальный размер файла таблицы - 2 ГБ.
Максимальный размер файла для блоб-полей - 2 ГБ.
Таким образом, если у Вас таблица будет состоять из одних блоб-полей размером по 100 МБ, то записей в таблице будет не более 20 шт. (Расчёт приблизительный
Конечно, можно заводить новую таблицы, если старая имеет тенденцию выхода за пределы 2 ГБ (учитывайте вместе с размером блоб-полей и размер одной записи оставшихся типов).
Так что смотрите сами...
Так, всё это совсем не плохо...
Но есть один каверзнейший момент... Таблица визуализируется в дбгриде. Допустим при выходе за приделы некого размера будет создаваться новая тадлица... Как сделать так чтоб несколько таблиц выводились в дбгрид как одна? Тоесть если поставить курсор сверху, он встанет на первую запись первой таблицы, а когда промотаеш до последней записи он будет стаять на последней записи последней таблицы... Можно так сделать?
Да я тут кстате посмотрел редакторы DBF файлов... там нет полей типа интегер?!!
Но есть один каверзнейший момент... Таблица визуализируется в дбгриде. Допустим при выходе за приделы некого размера будет создаваться новая тадлица... Как сделать так чтоб несколько таблиц выводились в дбгрид как одна? Тоесть если поставить курсор сверху, он встанет на первую запись первой таблицы, а когда промотаеш до последней записи он будет стаять на последней записи последней таблицы... Можно так сделать?
Да я тут кстате посмотрел редакторы DBF файлов... там нет полей типа интегер?!!
NUMERIC (4) - разве не Integer 
Как с помощью Tdbf создать таблицу из кода?
Правильно ли я понял:
NUMERIC - Integer
CHARACTER - String
BINARY - Blob
Правильно ли я понял:
NUMERIC - Integer
CHARACTER - String
BINARY - Blob
Есть свойство DbfFile в которое пишешь имя файла, а потом вызывай метод CreateTable
qivi писал(а):там нет полей типа интегер?
Ну как же нету? Есть там всё.
qivi писал(а):NUMERIC - Integer
CHARACTER - String
BINARY - Blob
Это Вы не создали таблицу, а написали, какие в ней должныбыть типы данных.
TDbf практически полностью повторяет тип TTable в Delphi. Так что можете посмотреть там в справке.
Код: Выделить всё
procedure TForm1.Button1Click(Sender: TObject);
Var
df: TDbfFieldDefs;
begin
df:=TDbfFieldDefs.Create(dbf1);
df.Add('id', ftInteger);
df.Add('packages', ftString, 60);
df.Add('desc', ftString, 80);
df.Add('note', ftMemo, 60);
dbf1.CreateTableEx(df);
end;
Добавлено спустя 7 минут 47 секунд:
Только не забудьте в свойство FilePath написать путь к базе данных, а в свойство ableName - название таблицы.
-
SAK
- постоялец
- Сообщения: 158
- Зарегистрирован: 17.02.2006 23:45:14
- Откуда: Тим
- Контактная информация:
qivi писал(а): при достижении размера в 21.5 гигабайта,
При таких размерах может проще вместо блоб полей размещать данные в отдельных файлах, а в самой таблице писать только имя такого файла. А обращаться можно попытаться через использование вычисляемых полей, в этом случае видимо потребуется немного переделать под свои нужды TDBF.CreateBlobSream.
Кстати да. Если блоб поля больших размеров - лутше их хранить отдельно в файлах. А в качестве имени файла для каждого такого поля использовать id записи.
