点击确定和双击DBGRID后返回的值为空也就是RESULT为空,点击取消程序正确.
function SearchData(ADBEdit: TDBEdit; ADataSet: TDataSet): String;
begin
if not (ADBEdit.DataSource.DataSet.State in [dsInsert, dsEdit]) then
Abort;
if ADBEdit.ReadOnly then
Abort;
try
fmBaseSearch := TfmBaseSearch.Create(Application);
fmBaseSearch.Caption := '查询' + ADBEdit.DataSource.DataSet.FieldByName(ADBEdit.DataField).DisplayLabel;
fmBaseSearch.dsTemp.DataSet := ADataSet;
sOldValue := ADBEdit.DataSource.DataSet.FieldByName(ADBEdit.DataField).AsString;
if fmBaseSearch.ShowModal = mrOK then
begin
ADBEdit.DataSource.DataSet.FieldByName(ADBEdit.DataField).AsString :=
fmBaseSearch.dsTemp.DataSet.Fields[0].AsString;
Result :=fmBaseSearch.dsTemp.DataSet.Fields[0].AsString;
end
else
begin
ADBEdit.DataSource.DataSet.FieldByName(ADBEdit.DataField).AsString := sOldValue;
Result := sOldValue;
end;
if ADBEdit.Visible then
ADBEdit.SetFocus;
finally
fmBaseSearch.Free;
end;
end;
function SearchData(ADBEdit: TDBEdit; ADataSet: TDataSet): String;
begin
if not (ADBEdit.DataSource.DataSet.State in [dsInsert, dsEdit]) then
Abort;
if ADBEdit.ReadOnly then
Abort;
try
fmBaseSearch := TfmBaseSearch.Create(Application);
fmBaseSearch.Caption := '查询' + ADBEdit.DataSource.DataSet.FieldByName(ADBEdit.DataField).DisplayLabel;
fmBaseSearch.dsTemp.DataSet := ADataSet;
sOldValue := ADBEdit.DataSource.DataSet.FieldByName(ADBEdit.DataField).AsString;
if fmBaseSearch.ShowModal = mrOK then
begin
ADBEdit.DataSource.DataSet.FieldByName(ADBEdit.DataField).AsString :=
fmBaseSearch.dsTemp.DataSet.Fields[0].AsString;
Result :=fmBaseSearch.dsTemp.DataSet.Fields[0].AsString;
end
else
begin
ADBEdit.DataSource.DataSet.FieldByName(ADBEdit.DataField).AsString := sOldValue;
Result := sOldValue;
end;
if ADBEdit.Visible then
ADBEdit.SetFocus;
finally
fmBaseSearch.Free;
end;
end;
Result:=ADBEdit.DataSource.DataSet.FieldByName(ADBEdit.DataField).AsString;
不过你写的代码太复杂化你可以先简单化一点吗!
是不是在只读状态,是退出.
然后再查询窗体,将要查询字段的DISPLAYLABE给窗体的CAPTION属性作为窗体名.将ADBEDIT的默认值给变量sOldValue,
将DBGRID中选中记录的第一个字段的值给RESULT,(确定或双击)
取消用SOLDVALUE的值给RESULT.
RE COOLFILM
他返回的的确是空值,任意给一个值可以近回.
像这种在程序运行时才给定数据源的DBGRID怎么样才能确定他选定的记录的指定字段的值.谢谢在线等.