点击按钮会出现窗体,窗体里是dbgrideh加ado控件。
有保存事件,会对表里的每一行逐个保存。
当我点击保存,关闭窗体,再打开就会出错list index out of bounds(7),表里面第7列以后的内容全消失了。
如果我不点保存,关闭窗体再打开不会出事。
后来,我手动加了9列,就不会出错。
为什么for i:=1 to 9 do dbgrideh1.columns.add;会不行???
求解决方案~
有保存事件,会对表里的每一行逐个保存。
当我点击保存,关闭窗体,再打开就会出错list index out of bounds(7),表里面第7列以后的内容全消失了。
如果我不点保存,关闭窗体再打开不会出事。
后来,我手动加了9列,就不会出错。
为什么for i:=1 to 9 do dbgrideh1.columns.add;会不行???
求解决方案~
解决方案 »
- 有点急,在没有安装dilphi7的环境,为什么timer就没有运行了
- 老父无钱供儿上大学服毒自杀 高额学费逼死农民!
- 我想做一个这样的程序,是针对局域网(如一个小网吧,或一个小机房),用这个软件装在服务器上,可以管理其它计算机,(如关机...),还有监
- 简单的问题,脑子死锁了,帮帮我!
- delphi 改变窗口形状(图片)
- 关于ActiveForm问题,高分酬谢!!!!!!
- 如何调用COM?
- 小问题,大问题
- 建议每个立志成为系统分析员的程序员看一看
- 请问,那里 有DELPHI的FTP 控件的资料,急需!!在下先谢谢各位人兄了!!!
- 编译后通过一个but将其中一个窗体生成exe
- 帮忙写个小程序,DELPHI的
procedure TForm10.FormShow(Sender: TObject);
var i:integer;
str:string;
begin
//用adocommand1新建临时表tmp,存储单据信息
str:=' if exists(select name from sysobjects where name=''tmp'' and xtype=''u'')';
str:=str+' drop table tmp';
str:=str+' create table tmp(sysid int identity(1,1) primary key,productid varchar(20),productname nvarchar(40),';
str:=str+' productdate datetime,area nvarchar(15),bigunit nchar(1),quantity int,';
str:=str+' cost decimal(6,2),amount decimal(10,2))';
adocommand1.CommandText:=str;
adocommand1.Execute;
add();//新增一行的函数,可以忽视
with DBGrideh1 do
begin
columns.clear;
for i:=1 to 9 do columns.add;//这句话因该没问题吧
columns[0].FieldName:='xh';
columns[1].FieldName:='productid';
columns[2].FieldName:='productname';
columns[3].FieldName:='productdate';
columns[4].FieldName:='area';
columns[5].FieldName:='bigunit';
columns[6].FieldName:='quantity';
columns[7].FieldName:='cost';
columns[8].FieldName:='amount';
columns[0].title.caption:='序号';
columns[1].title.caption:='饮料编号';
columns[2].title.caption:='饮料名称';
columns[3].title.caption:='生产日期';
columns[4].title.caption:='存放货区';
columns[5].title.caption:='单位';
columns[6].title.caption:='数量';
columns[7].title.caption:='成本价';
columns[8].title.caption:='金额';
columns[0].Width:=12*3;
columns[1].Width:=75;
columns[2].Width:=12*12;
columns[3].Width:=12*7;
columns[4].Width:=12*6;
columns[5].Width:=12*3;
columns[6].Width:=12*4;
columns[7].Width:=12*5;
columns[8].Width:=12*6;
for i:=0 to 8 do columns[i].title.Alignment:=tacenter;
columns[0].ReadOnly:=true;
columns[1].ReadOnly:=true;
columns[2].ReadOnly:=true;
columns[5].ReadOnly:=true;
columns[8].ReadOnly:=true;
//可修改项的列名为红色
columns[3].Title.font.color:=clred;
columns[4].Title.font.color:=clred;
columns[6].Title.font.color:=clred;
columns[7].Title.font.color:=clred;
frozencols:=4; //冻结前4列
columns[1].ButtonStyle:=cbsellipsis; //小按钮
columns[4].ButtonStyle:=cbsauto; //下拉式菜单
end;
adoquery1.Close;
adoquery1.SQL.Text:='select ROW_NUMBER() over (order by sysid) as xh,* from tmp';
adoquery1.Open;
//使用adoquery2,读取x_hq生成存放货区下拉框的值
adoquery2.Close;
adoquery2.SQL.Text:='select * from x_hq order by sysid';
adoquery2.Open;
while not adoquery2.Eof do
begin
dbgrideh1.Columns[4].PickList.add(trim(adoquery2.FieldByName('item').AsString));
adoquery2.Next;
end;
//DBGridEh求和,显示在最后一行
DBGridEh1.SumList.Active:=True;
dbgrideh1.FooterRowCount:=1;
dbgrideh1.Columns[2].Footers.add;
dbgrideh1.Columns[2].Footers[0].ValueType:=fvtStaticText;
dbgrideh1.Columns[2].Footers[0].Value:='合计';
dbgrideh1.Columns[2].Footers[0].Alignment:=taCenter;
dbgrideh1.Columns[6].Footers.add;
dbgrideh1.Columns[6].Footers[0].ValueType:=fvtSum;
dbgrideh1.Columns[6].Footers[0].FieldName:='quantity';
dbgrideh1.Columns[7].Footers.add;
dbgrideh1.Columns[7].Footers[0].ValueType:=fvtavg;
dbgrideh1.Columns[7].Footers[0].FieldName:='cost';
dbgrideh1.Columns[8].Footers.add;
dbgrideh1.Columns[8].Footers[0].ValueType:=fvtsum;
dbgrideh1.Columns[8].Footers[0].FieldName:='amount';
//单据基本信息
edit1.ReadOnly:=true;
edit2.ReadOnly:=true;
edit1.Text:=createrkid();
edit2.Text:=form1.statusbar1.Panels[4].Text;
datetimepicker1.Date:=now;
memo1.Lines.Clear;
//dblookupcombobox1的下拉框值
dblookupcombobox1.KeyValue:=null;
dblookupcombobox1.ListField:='supplierid;company';
dblookupcombobox1.KeyField:='supplierid';
adoquery3.Close;
adoquery3.SQL.Text:='select * from supplier order by supplierid';
adoquery3.Open;
//货款结算基本信息
edit4.ReadOnly:=true;
edit6.ReadOnly:=true;
edit8.ReadOnly:=true;
edit3.Text:='0'; //优惠默认为0
edit5.Text:='0'; //初次入库时已付款默认为0
edit7.Text:='';
edit4.Text:='';
edit6.Text:='';
combobox2.Text:='';
edit8.Text:=form1.statusbar1.Panels[4].Text;
//combobox2的下拉框
combobox2.Items.Clear;
combobox2.Items.Add('现金');
combobox2.Items.Add('银行');
datetimepicker2.Date:=now;
//定义productdate,quantity,cost字段的onsettext属性
adoquery1.FieldByName('productdate').OnSetText:=ptestdate;
adoquery1.FieldByName('quantity').OnSetText:=pjs;
adoquery1.FieldByName('cost').OnSetText:=pjs;
end;
这是formshow的内容,代码太多了,我感觉是dbgrideh的列在又一次创建的时候出错了。是在没办法只能手动加列了。
str:=' if exists(select name from sysobjects where name=''tmp'' and xtype=''u'')';--此处设断点
运行,然后按F8进行调试,当跳到哪一行出现错误,就知道问题在哪了~
要学会设断点,这样容易调试出错误,看你的代码,冗余度很高啊~