Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2010.11.07;
Скачать: [xml.tar.bz2];

Вниз

Сравнение "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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.46 MB
Время: 0.004 c
2-1281772529
mm0
2010-08-14 11:55
2010.11.07
SetFocus из потока


6-1229185383
ASMiD
2008-12-13 19:23
2010.11.07
компонент для чтения с FTP сервера для Delphi7


15-1280089770
Юрий
2010-07-26 00:29
2010.11.07
С днем рождения ! 26 июля 2010 понедельник


2-1281504230
Irisss
2010-08-11 09:23
2010.11.07
Открыт ли файл Excel


15-1280348982
Юрий
2010-07-29 00:29
2010.11.07
С днем рождения ! 29 июля 2010 четверг





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский