Локальная База Данных без установки дополнительного ПО

Статус
В этой теме нельзя размещать новые ответы.

Ognev

ex-Team DUMPz
Местный
Регистрация
20 Авг 2004
Сообщения
2,079
Реакции
908
Credits
0
Всем доброго времени суток!
Давно уже ищу чего-нибудь, что бы позволило обращаться к локальной БД с помощью SQL без установки дополнительного ПО, ну и, само собой, без написания обработчика запросов SQL. Может кто посоветует готовое решение в виде компонента, позволяющих работать с какими-нибудь известными форматами файлов, или предложит еще какое-нибудь решение. Был бы очень благодарен!
Заранее всем спасибо!

Немного из ответов. Как будет время постараюсь привести все это в божеский вид ...
ploki написал(а):
Обобщаю конкретные варианты встроенных СУБД для Delphi:

1. Порт SQLite под Delphi (Для просмотра ссылки Войди или Зарегистрируйся, совсем бесплатно).

2. AbsoluteDatabase (Для просмотра ссылки Войди или Зарегистрируйся, круче, бесплатна для некомерческого использования, $ 195 за исходники).

3. Accuracer (Для просмотра ссылки Войди или Зарегистрируйся, ещё круче, $ 215 за однопользовательский режим с исходниками + платные обновления $ 225 в год). Есть упрощённая версия - EasyTable, дешевле.

4. NexusDB V2 Embedded (Для просмотра ссылки Войди или Зарегистрируйся, не дам оценки, так как сам не юзал, говорят, что вторая версия вполне ничего, первая версия мне не нравилась, $ 275 с исходниками).

Мой выбор - AbsoluteDatabase. Кто пользовался или знает ещё что недорогое, пусть дополняет этот список. Будет весьма полезно. Особенно интересны оценки реального использования.

Дополнение: нашёл старое сравнение некоторых СУБД - Для просмотра ссылки Войди или Зарегистрируйся, интересно, как источник ссылок.

Надо бы ещё добавить:
5. DISQLite3 (Для просмотра ссылки Войди или Зарегистрируйся, много полезных наворотов поверх SQLite, не использует Db.pas, но за деньги - $ 270 с исходниками, $ 90 - без). По полученному от друга отзыву - весьма достойные компоненты, активно развиваются, автор адекватен, единственный минус - некоторые нестандартные принципы организации как раз из-за неиспользования Db.pas.

Ну и ещё ссылку на Torry для порядка (Для просмотра ссылки Войди или Зарегистрируйся.

ploki; Supported by Guard написал(а):
Firebird Embedded Server пробовали. Действительно Embedded, но
1. Только эксклюзивный доступ!
2. Безопасность низкая! Шифрования не нашли. Вопрос к гуру - ?
3. Не одна DLL, а как минимум 4 + файлы конфигурации (4 МБ минимум) .
4. Неудобно пользоваться DDL.
5. Большой плюс - поддержка кое-чего из SQL99.

А вообще для своих целей - использовать локально нормально созданные фаербёрдовские базы - подходит очень хорошо, да и развивается.

Для просмотра ссылки Войди или Зарегистрируйся
 
Последнее редактирование модератором:

ploki

Местный
Регистрация
16 Май 2005
Сообщения
237
Реакции
180
Credits
0
Честно, говоря, вопрос не очень понятен. Лучше описать задачу.
Непонятно, что такое "дополнительное ПО". Например, MDAC - это дополнительное или нет? Локальная БД уже есть? Если есть, то в каком формате? Если нет, то какие к ней требования по возможностям, защите, масштабируемости?

Навскидку можно назвать Microsoft Desktop Engine, который теперь стал MS SQL Server 2005 Express Edition, Borland MyBase (через ClientDataSet), Borland DB Express, кучу разных компонентов, например AbsoluteDatabase (Для просмотра ссылки Войди или Зарегистрируйся.
Но всё зависит от решаемой задачи.

Дополнение: а на чём собственно пишется прога?
 

Ognev

ex-Team DUMPz
Местный
Регистрация
20 Авг 2004
Сообщения
2,079
Реакции
908
Credits
0
Грубо, ситуация следующая. Есть программа (пусть на Delphi, я только на ней пишу, но не суть, думаю), в ней копится информация, а именно, есть несколько переменных, которые обновляются, при изменении любой, их текущие значения скидываются в строку (переменные при этом разделяются, например, табуляцией, ну или еще чем). При выходе все накопленное пишется в текстовый файл, дабы юзеру было потом чего смотреть.
Хочется все писать не в текстовый файл, а в некий файл, который будем условно называть далее БД (мне все равно, в каком он формате). От этой БД требуется всего лишь одно - чтобы программа могла из нее получать данные запросами SQL. Желательно, чтобы ими же могла в нее писать. Ничего более мне не надо - пусть это будет элементарная локально-однопользовательская БД без всяких наворотов. А без дополнительного ПО, это означает, что я не должен на машине ставить, например, Oracle, прежде чем моя прога заработает :) Должно быть так - я принес ехе-шник на любой комп (ну, максимум dll-ки какие-нибудь) и все работает.
Решил добавить в продолжение темы. Может есть дрова под dbExpress для работы с текстовыми файлами, dbf-ками или еще чем нибудь подобным. Это вполне бы устроило.
 
Последнее редактирование модератором:

verhovetc

Местный
Регистрация
7 Окт 2005
Сообщения
63
Реакции
13
Credits
102
1. Попробуй покопаться в XML.
2. Смотри на _realco_ding.net_ и _sql._ru там что-то похожее поднимается с завидной периодичностью :)
3. А что значит ДРОВА для dbExpress &)
 

