![]() |
|
|
|||||||
| Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
|
Опции темы | Поиск в этой теме | Опции просмотра |
|
#1
|
|||
|
|||
|
здравствуйте. мне нужно написать программу, которая будет автоматически выполнять набор команд-запросов (скриптов). возможно ли это сделать без вспомогательных утилит (osql и т.п.)? если да, то какими средствами делфи это лучше сделать? выводить ничего никуда не нужно, главное - изменить данные в самой БД.
|
|
#2
|
|||
|
|||
|
на чем база?
|
|
#3
|
|||
|
|||
|
firebird (interbase)
|
|
#4
|
|||
|
|||
|
Ну а что мешает использовать ibdatabase, ibquery в таком случае?
|
|
#5
|
|||
|
|||
|
недостаток знаний. поэтому и спрашиваю)
|
|
#6
|
|||
|
|||
|
эмм... сообственно используем 3 компонента
Ibdatabase для соединения с базой. Ibtransaction - для управления транзакциями. и Ibquery для выполнения запросов. в параметрах IBDatabase прописываем параметры для доступа такие как путь к серверу, логин, пароль и т.д. привязываем к нему IbTransaction указав его в одноименном свойстве. в Ibquery В свойстве DataBase выбираем IBDataBase. Далее примерно так, например на кнопку вешаем событие и в событии пишем например: Код:
if ibTransaction1.intransaction then ibtransaction.commit;
ibtransaction.StartTransaction;
ibquery1.active:=false;
ibquery1.Sql.clear;
ibquery1.Sql.add('Update TableName Set FieldName=1 where id=1');
ibquery1.ExecSql;
ibtransaction.commit;
ibtransaction.StartTransaction;
ibquery1.active:=false;
ibquery1.Sql.clear;
ibquery1.Sql.add('INSERT INTO TableName (FieldName) Values ('+#39+'sss'+#39+')');
ibquery1.ExecSql;
ibtransaction.commit; |
|
#7
|
|||
|
|||
|
Цитата:
Спасибо. Но, наверное, это не то, что я ищу. Хорошо, если в скрипте 4 строчки, а если их 100 или больше... Замучаешься прописывать : ) Наверное, без утилит не обойтись.. |
|
#8
|
|||
|
|||
|
я показал только механизм, как пример.
а дальше начинается полет фантазии ![]() Например т.к. свойство Query.Sql есть TStrings у него есть метод LoadFromFile ![]() т.е. можно все скрипты хранить в txt или использовать ini или еще как нить. ![]() |
|
#9
|
|||
|
|||
|
Ммм)) а вот это уже интересно) спасибо)
|
|
#10
|
|||
|
|||
|
выдает ошибку. видимо, не может подключиться к базе.
Код:
IBDatabase1.Connected:=False; IBDatabase1.DatabaseName:='C:\DB.GDB'; IBDatabase1.Connected:=True; что-то не так делаю. пишут, что пользователя и пароль прописывать не надо, т.к. они по умолчанию... |
|
#11
|
|||
|
|||
|
Database 192.168.1.126:C:\ZVONKI.GDB (например так)
В params IbDataBase пишем : Код:
user_name=sysdba password=masterkey lc_ctype=WIN1251 loginPromt в false |
|
#12
|
|||
|
|||
|
работает. но как-то странно) выполняет скрипт только в том случае, если в нем одна строка... иначе - ошибка
|
|
#13
|
|||
|
|||
|
Скрипт покажите. и то как заполняете.
|
|
#14
|
|||
|
|||
|
скрипт простейший:
Код:
UpDate SETUP Set FieldValue='' Where FieldName='EMAIL_FROM'; UpDate SETUP Set FieldValue='' Where FieldName='EMAIL_TO'; UpDate SETUP Set FieldValue='' Where FieldName='SMTP_HOST'; UpDate SETUP Set FieldValue='' Where FieldName='SMTP_PASSWORD'; UpDate SETUP Set FieldValue='' Where FieldName='SMTP_USER'; UpDate SETUP Set FieldValue='C:\temp\' Where FieldName='FN_PATH'; COMMIT; код: Код:
procedure TForm1.FormCreate(Sender: TObject);
begin
IBDatabase1.Connected:=False;
IBDatabase1.DatabaseName:='C:\DB.GDB';
IBDatabase1.Params.Clear;
IBDatabase1.Params.Add('user_name=SYSDBA');
IBDatabase1.Params.Add('password=masterkey');
IBDatabase1.Params.Add('lc_ctype=WIN1251');
IBDatabase1.Connected:=True;
IBDatabase1.DefaultTransaction:=IBTransaction1;
IBTransaction1.DefaultDatabase:=IBDatabase1;
IBQuery1.Database:=IBDatabase1;
if IbTransaction1.InTransaction then IbTransaction1.Commit;
IbTransaction1.StartTransaction;
IbQuery1.Active:=false;
IbQuery1.Sql.Clear;
IbQuery1.SQL.LoadFromFile('C:\Menu.sql');
IbQuery1.ExecSql;
IbTransaction1.Commit;
end; |
|
#15
|
|||
|
|||
|
ура! получилось))
для того, чтобы прогнать скрипт, нужно было поставить дополнительно компонент IBScript (http://www.ibase.ru/devinfo/ibx.htm)))) спасибо за помощь) |