IBX, FIBPlus, UIB, ADO, .Net и прочее-прочее-прочее, в общем все, что относится к созданию приложений, работающих с InterBase, Firebird и Yaffil - клиент-серверных, трехзвенных, консольных и т.п.
Модератор: kdv
-
Raizberg Alexander
- Сообщения: 3
- Зарегистрирован: 17 янв 2005, 14:19
Сообщение
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. Потом, РАЗУМЕЕТСЯ, установить нормальные параметры подключения, а не использовать то, что осталось от параметров создания БД.