Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 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
15-1277238595
Юрий
2010-06-23 00:29
2010.09.19
С днем рождения ! 23 июня 2010 среда


15-1277316827
zlodey
2010-06-23 22:13
2010.09.19
песни про программистов


15-1276979398
Юрий
2010-06-20 00:29
2010.09.19
С днем рождения ! 20 июня 2010 воскресенье


15-1276892998
Юрий
2010-06-19 00:29
2010.09.19
С днем рождения ! 19 июня 2010 суббота


15-1277226885
Who_is_you?
2010-06-22 21:14
2010.09.19
Как добавить новый компонент





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский