我写了一段数值分析的算法,报错:
Project xlyc.exe faulted with message :'access violation at 0x004068a1:write of address ox00030d54.' process Stopped.........
程序如下:
unit Ufm_zxpf;interfaceuses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, DB, DBTables, StdCtrls, ComCtrls, ButtonComps, ExtCtrls,
dxCntner, dxTL, dxDBCtrl, dxDBGrid, XPMenu;type
Tfm_zxpf = class(TForm)
Database1: TDatabase;
Label1: TLabel;
DateTimePicker1: TDateTimePicker;
DateTimePicker2: TDateTimePicker;
Label2: TLabel;
Label3: TLabel;
SquareButton1: TSquareButton;
qry_pf: TQuery;
XPMenu1: TXPMenu;
dxDBGrid1: TdxDBGrid;
Bevel1: TBevel;
ds_pf: TDataSource;
dxDBGrid1Column1: TdxDBGridColumn;
dxDBGrid1Column2: TdxDBGridColumn;
dxDBGrid1Column3: TdxDBGridColumn;
Bevel2: TBevel;
Mm_pf: TMemo;
procedure FormShow(Sender: TObject);
procedure SquareButton1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;var
fm_zxpf: Tfm_zxpf;
XL : Array of Real; //销量
T : Array of Real; //时间
tx : Array of Real; //XL*T
t2 : Array of Real; //T*T
XLSUM : Real;
TSUM : Real;
TXSUM : Real;
T2SUM : Real;
A,B,SUM : Real;implementation{$R *.dfm}procedure Tfm_zxpf.FormShow(Sender: TObject);
begin
XPMenu1.Active := False;
XPMenu1.Active := False;
DateTimePicker1.DateTime := Now;
DateTimePicker2.DateTime := Now;
end;procedure Tfm_zxpf.SquareButton1Click(Sender: TObject);
var
QSNY,ZZNY: String; //起始年月,终止年月
I,J,K,L : Integer;
begin
QSNY := FormatDateTime('YYYYMM',DateTimePicker1.DateTime);
ZZNY := FormatDateTime('YYYYMM',DateTimePicker2.DateTime);
//判断月份是否是奇数//打开数据
Try
if qry_pf.Active = True then qry_pf.Active := False;
with qry_pf do
begin
ParamByName('GSDW').AsString := '11640201';
ParamByName('QSNY').AsString := QSNY;
ParamByName('ZZNY').AsString := ZZNY;
ParamByName('ZGRY').AsString := '2000';
Active := true;
end;
Except
ShowMessage('读取数据失败!');
End;
//从数据库中取数据插入数组
I := qry_pf.RecordCount;
SetLength(XL,I);
SetLength(T,I);
SetLength(tx,I);
SetLength(t2,I);
J := 0;
//得到数组XL
with qry_pf do
begin
First;
while not eof do
begin
XL[J] := StrToFloat(FieldByName('XL0000').AsString);
J := J + 1;
Next;
end;
end;
//得到数组T
for j := 0 to qry_pf.RecordCount do
t[j] := j + 1;
//得到数组TX
for j := 0 to qry_pf.RecordCount do
tx[j] := XL[J]*T[j];
//得到数据T2
for j := 0 to qry_pf.RecordCount do
t2[j] := t[j]*t[j];
//计算各项和
XLSUM := 0;
for j :=0 to Length(XL) do
XLSUM := XLSUM + XL[J];
TSUM := 0;
for j :=0 to Length(T) do
TSUM := TSUM + T[J];
TXSUM := 0;
for j :=0 to Length(TX) do
TXSUM := TXSUM + TX[J];
T2SUM := 0;
for j :=0 to Length(T2) do
T2SUM := T2SUM + T2[J];
//预测销量
B := (TXSUM*I-XLSUM*TSUM)/(I*T2SUM-TSUM*TSUM);
A := (XLSUM-B*TSUM)/I;
for J :=0 to I do
begin
sum := 0;
sum := A + B*(j+1);
Mm_pf.Lines.Add(FloatToStr(sum));
end;
end;end.
Project xlyc.exe faulted with message :'access violation at 0x004068a1:write of address ox00030d54.' process Stopped.........
程序如下:
unit Ufm_zxpf;interfaceuses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, DB, DBTables, StdCtrls, ComCtrls, ButtonComps, ExtCtrls,
dxCntner, dxTL, dxDBCtrl, dxDBGrid, XPMenu;type
Tfm_zxpf = class(TForm)
Database1: TDatabase;
Label1: TLabel;
DateTimePicker1: TDateTimePicker;
DateTimePicker2: TDateTimePicker;
Label2: TLabel;
Label3: TLabel;
SquareButton1: TSquareButton;
qry_pf: TQuery;
XPMenu1: TXPMenu;
dxDBGrid1: TdxDBGrid;
Bevel1: TBevel;
ds_pf: TDataSource;
dxDBGrid1Column1: TdxDBGridColumn;
dxDBGrid1Column2: TdxDBGridColumn;
dxDBGrid1Column3: TdxDBGridColumn;
Bevel2: TBevel;
Mm_pf: TMemo;
procedure FormShow(Sender: TObject);
procedure SquareButton1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;var
fm_zxpf: Tfm_zxpf;
XL : Array of Real; //销量
T : Array of Real; //时间
tx : Array of Real; //XL*T
t2 : Array of Real; //T*T
XLSUM : Real;
TSUM : Real;
TXSUM : Real;
T2SUM : Real;
A,B,SUM : Real;implementation{$R *.dfm}procedure Tfm_zxpf.FormShow(Sender: TObject);
begin
XPMenu1.Active := False;
XPMenu1.Active := False;
DateTimePicker1.DateTime := Now;
DateTimePicker2.DateTime := Now;
end;procedure Tfm_zxpf.SquareButton1Click(Sender: TObject);
var
QSNY,ZZNY: String; //起始年月,终止年月
I,J,K,L : Integer;
begin
QSNY := FormatDateTime('YYYYMM',DateTimePicker1.DateTime);
ZZNY := FormatDateTime('YYYYMM',DateTimePicker2.DateTime);
//判断月份是否是奇数//打开数据
Try
if qry_pf.Active = True then qry_pf.Active := False;
with qry_pf do
begin
ParamByName('GSDW').AsString := '11640201';
ParamByName('QSNY').AsString := QSNY;
ParamByName('ZZNY').AsString := ZZNY;
ParamByName('ZGRY').AsString := '2000';
Active := true;
end;
Except
ShowMessage('读取数据失败!');
End;
//从数据库中取数据插入数组
I := qry_pf.RecordCount;
SetLength(XL,I);
SetLength(T,I);
SetLength(tx,I);
SetLength(t2,I);
J := 0;
//得到数组XL
with qry_pf do
begin
First;
while not eof do
begin
XL[J] := StrToFloat(FieldByName('XL0000').AsString);
J := J + 1;
Next;
end;
end;
//得到数组T
for j := 0 to qry_pf.RecordCount do
t[j] := j + 1;
//得到数组TX
for j := 0 to qry_pf.RecordCount do
tx[j] := XL[J]*T[j];
//得到数据T2
for j := 0 to qry_pf.RecordCount do
t2[j] := t[j]*t[j];
//计算各项和
XLSUM := 0;
for j :=0 to Length(XL) do
XLSUM := XLSUM + XL[J];
TSUM := 0;
for j :=0 to Length(T) do
TSUM := TSUM + T[J];
TXSUM := 0;
for j :=0 to Length(TX) do
TXSUM := TXSUM + TX[J];
T2SUM := 0;
for j :=0 to Length(T2) do
T2SUM := T2SUM + T2[J];
//预测销量
B := (TXSUM*I-XLSUM*TSUM)/(I*T2SUM-TSUM*TSUM);
A := (XLSUM-B*TSUM)/I;
for J :=0 to I do
begin
sum := 0;
sum := A + B*(j+1);
Mm_pf.Lines.Add(FloatToStr(sum));
end;
end;end.
XLSUM := XLSUM + XL[J];更改:
for j :=0 to Length(XL)-1 do
XLSUM := XLSUM + XL[J];现在看也看不出来.就像楼上说的你用断点先把范围缩小了看.
补一下: ksaiy(消失在人海-喜欢昆明的花) 也强!
============================
何止是强啊,牛人一个