Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Насколько целесообразно использовать такое?


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 используется для вставки значений в подчиненную таблицу);
>
> - использовать ХП для возвращения требуемой записи (поиск
> ключа по названию, например).


Я именно так и делаю.


Наверх

Титульная страница Поиск, карта сайта Написать письмо