![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Использование IBStoredProc [D6, FB 1.5.2]
Term © (2005-08-29 14:06:00)Гдето попадалось что использовать IBStoredProc нежелательно ввиду глючности последнего, но возникла необходимость его использования. Есть аналогичный компонент в фибсах(раньше с этими компонентами не работал и не устанавливал поэтому спрашиваю), и какие есть рекомендации
Без этого компонента не обойтись
Term (2005-08-29 18:02:00) [1]не использование Query не подходит т.к. нужно в течении короткого времени пересадить приложение на FB, в приложении полно TADOStoredProc, время просто поджимает
Карелин Артем (2005-08-29 17:41:00) [2]Делаем код вида Execute procedure с помощью указанного кода и не думаем о проблемах.
А вообще у меня несколько сот рабочих мест без проблем используют довольно активно сабж и проблем не было.
function GenerateSQL(Database:TIBDatabase;const SPName:string):string;
var
Query : TIBSQL;
input : string;
begin
Database.InternalTransaction.StartTransaction;
Query := TIBSQL.Create(Database);
try
Query.Database := DataBase;
Query.Transaction := Database.InternalTransaction;
Query.SQL.Text := 'SELECT RDB$PARAMETER_NAME, RDB$PARAMETER_TYPE ' + {do not localize}
'FROM RDB$PROCEDURE_PARAMETERS ' + {do not localize}
'WHERE RDB$PROCEDURE_NAME = ' + {do not localize}
'''' + FormatIdentifierValue(Database.SQLDialect,
QuoteIdentifier(Database.SQLDialect, SPName)) + '''' +
' ORDER BY RDB$PARAMETER_NUMBER'; {do not localize}
Query.Prepare;
Query.GoToFirstRecordOnExecute := False;
Query.ExecQuery;
while (not Query.EOF) and (Query.Next <> nil) do
begin
if (Query.Current.ByName('RDB$PARAMETER_TYPE').AsInteger = 0) then {do not localize}
begin
if (input <> '') then
input := input + ', :' +
QuoteIdentifier(Database.SQLDialect,trim(Query.Current.ByName('RDB$PARAMETER_NAME').AsString)) {do not localize}
else
input := ':' +
QuoteIdentifier(Database.SQLDialect, trim(Query.Current.ByName('RDB$PARAMETER_NAME').AsString)); {do not localize}
end
end;
if Input <> '' then
Result := 'Execute Procedure ' + {do not localize}
QuoteIdentifier(Database.SQLDialect, SPName) + '(' + input + ')'
else
Result := 'Execute Procedure ' + {do not localize}
QuoteIdentifier(Database.SQLDialect, SPName);
finally
Query.Free;
Database.InternalTransaction.Commit;
end;
end;
Domkrat (2005-08-29 15:47:00) [3]C FibPlus все ок.
Term (2005-08-29 15:13:00) [4]понятно, а с фибсами как дело обстоит
Domkrat (2005-08-29 14:41:00) [5]ibase.ru
>В общем случае не рекомендуется к использованию, т.к. имеет >застарелую проблему с обработкой ошибок. При самостоятельном >исправлении данной ошибки в коде (IBStoredProc.pas) может быть >использован.
Ошибка описана сдесь
http://www.ibase.ru/devinfo/ibstp.htm
Term (2005-08-29 14:30:00) [6]народ есть кто живой, кто может просветить относительно использования этого компонента