Форум: "Начинающим";
Текущий архив: 2010.09.19;
Скачать: [xml.tar.bz2];
ВнизНужен совет по организации 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;
Скачать: [xml.tar.bz2];
Память: 0.48 MB
Время: 0.005 c