用TStringGrid做数据显示,遇到了问题。那位老兄帮助一下!谢谢。 ( 积分: 100 )

  • 主题发起人 主题发起人 金风吹雪
  • 开始时间 开始时间

金风吹雪

Unregistered / Unconfirmed
GUEST, unregistred user!
[?][?][?]是这样的:
unit Unit2;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, Buttons, Grids, DBGrids, DB, DBTables, DBCtrls;

type
TForm1 = class(TForm)
Table1: TTable;
DCGrid: TStringGrid;
DBLookupComboBox1: TDBLookupComboBox;
DBLookupComboBox2: TDBLookupComboBox;
BitBtn1: TBitBtn;
Label1: TLabel;
Label2: TLabel;
DataSource1: TDataSource;
procedure FormShow(Sender: TObject);
procedure BitBtn1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;
rr1:array[1..70] of real;rr2:array[1..70] of real;rr3:array[1..70] of real;rr4:array[1..70] of real;rr5:array[1..70] of real;
rr6:array[1..70] of real;rr7:array[1..70] of real;rr8:array[1..70] of real;rr9:array[1..70] of real;rr10:array[1..70] of real;rr11:array[1..70] of real;rr12:array[1..70] of real;
s2,s3,s4,s5,s6,s7,s8,s9,s10,s11,s12,s13:string;
sum1,sum2,sum3,sum4,sum5,sum6,sum7,sum8,sum9,sum10,sum11,sum12:real;
implementation

{$R *.dfm}

procedure TForm1.FormShow(Sender: TObject);
var a,j:integer;

begin
begin
DCGrid.Cells[0,0]:='编号';
DCGrid.Cells[1,0]:='年代';
DCGrid.Cells[2,0]:='一月';
DCGrid.Cells[3,0]:='二月';
DCGrid.Cells[4,0]:='三月';
DCGrid.Cells[5,0]:='四月';
DCGrid.Cells[6,0]:='五月';
DCGrid.Cells[7,0]:='六月';
DCGrid.Cells[8,0]:='七月';
DCGrid.Cells[9,0]:='八月';
DCGrid.Cells[10,0]:='九月';
DCGrid.Cells[11,0]:='十月';
DCGrid.Cells[12,0]:='十一月';
DCGrid.Cells[13,0]:='十二月';
for a:=1 to DCGrid.RowCount-1 do
begin
DCGrid.Cells[0,a]:=intToStr(a);
end;
end;

