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

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

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

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

Сообщение Vadim » 22.01.2009 06:26:39

SAK писал(а):в этом случае видимо потребуется немного переделать под свои нужды TDBF.CreateBlobSream.

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

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

Сообщение qivi » 22.01.2009 13:09:01

Да не такие они большие... от нескольких килобайт до нескольких мегобайт...
Я конечно не программист и не знаю как оно правильнее... но как то неэстетично куча файлов :oops:
Аватара пользователя
qivi
энтузиаст
 
Сообщения: 703
Зарегистрирован: 19.01.2009 13:45:54
Откуда: Россия

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

Сообщение Vadim » 22.01.2009 13:37:59

qivi писал(а):но как то неэстетично куча файлов

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

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

Сообщение qivi » 22.01.2009 15:06:41

Код: Выделить всё
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 - название таблицы.


Попробовал добавит в пробный проект вот этот код а он жалуется на строку:
Код: Выделить всё
df: TDbfFieldDefs;

Говорит: Unit1.pas(36,18) Error: Identifier not found "TDbfFieldDefs"
Есле не сложно может ктонибудь кинет минимальный примерчик, просто форму, нажал кнопку создалась табличка записалась в файл... добавление новой записи же не отличается от TTable?

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

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

Сообщение perlpunk » 22.01.2009 15:22:56

qivi писал(а):Да не такие они большие... от нескольких килобайт до нескольких мегобайт...
Я конечно не программист и не знаю как оно правильнее... но как то неэстетично куча файлов :oops:


это нормально - завели папку для данных и кладете туда все файлы.
perlpunk
новенький
 
Сообщения: 90
Зарегистрирован: 26.09.2008 21:19:48

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

Сообщение qivi » 22.01.2009 15:39:36

это нормально - завели папку для данных и кладете туда все файлы.


Пожалуй я это обдумаю...

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

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

Сообщение Vadim » 22.01.2009 17:20:16

qivi писал(а):Говорит: Unit1.pas(36,18) Error: Identifier not found "TDbfFieldDefs"

У Вас уже намечается стойкая тенденция не обращать внимание на то, какие типы в каких модулях лежат. И несмотря на то, что компилятор Вам постоянно подсказывает о том, что Вы забыли прописать в строку Uses название нужного модуля, Вы упорно не обращаете на это внимание. Зря, между прочем. Компилятор Вам плохого не посоветует. :)
Давайте моя подсказка будет последней и дальше Вы самостоятельно попытаетесь решать подобные проблемы.
Тип TDbfFieldDefs находится в модуле dbf_fields.
Что нужно непременно сделать в будущем столкнувшись с подобным сообщением и прежде чем писать сюда о такой ошибке? Нужно скачать исходники FreePascal, если Вы этого ещё не сделали, и контекстным поиском поискать, в каком модуле находится объявление этого типа или переменной. И если поиск ничего не дал, значит речь идёт о стороннем компоненте, который в стандартную поставку FreePascal'я не входит. Тогда обращайтесь, мы подскажем, где искать.

Добавлено спустя 7 минут 10 секунд:
qivi писал(а):Да и кстате он постоянно прописывает полный путь до базы, а нельзя локальный?

Можно, отчего ж нельзя. Только не "локальный", а "относительный", так более правильно.
Проблема при написании относительного пути будет в Лазарусе. При разработке он считает текущим каталогом тот каталог, где находится файл lazarus.exe. Следовательно, относительно его он и будет искать все вложенные каталоги. К чему это приведёт, догадываетесь? :) Правильно, к ошибке типа "File not found!". А вот если запустить экзешник Вашей программы с относительным путём, то файл без проблем будет найден.
Vadim
долгожитель
 
Сообщения: 4112
Зарегистрирован: 05.10.2006 08:52:59
Откуда: Красноярск

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

Сообщение qivi » 22.01.2009 18:28:14

