Страница 1 из 1

Как через FIBPlus Query SelectSQL обновить текст SP на серв.

Добавлено: 17 фев 2005, 16:27
Александр Коковихин
В Delphi хочу через FIBPlus Query SelectSQL передать на сервер новую процедуру (чтобы пользователи могли сами добавлять новые процедуры), а Delphi ругается, говорит, что какие-то непонятные символы. Может быть процедура кривая, но IBExpert ее хорошо "глотает".

Как запихать новую процедуру через ТMemo и Query?

Скажите пожалуйста.

Добавлено: 17 фев 2005, 17:11
DSKalugin
используй компонент pFIBQuery
pFIBTransaction.StartTransaction;
pFIBQuery1.Close;
pFIBQuery1.SQL.Text:=Memo1.Lines.Text;
try
pFIBQuery1.ExecQuery;
pFIBTransaction.Commit;
except
pFIBTransaction.RollBack;
ShowMessage('Облом');
end;

только вместо CREATE PROCEDURE надо
ALTER PROCEDURE

П.С.
сработает если у этой процедуры нет зависимых от нее объектов БД

Добавлено: 17 фев 2005, 17:50
Александр Коковихин
Спасибо, сейчас проверю.

Не хотелось бы вводить вторую транзакцию в приложение. Это обязательно?

При двух транзакциях будут отличия в данных вводимых пользователем и получаемых через маленькие "контрольные" запросы к базе, а механизм для этого предусмотрен один. И для запросов, и для обновлений.

Добавлено: 17 фев 2005, 18:01
DSKalugin
Александр Коковихин писал(а):Не хотелось бы вводить вторую транзакцию в приложение. Это обязательно?
если компоненты настроены на AutoCommit=True - не обязательно

Добавлено: 17 фев 2005, 19:46
Александр Коковихин
Спасибо, все заработало! Оказывается я перепутал Dataset и Query, использовал Dataset. После замены все стало проходить. Пожалуй заведу на Query для сложного SQL отдельную транзакцию :P

Добавлено: 17 фев 2005, 19:48
kdv
Александр, ты это - одна транзакция во всем приложении - это ОЧЕНЬ хреново. более того, DDL надо обязательно выполнять в отдельной транзакции, которой тут же делать commit. и выполнять по одному оператору ddl за раз.

Добавлено: 20 фев 2005, 11:35
Александр Коковихин
Так и сделаю. Спасибо!