Создание базы данных на основе FB Embedded 1.5.4

IBX, FIBPlus, UIB, ADO, .Net и прочее-прочее-прочее, в общем все, что относится к созданию приложений, работающих с InterBase, Firebird и Yaffil - клиент-серверных, трехзвенных, консольных и т.п.

Модератор: kdv

Ответить
EvilsInterrupt
Сообщения: 66
Зарегистрирован: 29 авг 2006, 10:00

Создание базы данных на основе FB Embedded 1.5.4

Сообщение EvilsInterrupt » 08 апр 2007, 11:59

День добрый!

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

Залез в readme_embedded.txt и соглассно мануалу сделал:
1) Положил в папку D:\My_app\ fbclient.dll и переименовал в gds32.dll, т.к. мой FIBPlus настроен на это имя
2) закинул в эту же папку и firebird.msg
3) закинул сюда же ib_util.dll
4) далее из архива в эту же папку скачал папки intl и udf

В моем проекте есть код:

Код: Выделить всё

    if not FileExists(GetCurrentDir+cFBname) then
    begin
      if CreateDataBase(FBdbase,'SYSDBA','1234') then
      begin
//...
      end
        else ShowMessage('Бага при создании базы');
Создание базы таково:

Код: Выделить всё

function CreateDataBase(var db : TpFIBDatabase; fbUser, fbPassword : string) : Boolean;
{ Создание базы данных по заданным логину, паролю }
var
  CurrentDisk           : string;
  SizeOfCluster         : Cardinal;
  SectorsPerCluster     : Cardinal;
  BytesPerSector        : Cardinal;
  NumberOfFreeClusters  : Cardinal;
  TotalNumberOfClusters : Cardinal;
begin
  Result := True;
  CurrentDisk := Copy(GetCurrentDir,1,2);
  if GetDiskFreeSpace(PChar(CurrentDisk),SectorsPerCluster,BytesPerSector,
                      NumberOfFreeClusters,TotalNumberOfClusters) then
  begin
    SizeOfCluster := SectorsPerCluster * BytesPerSector;
    with db do
    begin
      DBParams.Clear;
      DBParams.Add('USER '''+fbUser+''' PASSWORD '''+fbPassword+'''');
      DBParams.Add('PAGE_SIZE = '+IntToStr(SizeOfCluster));
      DBParams.Add('DEFAULT CHARACTER SET WIN1251');
      DatabaseName := 'localhost:'+GetCurrentDir+cFBname;
      SQLDialect := 3;
    end;
    try
      db.CreateDatabase;
    except
      Result := False;
    end;
  end
    else
      Result := False;
end;
Однако при запуске приложения получаю ошибку: "Бага при создании базы"

Прошу подсказать в чем моя глупость?

hvlad
Разработчик Firebird
Сообщения: 1244
Зарегистрирован: 21 мар 2005, 10:48

Сообщение hvlad » 08 апр 2007, 12:02

localhost убери

EvilsInterrupt
Сообщения: 66
Зарегистрирован: 29 авг 2006, 10:00

Сообщение EvilsInterrupt » 08 апр 2007, 12:16

hvlad писал(а):localhost убери
Спасибо! Сработало!

Я действовал соглассно статье Дмитрия Кузьменко про IBX в ней было сказано:
1. соединение с БД не должно быть "локальным". То есть не c:\dir\data.gdb, а сетевым - localhost:c:\dir\data.gdb.
Возможно я что-то не доконца понял.

Проблема решена спасибо!

EvilsInterrupt
Сообщения: 66
Зарегистрирован: 29 авг 2006, 10:00

Сообщение EvilsInterrupt » 08 апр 2007, 12:22

Из разговора с hvlad:
hvlad (12:20:08 8/04/2007)
если ты пытаешься указать сетевой протокол доступа, то Embedded выступает как клиентская либа. сам он будет открывать БД только при указании локального соединения

hvlad (12:20:27 8/04/2007)
в дятле изначально это было не совсем так, отсюда путаница

EvilsInterrupt (12:20:50 8/04/2007)
Разреши на форум запощу, а то вдруг еще кто нить спросит?

hvlad (12:21:18 8/04/2007)
попроси модеров чтобы в фак засунули, если там нет
вопрос и тема достаточно избиты
Думаю он прав.

kdv
Forum Admin
Сообщения: 6595
Зарегистрирован: 25 окт 2004, 18:07

Сообщение kdv » 08 апр 2007, 13:02

я за естественный отбор, т.к. про embedded в FAQ все сказано.

Ответить