delphi出现EAccessViolation 的错误

varAdmin:TAdmin;number:integer;implementationusesFormManage;{$R*.dfm}procedureTAdmin.... var
Admin: TAdmin;
number:integer;

implementation

uses FormManage;

{$R *.dfm}

procedure TAdmin.FormCreate(Sender: TObject);

begin
Edit1.Clear;
ComboBox1.ItemIndex:=0;
DBGrid1.Columns.Items[2].Font.Color:=clRed;
DBGrid1.Columns.Items[3].Font.Color:=clRed;
for number:=0 to 6 do
begin
DBGrid1.Fields[number].DisplayWidth:=10;
DBGrid1.Columns.Items[number].Alignment:=taLeftJustify;
end
end;

procedure TAdmin.Button1Click(Sender: TObject);
begin
if ComboBox1.ItemIndex<> 5 then
begin
adoquery1.Close;
adoquery1.SQL.Clear;
adoquery1.SQL.Add('select * from 药品信息 where '+ComboBox1.Items[ComboBox1.ItemIndex]+' = '''+edit1.Text+'''');
adoquery1.Open;
end
else
begin
adoquery1.Close;
adoquery1.SQL.Clear;
adoquery1.SQL.Add('select * from 药品信息');
adoquery1.Open;
end

end;

procedure TAdmin.Button2Click(Sender: TObject);
var SellSum,StockSum:double;
begin

//DBText1.DataField:='Summary';
adoquery2.Close;
adoquery2.SQL.Clear;
adoquery2.SQL.Add('select sum(销售金额) as summation from 销售情况');
adoquery2.Open;
SellSum:=AdoQuery2.FieldValues['summation'];
// ShowMessage(FloatToStr(SellSum));
adoquery2.Close;
adoquery2.SQL.Clear;
adoquery2.SQL.Add('select sum(药品信息.进货单价*销售情况.销售数量) as StockSum from (销售情况 left outer join 药品信息 on 销售情况.药品代码=药品信息.药品代码);');

adoquery2.Open;
StockSum:=AdoQuery2.fieldValues['StockSum'];
// MessageBox('This should be on top.','Look', mb_OK)
//windows.messagebox(0,'标题','警告错误',MB_ICONSTOP);

// if messagedlg('确定要退出吗?',mtwarnint,[mbyes,mbno],0)=mryes then close;
ShowMessage('你当前的销售总金额为'+FloatToStr(SellSum)+'!当前您盈利为:'+FloatToStr(SellSum-StockSum)+'!');
end;

procedure TAdmin.FormClose(Sender: TObject; var Action: TCloseAction);
begin
manage.Show;
end;

procedure TAdmin.ComboBox1Change(Sender: TObject);
begin
if ComboBox1.ItemIndex=5 then
begin
adoquery1.Close;
adoquery1.SQL.Clear;
adoquery1.SQL.Add('select * from 药品信息');
adoquery1.Open;
end

end;

procedure TAdmin.DBGrid1ColExit(Sender: TObject);
begin
//AdoQuery1.Post;
end;
end.

运行时提示出现 Project ypjxc.exe raised exception class EAccessViolation with message 'Access violation at address 0047FB80 in module 'ypjxc.exe'. Read of address 00000054'. Process stopped.Use Step or Run to continue.

请问哪里出问题了?
是一运行就出现错误 错误指在这一行 DBGrid1.Fields[number].DisplayWidth:=10; 可以给我留个QQ吗?谢谢
展开
 我来答
zjgzfs
2010-04-20 · TA获得超过428个赞
知道小有建树答主
回答量:380
采纳率:0%
帮助的人:485万
展开全部
说得不清楚,别人无法知道你究竟是在什么情况下出现错误的.

是在窗体的OnCreate事件中出现错误? 不是在单击某个Button时出现错误?还是在关闭窗体是出现错误?

如果是一运行就出现错误,则可能问题在窗体的OnCreate事件处事程序中。比如:如果ComboBox1中没有任何列表项,则执行语句ComboBox1.ItemIndex:=0;时就会出错。
zhdove
2010-04-29 · 超过30用户采纳过TA的回答
知道答主
回答量:88
采纳率:0%
帮助的人:0
展开全部
给分吧
把DBGrid1通过datasourse 连接到表上,把表打开,DBGrid1里应该有数据,然后双击DBGrid1,add all fields。究其原因,乃为DBGrid1中没有列或DBGrid1中有列但没有为列指定fieldname。ok了
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式