读书人

大家帮小弟我看看这段代码如何错了?1

发布时间: 2012-05-29 12:16:00 作者: rapoo

大家帮我看看这段代码怎么错了?1
大家好,我想用Delphi编一个程序,请大家帮我看看下面这段代码哪里出错了。

我用的是Delphi7,操作系统是XP,分别使用:TADOTable、TDataSource、TEdit、TRichEdit、TComboBox、TLabel、TButton,DataControls标签页下的组件只有一个:TDBGrid。

数据库名:HDDB.mdb(Access数据库);表名:“Record”。字段有:隐患编号、检查日期、被检单位、负责人、隐患内容、整改措施、检查人、检查日期、整改期限、复查人、复查日期、整改情况。(以上字段:编号、整改期限为Integer类型;检查日期、复查日期为TDateTime类型,其余全部为String类型)。

目的是这样:

1、单击“隐患录入” 按钮,新建一条记录。记录内各字段的值,通过TEdit、TComboBox、TRichEdit等组件获得。
由于某些隐患字数少,在TRichEdit中可能只有1行、某些隐患字数会较多,在TRichEdit中可能就会有2行或多行。为了实现将TRichEdit中的每一行内容分别在数据库表中保存为一条记录,编写如下代码(窗体名:fmCollect,窗体上各组件命名规则:fmCO+组件类缩写+用途+窗体顺序。如“隐患录入”按钮.Name := fmCOBtnNew26):

procedure TfmCollect.fmCOBtnNew26Click(Sender: TObject);
Var
RhEDLine: Integer;
begin
IF fmCOdsRecord.DataSet.State = dsBrowse Then
begin
fmCOADOtbMoveUp.Last; //窗体上的第2个TADOTable组件,为了在“新增”时避免“隐患编号”重复(主键)
fmCOdsRecord.DataSet.Append;
fmCOEDCode1.Text := IntToStr(fmCOADOtbMoveUp.FieldByName('隐患编号').AsInteger + 1);
FOR RhEDLine := 0 TO fmCORhEDDetails7.Lines.Count - 1 Do
begin
fmCOdsRecord.DataSet.FieldByName('隐患编号').AsInteger := fmCOADOtbMoveUp.FieldByName('隐患编号').AsInteger + 1;
//fmCOADOTable2.FieldByName('隐患编号').AsInteger + 1;
fmCOdsRecord.DataSet.FieldByName('检查日期').AsDateTime := fmCODTExamine2.Date;
fmCOdsRecord.DataSet.FieldByName('被检单位').AsString := fmCOCBoxUnit3.Text;
fmCOdsRecord.DataSet.FieldByName('负责人').AsString := fmCOCBoxReceived4.Text;
fmCOdsRecord.DataSet.FieldByName('检查人').AsString := fmCOCBoxRummager5.Text;
fmCOdsRecord.DataSet.FieldByName('检查单位意见').AsString := fmCOCBoxIdea9.Text;
fmCOdsRecord.DataSet.FieldByName('隐患编号').AsInteger := StrToInt(fmCOEDCode1.Text);
fmCOdsRecord.DataSet.FieldByName('隐患内容').AsString := fmCORhEDDetails7.Lines.Strings[0];
fmCORhEDDetails7.Lines.Strings[fmCORhEDLine];
fmCOdsDetails.DataSet.FieldByName('整改措施').AsString :=
fmCORhEDMeasure8.Lines.Text;
end;
end;
end;

按F9后,出现两种情况的错误:
1、当数据表Record为空表(不含一条记录)时,按“隐患录入”按钮,出现错误信息:'' is not a valid integer value.
2、当数据表Record不为空表(哪怕只含一条记录)时,按“隐患录入”按钮,出现错误信息:“不能插入空的数据行。”

这是为什么呢?

本人Delphi水平属于没入门水平,平时由于工作繁忙也没时间去系统的学习。由于工作需要,这是我的第一个程序,可能数据库表的建立、组件命名、代码编写规则等存在一些问题,请各位高手帮我检查、指教,本人不胜感激。

[解决办法]
fmCOADOtbMoveUp.Last; //窗体上的第2个TADOTable组件,为了在“新增”时避免“隐患编号”重复(主键)
fmCOEDCode1.Text := IntToStr(fmCOADOtbMoveUp.FieldByName('隐患编号').AsInteger + 1);
fmCOdsRecord.DataSet.Append;
…………………………
…………………………
fmCOdsRecord.DataSet.Post;

[解决办法]
很多错误:

1.有Append;没有看到post
2.TRichEdit一行一笔数据,append与post应该放在循环体内
3.fmCOADOtbMoveUp.Last;保证不了号码不重复,多次添加数据时,要刷新才行
4.第2次循环后,"隐患编号" 已经取不到最后一个ID了
5.fmCORhEDDetails7.Lines.Strings[fmCORhEDLine];这句在这里不知做什么用,中括号内必要是数字,
fmCORhEDLine是什么,没看出来;(第1个错误提示,估计就是出现在这里)
6.循环变量RhEDLine没有用到,"隐患内容了"一直取的是第1行数据,即Strings[0]
7.有2个地方对隐患编号重复赋值了
8.看到2个数据集在操作fmCOdsRecord.DataSet和fmCOdsDetails.DataSet
...

找本书来看看吧,照着书本的例子先敲上几遍,再实战做项目

读书人网 >.NET

热点推荐