Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2008.08.03;
Скачать: CL | DM;

Вниз

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

 
zorik ©   (2008-07-02 10:41) [0]

Если програмно нужно заносить в БД некоторые значения (импорт), то:
- использовать ХП для добавления одной записи и возвращения ID (ID используется для вставки значений в подчиненную таблицу);
- использовать ХП для возвращения требуемой записи (поиск ключа по названию, например).

Раньше я создавал датамодуль, на него TIBQueru, TIBUpdate и т.д. А сейчас написал одну процедурой исполнения функции с параметрами: имя функции и масив параметров и она все это заменяет.
Что-то мне подсказывает, что все так уже давно делали :))


 
Ega23 ©   (2008-07-02 10:46) [1]


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


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


 
Sergey13 ©   (2008-07-02 10:52) [2]

> [0] zorik ©   (02.07.08 10:41)
> Насколько целесообразно использовать такое?

По сравнению с чем? Говорить о целесообразности чего либо можно только зная задачу, которую нужно выполнить.

> на него TIBQueru, TIBUpdate
Почему не IBDataSet?


 
zorik ©   (2008-07-02 11:15) [3]


> По сравнению с чем?

По сравнению со связкой TIBQuery, TIBUpdate


> Почему не IBDataSet?

Даже не знаю, по-привычке, наверное


 
Sergey13 ©   (2008-07-02 11:23) [4]

> [3] zorik ©   (02.07.08 11:15)
> По сравнению со связкой TIBQuery, TIBUpdate

По большому счету запрос это самый эфективный способ общения с БД. Все навесы типа ХП или обработки на клиенте уменьшают производительность и/или надежность, давая при этом разумеется большую гибкость.
ИМХО.


 
Игорь Шевченко ©   (2008-07-02 11:25) [5]


> - использовать ХП для возвращения требуемой записи (поиск
> ключа по названию, например).


а что, обычный SELECT уже не в моде ?


> - использовать ХП для добавления одной записи и возвращения
> ID (ID используется для вставки значений в подчиненную таблицу);
>


Я бы вносил сразу запись и подчиненные. Но не знаю, как это в FB делается.


 
Desdechado ©   (2008-07-02 11:28) [6]

Если запись одна, то городить ради ее вставки ХП смысла не вижу.
А уж для простой выборки - тем более.


 
Loginov Dmitry ©   (2008-07-02 12:40) [7]


> - использовать ХП для добавления одной записи и возвращения
> ID (ID используется для вставки значений в подчиненную таблицу);
>


зачем здесь ХП? Генерируешь ID, запоминаешь значение, затем делаешь вставку в главную таблицу, затем вставку в подчиненную таблицу.


> использовать ХП для возвращения требуемой записи (поиск
> ключа по названию, например).


есть такая вещь...
SELECT-запрос называется.
кто в курсе - не плодит ненужных ХП.


 
zorik ©   (2008-07-02 12:58) [8]

как на меня с ХП удобнее работать именно в рантайм. универсальнее что-ли. Ниже полный код:

Универсальный вызов ХП
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;


 
zorik ©   (2008-07-02 13:01) [9]

В Query текст запроса надо в программе держать, а здесь в БД


 
Игорь Шевченко ©   (2008-07-02 13:41) [10]


> В Query текст запроса надо в программе держать, а здесь
> в БД


И в чем разница ?



Страницы: 1 вся ветка

Текущий архив: 2008.08.03;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.017 c
2-1215154573
lead-in
2008-07-04 10:56
2008.08.03
допустимое имя файла


15-1213879771
User_1
2008-06-19 16:49
2008.08.03
El-Lib


2-1214905271
Саша
2008-07-01 13:41
2008.08.03
Выделение строк в ListBox


15-1213818885
Сергей_77
2008-06-18 23:54
2008.08.03
Разработка серьёзного ПО


4-1193915862
fedormoore
2007-11-01 14:17
2008.08.03
сканер