![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Помогите с CreateDatabase ! [D5, IB5.x]
Pashafess © (2002-03-22 08:41:00)
Здравствуйте всем. Не могу создать базу данных 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.
Pike (2002-03-29 21:47:00) [1]Кайф!!!
Kaif, огромное спасибо! Я с этим CreateDatabase задолбился.
Как прочел, сразу (только что) попробовал. Все работает!
Благодарю.
kaif (2002-03-26 09:38:00) [2]Все гораздо проще. IBDatabase анализирует параметры, записанные в виде параметр=значение при Connect, но не при CreateDatabase. В последнем случае, т, что ты пропишешь в Params будет передано на сервер одной строкой. (Это видно из текста его обращения к API InterBase)
Впиши туда, например:
Params.Text := "USER ""SYSDBA"" PASSWORD ""masterkey";
и все сработает. Желательно туда еще добавить DEFAULT CHARACTER SET WIN1251 и PAGESIZE какой- нужно.
У меня так все работает.
Pashafess (2002-03-26 02:10:00) [3]Ни один из советов к сожалению не помог. Пример 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 я уже две недели мучаюсь. Помогите. Заранее благодарен.
Malder (2002-03-25 22:05:00) [4]Zemal, Query не поддерживает SQL комманду CREATE DATABASE
s.ts (2002-03-25 20:35:00) [5]см.
Params.Add("lc_ctype=WIN1251")
AlexanderB (2002-03-22 13:04:00) [6]У меня кусок кода выглядит примерно так:
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;
А вот язык по-умолчанию выставить не могу.
MAxiMum (2002-03-22 11:05:00) [7]Сначало надо зарегестрировать Login и Password прежде, чем его использовать.
Zemal (2002-03-22 10:58:00) [8]Вообще для создания базы данных лучше пользоваться языком базы данных... в твоём случае это одна из разновидностей 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, т.к.
это команда, а не запрос!!! и он не возвращает набора данных!!!)
sniknik (2002-03-22 08:54:00) [9]Не могу сказать точно по IB но в Pervasive есть такая фича(была может счас изменили). Нельзя создать новую базу если не подключен к какой нибудь существующей. Может это общее для баз. Попробуй.