回 帖 发 新 帖 刷新版面

主题:各位高手帮我看看这添加代码有什么问题

procedure Tfzj.FormShow(Sender: TObject);
begin
    fdm.at_stu.Open;
 fdm.at_stu.Append;
 dbedit1.SetFocus;
end;
procedure Tfzj.bt_addClick(Sender: TObject);
begin
   if trim(dbedit1.Text)='' then  //如果学号为空,则提示输入学号
     begin
      application.MessageBox('学号不能为空,请输入学号','提示',mb_ok);
      dbedit1.SetFocus;
      exit;
     end;
  //如果班级号为空,则提示输入班级号
 if trim(dbedit2.Text)='' then
   begin
    application.MessageBox('班级号不能为空,请输入班级号','提示',mb_ok);
    dbedit2.SetFocus;
    exit;
    end;
try
   fdm.at_stu.Post;   //保存记录
   fdm.at_stu.Refresh;
   showmessage('添加成功');
except            //学号重复异常处理,学号为主键
   messagedlg('检查记录是否重复了,不能保存',mtinformation,[mbok],0);
    fdm.at_stu.Cancel;
   dbedit1.SetFocus;
   exit;
end;
 fdm.at_stu.Append;    //增加一条新记录
 dbedit1.SetFocus;    //设置光标默认在dbedit1
end;
刚运行时出错了,错误如下:
Project Project1.exe raised exception class EVariantTypeCastError with message'Could not convert variant of type(Null)into type(String)'.Process stoped.Use Step or Run to continue.
再次运行,当在增加窗体里添加相同的学号时出错了:
Project Project1.exe raised exception class EOleException with message
'[Microsoft][ODBC SQL Server Driver][SQL Server]违反了PRIMARY KEY约束'PK_Student'.不能在对象't_student'中插入重复键。'.Process stopped.Use Step or Run to continue.
注:我已经用异常处理了学号重复问题了,为什么还出这种错呢?

回复列表 (共4个回复)

沙发

怎么没有人帮我呀,求求各位高手帮我看看吧

板凳

message'Could not convert variant of type(Null)into type(String)'

这句话就是告诉你你往数据库里输入的数有空字段!!
空字段没法转成STRING型的数据
!!!!

而再运行时因为你的数据表里已经有了一个空字段了,所以不能再差入空字段了!
而且你应该时吧EDIT1对应的那个字段设为主键了吧?!?
我们老师非常反对我使用主键,说没什么大用,能引起的问题还不老少!!

你先在TRY前加一个ELSE看下,

3 楼

为什么数据表里有空字段呢,我设计数据表的时候没有空字段呀。不设置主键,那要是有同样学号的学生那不是很麻烦,也很容易混淆。而且我加了ELSE,错误还是一样的。
那该怎么办呢?

4 楼

哦!!
我意思是你在向数据库里送数时送了个空值!

对于主键那个,我得认为时学号应该时学生得唯一标识,所以不能有重的!

所以你在送数前要先用一个查询语句看数据表里是否已有这个学号,如果有,则跳出提示!没有的话,才能往里送数!

代码你先试试这样
if (trim(dbedit1.Text)='' or  trim(dbedit2.Text)='') then 
begin
      showmessage('学号或班级不能为空!');     
      exit;
end
else
try
.....

我来回复

您尚未登录,请登录后再回复。点此登录或注册