begin
sum1:=0.00;sum2:=0.00;sum3:=0.00;sum4:=0.00;sum5:=0.00;sum6:=0.00;
sum7:=0.00;sum8:=0.00;sum9:=0.00;sum10:=0.00;sum11:=0.00;sum12:=0.00;
table1.disablecontrols;//禁止数据表功能
table1.first;
for j:=1 to table1.RecordCount-1 do
begin
rr1[j]:=StrToFloat(table1.fieldbyname('一月').asstring);
rr2[j]:=StrToFloat(table1.fieldbyname('二月').asstring);
rr3[j]:=StrToFloat(table1.fieldbyname('三月').asstring);
rr4[j]:=StrToFloat(table1.fieldbyname('四月').asstring);
rr5[j]:=StrToFloat(table1.fieldbyname('五月').asstring);
rr6[j]:=StrToFloat(table1.fieldbyname('六月').asstring);
rr7[j]:=StrToFloat(table1.fieldbyname('七月').asstring);
rr8[j]:=StrToFloat(table1.fieldbyname('八月').asstring);
rr9[j]:=StrToFloat(table1.fieldbyname('九月').asstring);
rr10[j]:=StrToFloat(table1.fieldbyname('十月').asstring);
rr11[j]:=StrToFloat(table1.fieldbyname('十一月').asstring);
rr12[j]:=StrToFloat(table1.fieldbyname('十二月').asstring);
sum1:=sum1+rr1[j];
sum2:=sum1+rr2[j];
sum3:=sum1+rr3[j];
sum4:=sum1+rr4[j];
sum5:=sum1+rr5[j];
sum6:=sum1+rr6[j];
sum7:=sum1+rr7[j];
sum8:=sum1+rr8[j];
sum9:=sum1+rr9[j];
sum10:=sum1+rr10[j];
sum11:=sum1+rr11[j];
sum12:=sum1+rr12[j];
table1.Next;
end;
table1.close;
end;
begin
table1.close;
table1.Open;
table1.first;
for j:=1 to table1.RecordCount-1 do
begin
DCGrid.cells[1,j]:=table1.fieldbyname('年代').asstring;
str((StrToFloat(table1.fieldbyname('一月').asstring)-sum1)/sum1:6:1,s2);
str((StrToFloat(table1.fieldbyname('二月').asstring)-sum2)/sum2:6:1,s3);
str((StrToFloat(table1.fieldbyname('三月').asstring)-sum3)/sum3:6:1,s4);
str((StrToFloat(table1.fieldbyname('四月').asstring)-sum4)/sum4:6:1,s5);
str((StrToFloat(table1.fieldbyname('五月').asstring)-sum5)/sum5:6:1,s6);
str((StrToFloat(table1.fieldbyname('六月').asstring)-sum6)/sum6:6:1,s7);
str((StrToFloat(table1.fieldbyname('七月').asstring)-sum7)/sum7:6:1,s8);
str((StrToFloat(table1.fieldbyname('八月').asstring)-sum8)/sum8:6:1,s9);
str((StrToFloat(table1.fieldbyname('九月').asstring)-sum9)/sum9:6:1,s10);
str((StrToFloat(table1.fieldbyname('十月').asstring)-sum10)/sum10:6:1,s11);
str((StrToFloat(table1.fieldbyname('十一月').asstring)-sum11)/sum11:6:1,s12);
str((StrToFloat(table1.fieldbyname('十二月').asstring)-sum12)/sum12:6:1,s13);
table1.EnableControls;//取消禁止
DCGrid.cells[2,j]:=s2;
DCGrid.cells[3,j]:=s3;
DCGrid.cells[4,j]:=s4;
DCGrid.cells[5,j]:=s5;
DCGrid.Cells[6,j]:=s6;
DCGrid.Cells[7,j]:=s7;
DCGrid.Cells[8,j]:=s8;
DCGrid.Cells[9,j]:=s9;
DCGrid.Cells[10,j]:=s10;
DCGrid.Cells[11,j]:=s11;
DCGrid.Cells[12,j]:=s12;
DCGrid.Cells[13,j]:=s13;
table1.Next;
end;
table1.Close;
table1.open;
end;
end;

procedure TForm1.BitBtn1Click(Sender: TObject);
begin
close;
end;

end.
编译运行,却出错,为什么不行?
请给与帮助。谢谢![:)][:)][:)]
 
[?][?][?]是这样的:
unit Unit2;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, Buttons, Grids, DBGrids, DB, DBTables, DBCtrls;

type
TForm1 = class(TForm)
Table1: TTable;
DCGrid: TStringGrid;
DBLookupComboBox1: TDBLookupComboBox;
DBLookupComboBox2: TDBLookupComboBox;
BitBtn1: TBitBtn;
Label1: TLabel;
Label2: TLabel;
DataSource1: TDataSource;
procedure FormShow(Sender: TObject);
procedure BitBtn1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;
rr1:array[1..70] of real;rr2:array[1..70] of real;rr3:array[1..70] of real;rr4:array[1..70] of real;rr5:array[1..70] of real;
rr6:array[1..70] of real;rr7:array[1..70] of real;rr8:array[1..70] of real;rr9:array[1..70] of real;rr10:array[1..70] of real;rr11:array[1..70] of real;rr12:array[1..70] of real;
s2,s3,s4,s5,s6,s7,s8,s9,s10,s11,s12,s13:string;
sum1,sum2,sum3,sum4,sum5,sum6,sum7,sum8,sum9,sum10,sum11,sum12:real;
implementation

{$R *.dfm}

procedure TForm1.FormShow(Sender: TObject);
var a,j:integer;

begin
begin
DCGrid.Cells[0,0]:='编号';
DCGrid.Cells[1,0]:='年代';
DCGrid.Cells[2,0]:='一月';
DCGrid.Cells[3,0]:='二月';
DCGrid.Cells[4,0]:='三月';
DCGrid.Cells[5,0]:='四月';
DCGrid.Cells[6,0]:='五月';
DCGrid.Cells[7,0]:='六月';
DCGrid.Cells[8,0]:='七月';
DCGrid.Cells[9,0]:='八月';
DCGrid.Cells[10,0]:='九月';
DCGrid.Cells[11,0]:='十月';
DCGrid.Cells[12,0]:='十一月';
DCGrid.Cells[13,0]:='十二月';
for a:=1 to DCGrid.RowCount-1 do
begin
DCGrid.Cells[0,a]:=intToStr(a);
end;
end;