У Вас уже намечается стойкая тенденция не обращать внимание на то, какие типы в каких модулях лежат. И несмотря на то, что компилятор Вам постоянно подсказывает о том, что Вы забыли прописать в строку Uses название нужного модуля, Вы упорно не обращаете на это внимание. Зря, между прочем. Компилятор Вам плохого не посоветует.
Давайте моя подсказка будет последней и дальше Вы самостоятельно попытаетесь решать подобные проблемы.
Тип TDbfFieldDefs находится в модуле dbf_fields.
Что нужно непременно сделать в будущем столкнувшись с подобным сообщением и прежде чем писать сюда о такой ошибке? Нужно скачать исходники FreePascal, если Вы этого ещё не сделали, и контекстным поиском поискать, в каком модуле находится объявление этого типа или переменной. И если поиск ничего не дал, значит речь идёт о стороннем компоненте, который в стандартную поставку FreePascal'я не входит. Тогда обращайтесь, мы подскажем, где искать.


Хорошо... спасибо за подсказку.... но можно чуть чуть поподробнее...
Например часто наоборот в юзесах прописано то чего по видимому нет... допустим "Graphics"...
Мне его нужно искать в исходниках паскаля? Или искать некий внешний модуль?

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

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

Сообщение Mr.Smart » 22.01.2009 19:08:40

Я так понимаю Вы пишите в Лазарусе под Windows. Исходники (rtl и packages) фрипаскаля устанавливаются в каталог допустим c:\lazarus\fpc\2.2.2\source\
Например часто наоборот в юзесах прописано то чего по видимому нет... допустим "Graphics"...

Как это нет Graphics :shock:
Mr.Smart
долгожитель
 
Сообщения: 1796
Зарегистрирован: 29.03.2008 01:01:11
Откуда: из леса!

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

Сообщение Vadim » 22.01.2009 19:13:50

qivi
Graphics нужен если Вы пишете приложение, где есть хоть одна форма, т.к. Windows работает не иначе как в графическом режиме.
Во FreePascal и Lazarus'е есть громадное количество модулей. Какие из них использовать зависит от того, как именно Вы собираетесь решить поставленную перед Вами задачу. Та же работа с DBF файлами может строится как на применении классов, и тогда Вам безусловно потребуется модуль Classes, так и на основе динамических списков, что будет более трудозатратно, зато не требует применения дополнительных модулей.
qivi писал(а):допустим "Graphics"...
Мне его нужно искать в исходниках паскаля? Или искать некий внешний модуль?

Прежде всего Вам нужно спокойно сесть и подумать - а чем Вы собираетесь заниматься? Я не шучу и не ёрничаю. Вы увидели в строке Uses название модуля Graphics и собираетесь что-то искать. Вопрос - что же именно Вы собрались искать? Ведь и так понятно, что это название модуля, зачем озадачиваться бессмысленной работой? Прежде чем кидаться писать код, нужно довольно серьёзно подумать:
- что именно Вы собрались писать?
- с помощью чего Вы это собрались писать?
- что там есть в этом "с помощью чего", чтобы решить Вашу задачу?
Сейчас те вопросы, которые Вы задали, полностью лишены какого-либо смысла. Но как только Вы начнёте свою деятельность именно с тех вопросов, что я привёл выше, Ваша мыслительная деятельность сразу примет нужное направление и тогда Вы, задав вопросы, будете чётко понимать ответы.
Вот смотрите, бессмысленно задавать вопрос типа:
Да и исходники паскаля... это один или много файлов? Это статичный набор файлов, или к основному набору куча примочик "привинти на своё усмотрение"?

Заглянув в любой исходник програмы Вы увидите, что там применяются от нуля, до нескольких десятков дополнительных модулей (основной модуль - System - включается в программу всегда, вне зависимости от Вашего желания). Любой дополнительный модуль подключается только в том случае, если в этом модуле есть те компоненты, которые нужны для выполнения Вашей задачи.
Если Вам попался кусок исходника программы, который решает нужную Вам задачу, но компилятор выдаёт Вам сообщения, вроде показанного выше, значит тех типов данных, которые содержаться в исходнике, нет в стандартном модуле. И в этом случае Вам нужно в обязательном порядке применить контекстный поиск в исходниках Паскаля для того, чтобы найти в каком именно модуле находится этот неизвестный тип, чтобы его подключить в строке Uses.
Vadim
долгожитель
 
Сообщения: 4112
Зарегистрирован: 05.10.2006 08:52:59
Откуда: Красноярск

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

Сообщение qivi » 23.01.2009 04:15:19

Я объясню в чём дело...

