![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Проблемма с запуском скрипта создания базы из моего приложения. [D7, IB4.x]
Hmm © (2004-10-07 15:27:00)Здраствуйте.
Вот суть проблеммы, с которой я столкнулся:
Существует скрипт создания базы данных, таблиц и заполнения их, начинается он так:
Create database "c:\sysDT.gdb" USER "SYSDBA" PASSWORD "masterkey";
...
Возникает вопрос, как запустить такой скрипт из моего приложения, ведь стандартная цепочка, типа ibDatabase=>StoredProc не подоходит, т.к. еще не существует базы "c:\sysDT.gdb" и соответственно не возможно заполнить свойство databasename.
Конечно, можно выполнить ibDatabase.createdatabase и потом запустить остальную часть скрипта, НО хотелось бы знать есть ли возможность выполнять скрипт целиком?
Zacho (2004-10-08 01:47:00) [1]
> 1.createproccess не передает ни каких параметров
> дочернему процессу, тогда уж shellexecute, но тут
> вопрос, каким должен быть параметр - путь к скрипту?
Передаёт. Но если хочешь, можешь использовать и ShellExecute(Ex). В параметрах ты должен указать соответствующий ключ и путь к файлу со скриптом. Описание isql есть в Operations Guide, так же краткий хелп можешь получить просто запустив isql и введя команду help;
P.S. Куча документации, полезных статей, ссылок и т.п. есть на http://www.ibase.ru
jack128 (2004-10-07 23:03:00) [2]Hmm (07.10.04 22:38) [11]
1.createproccess не передает ни каких параметров дочернему процессу, тогда уж shellexecute, но тут вопрос, каким должен быть параметр - путь к скрипту? Хелп не читаем принципиально??
> 2.апдейт на делфу? какой компонент нужен? или какой
> апдейт? где можно скачать
на компоненты ibx. на ibase.ru были ссылки и вобще yandex знает все.
kaif (2004-10-07 22:53:00) [3]А сам скрипт-то ты чем исполняешь?
Сам "исполнитель скрипта" разбирает его на отдельные команды и в конечном счете как правило вызывает функции API gds32.dll. Посмотри, как создает базу данных IBDatabase в исходниках этого компонента и сам разберешься.
Hmm (2004-10-07 22:38:00) [4]2 Johnmen
глупо считать, что я отвечаю не читая... возможно не все понимаю сразу и до конца. в любом случае, это не повод оскорблять.
2 Zacho
извини не сразу понял о чем речь. предположил, что ты предлагаешь мне запускать срипт из сторонней программы, предварительно войдя в неё.
1.createproccess не передает ни каких параметров дочернему процессу, тогда уж shellexecute, но тут вопрос, каким должен быть параметр - путь к скрипту?
2.апдейт на делфу? какой компонент нужен? или какой апдейт? где можно скачать
3.вручную будем делать ежели начальная задумка не выйдет (
в любом случае, спасибо за внимаение.
ЗЫ: если вопросы покажутся глупыми - извиняйте, тока учусь.
Zacho (2004-10-07 21:44:00) [5]Hmm (07.10.04 20:32) [8]
Блин... Тебе предложили уже 3 разных способа:
1. Запускать из своей программы утилиту, позволяющую выполнять скрипты. Есть (есть !! не надо их писать !!) стандартная - isql.exe (входит в дистрибутив IB), есть IBEScript.exe (идёт в комплекте с IBExpert) , возможно ещё какие-нибудь есть, выбирай по вкусу. Если не знаешь, как пользоваться CreateProccess - читай местный FAQ.
2. Использовать специализированный компонент для выполнения скрипта. И в FIBPlus и в IBX такой есть. Судя по всему у тебя IBX, если такого компонента нет - поставь последний апдейт.
3. Сделать "вручную" - т.е. создать БД с помощью TIBDatabase, а потом каждый запрос из скрипта выполнять с помощью TIBSQL. Или у тебя проблемы с парсингом скрипта ?
В общем, выбирай способ по вкусу. И читай ответы внимательнее.
Johnmen (2004-10-07 20:48:00) [6]>Hmm
А ты вообще читаешь, что тебе пишут ? Такое впечатление, что нет...
Hmm (2004-10-07 20:32:00) [7]возможно меня не совсем поняли =(
во-первых, именно из написанного мною приложения(!!!). Хорошо, пусть это будет сторонний экзешник, но писать то его опять таки мне, значит опять таже проблемма.
во-вторых, тут предложили ibQuery+ibDatabase, но ведь я уже говорил: база создается скриптом. До запуска скрипта базы не существует, следовательно ни в процессе проэктирования, ни во время выполнения нельзя задать свойство DatabaseName.
Таким образом, вопрос сводится к тому, существует ли компонет выполняющий скрип не на готовой базе а "с нуля"? или возможно есть какае-то хитрость в использовании стандартных компонентов?
jack128 (2004-10-07 18:08:00) [8]-SeM- (07.10.04 17:10) [2]
Если используешь FIBPlus, поищи FIBPlus Script (by Nikolay Trifonov).
для IBX есть аналогичный стандартный компонент
Zacho (2004-10-07 17:54:00) [9]Дык, надо позаботиться, чтобы был :)
Тем более, что isql.exe действительно стандартнаяутилита, обычно инсталлятор клиента устанавливает и её тоже.
-SeM- (2004-10-07 17:41:00) [10]Zacho © (07.10.04 17:12) [4]
> А что, трудно из приложения запустить сторонний exe
Которого может и не быть на клиентской машине
Zacho (2004-10-07 17:12:00) [11]-SeM- (07.10.04 17:10) [2]
А что, трудно из приложения запустить сторонний exe с нужными параметрами ?
И плевать на всякие там компоненты :))
Zacho (2004-10-07 17:11:00) [12]Кстати, StoredProc не подходит ещё хотя бы и потому, что в SP операторы DDL не доступны, разрешено только DML.
-SeM- (2004-10-07 17:10:00) [13]Zacho © (07.10.04 16:46) [1]
> как запустить такой скрипт из моего приложения
Hmm (07.10.04 15:27)
Если используешь FIBPlus, поищи FIBPlus Script (by Nikolay Trifonov).
Или же с помощью ibDatabase и ibQuery.
Zacho (2004-10-07 16:46:00) [14]Сущетвует стандартная утилита isql.exe и, например, IBEScript.exe из IBExpert.