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

IBX, FIBPlus, UIB, ADO, .Net и прочее-прочее-прочее, в общем все, что относится к созданию приложений, работающих с InterBase, Firebird и Yaffil - клиент-серверных, трехзвенных, консольных и т.п.

Модератор: kdv

Ответить
Александр Коковихин
Сообщения: 9
Зарегистрирован: 17 фев 2005, 15:52

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

Сообщение Александр Коковихин » 17 фев 2005, 16:27

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

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

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

DSKalugin
Сообщения: 212
Зарегистрирован: 27 окт 2004, 13:39

Сообщение DSKalugin » 17 фев 2005, 17:11

используй компонент 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

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

Александр Коковихин
Сообщения: 9
Зарегистрирован: 17 фев 2005, 15:52

Сообщение Александр Коковихин » 17 фев 2005, 17:50

Спасибо, сейчас проверю.

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

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

DSKalugin
Сообщения: 212
Зарегистрирован: 27 окт 2004, 13:39

Сообщение DSKalugin » 17 фев 2005, 18:01

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

Александр Коковихин
Сообщения: 9
Зарегистрирован: 17 фев 2005, 15:52

Сообщение Александр Коковихин » 17 фев 2005, 19:46

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

kdv
Forum Admin
Сообщения: 6595
Зарегистрирован: 25 окт 2004, 18:07

Сообщение kdv » 17 фев 2005, 19:48

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

Александр Коковихин
Сообщения: 9
Зарегистрирован: 17 фев 2005, 15:52

Сообщение Александр Коковихин » 20 фев 2005, 11:35

Так и сделаю. Спасибо!

Ответить