DBGRIDEH控件是怎么判断当前当前单据某列数据是否存在重复值的

DBGRIDEH控件是如何判断当前当前单据某列数据是否存在重复值的?
请问关于DBGRIDEH控件是如何判断当前当前单据某列数据是否存在重复值的?由于当前单据的数据在未保存时还没有插入数据表的。所以从查数据表判断好像行不通。

------解决方案--------------------
if ADOQuery2.RecordCount<=0then
begin
RzDBEdit2.SetFocus;
end;
end;
if cxDBImageComboBox1.ItemIndex=1 then
begin
ADOQuery2.Close;
ADOQuery2.SQL.Clear;
ADOQuery2.SQL.Add( 'select * from ALLLB where assets='''+trim(RzDBEdit1.Text)+''' ' );
ADOQuery2.Open;
if ADOQuery2.RecordCount<=0 then
begin
ShowMessage('你輸入的編號有誤');
Exit;
end;
if ADOQuery2.RecordCount>0then
begin
ADOQuery1.FieldByName('goods').AsString:=ADOQuery2.FieldValues['goods'];
begin
ADOQuery2.Close;
ADOQuery2.SQL.Clear;
ADOQuery2.SQL.Add( 'select * from ALLdate where assets='''+trim(RzDBEdit1.Text)+''' ' );
ADOQuery2.Open;
if ADOQuery2.RecordCount>0 then
begin
ADOQuery1.FieldByName('goods').AsString:=ADOQuery2.FieldValues['goods'];
ADOQuery1.FieldByName('oldcounts').AsString:=ADOQuery2.FieldValues['oldcounts'];

end;
------解决方案--------------------
在DBGRIDEH对应的DataSet的beforepost事件判断
...
ADOSetTmp.CommandText :='select 1 from xdd where id='+inttostr(ADOQuery1.FieldByName('id').AsInteger);

if not ADOSetTmp.IsEmpty then
begin
MsgBoxInfo('同一张订单不允许商品编码重复。 ');
Abort;
end;
...
------解决方案--------------------
写一个检查的过程不就行了:

procedure CheckDuplicate(i_DataSet:TDataSet;i_Field:Array of String;i_GetFocusControl:TWinControl;i_Errormsg:String);
var I:Integer;
l_strList:TStringList;
l_Str:String;
begin
i_DataSet.DisableControls;
l_strList:= TStringList.Create;
Try
i_DataSet.First;
while not i_DataSet.eof do
begin
l_str := '';
for I:= low(i_Field) to high(i_field) do
l_str := l_str + #1 + i_DataSet.Fieldbyname(i_field[I]).AsString;
if l_StrList.IndexOf(l_str)<> -1 then
msgError(i_Errormsg,i_GetFocusControl,True,False)
else
l_strList.Add(l_str);
i_DataSet.Next;
end;
Finally
Freeandnil(l_strList);
i_DataSet.EnableControls;
end;
end;

运用示例:

CheckDuplicate(dgMSTCS0.DataSet,['SZCD','CLCD'],dgMSTCS0,siLang.GetText('DPSZCDCLCD'));
第一个参数是DBGRIDEH对应的DataSet,
第二个参数是你要检查有复制的栏位,可以组合检查。
第三个参数是DBGRIDEH的控件名
第四个参数是发现有重复出什么提示。

这个过程写好后你可以放到整个程序单元的onBeforesave事件里面全部输入完记录后一次性检查过,不用放到post里面每保存一次就检查一次(如果需要的话就还是可以放的)。
------解决方案--------------------
两种方法
1 数据一行一行写入DBGRID的时候来写一个条件判断DBGRID中有没有 有的话 报出错误
2 在数据写入数据库之前这一步 写一个遍历的双重循环来一条条比较判断
建议第一种 第一种操作员可以及时纠正错误