Месяца 3 - 4 назад я начал изучать дельфи... в виду того что он дастаточно таки платный, я начал искать ему альтернативу (в конечном счёте я не работаю программистом, а ковыряю его в своё удовольствие). Но за то время пока я сидел на делфи я успел начать пару нехитрых програмок, ну и как следствие первое что я стал ваять - это партацию своих же проектиков в лазарус... основная проблема заключается в том, что програмки эти завязаны на компонентах сторонних производителей... ну и вобще у меня складывается о лазарусе следующее мнение: это достаточно зрелая и комфортная среда но её явным недостатком является значительно более малый объём стандартных компонентов, а самое критическое нежелание сторонних производителей выпускать свои компоненты в том числе и под лазарус...
Я же помимо того что портирую свои проекты в лазарус, паралельно тщетно пытаюсь привить лазарусу некоторые компоненты которые я успел использовать в дельфе.

Сообщения типа
у меня нет "Graphics"...

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

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

Хоть это уже вовсе не в тему локальной базы данных, но тут вошло в обсуждение:

Допустим система жалуется на "Graphics" или "LCLIntf" или "Controls" или т.д., я ищу гдето в каталоге C:\lazarus\fpc\2.2.2\source одноимённый модуль... а что с ним делать дальше? Как довести компонент до компиляции?
Аватара пользователя
qivi
энтузиаст
 
Сообщения: 703
Зарегистрирован: 19.01.2009 13:45:54
Откуда: Россия

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

Сообщение Vadim » 23.01.2009 07:07:43

qivi
Начнём с конца. :)
qivi писал(а):Допустим система жалуется на "Graphics" или "LCLIntf" или "Controls" или т.д.,

Когда Вы начинаете свой новый проект в Lazarus, он не может жаловаться именно на эти модули, потому как все без исключения программы в Lazarus строятся на модулях Graphics и Controls. В первом расположены общие процедуры рисования в графической среде (повторю ещё раз - Windows - среда графическая и всё что Вы видите на экране именно рисуется), а Controls - это набор стандартных компонентов на которых основаны все без исключения видимые компоненты Lazarus'а, такие как формы, кнопки, поля редактирования и т.д. и т.п.. Именно поэтому при создании нового проекта они в шаблон проекта уже вставлены по умолчанию, следовательно отсутствовать не могут в принципе. Мало того, если Вы обратите внимание на код проектов из Delphi, то увидите в строке Uses те же самые модули. Поэтому совершенно неважно - начинаете ли Вы новый проект в Lazarus или собираетесь портировать проект из Delphi - эти модули будут объявлены в обязательном порядке, ибо на них строится всё без исключения. Почему упоминается LCLIntf - для меня вообще загадка. Программистом напрямую он не используется, это служебный модуль для внутреннего пользования самого Lazarus'а.
Далее, в отличие от Delphi, где компилятор и среда разработки это одно целое, во FreePascal нет графической оболочки для разработки программ. Именно с целью иметь такую оболочку как в Delphi и был написан Lazarus. Что из этого следует? А следует из этого то, что, например, модуля Controls нет и не может быть в составе FreePascal, а есть он только в составе Lazarus. Надеюсь Вы уже поняли, что компилятор FreePascal и оболочка для программиста Lazarus - это два совершенно разных продукта.
Так почему же возникают ошибки типа:
Допустим система жалуется на "Graphics" или "LCLIntf" или "Controls" или т.д.,

