Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 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
1-1085283375
Demik
2004-05-23 07:36
2004.06.06
Ресурсы -> как работать с ресурсами


6-1082481420
Deff
2004-04-20 21:17
2004.06.06
Найти компь.теры в сети. Отобразить в виде дерева.


14-1085149774
AlexKniga
2004-05-21 18:29
2004.06.06
Как садится муха на потолок?


1-1085296596
Natalia
2004-05-23 11:16
2004.06.06
Проблема при подключении С-ной DLL.


1-1085025220
PAN2009
2004-05-20 07:53
2004.06.06
верхний регистр





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский