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

Вниз

Сравнение "runtime" и "design time"   Найти похожие ветки 

 
mefodiy   (2010-08-16 10:02) [0]

Есть база данных в MySQL, в которой много таблиц. В программе приходится использовать много запросов, иногда используя несколько компонентов TQuery одновременно. Вопрос такой: как лучше с точки зрения быстродействия, расходования оперативной памяти, размера exe файла, теории программирования и т.д. создавать (по мере необходимости) и  уничтожать TQuery на лету в "runtime" или включить нужное количество этих компонент в "design time". Вопрос для мастеров может быть и наивный, но тем не менее прошу ответить.


 
Сергей М. ©   (2010-08-16 10:08) [1]


> много запросов


> несколько компонентов


"Много" и "несколько" - понятия растяжимые.


 
int64 ©   (2010-08-16 10:18) [2]

А где и как ты создаешь формы с TQuery?


 
12 ©   (2010-08-16 10:19) [3]

не знаю
делаю так: (заодно может кто про код что скажет, лучше сразу словить от форума, чем после от заказчика :) )

основные кидаю, а вспомогательные создаю
написал unit для созданий, и создавать получается не долго

например
OpenQ(oqTmp, "select CODEPAGE_ID, SEPARATOR  from PARAMS where SUBSCRIBER_ID = :SUBSCRIBER_ID", [FSubscrID] );
открыть

OpenQC(oqTmp, "select CODEPAGE_ID, SEPARATOR  from PARAMS where SUBSCRIBER_ID = :SUBSCRIBER_ID", [FSubscrID] );
создать и открыть

ExecQC(oqTmp, "update PARAMS  set AAA= 22323 where SUBSCRIBER_ID = :SUBSCRIBER_ID", [FSubscrID] );
создать, выполнить

и не забывать FreeAndNil()
---
где
procedure OpenQ(const Q:tORAQuery; const SQL:string; const P:array of variant);
var
 i:integer;
 s:string;
begin
 try
   Q.SQL.Text := SQL;
   s := "";
   for i := 0 to Q.ParamCount-1 do
   begin
     Q.Params[i].Value := P[i];
     s := s + Q.Params[i].Name + "=" + Q.Params[i].AsString + #13#10;
   end;
   Q.Open;
 except
   on E:Exception do
   begin
     E.Message := E.Message + #13#10 + "uUtils. procedure OpenQ." + #13#10 + Q.SQL.Text + #13#10 + s;
     Raise;
   end;
 end;
end;

или например
procedure CreateQ(var Q:tORAQuery);
begin
 if Session = nil then Raise Exception.Create("uUtils. CreateQ. Неинициализированная пременная модуля Session");
 Q := tORAQuery.Create(nil);
 Q.Session := Session;
end;

procedure OpenQC(var Q:tORAQuery; const SQL:string; const P:array of variant);
begin
 CreateQ(Q);
 OpenQ(Q, SQL, P);
end;

и кажется уже проще не кидать, а создавать..

ну и еще написать пару костылей можно
if GetFld(oqData, "DRIVE_WAY", V) then edtDriveWay.Text := V;
или
SetByFld(sPhone, oqHelp, "PHONE");


где

function GetFld(const Q:tORAQuery; const Fld:string; var Val:Variant):boolean;
begin
 Result := true;
 if Q.IsEmpty then
 begin
   Result:=false;
   Val := varEmpty;
   Exit;
 end;
 if Q.FindField(Fld) = nil then
 begin
   Raise Exception.Create("Поле " + Fld + " не найдено в uUtils.GetFld.Q ");
   Exit;
 end;
 if Q.FieldByName(Fld).IsNull then
 begin
   Result := False;
   Val := varNull;
   Exit;
 end;
 Val := Q.FieldByName(Fld).Value;
end;

procedure SetByFld(Var S:String; const Q:tORAQuery; const Fld:string);
var
 V: Variant;
begin
 if GetFld(Q, Fld, V) then S := V;
end;


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


 
mefodiy   (2010-08-16 11:01) [4]


> А где и как ты создаешь формы с TQuery?

У меня есть Data Module, куда я бросил все компоненты TQuery. Их у меня по числу таблиц БД (в названиях TQuery использую названия таблиц), что конечно удобно, но, наверное, неэффективно.


 
int64 ©   (2010-08-16 11:43) [5]

Распихай TQuery по классам, их использующим. И в каждом случае смотри: где в полях держать, где локально создавать.
А если все TQuery в одну кучу валить, возникает проблема "глобальных переменных". Когда не знаешь, между какими объектами переменная служит буфером.



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

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

Наверх




Память: 0.48 MB
Время: 0.012 c
2-1281731884
Andrey K
2010-08-14 00:38
2010.11.07
Как через родителя обратится к компоненту.


15-1280344780
Kolan
2010-07-28 23:19
2010.11.07
Как проверить алгоритм


15-1280407604
__REA
2010-07-29 16:46
2010.11.07
NMEA


15-1280474574
Лезнайка на Нуле
2010-07-30 11:22
2010.11.07
когнитивный диссонанс


8-1180443656
borodaj
2007-05-29 17:00
2010.11.07
еще вопрос по изображениям )