?
Причины две:
1. Либо Вы пытаетесь откомпилировать проект вне среды Lazarus,
2. Либо Вы каким то совершенно непостижимым для меня способом умудрились неправильно установить Lazarus так, что он при установке растерял все свои собственные модули. :)
Как это дело поправить?
Если Вы устанавливали FreePascal отдельно, а Lazarus отдельно (впрочем, даже если и вместе :) ) с помощью программ типа setup, то удалите стандартным способом и FreePascal и Lazarus, возмите с FTP эти чудесные программы в едином комплекте (на сегодняшний день ссылка будет такая: ftp://ftp.freepascal.org/pub/lazarus/Lazarus-0.9.27-18392-fpc-2.2.3-20090123-win32.exe, если же Вы сегодня скачивать не собираетесь, то просто заходите в каталог ftp://ftp.freepascal.org/pub/lazarus/ и берёте там файл аналогичного названия, т.е. где присутствует "Lazarus-0.9.27" и "fpc-2.2.3", и "win32.exe" одновременно, только дата сборки меняется) и устанавливаете стандартным образом у себя в системе, т.е. запускаете скачанный экзешник. После этого можно приступать к работе ни о чём более не заботясь. В этом комплекте собраны и настроены все три составляющие:
- Lazarus со своими исходниками,
- компилятор FreePascal со своими исходниками,
- и то и другое в уже откомпилированном виде.
Как работать?
Если Вы пишете проект с формами и кнопками, то запускаете Lazarus, который предназначен для создания подобных проектов. В нём всё минимально необходимое уже включено по умолчанию. И, по-моему, даже TDBF уже есть на вкладке DataAccess. Если, к примеру, TDB на этой вкладке нету, то в меню Lazarus открываете "Пакет -> Открыть файл пакета (.lpk)", в открывшемся окне выбора файла заходите в каталог, куда Вы поставили Lazarus, далее каталог Componets, видите в нём каталог tdbf, заходите туда, а там лежит собственно и файл пакета, который необходимо установить - dbflaz.lpk. После выбора файла открывается окошко "Пакет dbflaz" и в этом окошке Вы увидите кнопку "Установить". Смело на неё жмёте, и ждёте, когда пакет откомпилируется и установится. Если всё прошло гладко (а в подавляющем большинстве случаев так оно и есть) Lazarus перезагружается сам собой и оп-ля - на вкладке "Data Access" появляется кнопка TDBF. Можно пользоваться.
Любые другие пакеты устанавливаются по тому же принципу.
Если Вы скачали какой-то дополнительный пакет, который не входит в стандартную поставку Lazarus'а, то кидаете каталог с пакетом опять в каталог Components и устанавливаете его тем же макаром.
-----------------------------------------------------
Вы вот можете подумать, что я так красочно всё расписываю и упрекаю Вас только потому, что с самого рождения знал, как работать с Lazarus'ом или меня лично консультируют сами разработчики Lazarus'а. :) Отнюдь, дружище, отнюдь... Я пользуюсь элементарной логикой, которая и подсказывает мне все эти действия. Поверьте, ничего кроме логики здесь не нужно. Я могу спросить, к примеру, а какой компонент применять для работы базами данных типа DBF, если раньше с ними не работал. Мне скажут, так же как и Вам сказали. Но вот расспрашивать почему у меня компилятор выругался на отсутствие модуля в строке Uses или на необъявленный тип данных мне и в голову не придёт, потому как я уже знаю, исходя из той же логики, что модуль, прежде чем использовать, надо подключить в строку Uses, а соответствующий тип надо объявить или подключить опять же соответствующий модуль, где этот тип объявлен. Все эти вещи понимаются и запоминаются уже буквально на второй-третий день после начала занятий программированием. Это самая основа, без этого никуда не двинуться дальше и можно только бесконечно наступать на одну и ту же швабру.
Vadim
долгожитель
 
Сообщения: 4112
Зарегистрирован: 05.10.2006 08:52:59
Откуда: Красноярск

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

Сообщение qivi » 23.01.2009 14:43:34

Лазарус и его компилятор я по отдельно не ставил, и устанавливаливал самым обычным способом просто тыкая далее...

Я пороюсь и поковыряю его сам но он правда жалуется в некоторых случаях на графику и контролы объявленные в юзесах.

Я понял в чём дело... просто у меня до лазаруса небыло даже потребности задуматься что это за раздел "USES" в модуле программы, его всегда формировал Дельфий. Знаете какая была у меня первая проблемма в Лазарус... я написал
Код: Выделить всё
form2.ShowModal;
запустил на компиляцию, получил сообщение об ошибке и совершенно искренне не понимал (это не логика, это хоть примитивнейшие но знания) чего он от меня хочет...

Вобще Vadim огромное тебе спасибо, благодаря тебе я всётаки хоть через 4 месяца общения с языком узнал элементарные вещи которые должен был узнать на второй-третий день после начала занятий программированием. Да и за ссылочку спасибо... у меня был lazarus-0.9.26-fpc-2.2.2-win32.exe, сейчас скачал новый, буду ставить смотреть.
Аватара пользователя
qivi
энтузиаст
 
Сообщения: 703
Зарегистрирован: 19.01.2009 13:45:54
Откуда: Россия

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

