Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.06.06;
Скачать: CL | DM;

Вниз

Создание БД из приложения или выполнение скрипта   Найти похожие ветки 

 
Адмирал ©   (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;
Скачать: CL | DM;

Наверх




Память: 0.5 MB
Время: 0.03 c
4-1081635140
voituk
2004-04-11 02:12
2004.06.06
Plugin для Internet Explorer


1-1085319251
Umka
2004-05-23 17:34
2004.06.06
Midas server & client


8-1080647563
i2e
2004-03-30 15:52
2004.06.06
Как одну из картинок ImageList загружать в Image?


1-1085291234
Leaner
2004-05-23 09:47
2004.06.06
Выравнивание ListView по тексту


3-1084446570
Курдль
2004-05-13 15:09
2004.06.06
Метафайл, разделенный на страницы, бывает?