ALEXPLUS

Местный
Регистрация
25 Окт 2005
Сообщения
12
Реакции
3
Credits
20
Ognev
Никаких дров тебе не надо. Используй формат MS Access - *.mdb. Соединяешься с базой через компоненты на вкладке ADO (эти компоненты есть в стандартном дистрибутиве) и работаешь записываешь/читаешь данные в/из неё через SQL запросы. Единственное что тебе нужно предварительно сделать - это создать сам файл базы данных, т.к. программно создавать её муторно (сам не знаю как это делать, если честно). Просто создай через Access базу (то бишь структуру), обзови её как хочешь и таскай со своей прогой. Если возникнут вопросы пиши на alexplyus[dog]mail.ru
 
Последнее редактирование модератором:

Ognev

ex-Team DUMPz
Местный
Регистрация
20 Авг 2004
Сообщения
2,079
Реакции
908
Credits
0
Попробуй покопаться в XML
XML имею ввиду, но вопрос был про готовые решения. Если есть готовые компоненты для работы с этим форматом, то можно поподробнее?

Используй формат MS Access
Не пользовался никогда ADO, но подозрева, что для его работы на компе что-нибудь надо устанавливать, типа BDE. А если да, то проще BDE поставить и работать с dbf-ками или текстовым форматом.
 

ploki

Местный
Регистрация
16 Май 2005
Сообщения
237
Реакции
180
Credits
0
Для работы с XML есть много готовых решений. Самое известное - MSXML (Microsoft XML Core Services). XML плох тем, что занимает очень много места, к томуже для твоей задачи он избыточен.

ADO входит в состав MDAC (Microsoft Data Access Components). Какая-нибудь версия стоит на любом компе, вопрос только - какая именно :). Но можно ориентироваться не на последнюю. Использовать ADO - хороший вариант в смысле последующего масштабирования или смены формата базы. Никто не мешает через ADO работать и с текстовыми файлами :)
BDE устанавливать в любом случае сложнее, плюс, придётся конфигурировать.

Слегка повторюсь, теперь уже более осмысленно:
Поскольку пишешь на Delphi, попробуй для начала использовать TClientDataSet (Удобно, просто. Кстати, поддерживает XML. Информации по нему полно в Инете, например с ходу: Для просмотра ссылки Войди или Зарегистрируйся, Для просмотра ссылки Войди или Зарегистрируйся).
Затем можно посмотреть полноценные СУБД, которые интегрируются в EXE-файл. AbsoluteDatabase (Для просмотра ссылки Войди или Зарегистрируйся) - весьма неплохая СУБД, надёжная, нормально поддерживает SQL.
 
Последнее редактирование модератором:

ALEXPLUS

Местный
Регистрация
25 Окт 2005
Сообщения
12
Реакции
3
Credits
20
ploki написал(а):
ADO входит в состав MDAC (Microsoft Data Access Components). Какая-нибудь версия стоит на любом компе
Добавлю, что на WinXP ничего не надо ставить, а вот под Win98 версия старовата, но все равно пашет, гарантированно (писал прогу под WinXP в Delphi 7, прога работала на Win98 машине без проблем). Единственно проблемы могут возникнуть с Win95 (!!!) - там придется ставить новый МDAC.
 

Ognev

ex-Team DUMPz
Местный
Регистрация
20 Авг 2004
Сообщения
2,079
Реакции
908
Credits
0
Хорошо, ADO буду иметь в виду, но есть внутреннее ощущение, что с этим будет больше гемороя, чем пользы :)

На счет XML, думаю, что он не столько избыточен для создания на нем БД, сколько просто для этого (по хорошему) не предназначен. Хотя, я с этим форматом не на столько хорошо знаком, чтобы настаивать. Но пока из всего предложенного это более всего для меня, похоже, подходит.

На счет установки BDE ... ну, есть готовые решения, чтобы включить его установку и конфигурацию в инсталятор, так что не то, чтобы сложнее ... просто методически это плохое решение.

