![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Нужен совет по организации 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.