Скринкаст. Установка Firebird и IBExpert. Создание БД. Простой пример на Delphi. Часть 1

Комментарии

164 комментария(ев)
аватар: Belketre
Belketre
Дата: Пнд, 28/03/2011 - 04:34
Звание: Мастер
Сообщений: 1890

Круто! И почему не было этого видео было 4 года назад, когда я изучал Firebird и взаимодействие его с Delphi?

аватар: Kastor
Kastor
Дата: Пнд, 28/03/2011 - 04:38
Звание: Мастер
Сообщений: 1161

Очень интересно.

аватар: aka_GRAD
aka_GRAD
Дата: Пнд, 28/03/2011 - 06:01
Звание: Посвященный
Сообщений: 495

Респект Владимиру Wink

аватар: SENSEi
SENSEi
Дата: Пнд, 28/03/2011 - 07:03
Звание: Наблюдатель
Сообщений: 67

Firebird - Thuderfox Big smile

аватар: Zanuda25
Zanuda25
Дата: Пнд, 28/03/2011 - 08:21
Звание: Посвященный
Сообщений: 510

Респект автору Bravo

аватар: plaha
plaha
Дата: Пнд, 28/03/2011 - 17:04
Звание: Энтузиаст
Сообщений: 159

Va-Bank
У брат, ты не напомнил когда я диплом писал, у меня програ была на дельфи и фаере, учет заработной платы на предприятии. Слушай а чего ты не использовал библиотеку для работы родную фаерскую?
Отступления от темы, если кто из вас использует InterBase и Firebird на одном компе, используйте библиотеке в IBExpert для InterBase которая установлена по дефолту, а для Firebird его родную библиотеку. Чтобы не останавливать службы одной из баз т.к., InterBase и Firebird в месте не работают, если весят на одной библиотеки, IBExpert установлена по дефолту. Жирный плюс за воспоминая, о Delphi + Firebird.
Цитировать


дополнительно переименовывает свою библиотеку fbclient.dll в gds32.dll для совместимости

Не обязательно она спокойно подключается и работает, с компонентами InterBase. Я их тоже использую, т.к., FIBPlus не много лажают когда нет нормальной регистрации.

milice
Да именно про gds32.dll и fbclient.dll.

аватар: milice
milice
Дата: Пнд, 28/03/2011 - 13:46
Звание: Наблюдатель
Сообщений: 89

Очень приятно ознакомится с чужим передовым опытом. В следующей части советую по подробнее рассмотреть следующие вопросы:

1. Размер страницы БД
2. Индексы в БД
3. Отношение таблиц Главный-Подчиненный
4. Работа с BLOB - полями
5. Представления в БД
5. Создание резервной копии БД и восстановление с резервной копии (в т.ч. программно)
6. Создание установщика который сам ставит птицу и создает БД
7. Установка клиентской части БД на ПК клиентов
8. Работа с системными таблицами (какую полезную инфу можно оттуда выудить ...)
9. Озвучить основные достоинства и недостатки FireBird
10. Свойства компонента IBTransAction (явные, не явные транзакции, количество компонентов и т.д.)

Начало хорошее, мне очень понравилось. Молодец!!! Время выкроил на это дело, так держать!
2plaha
Что то я не понял, какая библиотека? Ты про файлы gds32.dll и fbclient.dll?

Не флуди, редактируй посты.

аватар: Va-Bank
Va-Bank
Дата: Пнд, 28/03/2011 - 15:14
Звание: Гуру
Сообщений: 8197

Цитировать

Слушай а чего ты не использовал библиотеку для работы родную фаерскую?

Библиотека родная и используется. Просто в делфи компоненты заточены под Interbase. Поэтому при установке Firebird дополнительно переименовывает свою библиотеку fbclient.dll в gds32.dll для совместимости. Так что все ОК. Я Interbase даже не рассматриваю.

To milice
Ну я же не книгу пишу. Учебников и так валом. Просто иногда проще один раз посмотреть, чем сто раз прочитать и ничего не понять. По возможности может и буду чего-нибудь ваять Smile