begin
sum1:=0.00;sum2:=0.00;sum3:=0.00;sum4:=0.00;sum5:=0.00;sum6:=0.00;
sum7:=0.00;sum8:=0.00;sum9:=0.00;sum10:=0.00;sum11:=0.00;sum12:=0.00;
table1.disablecontrols;//禁止数据表功能
table1.first;
for j:=1 to table1.RecordCount-1 do
begin
rr1[j]:=StrToFloat(table1.fieldbyname('一月').asstring);
rr2[j]:=StrToFloat(table1.fieldbyname('二月').asstring);
rr3[j]:=StrToFloat(table1.fieldbyname('三月').asstring);
rr4[j]:=StrToFloat(table1.fieldbyname('四月').asstring);
rr5[j]:=StrToFloat(table1.fieldbyname('五月').asstring);
rr6[j]:=StrToFloat(table1.fieldbyname('六月').asstring);
rr7[j]:=StrToFloat(table1.fieldbyname('七月').asstring);
rr8[j]:=StrToFloat(table1.fieldbyname('八月').asstring);
rr9[j]:=StrToFloat(table1.fieldbyname('九月').asstring);
rr10[j]:=StrToFloat(table1.fieldbyname('十月').asstring);
rr11[j]:=StrToFloat(table1.fieldbyname('十一月').asstring);
rr12[j]:=StrToFloat(table1.fieldbyname('十二月').asstring);
sum1:=sum1+rr1[j];
sum2:=sum1+rr2[j];
sum3:=sum1+rr3[j];
sum4:=sum1+rr4[j];
sum5:=sum1+rr5[j];
sum6:=sum1+rr6[j];
sum7:=sum1+rr7[j];
sum8:=sum1+rr8[j];
sum9:=sum1+rr9[j];
sum10:=sum1+rr10[j];
sum11:=sum1+rr11[j];
sum12:=sum1+rr12[j];
table1.Next;
end;
table1.close;
end;
begin
table1.close;
table1.Open;
table1.first;
for j:=1 to table1.RecordCount-1 do
begin
DCGrid.cells[1,j]:=table1.fieldbyname('年代').asstring;
str((StrToFloat(table1.fieldbyname('一月').asstring)-sum1)/sum1:6:1,s2);
str((StrToFloat(table1.fieldbyname('二月').asstring)-sum2)/sum2:6:1,s3);
str((StrToFloat(table1.fieldbyname('三月').asstring)-sum3)/sum3:6:1,s4);
str((StrToFloat(table1.fieldbyname('四月').asstring)-sum4)/sum4:6:1,s5);
str((StrToFloat(table1.fieldbyname('五月').asstring)-sum5)/sum5:6:1,s6);
str((StrToFloat(table1.fieldbyname('六月').asstring)-sum6)/sum6:6:1,s7);
str((StrToFloat(table1.fieldbyname('七月').asstring)-sum7)/sum7:6:1,s8);
str((StrToFloat(table1.fieldbyname('八月').asstring)-sum8)/sum8:6:1,s9);
str((StrToFloat(table1.fieldbyname('九月').asstring)-sum9)/sum9:6:1,s10);
str((StrToFloat(table1.fieldbyname('十月').asstring)-sum10)/sum10:6:1,s11);
str((StrToFloat(table1.fieldbyname('十一月').asstring)-sum11)/sum11:6:1,s12);
str((StrToFloat(table1.fieldbyname('十二月').asstring)-sum12)/sum12:6:1,s13);
table1.EnableControls;//取消禁止
DCGrid.cells[2,j]:=s2;
DCGrid.cells[3,j]:=s3;
DCGrid.cells[4,j]:=s4;
DCGrid.cells[5,j]:=s5;
DCGrid.Cells[6,j]:=s6;
DCGrid.Cells[7,j]:=s7;
DCGrid.Cells[8,j]:=s8;
DCGrid.Cells[9,j]:=s9;
DCGrid.Cells[10,j]:=s10;
DCGrid.Cells[11,j]:=s11;
DCGrid.Cells[12,j]:=s12;
DCGrid.Cells[13,j]:=s13;
table1.Next;
end;
table1.Close;
table1.open;
end;
end;