На счет TClientDataSet ... как я себе представляю ситуацию (поправьте, если ошибаюсь), вся эта байда работает только для 5-ти типов БД, для которых Borland соизволил написать свою дрова. Про остальные БД ими было сказано - пишите свои дрова и будет вам счастье.

Встроенные БД ... тоже методически не хотелось бы хранить данные в ехе-шнике. Будет гемор с обменом данными из разных БД.
 

ploki

Местный
Регистрация
16 Май 2005
Сообщения
237
Реакции
180
Credits
0
Поправлю про TClientDataSet - не путаем с Borland DBExpress! Совершенно разные вещи. TClientDataSet - часть технологии MIDAS, но прекрасно подходит для работы с локальными данными, особенно если у тебя одна-две таблицы. Данные хранятся либо в файле cds, либо в xml. То есть основное назначение TClientDataSet - кэширование данных в многозвенных приложениях, но реализация получилась столь удачна, что Borland официально рекомендует его использовать для работы с локальными данными и называет технологией MyBase.

DBExpress тоже неплохая вещь, но это не СУБД, а скорее провайдер как раз для серьёзных внешних СУБД. DBExpress для текстовых файлов нет именно по этой причине.

Про встроенные БД замечание не понял - ведь данные в exe-шнике хранить и не надо: БД отдельно, а только СУБД - в exe-шнике.

P.S. Складывается впечатление, что при обсуждении часто смешиваются понятия БД, СУБД, провайдера данных, файла-хранилища и т.п. Может, создать тему про основные определения и технологии СУБД (ограничившись только реляционной моделью, а то слишком широко будет)?
 
Последнее редактирование модератором:

Ognev

ex-Team DUMPz
Местный
Регистрация
20 Авг 2004
Сообщения
2,079
Реакции
908
Credits
0
Я чего-то не понял, а что TClientDataSet умеет выполнять SQL запросы?

На счет "только СУБД - в exe-шнике" - ошибочка, значится вышла :) надо будет глянуть, что это такое.

Ну а на счет смешивания понятий ... Нет, если есть желание написать статью, так никто ж не против :) Полезно, думаю, будет. Только глянь сначала по поиску, может кто-то уже это делал.
 

ploki

Местный
Регистрация
16 Май 2005
Сообщения
237
Реакции
180
Credits
0
DataSet'ы вообще запросы не выполняют. Запросы выполняют TQuery (который тебе и нужен), TADOQuery, TSQLQuery и др.
По использованию TClientDataSet cмотри раздел справки BDS "Using Client Datasets: Overview" и, особенно, "Using a Dedicated File on Disk".

Про остальное посмотрим :)

Дополнение: я не очень понял, зачем вообще связываться с SQL, если уже есть фильтрация, поиск, вычисляемые поля. Или у тебя всё-таки несколько таблиц со сложными отношениями?
 
Последнее редактирование модератором:

trans

Местный
Регистрация
21 Сен 2005
Сообщения
14
Реакции
3
Credits
28
Может надо что-то наподобие SQLite?
 

ploki

Местный
Регистрация
16 Май 2005
Сообщения
237
Реакции
180
Credits
0
Тоже неплохой вариант. В первую очередь бесплатностью.
Но SQLite - DLL библиотека (причём Сишная), поэтому придётся изучить API и написать юнит для поддержки. Кстати, кто-то уже это сделал.

AbsoluteDatabase удобней и чуть продвинутей, но платная.
 

Ognev

ex-Team DUMPz
Местный
Регистрация
20 Авг 2004
Сообщения
2,079
Реакции
908
Credits
0
я не очень понял, зачем вообще связываться с SQL
Потому что, устроить фильтрацию, поиск и еще чего-нибудь по пяти полям, я могу и сам из текстового файла. Вопрос стоит глобально. Попробу еще раз сформулировать:
1) Нужна однопользовательская БД (читай, что не нужны никакие навороты).
2) То, что ploki любит называть СУБД, должно быть ехе-шнике программы и/или dll-ках, а не инсталироваться, как дополнительный софт.
3) Нужно, чтобы то, что ploki любит называть СУБД :))) поддерживало выборку данных и их сохранение/модификацию через запросы SQL (не обсуждается, хочу и все :))
4) Мне не нужен геморой в виде написания своих dll, обработчиков SQL, еще чего-то подобного.
В идеале, хотелось бы иметь компонент(ы) или класс(ы), делающие все это, чтобы при необходимости я мог вставить это в любое приложение и жить долго и счастливо :)

На счет DataSet-ов и Query, так мне казалось что данные передатся из Query в DataSet, а не наоборот! У меня пока нет под рукой дельфы, так что не посмотреть. А если я прав, тогда (с учетом того, что SQL обязателен), то вроде как DataSet-ы отпадают.
 
Статус
В этой теме нельзя размещать новые ответы.