аватар: winise
winise
Дата: Пнд, 21/11/2016 - 19:44
Звание: Наблюдатель
Сообщений: 1

Процентирую фразу любимого мультфильма детства "Чертенок №13"
ХОЧУ ЕЩЕ !!!

аватар: rzabolotin
rzabolotin
Дата: Пнд, 28/03/2011 - 16:34
Звание: Наблюдатель
Сообщений: 67

Вспомнил как в институте прогу на Билдере писали. Примерно так же, только намного дольше ))

аватар: falamon
falamon
Дата: ПТ, 06/05/2011 - 03:05
Звание: Наблюдатель
Сообщений: 5

Проект Project1.exe вызвал исключение класса ETBClientError с сообщением 'Database name is missing'. Процесс остановлен. Используйте шаг или запуск для продолжения.
Все делал по видео, не могу понять в чем дело. может кто подскажет?

аватар: Va-Bank
Va-Bank
Дата: ПТ, 06/05/2011 - 03:25
Звание: Гуру
Сообщений: 8197

К скринкасту прикреплен исходник. Посмотри как у меня реализовано. Найди отличия. Так сложно сказать что у тебя. Может ты сам выложишь куда-нибудь свой исходник. Тогда укажи на всякий случай версию Delphi и версию Firebird, которые ты используешь. Я посмотрю.
З.Ы. Вторая часть обязательно будет, но не в ближайшем будущем. Нет времени. Лето наступает знаете ли Smile

аватар: falamon
falamon
Дата: ПТ, 06/05/2011 - 18:58
Звание: Наблюдатель
Сообщений: 5

]]>http://ifolder.ru/23365202]]> выложил исходник, Сравнивал с твоим но ошибку так и не нашел..видимо он не находит базу через ини файл или что то подобное...delphi 7 , firebird 2.5.

аватар: Va-Bank
Va-Bank
Дата: ПТ, 06/05/2011 - 19:41
Звание: Гуру
Сообщений: 8197

Смотри. У тебя путь:
192.168.0.5:C:\Users\kot\Desktop\диплом мой\ПРОГА\9.FDB
IP адрес, т.е. у тебя по этому адресу в папке C:\Users\kot\Desktop\диплом мой\ПРОГА\ должна находиться база.
А я так понимаю ты на локальном компе все делаешь? Или как? Если на локальном можно убрать IP адрес, либо прописать 127.0.0.1
P.S. Если используешь удаленный сервер, то на обоих компах должен стоять Firebird.

аватар: falamon
falamon
Дата: ПТ, 06/05/2011 - 20:44
Звание: Наблюдатель
Сообщений: 5

пытылся делать и так :
[Base]
#Path=192.168.0.5:C:\Users\kot\Desktop\диплом мой\9.fdb
Path=C:\Users\kot\Desktop\диплом мой\9.fdb
база находится там, но все равно выдает аналогичную ошибку(

аватар: Va-Bank
Va-Bank
Дата: ПТ, 06/05/2011 - 22:46
Звание: Гуру
Сообщений: 8197

Вот заметил один косяк:
FIniFile := TIniFile.Create(ExtractFilePath(Application.ExeName + 'Config.ini'));
Посмотри на расположение скобок! Нужно делать не:
ExtractFilePath(Application.ExeName + 'Config.ini')
а
ExtractFilePath(Application.ExeName) + 'Config.ini'
Вот возможно из-за таких вот нелепых ошибок можно вынести мозг напрочь... У тебя просто напросто походу не грузится INI-файл, поэтому у тебя в DatabaseName заносится пустота.
А говоришь сравнивал код.

аватар: falamon
falamon
Дата: ПТ, 06/05/2011 - 23:19
Звание: Наблюдатель
Сообщений: 5

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

аватар: Va-Bank
Va-Bank
Дата: СБ, 07/05/2011 - 00:03
Звание: Гуру
Сообщений: 8197

Цитировать

а где можно взять информацию по поводу функций и хранимых процедур?

]]>Firebird: руководство разработчика баз данных]]>
Очень хорошая книжка.

аватар: Belketre
Belketre
Дата: СБ, 07/05/2011 - 01:59
Звание: Мастер
Сообщений: 1890

