Форум: "Базы";
Поиск по всему сайту: delphimaster.net;
Текущий архив: 2002.04.22;
Скачать: [xml.tar.bz2];




Вниз

Помогите с CreateDatabase ! 


Pashafess   (2002-03-22 08:41) [0]


Здравствуйте всем. Не могу создать базу данных Interbase программно. У компоненты TIBDatabase есть метод CreateDatabase. Посмотрел по Хелпу и написал:
ibdb2.databasename := "c:\pasha.gdb";
ibdb2.Params.strings[1]:="user_name=SYSDBA";
ibdb2.Params.add("");
ibdb2.params.strings[2]:="password=masterkey";
ibdb2.SQLDialect:=1;
ibdb2.LoginPrompt :=False;
ibdb2.CreateDatabase;


Выдает ошибку, что Имя пользователя и пароль неправильны. Обратитесь к администратору базы данных, что бы залогинится к Interbase.



sniknik   (2002-03-22 08:54) [1]

Не могу сказать точно по IB но в Pervasive есть такая фича(была может счас изменили). Нельзя создать новую базу если не подключен к какой нибудь существующей. Может это общее для баз. Попробуй.



Zemal   (2002-03-22 10:58) [2]

Вообще для создания базы данных лучше пользоваться языком базы данных... в твоём случае это одна из разновидностей SQL... посмотри в хелпах по IB команду CREATE DATABASE, там должно быть всё прекрасно изложено... по крайней мере я в MSSQL только этим и пользуюсь. Да и такой подход понадёжнее и правильнее будет. Вообще всё делай на SQL, активнее (там где можно и нельзя :) ) реализуй всё на стороне сервера, меньше потом проблем будет! Програмная логика должна быть правильной! А при изменении логики тебе надо править, в большинстве случаев, не программу, а хранимые процедурки :). Вот тебе пример создания базы данных для MSSQL:

CREATE DATABASE Sales
ON PRIMARY
( NAME = SPri1_dat,
FILENAME = "c:\program files\microsoft sql server\mssql\data\SPri1dat.mdf",
SIZE = 10,
MAXSIZE = 50,
FILEGROWTH = 15% ),
( NAME = SPri2_dat,
FILENAME = "c:\program files\microsoft sql server\mssql\data\SPri2dt.ndf",
SIZE = 10,
MAXSIZE = 50,
FILEGROWTH = 15% ),
FILEGROUP SalesGroup1
( NAME = SGrp1Fi1_dat,
FILENAME = "c:\program files\microsoft sql server\mssql\data\SG1Fi1dt.ndf",
SIZE = 10,
MAXSIZE = 50,
FILEGROWTH = 5 ),
( NAME = SGrp1Fi2_dat,
FILENAME = "c:\program files\microsoft sql server\mssql\data\SG1Fi2dt.ndf",
SIZE = 10,
MAXSIZE = 50,
FILEGROWTH = 5 ),
FILEGROUP SalesGroup2
( NAME = SGrp2Fi1_dat,
FILENAME = "c:\program files\microsoft sql server\mssql\data\SG2Fi1dt.ndf",
SIZE = 10,
MAXSIZE = 50,
FILEGROWTH = 5 ),
( NAME = SGrp2Fi2_dat,
FILENAME = "c:\program files\microsoft sql server\mssql\data\SG2Fi2dt.ndf",
SIZE = 10,
MAXSIZE = 50,
FILEGROWTH = 5 )
LOG ON
( NAME = "Sales_log",
FILENAME = "c:\program files\microsoft sql server\mssql\data\salelog.ldf",
SIZE = 5MB,
MAXSIZE = 25MB,
FILEGROWTH = 5MB )
GO


Я думаю, что это достаточно понятный пример...
Берёшь IBQuery, пихаешь ему в свойство SQL подобную строку и
делаешь IBQuery.ExecSQL (смотри не пользуйся IBQuery.Open, т.к.
это команда, а не запрос!!! и он не возвращает набора данных!!!)



MAxiMum   (2002-03-22 11:05) [3]

Сначало надо зарегестрировать Login и Password прежде, чем его использовать.



AlexanderB   (2002-03-22 13:04) [4]

У меня кусок кода выглядит примерно так:

with IBDatabase do begin
Params.Clear;
Params.Add("USER "" + txtDBUser.Text + """);
Params.Add("PASSWORD "" + txtDBPSW.Text + """);
Params.Add("PAGE_SIZE " + STRPAGESIZE1024);
SQLDialect := 3;
DatabaseName := txtDBPath.Text + "\" + txtDBName.Text;
CreateDatabase;
end;

А вот язык по-умолчанию выставить не могу.



s.ts   (2002-03-25 20:35) [5]

см. Params.Add("lc_ctype=WIN1251")



Malder   (2002-03-25 22:05) [6]

Zemal, Query не поддерживает SQL комманду CREATE DATABASE



Pashafess   (2002-03-26 02:10) [7]

Ни один из советов к сожалению не помог. Пример AlexanderB это тоже самое что написал я. Правда я не пользовался txtDBUser.Text и т.п. т.к не понял откуда брать эти компоненты. Так вот если явно прописать имя и пароль, то он выдает ошибку: Your user name and password are not defined.
Так же вопрос к Maximum"у Что значит зарегистрировать Login и Password? В IB сервере по умолчанию есть User SYSDBA и пароль masterkey.
Zemal к сожалению IBQuery.ExecSQL не работает т.к требует подключения к базе, а если подключишь его к уже существующей базе, то выскакивает ощибка DSQL: Cannot prepare a CREATE DATABASE/SCHEMA statement. У меня получилось создать базу данных из IBExpert"а (это утилита сторонних производителей к ИБСерверу) только когда я не подсоединен ни к какой базе. Как организовать эту процедуру в делфи я не знаю.

Неужели никто не создавал базу данных для IB 5юч из Delphi я уже две недели мучаюсь. Помогите. Заранее благодарен.



kaif   (2002-03-26 09:38) [8]

Все гораздо проще. IBDatabase анализирует параметры, записанные в виде параметр=значение при Connect, но не при CreateDatabase. В последнем случае, т, что ты пропишешь в Params будет передано на сервер одной строкой. (Это видно из текста его обращения к API InterBase)
Впиши туда, например:
Params.Text := "USER ""SYSDBA"" PASSWORD ""masterkey";
и все сработает. Желательно туда еще добавить DEFAULT CHARACTER SET WIN1251 и PAGESIZE какой- нужно.

У меня так все работает.



Pike   (2002-03-29 21:47) [9]

Кайф!!!
Kaif, огромное спасибо! Я с этим CreateDatabase задолбился.
Как прочел, сразу (только что) попробовал. Все работает!
Благодарю.




Форум: "Базы";
Поиск по всему сайту: delphimaster.net;
Текущий архив: 2002.04.22;
Скачать: [xml.tar.bz2];




Наверх





Память: 0.74 MB
Время: 0.028 c
1-69924           Alexander Vasjuk      2002-04-09 19:48  2002.04.22  
Как отключить Help по CLX


14-69992          Стас                  2002-03-12 09:03  2002.04.22  
Обучение


1-69857           Катерина              2002-04-06 15:52  2002.04.22  
Фреймы


1-69788           Vova33                2002-04-10 11:01  2002.04.22  
Общий вопрос..


3-69707           sysoper               2002-03-27 05:55  2002.04.22  
Interbase5,6 and Win2000