比如有一张学生表:
字段主要是 :学号,姓名,年龄,班级;
这里设置 学号,姓名 为非空字段; 使用 DbEditNO,DbEditName,DbEditAge,DbEditClass 和 数据集AdoTable1关联
我现在想实现这样的功能:
因为学号,姓名 不能为空,
所有在 AdoTable.post 之前, 如果 DbEditNO或DbEditName的值为空,那么就提示哪个
字段为空,从而不让AdoTable.post 执行;而且鼠标光点最好能自动定位到那个为空的数据感应控件上。当让,要实现以上功能,可以通过这样的判断实现:
if DbEditNO.text='' then
begin
shommessage('学号不能为空');
DbEditNO.setFocus;
exit;
end;
if DbEditName.text='' then
begin
shommessage('姓名不能为空');
DbEditName.setFocus;
exit;
end;
adoTable.post;上面这种方法是最原始的写法,很费时间;最关键的是 这种做法不通用;如果有10张类似这样的基本信息维护处理;就要写10次不同的判断;
而且万一以后我们把“年龄”字段也认为不能为空,
那么就又要写上:
if DbEditAge.text='' then
begin
shommessage('年龄不能为空');
DbEditAge.setFocus;
exit;
end;
通用性很差;能否写一个通用的函数,自动识别出表里的非空字段,并作提示, 保存前,调用这个函数
就行了;
比如: function CheckTableIsNull(dataSet:TAdoSet):TFields;
dataSet--表示关联的表的数据集;
如果检测到当前的数据集的纪录中那些不能为空的纪录出现为空情况时,返回那些为空的字段;这个函数一般在保存前使用,如果返回的字段为空,说明 该添的字段值都填好了,
如果返回了几个字段值,比如上面的“学号”、“名称”等,那么我们就做提示;当然,这个函数需要和数据库里表的属性结合起来考虑,而且不同的数据库,可能写出的函数都不一样,我目前使用的是oracle 9;
我想,上面我提到的这个问题,应该是广大开发人员在实践过程中常遇到的。希望大家能够就此作深入的讨论。
字段主要是 :学号,姓名,年龄,班级;
这里设置 学号,姓名 为非空字段; 使用 DbEditNO,DbEditName,DbEditAge,DbEditClass 和 数据集AdoTable1关联
我现在想实现这样的功能:
因为学号,姓名 不能为空,
所有在 AdoTable.post 之前, 如果 DbEditNO或DbEditName的值为空,那么就提示哪个
字段为空,从而不让AdoTable.post 执行;而且鼠标光点最好能自动定位到那个为空的数据感应控件上。当让,要实现以上功能,可以通过这样的判断实现:
if DbEditNO.text='' then
begin
shommessage('学号不能为空');
DbEditNO.setFocus;
exit;
end;
if DbEditName.text='' then
begin
shommessage('姓名不能为空');
DbEditName.setFocus;
exit;
end;
adoTable.post;上面这种方法是最原始的写法,很费时间;最关键的是 这种做法不通用;如果有10张类似这样的基本信息维护处理;就要写10次不同的判断;
而且万一以后我们把“年龄”字段也认为不能为空,
那么就又要写上:
if DbEditAge.text='' then
begin
shommessage('年龄不能为空');
DbEditAge.setFocus;
exit;
end;
通用性很差;能否写一个通用的函数,自动识别出表里的非空字段,并作提示, 保存前,调用这个函数
就行了;
比如: function CheckTableIsNull(dataSet:TAdoSet):TFields;
dataSet--表示关联的表的数据集;
如果检测到当前的数据集的纪录中那些不能为空的纪录出现为空情况时,返回那些为空的字段;这个函数一般在保存前使用,如果返回的字段为空,说明 该添的字段值都填好了,
如果返回了几个字段值,比如上面的“学号”、“名称”等,那么我们就做提示;当然,这个函数需要和数据库里表的属性结合起来考虑,而且不同的数据库,可能写出的函数都不一样,我目前使用的是oracle 9;
我想,上面我提到的这个问题,应该是广大开发人员在实践过程中常遇到的。希望大家能够就此作深入的讨论。
if (DbEditName.text='') or (DbEditName.text=null) then
begin
shommessage('姓名不能为空');
DbEditName.setFocus;
exit;
end;
2)
for i:=0 to myDataSet.FieldCount - 1 do
if myDataSet.Fields[i].IsNull then
begin
if Self.FindComponent('DBEdit'+myDataSet.Fields[i].FieldName)<>nil then
TDBEdit(Self.FindComponent('DBEdit'+myDataSet.Fields[i].FieldName)).SetFocus;
shommessage(myDataSet.Fields[i].FieldName+'不能为空');
Break;
end;上面的程序比较粗糙,没有实际测试过,随手写的,仅供参考
function TForm1.IsEmpty(FieldsStr: string; CurrDataset: TADODataset): Boolean;
var
i:integer;
tmpField:string;
begin
Result:=True;
For i:=1 to Length(FieldsStr) do
begin
if FieldsStr[i] <> ';' then
tmpField:=tmpField+FieldsStr[i]
else
begin
if trim(CurrDataset.FieldByName(tmpField).AsString) = '' then
begin
Showmessage(tmpField+' 字段不能为空!');
Result:=false;
exit;
end;
tmpField:='';
end;
end;
end;二、调用:
if IsEmpty('no;name;age',ADODataSet1) then ADODataSet1.Post;