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

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

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


Scot Storch ©   (2010-06-25 18:06:00) 

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


Anatoly Podgoretsky   (2010-06-25 21:43:00) [1]

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


Anatoly Podgoretsky   (2010-06-25 21:42:00) [2]

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

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


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

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

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


Jeer   (2010-06-25 20:46:00) [4]


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


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


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


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

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


Anatoly Podgoretsky   (2010-06-25 19:44:00) [6]

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

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


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


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


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


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


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


лучше так:

function CreateQuery(const SQL: string): TQuery;


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

> Scot Storch  

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


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

вот так?


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;


Jeer   (2010-06-25 18:45:00) [11]


> это как


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


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


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


это как


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

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


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

вот пример:


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.


Наверх

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