Спасибо за книжку Wink

аватар: Va-Bank
Va-Bank
Дата: СБ, 07/05/2011 - 02:07
Звание: Гуру
Сообщений: 8197

Плохо что она 2007 года. Firebird уже далеко убежал по версиям...

аватар: falamon
falamon
Дата: ПТ, 13/05/2011 - 02:55
Звание: Наблюдатель
Сообщений: 5

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

аватар: Va-Bank
Va-Bank
Дата: ПТ, 13/05/2011 - 03:04
Звание: Гуру
Сообщений: 8197

Давай-ка с этими вопросами на форум. Тут в комментах все таки обсуждается скринкаст Wink

аватар: Lex21
Lex21
Дата: ВС, 14/08/2011 - 23:05
Звание: Наблюдатель
Сообщений: 5

Когда будет 2-я часть? Очень нужно, желательно побыстрее:)

аватар: Va-Bank
Va-Bank
Дата: ВС, 14/08/2011 - 23:10
Звание: Гуру
Сообщений: 8197

Не знаю, пока даже сценария нет Sad

аватар: Lex21
Lex21
Дата: ВС, 14/08/2011 - 23:28
Звание: Наблюдатель
Сообщений: 5

Сценарий напишу. Только сделайте. У меня курсач накрывается:-D

аватар: Va-Bank
Va-Bank
Дата: Пнд, 15/08/2011 - 04:03
Звание: Гуру
Сообщений: 8197

Пиши, я за Smile

аватар: aka_GRAD
aka_GRAD
Дата: Пнд, 15/08/2011 - 03:12
Звание: Посвященный
Сообщений: 495

Владимир я тоже уже жду продолжения. Режиссера и продюссера можно найти, главное чтоб актер и оператор был:-D

аватар: Olga_Korotkova
Olga_Korotkova
Дата: СР, 24/08/2011 - 07:34
Звание: Наблюдатель
Сообщений: 8

Огромное спасибо!!!!!!!!!!!!!!!
Я жду продолжения с нетерпением
Хотела вас попросить рассказать как создавать приложение клиент-сервер
если не видео, хотя бы в текстовом варианте Smile:)

аватар: Va-Bank
Va-Bank
Дата: СР, 24/08/2011 - 14:56
Звание: Гуру
Сообщений: 8197

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

аватар: Kat
Kat
Дата: ПТ, 09/09/2011 - 22:27
Звание: Наблюдатель
Сообщений: 4

Bravo
огромное спасибо автору такого мануала. Все подробно и четко расписано, но, может, по неопытности, я, при создании своего приложения шаг в шаг следуя инструкциям в видео, допустила какую-то ошибку, какую понять не могу. Сравнивала коды несколько раз, но ничего не увидела. Может подскажете?
Выдает ошибку: Project1 вызвал исключение класса EAccessViolation. Помогите плиииииз. Проект горит

аватар: Va-Bank
Va-Bank
Дата: ПТ, 09/09/2011 - 22:46
Звание: Гуру
Сообщений: 8197

Исходник в студию

аватар: Kat
Kat
Дата: СБ, 10/09/2011 - 01:16
Звание: Наблюдатель
Сообщений: 4

вот : ]]>http://files.mail.ru/HRM3UZ]]>

P.S. вообще приложение не доделано, но меня интересует только причина ошибки при работе БД и именно 3, а не одна форма присутствуют по данному мне заданию, а не по личному желанию)

аватар: Va-Bank
Va-Bank
Дата: СБ, 10/09/2011 - 01:51
Звание: Гуру
Сообщений: 8197

Ну а где БД? Как я буду проверять работу?

аватар: Kat
Kat
Дата: СБ, 10/09/2011 - 03:09
Звание: Наблюдатель
Сообщений: 4

Упс. Сорри за невнимательность
]]>http://files.mail.ru/EB9W08]]>

аватар: Va-Bank
Va-Bank
Дата: СБ, 10/09/2011 - 03:19
Звание: Гуру
Сообщений: 8197

Цитировать

Сравнивала коды несколько раз, но ничего не увидела. Может подскажете?

