
02.09.2011, 09:12
|
 |
Прохожий
|
|
Регистрация: 02.09.2011
Адрес: Кострома
Сообщения: 45
Версия Delphi: 7
Репутация: 165
|
|
Оптимизация кода, работа с ADO
Ребята, прошу сразу не ругаться, опыта в программировании очень мало, помогите, пожалуйста, оптимизировать код (работает исправно, но очень кривой)!
Код:
unit Unit3;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, Buttons;
type
TParam = class(TForm)
BitBtn1: TBitBtn;
BitBtn2: TBitBtn;
Label1: TLabel;
Label2: TLabel;
Label3: TLabel;
Label5: TLabel;
Edit1: TEdit;
Edit2: TEdit;
Label6: TLabel;
ComboBox1: TComboBox;
Label7: TLabel;
ComboBox2: TComboBox;
ComboBox3: TComboBox;
procedure BitBtn2Click(Sender: TObject);
procedure BitBtn1Click(Sender: TObject);
procedure FormClose(Sender: TObject; var Action: TCloseAction);
// procedure SIE (a: Tobject; b:boolean);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Param: TParam;
strmain: String;
implementation
uses Unit1, Unit2, ADODB, TypInfo;
{$R *.dfm}
procedure Chisto; // ïðîöåäóðêà íóæíà, ÷òîáû î÷èñòèòü ñîäåðæèìîå êîìáîáîêñîâ è åäèòîâ ïî îêîí÷àíèè ðàáîòû
var i: Integer;
begin
for i:=0 to Param.ComponentCount-1 do begin
if Param.Components[i] is TEdit then
(Param.Components[i] as TEdit).Clear;
if Param.Components[i] is TComboBox then
(Param.Components[i] as TComboBox).ItemIndex:=-1;
end;
end;
procedure TParam.BitBtn2Click(Sender: TObject); //î÷èùàåì êîìáîáîêñû è åäèòû ïî êíîïêå 'Âûõîä'
begin
Chisto;
Param.Close;
end;
procedure TParam.FormClose(Sender: TObject; var Action: TCloseAction); //òî æå ñàìîå, íî ïðè çàêðûòèè ôîðìû;
begin
Chisto;
end;
procedure F1E(str1, str2, str3: String; k: Integer); // çäåñü áóäóò ïåðåäàâàòüñÿ ïàðàìåòðû â àäî-êâåðè èç ýäèòîâ
begin
// FmMain.ADOQuery1.Parameters.AddParameter.Name:=str1;
// FmMain.ADOQuery1.Parameters.ParamByName(str1).Value:=str2; //str2 - ñîäåðæèìîå åäèòà
if k=1 then strmain:=strmain+'((('+str3+')=:'+str1+'))'
else strmain:=strmain + ' and ((('+str3+')=:'+str1+'))';
end;
procedure TParam.BitBtn1Click(Sender: TObject);
var j, k: Integer; stre, stre1, stre2:String;
begin
strmain:='Select * from Kontrol_noska where '; // çàäàåì ñàìóþ ãëàâíóþ ñòðîêó
k:=0;
for j:=0 to Param.ComponentCount-1 do begin
if Param.Components[j] is TEdit then
if (Param.Components[j] as TEdit).Text<>'' then begin
inc(k);
if Param.Components[j].Name='Edit1' then begin
stre:='Nosit';
stre2:='Nositel'; // åñëè ââåëè â ýäèò1 Èìÿ Íîñèòåëÿ - ïðèñâàèâàåì íåîáõîäèìûå ïàðàìåòðû
stre1:=Edit1.Text;
F1E(stre, stre1, stre2, k);
end;
if Param.Components[j].Name='Edit2' then begin
stre:='Mo';
stre2:='Model';
stre1:=Edit2.Text; // åñëè ââåëè â ýäèò2 Íàçâàíèå Ìîäåëè - ðàáîòàåì ñ íåé
F1E(stre, stre1, stre2, k);
end;
end;
if Components[j] is TComboBox then
if (Components[j] as TComboBox).Text<>'' then begin
inc(k);
if Param.Components[j].Name='ComboBox3' then begin
stre:='Ka';
stre2:='Kabluk'; //åñëè ââåëè â êîìáîáîêñ 3 êàáëóê èëè âûáðàëè èç ñïèñêà....
stre1:=ComboBox3.Text;
F1E(stre, stre1, stre2, k);
end;
if Param.Components[j].Name='ComboBox2' then begin
stre:='fason';
stre2:='fason_kolodki';
stre1:=ComboBox3.Text;
F1E(stre, stre1, stre2, k);
end;
if Param.Components[j].Name='ComboBox1' then begin
stre:='Grup';
stre2:='Gruppa';
stre1:=ComboBox1.Text;
F1E(stre, stre1, stre2, k);
end;
end;
end;
if k=0 then ShowMessage('Íå çàäàíû ïàðàìåòðû äëÿ ïîèñêà')
else begin
with fmMain.ADOQuery1 do begin
Active:=False; // ýòîò êóñîê êîäà íóæåí äëÿ òîãî, ÷òîáû òàáëèöà êàæäûé ðàç îáíîâëÿëàñü, åñëè áûë ïðèìåíåí ôèëüòð
SQL.Clear;
Parameters.AddParameter.Name:='Nosit';
Parameters.ParamByName('Nosit').Value:=Edit1.Text;
Parameters.AddParameter.Name:='Mo';
Parameters.ParamByName('Mo').Value:=Edit2.Text;
Parameters.AddParameter.Name:='Ka';
Parameters.ParamByName('Ka').Value:=ComboBox3.Text;
Parameters.AddParameter.Name:='Grup';
Parameters.ParamByName('Grup').Value:=ComboBox1.Text;
Parameters.AddParameter.Name:='fason';
Parameters.ParamByName('fason').Value:=ComboBox2.Text;
SQL.Add(strmain);
fmChild1.DBGrid1.DataSource:=FmMain.DataSource1;
Active:=True;
fmChild1.Label1.Caption:='Íàéäåíî çàïèñåé: ' + IntToStr(fmMain.ADOQuery1.RecordCount);
if fmMain.ADOQuery1.RecordCount=0 then ShowMessage('Ïî âàøåìó çàïðîñó íè÷åãî íå íàéäåíî');
Param.Close;
fmChild1.ShowModal;
end;
end;
end;
end.
|