还是edit.text问题(50分)

  • 主题发起人 主题发起人 kaisa2002
  • 开始时间 开始时间
K

kaisa2002

Unregistered / Unconfirmed
GUEST, unregistred user!
我要把edit.text通过ado写到sql.sever里 但是当我edit.text为空时
老是出现INVALID VALUE FOR FIELD '数据库里对应edit.text的这一字段'
 
请检查SQL Server里数据库相应字段的定义,是否不允许为空
 
当edit.text='' 数据库里面可以置为 null或 ''

 
代码:
if edtXXX.Text = '' then
  xxxx
 
同意pt_email的意见。
 
当edit.text为空的时候,你在数据库里设一个默认值吧。
 
至少你的SQL语句应该是这样的:
CommandText := 'Select * from Customer where CustNo='' + Edit.Text + '''';
这样,Edit.Text为空也不用怕了, 否则SQL语句如下:
Select * from Customer where CustNo=
或者如以上朋友所讲的判断是否为空也可以.
 
if edit1.text<>'' then
with table1 do
begin
edit;
fieldbyname('xxx').value := edit1.text;
post;
end
else
showmessage('XXX编辑框不能为空!');
edit1.setfoucse;
 
edit为非数据感应控件,不知道你会如何应用它的值,具体的应用种类会很多,
同样就会有不同的解决办法。
1 插入数据库
在edit的退出事件或者你的向数据库增加记录的事件中增添检测操作:
假设数据库字段不能为空:
showmessage('XXX不能为空');
edit1.setfocus;
数据库字段可以为空:
strFName, strFVal, strAll : string;
strFname := '(';
strFVal := '(';
if edit1.Text <> '' then
begin
strFname := strFname + tabfname;
strFval := strFVal + #39 + Edit1.Text + #39;
end;
...
strFname := strFname + ')';
strFVal := strFVal + ')';
strAll := 'insert into tabname' + strFname + ' values' + strFVal;
showmessage(strall);
第一种方式是对插入数据库时的字段名根据值的不同进行控制

2 不控制插入时的字段名,则在edit1.text = ''时,将edit1所对应的字段的值写为null,
这要根据你所使用的数据库的类型而定,不同的数据库类型,可能在空值方面的取值不同。
但几乎可以肯定的是数据库和delphi的空值表示是不同的。
你的问题出现的最根本原因就是这个。

3 查询时的条件字段
CommandText := 'Select * from Customer ';
if Edit1.text <> '' then
CommandText := CommandText + ' where fname = ' + #39 + Edit1.Text + #39;


 
后退
顶部