Как вы сравнивали интересно? IBQuery2 и IBTransaction2 не привязаны к IBDatabase. А в коде вы вызываете SQL код во втором квери. После исправления появится другая ошибка "Transaction in active". Как думаете почему? Потому что вы одну и туже транзакцию (IBTransaction1) привязали в к обоим квери. Далее когда поправите и это, появится еще одна об SQL запросе. А все потому что вы не обратили внимание на ковычку после Edit2.Text. Открыть то открыли, а закрыть не закрыли. Было так:
Edit2.Text+')';
а надо так
Edit2.Text+''')';
Теперь после этого исправления появится еще одна ошибка, уже в процедуре БД. А все потому что в делфи вы передаете три параметра, когда в самой процедуре входных параметра четыре. Исправлять я не стал. Просто неинтересно стало. Как же вы сравнивали код и ничего не нашли? Wink

аватар: Kat
Kat
Дата: СБ, 10/09/2011 - 14:04
Звание: Наблюдатель
Сообщений: 4

Ненаметанному глазу крайне неопытного начинающего программиста не было видно таких ошибок. Большое спасибо за помощь)

аватар: Va-Bank
Va-Bank
Дата: ВС, 11/09/2011 - 02:15
Звание: Гуру
Сообщений: 8197

Прости, я не знал что ты начинающая программистка. Об этом не было ни слова. Я думал что просто работа с СУБД Firebird для тебя ново, а тут оказывается все в новинку. Ну ты обращайся, помогу чем смогу.

аватар: igorkugu
igorkugu
Дата: ВС, 11/09/2011 - 19:32
Звание: Наблюдатель
Сообщений: 3

Здравствуйте Строкин Владимир, посмотрел ваше видео, и оно действительно мне помогло, ничего подобного в интернете и в помине нет, сделал все точно как было сказано в видео уроке и все получилось, программа успешно работает. Присоединяюсь ко всем тем кто ждет продолжения:).
Дальше собираюсь продолжать усовершенствовать программу - несколько таблиц несколько форм и т.д. , но вот не получается сделать так чтоб программа работала с несколькими формами:(.
IBDatabase IBQuery IBTransaction DataSource - все эти компоненты переместил в Data Module, в коде сделал все изменения к примеру - вместо IBQuery2 писал уже DataModule1.IBQuery2, но при запуске выводится ошибка связанная с модулем, что еще надо изменить чтоб программа работала ?

аватар: Va-Bank
Va-Bank
Дата: ВС, 11/09/2011 - 20:29
Звание: Гуру
Сообщений: 8197

Исходник можете выложить? Просто так будет понятнее и БД не забудьте.

аватар: igorkugu
igorkugu
Дата: ВС, 11/09/2011 - 22:18
Звание: Наблюдатель
Сообщений: 3

Вот исходник и БД, как вы и просили. ]]>http://files.mail.ru/J2D8EH]]>

аватар: Va-Bank
Va-Bank
Дата: Пнд, 12/09/2011 - 00:47
Звание: Гуру
Сообщений: 8197

Посмотрел я ваши исходники и тут все просто. У вас модуль DM создается только после Form1.
begin
Application.Initialize;
Application.CreateForm(TForm1, Form1);
Application.CreateForm(TDM, DM);
Application.CreateForm(TForm3, Form3);
Application.Run;
end.
Таким образом на первой форме на событии OnCreate идет обращение к еще несуществующему модулю DM, от этого и Access violation. В таком случае я думаю есть три выхода.
1) Поставить загрузку БД на событие OnShow главной формы.
2) Сделать модуль DM главной формой. Но тут будет ряд "проблем" с вызовом дочерних форм, т.е. придется логику строить. В общем гемор я так не люблю.
3) Это создавать на событии OnCreate главной формы динамически форму DM. Делается это так. Убираем DM из автоинициализации:
program Project1;

uses
Forms,
Unit1 in 'Unit1.pas' {Form1},
Unit2 in 'Unit2.pas' {DM: TDataModule},
Unit3 in 'Unit3.pas' {Form3};

{$R *.res}

begin
Application.Initialize;
Application.CreateForm(TForm1, Form1);
Application.CreateForm(TForm3, Form3);
Application.Run;
end.
Затем на OnCreate главной формы пишем:
procedure TForm1.FormCreate(Sender: TObject);
var
FIniFile: TIniFile;
begin
try
// Создаем наш модуль с компонентами ДБ
DM := TDM.Create(Application);
FIniFile := TIniFile.Create(ExtractFilePath(Application.ExeName)
+ 'Config.ini');
...
Все очень просто. Только не забудь освободить вручную память
DM.Free;
при выходе из проги.

аватар: igorkugu
igorkugu
Дата: СР, 14/09/2011 - 22:52
Звание: Наблюдатель
Сообщений: 3

благодарю, программа отлично работает, сам бы не разобрался ).

аватар: Olga_Korotkova
Olga_Korotkova
Дата: СР, 28/09/2011 - 02:29
Звание: Наблюдатель
Сообщений: 8

Строкин Владимир я пишу программу ,в ней вещественные типы. Я столкнулась с такой проблемой: когда данные вводятся в поле ввода их нужно вводить через точку (запрос выполняется), если вводить через запятую он выдает ошибку, если должны выполняться вычисления, при переводе в вещественное число Delphi выдает что стоит точка. И в таблице И в таблице (dbGrid) он выдает вот такие большие числа(34,7000007629395). Подскажите пожалуйста, что нужно сделать чтобы числа вводились через запятую, и сократить кол-во чисел после запятой на 3.

аватар: Va-Bank
Va-Bank
Дата: СР, 28/09/2011 - 15:12
Звание: Гуру
Сообщений: 8197

Предлагаю такой вариант. Сделать ввод вещественных чисел через точку, запятую запретить, чтобы потом пользователь не ввел ее случайно. Далее SQL запрос выполнять так как есть с точкой. А для внутренних вычислений надо просто точку преобразовать в запятую. Например так:
function StrToExt(const AValue: String): Extended;
const
FError = -0.000013;
var
sTemp: string;
i: Integer;
begin
Result := StrToFloatDef(AValue, FError);
if Result = FError then
begin
sTemp := AValue;
for i := 1 to Length(sTemp) do
if sTemp[i] = '.' then
begin
sTemp[i] := ',';
Break;
end;
Result := StrToFloatDef(sTemp, FError);
end;
end;
Т.е. мы берем число из поля ввода, либо из базы данных и переводим с помощью этой функции в Extended. А для вывода значения в какое-нибудь текстовое поле обрезанного (округленного) числа можно воспользоваться функцией ]]>FloatToStrF]]>.

аватар: Belketre
Belketre
Дата: СР, 28/09/2011 - 18:26
Звание: Мастер
Сообщений: 1890

Для ограничения количества знаков после запятой до 3 при выводе данных на экран через DBGrid, нужно у нужного поля датасета установить свойство DisplayFormat:
IBXQuery1.Field1.DisplayFormat:='0.000';

аватар: Va-Bank
Va-Bank
Дата: СР, 28/09/2011 - 19:17
Звание: Гуру
Сообщений: 8197

Да, про DBGrid то забыл.

аватар: Olga_Korotkova
Olga_Korotkova
Дата: СР, 28/09/2011 - 22:23
Звание: Наблюдатель
Сообщений: 8

Спасибо большое:)

аватар: Slon
Slon
Дата: СР, 12/10/2011 - 15:46
Звание: Наблюдатель
Сообщений: 44

Спасибо за скринкаст..... очень помог. Владимир, подскажите. Как можно, через клиента, организовать создание новой таблицы

аватар: Va-Bank
Va-Bank
Дата: СР, 12/10/2011 - 16:01
Звание: Гуру
Сообщений: 8197

Я так думаю двумя способами:
- с помощью SQL запроса;
- или с помощью скриптов, что более удобно.

аватар: Slon
Slon
Дата: СР, 12/10/2011 - 16:12
Звание: Наблюдатель
Сообщений: 44

Я хотел написать процедуру, которая должна была создавать типовую таблицу ..... но не работает
а можно пример с SQL запросом Smile