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

Вниз

Нужен совет по организации TQuery   Найти похожие ветки 

 
Scot Storch   (2010-06-25 18:06) [0]

есть класс с рядом методов, каждый из которых выполняет определенный запрос. На момент выполнения каждый метод создает объект TQuery и выполняет его. Может правильнее будет создавать его единожды в конструкторе класса и потом в каждом из методов менять тект запроса. Нужен ваш совет.


 
Scot Storch   (2010-06-25 18:06) [1]

вот пример:


unit Unit1;

interface

uses
 Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
 Dialogs, DB, DBTables;

type
 TForm1 = class(TForm)
 private
   { Private declarations }
 public
   { Public declaration }
 end;

 TMyClass = class
 public
   procedure A;
   procedure B;
   procedure C;
   procedure D;
 end;

var
 Form1: TForm1;

implementation

{$R *.dfm}

{ TForm1 }

procedure TMyClass.A;
var
 cmp_query: TQuery;
begin
 cmp_query := TQuery.Create(nil);
 try
   { ... }
   cmp_query.SQL.Text := "...";
   { .... }
 finally
   cmp_query.Free;
 end;
end;

procedure TMyClass.B;
var
 cmp_query: TQuery;
begin
 cmp_query := TQuery.Create(nil);
 try
   { ... }
   cmp_query.SQL.Text := "...";
   { .... }
 finally
   cmp_query.Free;
 end;
end;

procedure TMyClass.C;
var
 cmp_query: TQuery;
begin
 cmp_query := TQuery.Create(nil);
 try
   { ... }
   cmp_query.SQL.Text := "...";
   { .... }
 finally
   cmp_query.Free;
 end;
end;

procedure TMyClass.D;
var
 cmp_query: TQuery;
begin
 cmp_query := TQuery.Create(nil);
 try
   { ... }
   cmp_query.SQL.Text := "...";
   { .... }
 finally
   cmp_query.Free;
 end;
end;

end.



 
Плохиш ©   (2010-06-25 18:21) [2]

Сделать функцию, получающую текст запроса и возвращающую TDataSet.


 
Scot Storch   (2010-06-25 18:34) [3]


> Сделать функцию, получающую текст запроса и возвращающую
> TDataSet.


это как


 
Jeer ©   (2010-06-25 18:45) [4]


> это как


Ты это уже делал выше


 
Scot Storch   (2010-06-25 18:58) [5]

вот так?


procedure get_query_res(const S: string; out cmp_query: TQuery);
begin
 cmp_query := TQuery.Create(nil);
 cmp_query.DatabaseName := DB_NAME;
  cmp_query.SessionName := SSN_NAME;
     cmp_query.SQL.Text := S;
end;

procedure TMyClass.A;
var
 item_ID: Integer;
 cmp_query: TQuery;
begin
 { ... }
 get_query_res(Format("SELECT * FROM item WHERE (item_ID = %d) AND (flags <> 1)",
   [item_ID]), cmp_query);
 try
   { ... }
 finally
   cmp_query.Free;
 end;
end;

procedure TMyClass.B;
var
 item_ID: Integer;
 cmp_query: TQuery;
begin
 { ... }
 get_query_res(Format("SELECT * FROM content WHERE contaner_ID = %d",
   [item_ID]), cmp_query);
 try
   { ... }
 finally
   cmp_query.Free;
 end;
end;


 
И. Павел ©   (2010-06-25 19:12) [6]

> Scot Storch  

Зачем создавать TQuery для каждого запроса? Разместите один на форме/модуле данных, или создавайте его в конструкторе класса.


 
_Юрий ©   (2010-06-25 19:23) [7]


> procedure get_query_res(const S: string; out cmp_query:
> TQuery);


лучше так:

function CreateQuery(const SQL: string): TQuery;


 
Игорь Шевченко ©   (2010-06-25 19:38) [8]


> На момент выполнения каждый метод создает объект TQuery
> и выполняет его. Может правильнее будет создавать его единожды
> в конструкторе класса и потом в каждом из методов менять
> тект запроса. Нужен ваш совет


Создавать в каждом методе. Операция незатратная, зато простор для гибкости.


 
Anatoly Podgoretsky ©   (2010-06-25 19:44) [9]

> Scot Storch  (25.06.2010 18:06:00)  [0]

Приведеный пример более правильный, полная изоляция.


 
Правильный$Вася   (2010-06-25 20:35) [10]


> Игорь Шевченко ©   (25.06.10 19:38) [8]
> Anatoly Podgoretsky ©   (25.06.10 19:44) [9]

а если тектов запроса будет сотня? на каждый по методу лепить?


 
Jeer ©   (2010-06-25 20:46) [11]


> Правильный$Вася   (25.06.10 20:35) [10]


Зависит от задачи в целом. Если есть зависимые запросы или будет желание их исполнять в потоках, тогда отдельные датасеты.
Если же ничего это не предвидится - вполне сойдет один TQuery.


 
Игорь Шевченко ©   (2010-06-25 20:51) [12]

Правильный$Вася   (25.06.10 20:35) [10]

Если сотня запросов, то подумать о смене деятельности


 
Anatoly Podgoretsky ©   (2010-06-25 21:42) [13]

> Правильный$Вася  (25.06.2010 20:35:10)  [10]

А чего одной строки жалко (.Create) а больше различий и нет, ну и еще free


 
Anatoly Podgoretsky ©   (2010-06-25 21:43) [14]

А взамен получаешь полную изоляцию, независимость от всего. А общий Query по поведению как глобальная переменная.



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

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

Наверх




Память: 0.5 MB
Время: 0.009 c
15-1276979398
Юрий
2010-06-20 00:29
2010.09.19
С днем рождения ! 20 июня 2010 воскресенье


2-1277572345
New555
2010-06-26 21:12
2010.09.19
Использовние sndPlaySound для проигрывания нескольких файлов


2-1277283818
12
2010-06-23 13:03
2010.09.19
Научите работать, как работает ShowMessageFmt


15-1277349628
ixen
2010-06-24 07:20
2010.09.19
Не запускается программа. В чем может быть причина?


2-1277721170
Scot Storch
2010-06-28 14:32
2010.09.19
проверка наличия IDs в таблице