Создание базы данных из приложения FB1.5 embed

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

Модератор: kdv

Ответить
Raizberg Alexander
Сообщения: 3
Зарегистрирован: 17 янв 2005, 14:19

Создание базы данных из приложения FB1.5 embed

Сообщение Raizberg Alexander » 25 янв 2005, 16:45

Использую IBX 4.62 Delphi 5, сервер FB1.5 embed и хочу создать базу данных из приложения. Положил рядом переименованную в gds32.dll fbembed.dll
Файл базы создается - все нормально. Но вот когда начинаю добавлять метаданные, то на первой же таблице где есть тип char или varchar вылетает, хотя домены с таким типом создаются.
Вот так создаю базу

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

    IBDatabase1.Params.Clear;
    IBDatabase1.Params.Add('USER '''+Edit2.Text+'''');
    IBDatabase1.Params.Add('PASSWORD '''+Edit3.Text+'''');
    IBDatabase1.Params.Add('PAGE_SIZE 8192');
    IBDatabase1.Params.Add('DEFAULT CHARACTER SET WIN1251');
    IBDatabase1.CreateDatabase;
Потом подключаюсь

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

  if IBDatabase1.Connected then
    IBDatabase1.Connected:=False;
  IBDatabase1.DatabaseName:=Edit1.Text;
  IBDatabase1.Params.Clear;
  IBDatabase1.Params.Add('user_name=' + Edit2.Text);
  IBDatabase1.Params.Add('password=' + Edit3.Text);
  IBDatabase1.Params.Add('CHARACTER SET WIN1251');
  IBDatabase1.Connected:=True;
пробовал писать в параметрах как для FB1.0 LC_CTYPE=WIN1251 - ругается.
Потом начинаю выполнять статементы и после каждого commit.
У IBDatabase1 SQLDialect в дизайн тайме выставлен 3.

Вот и вопрос - почему не создается таблица типа

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

CREATE TABLE TABLE1(
    F1  INTEGER,
    F2  varchar(30)
)

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

Сообщение kdv » 25 янв 2005, 17:05

что значит "ругается"?
не проще ли базу создавать скриптом, или класть вместе с приложением готовый fdb или backup?
правильно-ли распакован zip с embedded (с подкаталогами)?

Raizberg Alexander
Сообщения: 3
Зарегистрирован: 17 янв 2005, 14:19

Сообщение Raizberg Alexander » 25 янв 2005, 17:17

kdv писал(а):что значит "ругается"?
unsuccessful metadata update
TABLE1
это когда таблицу создает
bad parameters on attach or create database
CHARACTER SET WIN1251 is not defined
Это когда lc_ctype в параметрах пишешь
kdv писал(а): не проще ли базу создавать скриптом, или класть вместе с приложением готовый fdb или backup?
правильно-ли распакован zip с embedded (с подкаталогами)?
Из скрипта и создаю. Чего там должно быть с каталогами - не понял. Положил два файла радом с приложением. dll и msg.
Сервер полный 1.5 я нигде не ставил - поэтому из приложения и создавать хочу.

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

Сообщение kdv » 25 янв 2005, 17:37

еще раз - твоя проблема в том, что ты НЕ положил каталог intl (и один файлик в нем). Когда берешь embedded с сайта, распакуй его С ПОДКАТАЛОГАМИ. и все увидишь.

потом - "из скрипта" - это не из приложения командами SQL, а прямо из текстового файла, в котором написано create database и т.п.

Merlin
Динозавр IB/FB
Сообщения: 1502
Зарегистрирован: 27 окт 2004, 11:44

Сообщение Merlin » 25 янв 2005, 17:39

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

Aleksandr.
Сообщения: 63
Зарегистрирован: 18 май 2005, 19:13

Сообщение Aleksandr. » 19 май 2005, 13:53

Я с такой проблемой столкнулся тоже; решение с Character set оказалось простым - для вызова CreateDataBase надо использовать
CHARACTER SET WIN1251, а после этого перед продолжением работы менять его на LC_CTYPE=WIN1251. Кстати, а зачем "=" после user_name, password? И вообще я писал USER.

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

Сообщение kdv » 19 май 2005, 14:14

Я с такой проблемой столкнулся тоже; решение с Character set оказалось простым - для вызова CreateDataBase надо использовать
CHARACTER SET WIN1251, а после этого перед продолжением работы менять его на LC_CTYPE=WIN1251.
не надо писать откровенную муть. читайте хелп, и волосы будут...
create database это одно, а коннект - другое. Ни "после" ни "перед".
После создания БД надо сделать IBDatabase.Close. Потом, РАЗУМЕЕТСЯ, установить нормальные параметры подключения, а не использовать то, что осталось от параметров создания БД.

Ответить