本人在开发Order模块时,发现了一个问题,tbOrder是一个从表,用Locate查找时无法定位!
后来发现是从表,有一个MasterFields字段关联,是不是这个问题呢?后修改代码,果然可以定位了。代码如下,希望能给大家点帮助!procedure TFrmSearch.FlatSpBtnFindClick(Sender: TObject);
var
I: integer;
MFld, MFldStr: string;
begin
I := FlatComboBox1.ItemIndex; if ODS.ClassNameIs('TADOTable') and ((ODS as TADOTable).MasterSource <> nil) then //子表为主从表且为TADOTable时
begin
//改后代码
MFld := (ODS as TADOTable).MasterFields;
MFldStr := (ODS as TADOTable).MasterSource.DataSet.FieldValues[MFld]; if ODS.Locate(MFld+';'+OFields[I], VarArrayOf([MFldStr, FlatEdit1.Text]), [loPartialKey]) then
begin
MessageBox(Handle, '资料查找成功!', '操作提示!', MB_OK + MB_ICONINFORMATION);
if FlatCheckBox1.Checked then Close;
end
else
begin
MessageBox(Handle, '对不起,找不到你想要的资料,请重新查询!', '操作提示!', MB_OK + MB_ICONINFORMATION);
FlatEdit1.SetFocus;
end;
end else
begin
//原Locale代码。
if ODS.Locate(OFields[I], FlatEdit1.Text, [loPartialKey]) then
begin
MessageBox(Handle, '资料查找成功!', '操作提示!', MB_OK + MB_ICONINFORMATION);
if FlatCheckBox1.Checked then Close;
end
else
begin
MessageBox(Handle, '对不起,找不到你想要的资料,请重新查询!', '操作提示!', MB_OK + MB_ICONINFORMATION);
FlatEdit1.SetFocus;
end;
end;
end;不知各位有没有更好的实现方法,望跟帖告知!
后来发现是从表,有一个MasterFields字段关联,是不是这个问题呢?后修改代码,果然可以定位了。代码如下,希望能给大家点帮助!procedure TFrmSearch.FlatSpBtnFindClick(Sender: TObject);
var
I: integer;
MFld, MFldStr: string;
begin
I := FlatComboBox1.ItemIndex; if ODS.ClassNameIs('TADOTable') and ((ODS as TADOTable).MasterSource <> nil) then //子表为主从表且为TADOTable时
begin
//改后代码
MFld := (ODS as TADOTable).MasterFields;
MFldStr := (ODS as TADOTable).MasterSource.DataSet.FieldValues[MFld]; if ODS.Locate(MFld+';'+OFields[I], VarArrayOf([MFldStr, FlatEdit1.Text]), [loPartialKey]) then
begin
MessageBox(Handle, '资料查找成功!', '操作提示!', MB_OK + MB_ICONINFORMATION);
if FlatCheckBox1.Checked then Close;
end
else
begin
MessageBox(Handle, '对不起,找不到你想要的资料,请重新查询!', '操作提示!', MB_OK + MB_ICONINFORMATION);
FlatEdit1.SetFocus;
end;
end else
begin
//原Locale代码。
if ODS.Locate(OFields[I], FlatEdit1.Text, [loPartialKey]) then
begin
MessageBox(Handle, '资料查找成功!', '操作提示!', MB_OK + MB_ICONINFORMATION);
if FlatCheckBox1.Checked then Close;
end
else
begin
MessageBox(Handle, '对不起,找不到你想要的资料,请重新查询!', '操作提示!', MB_OK + MB_ICONINFORMATION);
FlatEdit1.SetFocus;
end;
end;
end;不知各位有没有更好的实现方法,望跟帖告知!
如果用SQL+WHERE的话,只起到筛选器的作用,不象LOCATE方法可以查找定位,它不破坏DBGRID显示!不知道我这样说对不对,请高手指正!