Форум: "Базы";
Текущий архив: 2004.06.06;
Скачать: [xml.tar.bz2];
ВнизСоздание БД из приложения или выполнение скрипта Найти похожие ветки
← →
Адмирал © (2004-05-13 17:29) [0]Подскажите, как можно создать БД из приложения? Или как выполнить скрипт?
← →
Desdechado © (2004-05-13 18:28) [1]есть компоненты, но можно самому разобрать скрипт на команды DDL (прочие выкинуть) и выполнить их по очереди
создать БД - CREATE DATABASE
← →
Адмирал © (2004-05-13 19:16) [2]Я пытаюсь выполнить CREATE DATABASE с помощью TIBQuery->ExecSQL(); Предварительно приконнектившись к существующей базе, и связав на форме компоненты IBDataBase,IBTransaction и IBQuery. Выдается ошибка с SQL-кодом -503. Что-то типа "не могу подготовить (prepare) запрос с SQL-оператором CREATE DATABASE." Если не коннектиться к существующей базе, то будут другие ошибки типа "база данных не открыта", если не связывать запрос с базой "не назначена БД" и так далее. В InterBase ведь невозможно приконнектиться просто к серверу - надо обязательно указать БД. Может, я что-то делаю не так?
← →
Desdechado © (2004-05-13 19:22) [3]не надо к существующей
IbDb.DatabaseName := ibDB;
with IbDb.Params do
begin
Clear;
Add( "USER "SYSDBA"" );
Add( "PASSWORD "masterkey"" );
Add( "PAGE_SIZE 4096" );
Add( "DEFAULT CHARACTER SET WIN1251" );
end;
try
IbDb.CreateDatabase;
except
On E : Exception do
begin
aErr.Add( rc_DBCreateError );
aErr.Add( E.Message );
Screen.Cursor := crArrow;
exit;
end;
end;
← →
kaif © (2004-05-13 19:29) [4]Почти все команды, кроме CREATE DATABASE можно выполнять с помощью IBSQL или IBQuery.
Команду CREATE DATABASE нужно отловить в скрипте, если ты его сам разбираешь на отдельные команды и организовать создание базы с помощью компонента TIBDatabase. Или прямым вызовом функции клиентской библиотеки.
Для создания базы с помощью TIBDatabase нужно в Params прописать не обычные ...=..., а непосредственно фразы синтаксиса команды CREATE DATABASE. Есть такая тонкость. Точнее, какие фразы и как - не помню. Но типа
Params.Text := "user ""sysdba"" password ""masterkey"" default character set win1251" одной строкой без всяких "равно". Или что-то в этом духе. Указать имя файла базы, протокол. И потом вызвать соответствующий метод компонента, который базу создает. Кажется - TIBDatabase.CreateDatabase.
Еще учти, если будешь писать свой парсер скрипта, что команд SET TERM тоже не существует. Это команды для твоего парсера, но не для сервера.
В последней версии IBX есть компонент для исполнения скриптов, но я его еще не пробовал. Можешь с ним поиграться. Может он тоже что-то умеет.
← →
Адмирал © (2004-05-13 19:37) [5]Спасибо, завтра начну с этого утро.)
/*сейчас уже не на работе*/
aErr - переменная какого класса?
rc_DBCreateError что-то стандартное?
← →
Адмирал © (2004-05-13 19:40) [6]Да я уж влип, что SET TERM не существует...
Интересно тогда, как создавать хранимые процедуры... из того же файла-скрипта... из приложения с собственным парсером.
← →
Адмирал © (2004-05-13 19:57) [7]В хранимых процедурах как раз-таки и встречаются эти ";" посреди тела процедуры. Есть же способ как-то выполнять такие команды?
← →
kaif © (2004-05-13 19:58) [8]Процедуры создавать очень просто. Нужно выдрать команду
CREATE PROCEDURE..... ^ из скрипта. Вот здесь и поможет то, что парсер к этому моменту в курсе, что была когда-то замена
SET TERM ^;
И этот текст без всякого ^ вставить в IBSQL (IBQuery) и запустить ExecQuery (ExecSQL). И так для каждой команды - отыскивается ее "конец" (текущий терминатор) и команда загружается в IBSQL и запускается на выполнение. Только не забудь отключить проверку параметров ParamCheck у своего IBSQL (или IBQuery). Иначе, если в тексте процедуры встречаются двоеточия (внутренние параметризованные запросы в тексте процедур), то IBSQL (IBQuery) попытается их интерпретировать как параметры самой SQL-команды и скажет Parameter not found.
Кстати, парсер скриптов IBConsole сделан именно так, как я говорю. То есть руками. Я видел ее исходный текст.
← →
kaif © (2004-05-13 20:03) [9]Возьми IBQuery. Запиши в него такой запрос:
create procedure AAA
as
declare variable i integer;
begin
exit;
end
И вызови метод ExecSQL.
Убедись, что это работает.
← →
Адмирал © (2004-05-13 20:04) [10]Спасибо за помощь! Завтра - в бой!)
← →
Desdechado © (2004-05-14 13:40) [11]обработку ошибки напиши свою, это я из готового проекта кусов выдрал, rc_ - это текстовый ресурс, aErr - это просто список строк ошибок
← →
Val © (2004-05-14 13:44) [12]может просто скармливать эти скрипты isql.exe?
Страницы: 1 вся ветка
Форум: "Базы";
Текущий архив: 2004.06.06;
Скачать: [xml.tar.bz2];
Память: 0.48 MB
Время: 0.033 c