我是初学delphi数据库请问专家门几个问题。我是按书上的例子做的程序为什么运行的时候总是不成功!以下是我添加,删除,修改的源代码。请专家帮我分析一下。修改:procedure TForm2.BitBtn2Click(Sender: TObject);
begin
  with  Form2DataModule.studentTable do
  begin
     if SpinEdit1.Text='' then
  begin
     ShowMessage('请输入学号:');
     SpinEdit1.SetFocus;
     exit;
  end;
  if not Locate('学号',VarArrayof([SpinEdit1.text]),[LopartialKey]) then
  begin
     ShowMessage('无此记录不能修改!');
     exit;
  end;
  Edit;
  FieldByName('姓名').AsString:=Edit1.Text;
  FieldByName('学号').AsString:=SpinEdit1.Text;
  FieldByName('性别').AsString:=Edit2.Text;
  FieldByName('年龄').AsString:=Edit3.Text;
  FieldByName('入学时间').AsDateTime:=DateTimePicker1.Date;
  Post;
  ShowMessage('修改成功!');
end;end;
添加:
procedure TForm2.BitBtn3Click(Sender: TObject);
begin
  with Form2DataModule.studentTable do
  begin
    if ((SpinEdit1.Text<>'') and (Edit1.Text<>'')) then
    begin
       if Locate('学号',VarArrayof([SpinEdit1.text]),[LopartialKey])
       then begin
              ShowMessage('此学生已存在!');
              exit;
             end;
      try
        Append;
        FieldByName('姓名').AsString:=Edit1.Text;
        FieldByName('学号').AsString:=SpinEdit1.Text;
        FieldByName('性别').AsString:=Edit2.Text;
        FieldByName('年龄').AsString:=Edit3.Text;
        FieldByName('入学时间').AsDateTime:=DateTimePicker1.Date;
        Post;
        ShowMessage('添加成功!');
      except
      begin
        Active:=false;
        ShowMessage('输入学号的范围应在:10000000-19999999之间!');
        Active:=true;
        exit;
      end;
    end;
    end else ShowMessage('');
  end; //With do
end;
删除:
procedure TForm2.BitBtn4Click(Sender: TObject);
begin
  With Form2DataModule.studentTable do
  begin
    if Locate('学号',VarArrayof([SpinEdit1.Text]),[LopartialKey])
    then begin
       Delete;
       Edit1.Text:='';
       Edit2.Text:='';
       Edit3.Text:='';
       ShowMessage('删除成功');
       end else ShowMessage('无此记录!');
  end;
end;下面是SpinEdit几个事件的添加完整性程序:
procedure TForm2.SpinEdit1Change(Sender: TObject);
begin
  Form2.SpinEdit1Exit(sender);
end;procedure TForm2.SpinEdit1Exit(Sender: TObject);
begin
  if (length(SpinEdit1.Text)<>8)then
  begin
    ShowMessage('请输入8个字符!');
    SpinEdit1.SetFocus;
    exit;
  end;
  with Form2DataModule.studentTable do
  begin
  if Locate('学号',VarArrayof([SpinEdit1.text]),[LopartialKey]) then
  begin
    Edit1.Text:=FieldByName('姓名').AsString;
    SpinEdit1.Text:=FieldByName('学号').AsString;
    Edit2.Text:=FieldByName('性别').AsString;
    Edit3.Text:=FieldByName('年龄').AsString;
    DateTimePicker1.Date:=FieldByName('入学时间').AsDateTime;
  end else
  begin
    Edit1.text:='';
    Edit2.text:='';
    Edit3.text:='';
  end;
 end;
end;procedure TForm2.SpinEdit1KeyPress(Sender: TObject; var Key: Char);begin
  if key=#13 then
     Form2.SpinEdit1Exit(Sender);
end;
end.谢谢各位专家帮帮忙!

解决方案 »

  1.   

    我运行到是没有问题,就是往 姓名 性别 这些框里添完以后点 修改或者添加等按钮的时候,系统提示说:调试器反对通知,cannot perform this operation on a closed dataset.
    是不是我的学生库里面建的人数太少了!
      

  2.   

    在FormShow或适当的地方或全部按钮处理中加入Form2DataModule.studentTable.Open;
      

  3.   

    在你出错的地方如果用到TABLE的具体字段的时候,再上studentTable.Open;
      

  4.   

    我已经改好了!不用加studentTable.Open我是在前面的uses里加上了表示我的数据表的db这样运行就没有问题了!谢谢大家。
      

  5.   

    出现什么错误!错误代码是什么?
    有问题请发信息到我的E-mail:[email protected]
      

  6.   

    cannot perform this operation on a closed dataset这个错误提示是说明你修改的时候数据库没有打开,所以不能对你给关闭的数据库进行操作,你在检查一下,具体问题要我在看看你的程序,有问题在给我邮件[email protected]
      

  7.   

    我的谢谢大家!~这个问题我已经解决了,我在继续做我的程序。以后肯定还会有很多问题麻烦大家!谢谢大家,有问题我会给你们发mail的!