求助[级],另外,帮助改正程序段的也给分,分不够,再加。(50分)

  • 主题发起人 vickymade
  • 开始时间
V

vickymade

Unregistered / Unconfirmed
GUEST, unregistred user!
为什么在Append以后,记录指针并不移动呢?并不是添加剂路,而是在更新当前记录,另外,编号部分也有问题。
代码如下:

procedure TfrmBaseDataInputForm.Button1Click(Sender: TObject);
begin
BaseDataDM.DataInputADOTable.Open();
with BaseDataDM.DataInputADOTable do
begin
try

Open();
//Edit();
Append();
//设置编号
//IndexName:='InputNumber';
//if FieldByName('InputNumber').AsString='' then
//FieldByName('InputNumber').AsString:='0';
if Eof then
begin
Prior();
I:=StrtoInt(Trim(FieldByName('InputNumber').AsString));
Next();
Edit();
FieldByName('InputNumber').AsString:=InttoStr(I+1);
end
else
FieldByName('InputNumber').AsString:=InttoStr(I+1);

//FieldByName('InputNumber').AsString:=InttoStr({StrtoInt(FieldByName('InputNumber').AsString)}I+1);

//设置在各个Edit中的输入不能为空
//--------------------------------------------------------------------------
if
(
(NameEdit.Text<>'') and (AcademyEdit.Text<>'') and (ShoulderTimeEdit.Text<>'')
)
then
begin
//--------------------------------------------------------------------------

//--------------------------------------------------------------------------
//设置个输入项的逻辑值不能不合理
//--------------------------------------------------------------------------

if NOT((StrtoInt(ShoulderTimeEdit.Text)<0) and (StrtoInt(ShoulderTimeEdit.Text)>100))
then
begin
//--------------------------------------------------------------------------
//--------------------------------------------------------------------------

//尝试POST各项的值
//--------------------------------------------------------------------------

FieldByName('InputName').AsString:=NameEdit.Text;
FieldByName('InputGener').AsString:=GenerComboBox.Text;
FieldByName('InputBirthday').AsDateTime:=BirthdayDateTimePicker.Date;
FieldByName('InputEdu_Level').AsString:=Edu_LevelComboBox.Text;
FieldByName('InputAcademy').AsString:=AcademyEdit.Text;
FieldByName('InputGraduateDate').AsDateTime:=GraduateDateDateTimePicker.Date;
FieldByName('InputEnterPrise').AsString:=EnterpriseComboBox.Text;
FieldByName('InputDapartment').AsString:=DapartmentComboBox.Text;
FieldByName('InputEnterProperty').AsString:=EnterPropertyComboBox.Text;
FieldByName('InputTaskDate').AsDateTime:=TaskDateDateTimePicker.Date;
FieldByName('InputDuty').AsString:=DutyComboBox.Text;
FieldByName('InputEngageDate').AsDateTime:=EngageDateTimePicker.Date;
FieldByName('InputOccupyTime').AsString:=ShoulderTimeEdit.Text;
FieldByName('InputCompetency').AsString:=CompetencyComboBox.Text;
FieldByName('InputSpeciality').AsString:=SpecialtyComboBox.Text;
FieldByName('InputSort').AsString:=SeriesComboBox.Text;
FieldByName('InputSeries').AsString:=SeriesComboBox.Text;
FieldByName('Foreign_LanguageAchievement').AsString:=Foreign_LanguageAchievementComboBox.Text;
FieldByName('ComputerAchievement').AsString:=ComputerAchievementComboBox.Text;
FieldByName('IsPassPrejudication').AsString:='N';

Post();
Next();
Close();
end;
end;
finally
BaseDataDM.DataInputADOTable.Cancel();
BaseDataDM.DataInputADOTable.Close();
end;
end;

end;
 
你的程序大概未贴完吧,比如变量I是怎么来的,

而且如果没有循环,用next()干什么
 
Next不要吧
 
I:Integer=0;
这只是一个过程.
 
我写个程序研究了一下,终于知道了答案。

当执行append后 eof为ture, 但这时如果不输入任何数据就移动记录,
新增记录公自动删除。来看你的程序。
Append();
if Eof then //eof为ture, 往下执行
begin
Prior(); //往前移一条记录,同时新增记录自动删除
I:=StrtoInt(Trim(FieldByName('InputNumber').AsString));
Next(); //eof又为真,但已没有新记录
Edit();
FieldByName('InputNumber').AsString:=InttoStr(I+1); //修改的不是新记录,而是最后一条记录
end
else
FieldByName('InputNumber').AsString:=InttoStr(I+1); //永远不会执行

明白了吧,解决也很简单

Append();
FieldByName('InputNumber').AsString:=InttoStr(I+1);
....

就行了
 
接受答案了.
 
顶部