procedure TForm1.BitBtn1Click(Sender: TObject);
begin
close;
end;

end.
编译运行,却出错,为什么不行?
请给与帮助。谢谢![:)][:)][:)]
 
UOUO,提示什么错误?
 
错误是什么?
贴出来看看
 
table 控件问题吧?
 
何必寫那麼多,說出錯誤點就得啊
 
请帮忙 显示错误是:
project project1.exe raised exceptiom class eacceViolation
with messame'Access violation at address 004898F8 in module
'Project1.exe'.Read of address 00000064
Process stopped Use Step or Run to continue.
请各位帮忙
谢谢
 
你的代码,编译是正确的,但我不知你的Table1是如何连接的数据库,无法帮你调试。
加上断点,把出错处贴出来。
 
程序太长了,没怎么看,所以问题的所在没找到,大体浏览了一下,对楼主的代码实在不敢恭维!
1.面向对象的工具,居然定义了一堆过程变量,建议楼主去补补面向对象的课;
2.没见过这么写代码的:
rr1:array[1..70] of real;
rr2:array[1..70] of real;
rr3:array[1..70] of real;
rr4:array[1..70] of real;
rr5:array[1..70] of real;
rr6:array[1..70] of real;
rr7:array[1..70] of real;
rr8:array[1..70] of real;
rr9:array[1..70] of real;
rr10:array[1..70] of real;
rr11:array[1..70] of real;
rr12:array[1..70] of real;
可以定义一个类型:
Type
AryOfReal = array[1..70] of real;
然后:rr1,rr2,rr3,rr4,rr5..rr12 : AryOfReal;
3.用Tstringgrid,对它的特性不了解的话,就会产生一堆垃圾代码:
比方说下面的代码:
DCGrid.Cells[0,0]:='编号';
DCGrid.Cells[1,0]:='年代';
DCGrid.Cells[2,0]:='一月';
DCGrid.Cells[3,0]:='二月';
DCGrid.Cells[4,0]:='三月';
DCGrid.Cells[5,0]:='四月';
DCGrid.Cells[6,0]:='五月';
DCGrid.Cells[7,0]:='六月';
DCGrid.Cells[8,0]:='七月';
DCGrid.Cells[9,0]:='八月';
DCGrid.Cells[10,0]:='九月';
DCGrid.Cells[11,0]:='十月';
DCGrid.Cells[12,0]:='十一月';
DCGrid.Cells[13,0]:='十二月';
完全可以这样搞定的:
var
TopRowTxt : Array[0..13] of String = ('编号','年代'...'十二月');
begin
DCGrid.rows[0] := TopRowTxt;
end;
4.具体到业务的东西不懂了,不过用的着那么多变量吗,人为的把东西复杂化,错误能好找吗?




 
断点在这儿:
for j:=1 to table1.RecordCount-1 do

谢谢
 
table1.first;//指向了第一条记录
那么用table1.RecordCount-1做最后一条记录,
的从0循环,因为第一条是0:
改为: for j := 0 to table1.RecordCount-1 do
{***************************************}
或者:
改为: for j := 1 to table1.RecordCount do

 
for j:=0 to table1.RecordCount-1 do
 
楼主,既然断点在这儿:
for j:=1 to table1.RecordCount-1 do

那说明出错的是上面的一条,那就是table1.first;
因此很有可能是数据集还没有打开造成的。
 
谢谢各位大侠:
各位的建议我都认真做了,问题找到了。程序也通过了!
就是像"duanhai"老兄说的对:“数据集还没有打开造成的”。
因为我用了另外一个控件(qiuwang也说对了)。
在这里我要特别感谢“网事如风”老兄,他让我懂得了,面向对象编程,要改变我以往的传统编程思想。我是从"DOS"下编程转移过来的人,也有好多年没有动手做程序了。只是去年11月份开始接受单位的任务做一个数据应用系统,我就用了delphi编程。系统大部分做完也,只是计算方法比较复杂,常常出错。
在这里我衷心地谢谢各位!
金风吹雪.2005年3月7日
 
后退
顶部