Сообщение Ustas » 08.11.2009 13:34:34

В продолжении темы...

Мне тоже нужна локальная база данных (бесплатная). И что бы выбрать, я хочу выяснить, как ими пользоваться. Я имею ввиду не программный код, а взамозвязь с программной. Т.е. хочу узнать:
1.нужно ли разворачивать сервер базы как в Microsoft SQL Server, или это будет что то на подобее BDE, или достаточно одной-двух DLL, что бы мои программы работали. Как осуществляется запуск сервера и его остановка.
2.есть ли какая среда, для оперативной работы с базой: создание и модификация таблиц и данных (не маловажно при разработке).
3.Как храниться информация в базе: в одном фале в каком то месте, или для каждого своего приложения я могу определить свое место (не жестко).

Идеально (или близко к тому) для меня, что то похожее на BDE и его администрирование. Хотя он и хронически устарел и много чего в нем мне не хватало, но в нем было все то, что позволяло мне быстро модифицировать базу и данные.

Вот что то похожее мне и надо...
Ustas
постоялец
 
Сообщения: 153
Зарегистрирован: 19.10.2009 14:58:10
Откуда: г.Муром

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

Сообщение Verx0Laz » 08.11.2009 23:57:31

Ustat, спасибо за постановку вопроса. Тут, в своё время, была очень ценная дискуссия, и хорошо, что ты поднял её на свет божий :) Ибо вопрос был даже не в том, как на Лазаре написать БД, а в том, как Delphi-DB-кодеру пересесть на Лазаря. А главная проблема в этом вопросе заключена в том, что в Дэльфях глубоко в стректуру модулей языка программирования, среды разработки, сторонних и встроенных компонентов и т.п., лезть приходилось крайне редко, ибо достаточно примеров и справочной информации, а в Лазаре без этого - никуда. Надеюсь, этот вопрос (переход с дэльфы на лазаря), будет создан отдельной веткой.
А пока - ответ непосредственно на твой вопрос по базам данных(в Linux пока не силён, расскажу на примере Windows):
Приходилось таскать BDE вместе с программой? Уверен, приходилось :) Вот и мне тоже... Когда я впервые увидел 10-метровый инсталлятор БДЕ, создаваемый Install Shield-ом для моей полторамегабайтной софтинки, сказать что я был разочарован - это значит ничего не сказать. Поэтому пришлось заморочиться на том, как от этого объёма избавиться. В итоге пришлось собирать собственный инсталлятор ядра BDE, который реализует следующий алгоритм:
1) копирует файлы ядра BDE (некоторые DLL, BTL, CVB... описания - в нэте) в директорию установки (по умолчанию - Program Files\Common Files\Borland Shared\BDE).
2) Создает в реестре строковый параметр HKLM\SOFTWARE\Borland\Database Engine\DLLPATH, в котором будет храниться путь к вышеназванной директории установки. Кстати, по этому ключику проще всего программно проверить, установлен-ли в системе БДЕ, и если да, то где.
И всего делов :) Перед установкой непосредственно программы, инсталлятор проверяет, установлена ли нужная версия БДЕ на компьютере, и если нет, то устанавливает или обновляет её по вышеописанному алгоритму. И чудо это увеличивает размер установщика проги всего-то на 250-400 килобайт, а не на 10 метров, как стандартные дэльфячие средства. При этом, юзеру в инструкции не надо писать, что для работы проги ему еще нужно устанавливать БДЕ, выводя его этим из привычного режима "далее-далее-готово".
Вот точно так-же и в Лазаре, за исключением того, что в его комплекте поставки ядер СУБД нет (TDBF - не в счет). Зато есть компоненты для работы с кучей СУБД, и тебе ничто не мешает, как и в работе с БДЕ, создать собственный установщик ядра СУБД и прикрутить к установщику проги по алгоритму, похожему на вышеописанный.
ЗЫ. Рекомендую СУБД FireBird и библиотеку для работы с нею - FBDataSet от Алексея Лагунова (http://alexs75.narod.ru/)
Аватара пользователя
Verx0Laz
постоялец
 
Сообщения: 125
Зарегистрирован: 11.09.2007 11:24:07

Пред.След.

Вернуться в Lazarus

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

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

Рейтинг@Mail.ru
cron