Подскажите пожалуйста локальную базу данных

Вопросы программирования и использования среды Lazarus.

Модератор: Модераторы

Подскажите пожалуйста локальную базу данных

Сообщение qivi » 20.01.2009 12:54:54

Мне нужна локальная база данных (компонент) для Lazarus не нуждающаяся в драйверах, библиотеках, серверах и прочей мути... тоесть компилирующаяся в EXE'шник проекта. Необходимо: поддержка блоб полей, создание баз огромного размера. Что нибудь навроде AbsoluteDataBase было бы близко к идеалу... посоветуйте кто знает
Аватара пользователя
qivi
энтузиаст
 
Сообщения: 703
Зарегистрирован: 19.01.2009 13:45:54
Откуда: Россия

Re: Подскажите пожалуйста локальную базу данных

Сообщение Slavikk » 21.01.2009 11:39:17

Таких не встречал. SQLite - 1 dll и все ваши проблемы решены или Firebird embeded - более мощно но dll несколько.
Аватара пользователя
Slavikk
постоялец
 
Сообщения: 208
Зарегистрирован: 15.01.2007 22:34:52
Откуда: Из лесов...

Re: Подскажите пожалуйста локальную базу данных

Сообщение Attid » 21.01.2009 12:03:23

а длл можно встроить в бинарник и выгружать по необходимости.
Аватара пользователя
Attid
долгожитель
 
Сообщения: 2585
Зарегистрирован: 27.10.2006 17:29:15
Откуда: 44°32′23.63″N 41°2′25.2″E

Re: Подскажите пожалуйста локальную базу данных

Сообщение Vadim » 21.01.2009 14:06:13

Attid писал(а):а длл можно встроить в бинарник и выгружать по необходимости.

Так ему надо чтобы не было ничего, но это ничего делало всё. :)
Vadim
долгожитель
 
Сообщения: 4112
Зарегистрирован: 05.10.2006 08:52:59
Откуда: Красноярск

Re: Подскажите пожалуйста локальную базу данных

Сообщение perlpunk » 21.01.2009 14:43:32

qivi писал(а):Мне нужна локальная база данных (компонент) для Lazarus не нуждающаяся в драйверах, библиотеках, серверах и прочей мути... тоесть компилирующаяся в EXE'шник проекта. Необходимо: поддержка блоб полей, создание баз огромного размера. Что нибудь навроде AbsoluteDataBase было бы близко к идеалу... посоветуйте кто знает

Если sql ненужен - DBF есть в lazarus
perlpunk
новенький
 
Сообщения: 90
Зарегистрирован: 26.09.2008 21:19:48

Re: Подскажите пожалуйста локальную базу данных

Сообщение Vadim » 21.01.2009 14:57:30

perlpunk писал(а):Если sql ненужен - DBF есть в lazarus

Сначала нужно узнать, "...создание баз огромного размера." - это сколько будет в мегакилобайтах. А то ведь человек будет одними только индексами заниматься, если таблицы в базе будут действительно огромного размера...
Vadim
долгожитель
 
Сообщения: 4112
Зарегистрирован: 05.10.2006 08:52:59
Откуда: Красноярск

Re: Подскажите пожалуйста локальную базу данных

Сообщение qivi » 21.01.2009 15:52:15

Так ему надо чтобы не было ничего, но это ничего делало всё.

VolgaDB и Absolute DataBase - мне это делать позволяли... но это было в делфи (хочу от него отказаться)

"...создание баз огромного размера."

На самом деле мне нужно не так много, всего 1 таблица на 12 полей, хотябы несколько сотен тысяч записей я предпологаю будет достаточно... но дело в том, что одно из полей типа блоб, из за чего файл базы очень быстро начинает раздувать.
К примеру с Absolute DataBase у меня возникла такая проблемма: при достижении размера в 21.5 гигабайта, база (я сперва думал моё приложение) выдавала сообщение гласящее что у меня переполнен тип интегер... в моей программе переменной данного типа которая могла переполнится. По заявленным харрактеристикам производителя база могла достигать теробайтных размеров файла и иметь милионов записей. В моём случае это не достигало 21000 записей варьируясь в зависимости от размера записываемого в блоб поле файла.

Если sql ненужен - DBF есть в lazarus

SQL даром не надо. Я прошу извенения за наверное беспредельно элементарные вопросы, но я всего месяца 3 - 4 изучаю делфи (а теперь лазарус). Правильно ли я понимаю что DBF не требует библиотек и драйверов синтегрируется в EXE'шник и моя программа без плясок с бубном запустится на любом ПК? Она поддерживает блоб поля?


Да, кстати индексы на самом деле то же не нужны
Аватара пользователя
qivi
энтузиаст
 
