在数据源BeforePost事件里写 var i:integer; IsNull:boolean; begin IsNull:=False; for i:=0 to Form1.DBGrid1.Columns.Count-1 do if Form1.DBGrid1.Columns.Items[i].value:='' then IsNull:=True; if IsNull then begin Application.MessageBox('保存失败,有空白字段!','错误',MB_ICONERROR + MB_OK); Abort; end; end;
if Form1.DBGrid1.Columns.Items[i].value:='' then IsNull:=True;这句不对啊!不能识别标示 value
但是samcrm(阿靖) 的方法编译不通过呀!~ if Form1.DBGrid1.Columns.Items[i].value ='' then IsNull:=True;这句不对啊!不能识别标示 value
改成:DBGrid1.DataSource.DataSet.Fields[i].Value:=''
同样有问题!!!还没有post呢,它怎么检查得到呢?
类似 samcrm(阿靖) 的做法: procedure TForm1.Table1BeforePost(DataSet: TDataSet); var i: Integer; IsNull: Boolean; begin IsNull := False; for i:=0 to Form1.DBGrid1.Columns.Count-1 do begin if Form1.DBGrid1.Columns[i].Field.IsNull then begin IsNull := True; Break; end; if Form1.DBGrid1.Columns[i].Field.Value = '' then begin IsNull := True; Break; end; end; if IsNull then begin Application.MessageBox('保存失败,有空白字段!','错误',MB_ICONERROR + MB_OK); Abort; end; end;
原来用Value可能会有些问题,直接用AsString就行了,更简单: procedure TForm1.Table1BeforePost(DataSet: TDataSet); var i: Integer; begin for i:=0 to Form1.DBGrid1.Columns.Count-1 do if Form1.DBGrid1.Columns[i].Field.AsString = '' then begin Application.MessageBox('保存失败,有空白字段!','错误',MB_ICONERROR + MB_OK); Abort; end; end;
再添加一个数据控制控件,与表关联就行了
方法多种多样,不过效率就不一样了
var
i:integer;
IsNull:boolean;
begin
IsNull:=False;
for i:=0 to Form1.DBGrid1.Columns.Count-1 do
if Form1.DBGrid1.Columns.Items[i].value:='' then IsNull:=True;
if IsNull then
begin
Application.MessageBox('保存失败,有空白字段!','错误',MB_ICONERROR + MB_OK);
Abort;
end;
end;
if Form1.DBGrid1.Columns.Items[i].value ='' then IsNull:=True;这句不对啊!不能识别标示 value
procedure TForm1.Table1BeforePost(DataSet: TDataSet);
var
i: Integer;
IsNull: Boolean;
begin
IsNull := False;
for i:=0 to Form1.DBGrid1.Columns.Count-1 do begin
if Form1.DBGrid1.Columns[i].Field.IsNull then begin
IsNull := True;
Break;
end;
if Form1.DBGrid1.Columns[i].Field.Value = '' then begin
IsNull := True;
Break;
end;
end;
if IsNull then begin
Application.MessageBox('保存失败,有空白字段!','错误',MB_ICONERROR + MB_OK);
Abort;
end;
end;
procedure TForm1.Table1BeforePost(DataSet: TDataSet);
var
i: Integer;
begin
for i:=0 to Form1.DBGrid1.Columns.Count-1 do
if Form1.DBGrid1.Columns[i].Field.AsString = '' then begin
Application.MessageBox('保存失败,有空白字段!','错误',MB_ICONERROR + MB_OK);
Abort;
end;
end;