![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Насколько целесообразно использовать такое?
zorik © (2008-07-02 10:41:00)Если програмно нужно заносить в БД некоторые значения (импорт), то:
- использовать ХП для добавления одной записи и возвращения ID (ID используется для вставки значений в подчиненную таблицу);
- использовать ХП для возвращения требуемой записи (поиск ключа по названию, например).
Раньше я создавал датамодуль, на него TIBQueru, TIBUpdate и т.д. А сейчас написал одну процедурой исполнения функции с параметрами: имя функции и масив параметров и она все это заменяет.
Что-то мне подсказывает, что все так уже давно делали :))
Игорь Шевченко (2008-07-02 13:41:00) [1]
> В Query текст запроса надо в программе держать, а здесь
> в БД
И в чем разница ?
zorik (2008-07-02 13:01:00) [2]В Query текст запроса надо в программе держать, а здесь в БД
zorik (2008-07-02 12:58:00) [3]как на меня с ХП удобнее работать именно в рантайм. универсальнее что-ли. Ниже полный код:
Универсальный вызов ХП
procedure RunStoredProc(AIBDatabase: TIBDatabase; ATransaction: TIBTransaction;
AName: String; var AParams: Variant);
var
AStoredProc: TIBStoredProc;
i: Integer;
begin
AStoredProc := TIBStoredProc.Create(nil);
try
AStoredProc.Database := AIBDatabase;
AStoredProc.Transaction := ATransaction;
AStoredProc.StoredProcName := AName;
ATransaction.StartTransaction;
AStoredProc.Prepare;
for i := 0 to AStoredProc.Params.Count - 1 do
AStoredProc.Params[i].Value := AParams[i];
try
AStoredProc.ExecProc;
ATransaction.Commit;
for i := 0 to AStoredProc.Params.Count - 1 do
AParams[i] := AStoredProc.Params[i].Value;
except
on E: Exception do
begin
ATransaction.Rollback;
raise Exception.Create('Error: ' + E.Message);
end;
end;
finally
AStoredProc.Free;
end;
end;
Вызов процедуры
procedure TRZBWellItem.GetID;
var
c: Variant;
begin
try
c := VarArrayOf([FID, FRZBImport.FID_Field, FName]);
RunStoredProc(FRZBImport.FDataBase, FRZBImport.FTransaction,
'PR_GET_WELLID', c);
FID := c[0];
except
on E: Exception do
begin
FID := -1;
raise ERZBImport.Create('.....');
end;
end;
end;
Loginov Dmitry (2008-07-02 12:40:00) [4]
> - использовать ХП для добавления одной записи и возвращения
> ID (ID используется для вставки значений в подчиненную таблицу);
>
зачем здесь ХП? Генерируешь ID, запоминаешь значение, затем делаешь вставку в главную таблицу, затем вставку в подчиненную таблицу.
> использовать ХП для возвращения требуемой записи (поиск
> ключа по названию, например).
есть такая вещь...
SELECT-запрос называется.
кто в курсе - не плодит ненужных ХП.
Desdechado (2008-07-02 11:28:00) [5]Если запись одна, то городить ради ее вставки ХП смысла не вижу.
А уж для простой выборки - тем более.
Игорь Шевченко (2008-07-02 11:25:00) [6]
> - использовать ХП для возвращения требуемой записи (поиск
> ключа по названию, например).
а что, обычный SELECT уже не в моде ?
> - использовать ХП для добавления одной записи и возвращения
> ID (ID используется для вставки значений в подчиненную таблицу);
>
Я бы вносил сразу запись и подчиненные. Но не знаю, как это в FB делается.
Sergey13 (2008-07-02 11:23:00) [7]> [3] zorik © (02.07.08 11:15)
> По сравнению со связкой TIBQuery, TIBUpdate
По большому счету запрос это самый эфективный способ общения с БД. Все навесы типа ХП или обработки на клиенте уменьшают производительность и/или надежность, давая при этом разумеется большую гибкость.
ИМХО.
zorik (2008-07-02 11:15:00) [8]
> По сравнению с чем?
По сравнению со связкой TIBQuery, TIBUpdate
> Почему не IBDataSet?
Даже не знаю, по-привычке, наверное
Sergey13 (2008-07-02 10:52:00) [9]> [0] zorik © (02.07.08 10:41)
> Насколько целесообразно использовать такое?
По сравнению с чем? Говорить о целесообразности чего либо можно только зная задачу, которую нужно выполнить.
> на него TIBQueru, TIBUpdate
Почему не IBDataSet?
Ega23 (2008-07-02 10:46:00) [10]
> - использовать ХП для добавления одной записи и возвращения
> ID (ID используется для вставки значений в подчиненную таблицу);
>
> - использовать ХП для возвращения требуемой записи (поиск
> ключа по названию, например).
Я именно так и делаю.