Hallo,
ich benutze Master-Detail-Konstellationen mit TAdoQuery.
Wenn ich in der Detailtabelle einen Parameter mehrmals benutze wie z.B.
"where KundenGroup_ID< :Group_ID or FirstGroup_ID = :Group_ID"
(nur ein dummes Beispiel, das SQL ist wesentlich komplexer inkl. unions und bedingt die mehrfache Verwendung einer Mastertabellenspalte)
bekomme ich keine Ergebnisdatenmenge bzw. den Fehler "Parameter object is improperly defined. Inconsistent or incomplete information was provided".
Nach verschiedenen Suchstufen bekam ich heraus, dass in den Sourcen von Delphi eine buggige Implementation der Grund zu sein scheint: In der ADODB.pas von D7 (in D2007 auch) findet man
procedure TCustomADODataSet.SetParamsFromCursor;
var
I: Integer;
begin
if MasterDataLink.DataSource <> nil then
for I := 0 to MasterDataLink.Fields.Count - 1 do
with TField(MasterDataLink.Fields[I]) do
Parameters.ParamByName(FieldName).Assign(MasterDat aLink.Fields[I]);
end;
Damit wird nicht jeder Detail-Parameter belegt. Abhilfe könnte schaffen:
procedure TCustomADODataSet.SetParamsFromCursor;
var
I: Integer;
begin
if MasterDataLink.DataSource <> nil then
for I := 0 to Parameters.Count - 1 do
Parameters[i].Assign(MasterDataLink.FieldByName(Parameters[i].Name));
end;
Ich habe bisher keinen Ansatzpunkt für ein Workaround gefunden. Ich möchte gern die (fehlenden) Parameter vor einem "Open" korrekt belegen. Das Ereignis "BeforeOpen" der Detaildatenmenge kann nicht genutzt werden, da es bei Datensatzänderungen der Master-Source nicht anzieht.
Hat jemand eine Idee - Wer kann helfen?
ich benutze Master-Detail-Konstellationen mit TAdoQuery.
Wenn ich in der Detailtabelle einen Parameter mehrmals benutze wie z.B.
"where KundenGroup_ID< :Group_ID or FirstGroup_ID = :Group_ID"
(nur ein dummes Beispiel, das SQL ist wesentlich komplexer inkl. unions und bedingt die mehrfache Verwendung einer Mastertabellenspalte)
bekomme ich keine Ergebnisdatenmenge bzw. den Fehler "Parameter object is improperly defined. Inconsistent or incomplete information was provided".
Nach verschiedenen Suchstufen bekam ich heraus, dass in den Sourcen von Delphi eine buggige Implementation der Grund zu sein scheint: In der ADODB.pas von D7 (in D2007 auch) findet man
procedure TCustomADODataSet.SetParamsFromCursor;
var
I: Integer;
begin
if MasterDataLink.DataSource <> nil then
for I := 0 to MasterDataLink.Fields.Count - 1 do
with TField(MasterDataLink.Fields[I]) do
Parameters.ParamByName(FieldName).Assign(MasterDat aLink.Fields[I]);
end;
Damit wird nicht jeder Detail-Parameter belegt. Abhilfe könnte schaffen:
procedure TCustomADODataSet.SetParamsFromCursor;
var
I: Integer;
begin
if MasterDataLink.DataSource <> nil then
for I := 0 to Parameters.Count - 1 do
Parameters[i].Assign(MasterDataLink.FieldByName(Parameters[i].Name));
end;
Ich habe bisher keinen Ansatzpunkt für ein Workaround gefunden. Ich möchte gern die (fehlenden) Parameter vor einem "Open" korrekt belegen. Das Ereignis "BeforeOpen" der Detaildatenmenge kann nicht genutzt werden, da es bei Datensatzänderungen der Master-Source nicht anzieht.
Hat jemand eine Idee - Wer kann helfen?
Comment