请问如何能快速的对StringGrid进行写入?我的记录大家有7K,大概需要时间有20秒以上,感觉等待的时间太长。
请大家指教下下。我的代码如下:
if ADOF.RecordCount>0 then
begin
mGrid.ColCount:=ADOF.FieldCount;
for i :=0 to ADOF.FieldCount-1 do
begin
mGrid.Cells[i+1,0]:=ADOF.Fields[i].FieldName;
end;
end;
if not ADOF.Active then ADOF.Active :=True;
for i :=0 to ADOF.RecordCount -1 do
begin
for j := 0 to ADOF.FieldCount-1 do
begin
mGrid.Cells[j+1,i+1]:= ADOF.Fields[j].AsString ;
end;
if i>8 then
mGrid.RowCount:=mGrid.RowCount+1;
ADOF.Next;
end;
请大家指教下下。我的代码如下:
if ADOF.RecordCount>0 then
begin
mGrid.ColCount:=ADOF.FieldCount;
for i :=0 to ADOF.FieldCount-1 do
begin
mGrid.Cells[i+1,0]:=ADOF.Fields[i].FieldName;
end;
end;
if not ADOF.Active then ADOF.Active :=True;
for i :=0 to ADOF.RecordCount -1 do
begin
for j := 0 to ADOF.FieldCount-1 do
begin
mGrid.Cells[j+1,i+1]:= ADOF.Fields[j].AsString ;
end;
if i>8 then
mGrid.RowCount:=mGrid.RowCount+1;
ADOF.Next;
end;
解决方案 »
- Indy10比Indy9提高了哪些地方?有必要升级吗?
- Dev express 中 cxGrid里怎么得到当前选择CELL列的INDEX?
- 字符串处理
- Question_如何把一幅bmp图像保存到SQL Server数据库,使用OpenPictureDialog1和ADOQuery1
- 续(重酬!!bde连接access问题!)
- 数据更新的问题??急用呀??
- 我用ado+access,在adoquery的onposterror中加入showmessage(E.message)后,在运行中当错误时总是提示两次相同信息,为什么?该如何解决
- 请问有没有类似的象Tstringlist构件的可以保存记录类型的构件?
- 请教如何取得TComboBoxEx中的Edit控件的句柄啊?
- kylix怎么装?
- 如何让自己的delphi 程序嵌入到网页中去
- 关于窗口移动的问题
1.第二次的代码
for j := 0 to ADOF.FieldCount-1 do
begin
mGrid.Cells[j+1,i+1]:= ADOF.Fields[j].AsString ;
end;
没必要,可以遍历StringGrid的行2.mGrid.RowCount:=mGrid.RowCount+1; 这个不要这样一行行的加,在for循环外,一次性添加,比如mGrid.RowCount:= ADOF.RecordCount
for j := 0 to ADOF.FieldCount-1 do
改成:
while not ADOF.EOF do
begin
....
Next;
end;
mGrid.RowCount:= ADOF.RecordCount设定好StringGrid的行数
遍历StringGrid的行,和表的字段对应上
还有没有更好的解决的办法。
mGrid.RowCount:=mGrid.RowCount+1;
这两行删了吗?按道理可以快不少。
在循环前把ADOF.FieldCount-1赋给一个变量,使用那个变量循环。
如果非要这样,同时为了提高速度,建议把数据导出到数组,然后写DrawCell过程,估计不太会有停顿的感觉了,或者索性用TDrawGrid
SELF.StringGrid1.Cols[0].AddStrings(ADOF.Fields[j]);
SELF.StringGrid1.ROWS[0].AddStrings(ADOF.Fields[j]);