![]() |
|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
||||
|
||||
![]() Ребята, прошу сразу не ругаться, опыта в программировании очень мало, помогите, пожалуйста, оптимизировать код (работает исправно, но очень кривой)!
![]() Код:
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. |
#2
|
||||
|
||||
![]() Существует такое негласное правило: Если программа работает хорошо, дальнейшее улучшение с целью оптимизации кода неизбежно приведет к ухудшению или полной неработоспособности программы.
![]() Жизнь такова какова она есть и больше никакова. Помогаю за спасибо. |
#3
|
||||
|
||||
![]() Тогда объясни, пожалуйста, почему если в процедуре
Код:
procedure F1E(str1, str2, str3: String; k: Integer); begin // FmMain.ADOQuery1.Parameters.AddParameter.Name:=str1; // FmMain.ADOQuery1.Parameters.ParamByName(str1).Value:=str2; if k=1 then strmain:=strmain+'((('+str3+')=:'+str1+'))' else strmain:=strmain + ' and ((('+str3+')=:'+str1+'))'; end; я раскомментирую строчки, но закомментирую Код:
Parameters.AddParameter.Name:='Nosit'; Parameters.ParamByName('Nosit').Value:=Edit1.Text; то результат будет - пустое множество?... я не совсем понимаю, как осуществляется передача параметров в ADO, было бы побольше времени - разобралась, но сдавать надо очень скоро ![]() поясни, пожалуйста? Memento Mori(арти) |
#4
|
||||
|
||||
![]() Трудно что-то предполагать по кусочкам кода. Я вам рекомендую отладчиком пошагово пройтись по коду и посмотреть, что и куда у вас записывается.
Жизнь такова какова она есть и больше никакова. Помогаю за спасибо. |
#5
|
||||
|
||||
![]() я отладчиком не очень хорошо умею пользоваться , могу отследить значение какой-то переменной...
когда добавляю в ADDWatch ParamByName(str1), либо FmMain.ADOQuery1.Parameters.ParamByName(str1), либо с добавлением .Value, пишет "неизвестный параметр", не подскажете, как решить проблемку?... ADOQuery1 валяется на другой форме. Memento Mori(арти) |
#6
|
|||
|
|||
![]() Цитата:
Если правильно помню, то параметры в ADO-компонентах автоматически не создаются, но их можно создать в design-time (если запрос не динамический). А если запрос динамический, то нет смысла делать параметры, проще просто сформировать запрос сразу со значениями. |