farshid_82
شنبه 12 فروردین 1391, 00:30 صبح
سلام
دوستان من یک سال پیش برنامه ای نوشتم برای رزرو بلیط اتوبوس و برای ایجاد صندلی اتوبوس از advstringgrid استفاده شد و تو برنامه procedure ای قراردادم که وظیفش نمایش جای مسافرین در صندلی خودشون هست که اگر مرد باشن تصویر مرد و زن هم تصویر زن در کنار شماره صندلی خودشون نمایش میده حالا با افزایش حجم اطلاعات و برنامه نویسی افتضاح من بخاطر همین prucedure سرعت شدید پائین اومده حالا با توجه به عادت کاربران نمی تونم محیط دستکاری کنم لطفا راهنمائی کنید با این کدها چه می شه کرد که سرعت رو بالا ببرم.
برنامه از 2 جدول استفاده می کنه که جدول اصلی برای ثبت تاریخ - تعداد مسافر - کرایه و جمع کل هست و جدول دوم که برای هر مسافر یک رکورد ثبت می کنه و اطلاعاتی مثل cell و row که جای مسافرین هست رو ذخیره می کنه.
procedure TFSBlit.FullMO();
Var n,i : Integer;
begin
//-----------------------
for i:=0 to advstringgrid1.RowCount -1 do
begin
AdvStringGrid1.AddImageIdx(0,i,0,haBeforeText,vaTo p);
AdvStringGrid1.AddImageIdx(1,i,0,haBeforeText,vaTo p);
AdvStringGrid1.AddImageIdx(3,i,0,haBeforeText,vaTo p);
AdvStringGrid1.AddImageIdx(4,i,0,haBeforeText,vaTo p);
//-----------------------
AdvStringGrid1.CellProperties[0,i].BrushColor := $00F9F2ED;
AdvStringGrid1.CellProperties[1,i].BrushColor := $00F9F2ED;
AdvStringGrid1.CellProperties[3,i].BrushColor := $00F9F2ED;
AdvStringGrid1.CellProperties[4,i].BrushColor := $00F9F2ED;
end;
//---------------------------------
FDMBank.QFull.Close;
FDMBank.QFull.ParamByName('inlpb').AsString := TaProgramID.AsString;
FDMBank.QFull.ParamByName('indate').AsString := SolarMonthCalendar1.OutDate;
FDMBank.QFull.ExecSQL;
FDMBank.QFull.Open;
FDMBank.QFull.First;
if FDMBank.QFull.RecordCount <> 0 then begin
while not FDMBank.QFull.Eof do begin
AdvStringGrid1.RowCount := trunc(StrToInt(sDBTextFX4.Caption) Div 4);
n := 0;
advstringgrid1.excelclipboardformat:=true;
for i:=0 to advstringgrid1.RowCount -1 do
begin
n := n + 1;
advstringgrid1.cells[0,i] := IntToStr(n);
//----------------
FDMBank.QLoad.Close;
FDMBank.QLoad.ParamByName('inlink').AsInteger := FDMBank.QFullNOO.AsInteger;
FDMBank.QLoad.ParamByName('inarow').AsInteger := i;
FDMBank.QLoad.ParamByName('incol1').AsInteger := 0;
FDMBank.QLoad.ExecSQL;
FDMBank.QLoad.Open;
if FDMBank.QLoad.RecordCount <> 0 then
begin
while not FDMBank.QLoad.Eof do
begin
AdvStringGrid1.AddImageIdx(0,i,FDMBank.QLoadSRow.A sInteger,haBeforeText,vaTop);
FDMBank.QLoad.Next;
end;
end;
//-------------------------------
n := n + 1;
advstringgrid1.cells[1,i] := IntToStr(n);
//----------------
FDMBank.QLoad.Close;
FDMBank.QLoad.ParamByName('inlink').AsInteger := FDMBank.QFullNOO.AsInteger;
FDMBank.QLoad.ParamByName('inarow').AsInteger := i;
FDMBank.QLoad.ParamByName('incol1').AsInteger := 1;
FDMBank.QLoad.ExecSQL;
FDMBank.QLoad.Open;
if FDMBank.QLoad.RecordCount <> 0 then
begin
while not FDMBank.QLoad.Eof do
begin
AdvStringGrid1.AddImageIdx(1,i,FDMBank.QLoadSRow.A sInteger,haBeforeText,vaTop);
FDMBank.QLoad.Next;
end;
end;
//-------------------------------
n := n + 1;
advstringgrid1.cells[3,i] := IntToStr(n);
//----------------
FDMBank.QLoad.Close;
FDMBank.QLoad.ParamByName('inlink').AsInteger := FDMBank.QFullNOO.AsInteger;
FDMBank.QLoad.ParamByName('inarow').AsInteger := i;
FDMBank.QLoad.ParamByName('incol1').AsInteger := 3;
FDMBank.QLoad.ExecSQL;
FDMBank.QLoad.Open;
if FDMBank.QLoad.RecordCount <> 0 then
begin
while not FDMBank.QLoad.Eof do
begin
AdvStringGrid1.AddImageIdx(3,i,FDMBank.QLoadSRow.A sInteger,haBeforeText,vaTop);
FDMBank.QLoad.Next;
end;
end;
//-------------------------------
n := n + 1;
advstringgrid1.cells[4,i] := IntToStr(n);
//----------------
FDMBank.QLoad.Close;
FDMBank.QLoad.ParamByName('inlink').AsInteger := FDMBank.QFullNOO.AsInteger;
FDMBank.QLoad.ParamByName('inarow').AsInteger := i;
FDMBank.QLoad.ParamByName('incol1').AsInteger := 4;
FDMBank.QLoad.ExecSQL;
FDMBank.QLoad.Open;
if FDMBank.QLoad.RecordCount <> 0 then
begin
while not FDMBank.QLoad.Eof do
begin
AdvStringGrid1.AddImageIdx(4,i,FDMBank.QLoadSRow.A sInteger,haBeforeText,vaTop);
FDMBank.QLoad.Next;
end;
end;
//-------------------------------
end;
FDMBank.QFull.Next;
end;
end Else Begin
AdvStringGrid1.RowCount := trunc(StrToInt(sDBTextFX4.Caption) Div 4);
n := 0;
advstringgrid1.excelclipboardformat:=true;
for i:=0 to advstringgrid1.RowCount -1 do
begin
n := n + 1;
advstringgrid1.cells[0,i] := IntToStr(n);
//----------------
FDMBank.QLoad.Close;
FDMBank.QLoad.ParamByName('inlink').AsInteger := FDMBank.QFullNOO.AsInteger;
FDMBank.QLoad.ParamByName('inarow').AsInteger := i;
FDMBank.QLoad.ParamByName('incol1').AsInteger := 0;
FDMBank.QLoad.ExecSQL;
FDMBank.QLoad.Open;
if FDMBank.QLoad.RecordCount <> 0 then
begin
while not FDMBank.QLoad.Eof do
begin
AdvStringGrid1.AddImageIdx(0,i,FDMBank.QLoadSRow.A sInteger,haBeforeText,vaTop);
FDMBank.QLoad.Next;
end;
end;
//-------------------------------
n := n + 1;
advstringgrid1.cells[1,i] := IntToStr(n);
//----------------
FDMBank.QLoad.Close;
FDMBank.QLoad.ParamByName('inlink').AsInteger := FDMBank.QFullNOO.AsInteger;
FDMBank.QLoad.ParamByName('inarow').AsInteger := i;
FDMBank.QLoad.ParamByName('incol1').AsInteger := 1;
FDMBank.QLoad.ExecSQL;
FDMBank.QLoad.Open;
if FDMBank.QLoad.RecordCount <> 0 then
begin
while not FDMBank.QLoad.Eof do
begin
AdvStringGrid1.AddImageIdx(1,i,FDMBank.QLoadSRow.A sInteger,haBeforeText,vaTop);
FDMBank.QLoad.Next;
end;
end;
//-------------------------------
n := n + 1;
advstringgrid1.cells[3,i] := IntToStr(n);
//----------------
FDMBank.QLoad.Close;
FDMBank.QLoad.ParamByName('inlink').AsInteger := FDMBank.QFullNOO.AsInteger;
FDMBank.QLoad.ParamByName('inarow').AsInteger := i;
FDMBank.QLoad.ParamByName('incol1').AsInteger := 3;
FDMBank.QLoad.ExecSQL;
FDMBank.QLoad.Open;
if FDMBank.QLoad.RecordCount <> 0 then
begin
while not FDMBank.QLoad.Eof do
begin
AdvStringGrid1.AddImageIdx(3,i,FDMBank.QLoadSRow.A sInteger,haBeforeText,vaTop);
FDMBank.QLoad.Next;
end;
end;
//-------------------------------
n := n + 1;
advstringgrid1.cells[4,i] := IntToStr(n);
//----------------
FDMBank.QLoad.Close;
FDMBank.QLoad.ParamByName('inlink').AsInteger := FDMBank.QFullNOO.AsInteger;
FDMBank.QLoad.ParamByName('inarow').AsInteger := i;
FDMBank.QLoad.ParamByName('incol1').AsInteger := 4;
FDMBank.QLoad.ExecSQL;
FDMBank.QLoad.Open;
if FDMBank.QLoad.RecordCount <> 0 then
begin
while not FDMBank.QLoad.Eof do
begin
AdvStringGrid1.AddImageIdx(4,i,FDMBank.QLoadSRow.A sInteger,haBeforeText,vaTop);
FDMBank.QLoad.Next;
end;
end;
//-------------------------------
end;
end;
//-----------------------
FDMBank.QColor.Close;
FDMBank.QColor.ParamByName('inlink').AsInteger := FDMBank.TaBlitNOO.AsInteger;
FDMBank.QColor.ExecSQL;
FDMBank.QColor.Open;
if FDMBank.QColor.RecordCount <> 0 then begin
while not FDMBank.QColor.Eof do
begin
AdvStringGrid1.CellProperties[FDMBank.QColorCol1.AsInteger,FDMBank.QColorARow.As Integer].BrushColor := clHighlight;
FDMBank.QColor.Next;
end;
end;
XDBGrid2.SetFocus;
end;
دوستان من یک سال پیش برنامه ای نوشتم برای رزرو بلیط اتوبوس و برای ایجاد صندلی اتوبوس از advstringgrid استفاده شد و تو برنامه procedure ای قراردادم که وظیفش نمایش جای مسافرین در صندلی خودشون هست که اگر مرد باشن تصویر مرد و زن هم تصویر زن در کنار شماره صندلی خودشون نمایش میده حالا با افزایش حجم اطلاعات و برنامه نویسی افتضاح من بخاطر همین prucedure سرعت شدید پائین اومده حالا با توجه به عادت کاربران نمی تونم محیط دستکاری کنم لطفا راهنمائی کنید با این کدها چه می شه کرد که سرعت رو بالا ببرم.
برنامه از 2 جدول استفاده می کنه که جدول اصلی برای ثبت تاریخ - تعداد مسافر - کرایه و جمع کل هست و جدول دوم که برای هر مسافر یک رکورد ثبت می کنه و اطلاعاتی مثل cell و row که جای مسافرین هست رو ذخیره می کنه.
procedure TFSBlit.FullMO();
Var n,i : Integer;
begin
//-----------------------
for i:=0 to advstringgrid1.RowCount -1 do
begin
AdvStringGrid1.AddImageIdx(0,i,0,haBeforeText,vaTo p);
AdvStringGrid1.AddImageIdx(1,i,0,haBeforeText,vaTo p);
AdvStringGrid1.AddImageIdx(3,i,0,haBeforeText,vaTo p);
AdvStringGrid1.AddImageIdx(4,i,0,haBeforeText,vaTo p);
//-----------------------
AdvStringGrid1.CellProperties[0,i].BrushColor := $00F9F2ED;
AdvStringGrid1.CellProperties[1,i].BrushColor := $00F9F2ED;
AdvStringGrid1.CellProperties[3,i].BrushColor := $00F9F2ED;
AdvStringGrid1.CellProperties[4,i].BrushColor := $00F9F2ED;
end;
//---------------------------------
FDMBank.QFull.Close;
FDMBank.QFull.ParamByName('inlpb').AsString := TaProgramID.AsString;
FDMBank.QFull.ParamByName('indate').AsString := SolarMonthCalendar1.OutDate;
FDMBank.QFull.ExecSQL;
FDMBank.QFull.Open;
FDMBank.QFull.First;
if FDMBank.QFull.RecordCount <> 0 then begin
while not FDMBank.QFull.Eof do begin
AdvStringGrid1.RowCount := trunc(StrToInt(sDBTextFX4.Caption) Div 4);
n := 0;
advstringgrid1.excelclipboardformat:=true;
for i:=0 to advstringgrid1.RowCount -1 do
begin
n := n + 1;
advstringgrid1.cells[0,i] := IntToStr(n);
//----------------
FDMBank.QLoad.Close;
FDMBank.QLoad.ParamByName('inlink').AsInteger := FDMBank.QFullNOO.AsInteger;
FDMBank.QLoad.ParamByName('inarow').AsInteger := i;
FDMBank.QLoad.ParamByName('incol1').AsInteger := 0;
FDMBank.QLoad.ExecSQL;
FDMBank.QLoad.Open;
if FDMBank.QLoad.RecordCount <> 0 then
begin
while not FDMBank.QLoad.Eof do
begin
AdvStringGrid1.AddImageIdx(0,i,FDMBank.QLoadSRow.A sInteger,haBeforeText,vaTop);
FDMBank.QLoad.Next;
end;
end;
//-------------------------------
n := n + 1;
advstringgrid1.cells[1,i] := IntToStr(n);
//----------------
FDMBank.QLoad.Close;
FDMBank.QLoad.ParamByName('inlink').AsInteger := FDMBank.QFullNOO.AsInteger;
FDMBank.QLoad.ParamByName('inarow').AsInteger := i;
FDMBank.QLoad.ParamByName('incol1').AsInteger := 1;
FDMBank.QLoad.ExecSQL;
FDMBank.QLoad.Open;
if FDMBank.QLoad.RecordCount <> 0 then
begin
while not FDMBank.QLoad.Eof do
begin
AdvStringGrid1.AddImageIdx(1,i,FDMBank.QLoadSRow.A sInteger,haBeforeText,vaTop);
FDMBank.QLoad.Next;
end;
end;
//-------------------------------
n := n + 1;
advstringgrid1.cells[3,i] := IntToStr(n);
//----------------
FDMBank.QLoad.Close;
FDMBank.QLoad.ParamByName('inlink').AsInteger := FDMBank.QFullNOO.AsInteger;
FDMBank.QLoad.ParamByName('inarow').AsInteger := i;
FDMBank.QLoad.ParamByName('incol1').AsInteger := 3;
FDMBank.QLoad.ExecSQL;
FDMBank.QLoad.Open;
if FDMBank.QLoad.RecordCount <> 0 then
begin
while not FDMBank.QLoad.Eof do
begin
AdvStringGrid1.AddImageIdx(3,i,FDMBank.QLoadSRow.A sInteger,haBeforeText,vaTop);
FDMBank.QLoad.Next;
end;
end;
//-------------------------------
n := n + 1;
advstringgrid1.cells[4,i] := IntToStr(n);
//----------------
FDMBank.QLoad.Close;
FDMBank.QLoad.ParamByName('inlink').AsInteger := FDMBank.QFullNOO.AsInteger;
FDMBank.QLoad.ParamByName('inarow').AsInteger := i;
FDMBank.QLoad.ParamByName('incol1').AsInteger := 4;
FDMBank.QLoad.ExecSQL;
FDMBank.QLoad.Open;
if FDMBank.QLoad.RecordCount <> 0 then
begin
while not FDMBank.QLoad.Eof do
begin
AdvStringGrid1.AddImageIdx(4,i,FDMBank.QLoadSRow.A sInteger,haBeforeText,vaTop);
FDMBank.QLoad.Next;
end;
end;
//-------------------------------
end;
FDMBank.QFull.Next;
end;
end Else Begin
AdvStringGrid1.RowCount := trunc(StrToInt(sDBTextFX4.Caption) Div 4);
n := 0;
advstringgrid1.excelclipboardformat:=true;
for i:=0 to advstringgrid1.RowCount -1 do
begin
n := n + 1;
advstringgrid1.cells[0,i] := IntToStr(n);
//----------------
FDMBank.QLoad.Close;
FDMBank.QLoad.ParamByName('inlink').AsInteger := FDMBank.QFullNOO.AsInteger;
FDMBank.QLoad.ParamByName('inarow').AsInteger := i;
FDMBank.QLoad.ParamByName('incol1').AsInteger := 0;
FDMBank.QLoad.ExecSQL;
FDMBank.QLoad.Open;
if FDMBank.QLoad.RecordCount <> 0 then
begin
while not FDMBank.QLoad.Eof do
begin
AdvStringGrid1.AddImageIdx(0,i,FDMBank.QLoadSRow.A sInteger,haBeforeText,vaTop);
FDMBank.QLoad.Next;
end;
end;
//-------------------------------
n := n + 1;
advstringgrid1.cells[1,i] := IntToStr(n);
//----------------
FDMBank.QLoad.Close;
FDMBank.QLoad.ParamByName('inlink').AsInteger := FDMBank.QFullNOO.AsInteger;
FDMBank.QLoad.ParamByName('inarow').AsInteger := i;
FDMBank.QLoad.ParamByName('incol1').AsInteger := 1;
FDMBank.QLoad.ExecSQL;
FDMBank.QLoad.Open;
if FDMBank.QLoad.RecordCount <> 0 then
begin
while not FDMBank.QLoad.Eof do
begin
AdvStringGrid1.AddImageIdx(1,i,FDMBank.QLoadSRow.A sInteger,haBeforeText,vaTop);
FDMBank.QLoad.Next;
end;
end;
//-------------------------------
n := n + 1;
advstringgrid1.cells[3,i] := IntToStr(n);
//----------------
FDMBank.QLoad.Close;
FDMBank.QLoad.ParamByName('inlink').AsInteger := FDMBank.QFullNOO.AsInteger;
FDMBank.QLoad.ParamByName('inarow').AsInteger := i;
FDMBank.QLoad.ParamByName('incol1').AsInteger := 3;
FDMBank.QLoad.ExecSQL;
FDMBank.QLoad.Open;
if FDMBank.QLoad.RecordCount <> 0 then
begin
while not FDMBank.QLoad.Eof do
begin
AdvStringGrid1.AddImageIdx(3,i,FDMBank.QLoadSRow.A sInteger,haBeforeText,vaTop);
FDMBank.QLoad.Next;
end;
end;
//-------------------------------
n := n + 1;
advstringgrid1.cells[4,i] := IntToStr(n);
//----------------
FDMBank.QLoad.Close;
FDMBank.QLoad.ParamByName('inlink').AsInteger := FDMBank.QFullNOO.AsInteger;
FDMBank.QLoad.ParamByName('inarow').AsInteger := i;
FDMBank.QLoad.ParamByName('incol1').AsInteger := 4;
FDMBank.QLoad.ExecSQL;
FDMBank.QLoad.Open;
if FDMBank.QLoad.RecordCount <> 0 then
begin
while not FDMBank.QLoad.Eof do
begin
AdvStringGrid1.AddImageIdx(4,i,FDMBank.QLoadSRow.A sInteger,haBeforeText,vaTop);
FDMBank.QLoad.Next;
end;
end;
//-------------------------------
end;
end;
//-----------------------
FDMBank.QColor.Close;
FDMBank.QColor.ParamByName('inlink').AsInteger := FDMBank.TaBlitNOO.AsInteger;
FDMBank.QColor.ExecSQL;
FDMBank.QColor.Open;
if FDMBank.QColor.RecordCount <> 0 then begin
while not FDMBank.QColor.Eof do
begin
AdvStringGrid1.CellProperties[FDMBank.QColorCol1.AsInteger,FDMBank.QColorARow.As Integer].BrushColor := clHighlight;
FDMBank.QColor.Next;
end;
end;
XDBGrid2.SetFocus;
end;