Сообщения: 703
Зарегистрирован: 19.01.2009 13:45:54
Откуда: Россия

Re: Подскажите пожалуйста локальную базу данных

Сообщение Vadim » 21.01.2009 16:33:16

Компонент TDBF, который работает с DBF файлами, действительно не требует ничего, окромя себя самого, т.к. структура DBF файла очень проста.
Если посмотреть возможности только самого файла таблицы (без индексов), то в спецификации к FoxPro (а оно использует именно формат DBF) написано:
Максимальное число записей - 1 миллиард
Максимальное число символов в записи - 65500.
Если посчитать 65500 * 10Е9, то получится максимальный размер файла 65,5 ТераБайт.
Увы, Микрософт резко охлаждает наш пыл. :)
Максимальный размер файла таблицы - 2 ГБ.
Максимальный размер файла для блоб-полей - 2 ГБ.
Таким образом, если у Вас таблица будет состоять из одних блоб-полей размером по 100 МБ, то записей в таблице будет не более 20 шт. (Расчёт приблизительный :) )
Конечно, можно заводить новую таблицы, если старая имеет тенденцию выхода за пределы 2 ГБ (учитывайте вместе с размером блоб-полей и размер одной записи оставшихся типов).
Так что смотрите сами...
Vadim
долгожитель
 
Сообщения: 4112
Зарегистрирован: 05.10.2006 08:52:59
Откуда: Красноярск

Re: Подскажите пожалуйста локальную базу данных

Сообщение qivi » 21.01.2009 17:02:07

Так, всё это совсем не плохо...

Но есть один каверзнейший момент... Таблица визуализируется в дбгриде. Допустим при выходе за приделы некого размера будет создаваться новая тадлица... Как сделать так чтоб несколько таблиц выводились в дбгрид как одна? Тоесть если поставить курсор сверху, он встанет на первую запись первой таблицы, а когда промотаеш до последней записи он будет стаять на последней записи последней таблицы... Можно так сделать?

Да я тут кстате посмотрел редакторы DBF файлов... там нет полей типа интегер?!!
Аватара пользователя
qivi
энтузиаст
 
Сообщения: 703
Зарегистрирован: 19.01.2009 13:45:54
Откуда: Россия

Re: Подскажите пожалуйста локальную базу данных

Сообщение Mr.Smart » 21.01.2009 17:26:35

NUMERIC (4) - разве не Integer :wink:
Mr.Smart
долгожитель
 
Сообщения: 1796
Зарегистрирован: 29.03.2008 01:01:11
Откуда: из леса!

Re: Подскажите пожалуйста локальную базу данных

Сообщение qivi » 21.01.2009 18:27:57

Как с помощью Tdbf создать таблицу из кода?

Правильно ли я понял:

NUMERIC - Integer
CHARACTER - String
BINARY - Blob
Аватара пользователя
qivi
энтузиаст
 
Сообщения: 703
Зарегистрирован: 19.01.2009 13:45:54
Откуда: Россия

Re: Подскажите пожалуйста локальную базу данных

Сообщение Mr.Smart » 21.01.2009 18:49:46

Есть свойство DbfFile в которое пишешь имя файла, а потом вызывай метод CreateTable
Mr.Smart
долгожитель
 
Сообщения: 1796
Зарегистрирован: 29.03.2008 01:01:11
Откуда: из леса!

Re: Подскажите пожалуйста локальную базу данных

Сообщение Vadim » 21.01.2009 18:56:12

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 - название таблицы. :)
Vadim
долгожитель
 
Сообщения: 4112
Зарегистрирован: 05.10.2006 08:52:59
Откуда: Красноярск

Re: Подскажите пожалуйста локальную базу данных

Сообщение SAK » 21.01.2009 23:13:05

qivi писал(а): при достижении размера в 21.5 гигабайта,

При таких размерах может проще вместо блоб полей размещать данные в отдельных файлах, а в самой таблице писать только имя такого файла. А обращаться можно попытаться через использование вычисляемых полей, в этом случае видимо потребуется немного переделать под свои нужды TDBF.CreateBlobSream.
SAK
постоялец
 
Сообщения: 158
Зарегистрирован: 18.02.2006 00:45:14
Откуда: Тим

Re: Подскажите пожалуйста локальную базу данных

Сообщение perlpunk » 21.01.2009 23:46:11

Кстати да. Если блоб поля больших размеров - лутше их хранить отдельно в файлах. А в качестве имени файла для каждого такого поля использовать id записи.
perlpunk
новенький
 
Сообщения: 90
Зарегистрирован: 26.09.2008 21:19:48

След.

Вернуться в Lazarus

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 55

Рейтинг@Mail.ru