![]() |
is Operator macht kommische Dinge
Hallo,
der Is Opperator macht bei mir in einer Procedur seltsame Dinge . Er meldet Value is TStrings = true obwohl ich ein TMemoField übergebe. Die aufrufende Prozedur der aufrufenden Prozedur der Prozedur mit dem Problem. :)
Delphi-Quellcode:
Die aufrufende Prozedur der Prozedur mit dem Problem
procedure TSD_Ressourcengruppen.RecalcList;
var OldC: TCursor; begin OldC := Screen.Cursor; Screen.Cursor := crHourglass; try with T_RGIT do begin First; while not EOF do begin Delete; Refresh; First; end; end; with CalcQuery do begin Close; SQL.Assign(T_Data.FieldByName('SQL_')); /// <<<<<<<<<<< Das ist der Aufruf if SQL.Count = 0 then begin raise Exception.Create({$IFDEF TRANSLATION}TransLateString{$ENDIF}('Die Liste konnte nicht berechnet werden, da keine Auswahl vorhanden ist')); end; Open; First; while not EOF do begin with T_RGIT do begin Append; FieldByName('RGrp_ID').AsInteger := T_DataID.Value; FieldByName('RTyp_ID').AsInteger := 1; FieldByName('RID').AsInteger := CalcQuery.FieldByName('ID').AsInteger; Post; end; Next; end; end; finally Screen.Cursor := OldC; end; end;
Delphi-Quellcode:
Hier der betroffene Code.
Procedure TVTableStringlist.Assign(Source:TPersistent);
Begin if assigned(Owner.MyDataset) and not DBProvide.SetSQL(owner.MyDataSet,TStrings(Source),owner.DataSetType,owner.DatabaseType) then Raise ECouldNotSetProperty.Create('TVTabelStringlist.Assign konnte nicht ausgeführt werden.'); end;
Delphi-Quellcode:
Function SetSQL(aDataSet:TDataset;Value:TStrings;DataSetType:TDataSetType; db: TDBType=dtDEFAULT):Boolean;
var ERRRec:TSerializedDBEngineError; astrings:TStringlist; Begin astrings := tstringlist.create; try if Value is TStrings then // <<<<<<<<<<<<<<<<<<<<<<<<<<<<<HIER PASSIERT DIE GESCHICHTE aStrings.AddStrings(Value) else aStrings.Assign(Value); ERRREC.Occured := false; result := false; if db = dtDefault then db := DefaultDB; case db of dtDefault: showmessage('DefaultDB darf nicht dtDEFAULT sein.'); dtBDE: Case Datasettype of dstQuery: Result := SetSQLBDE_QRY(ERRREC,aDataset,aStrings); end; dtDBI: ;//DBISAM not ready dtDBX: ;//DBX end; finally astrings.Free; astrings := nil; end; DBrsError(ERRREC); end; |
Re: is Operator macht kommische Dinge
Das Problem ist nicht die is-Abfrage (Value ist ja vom Typ TStrings definiert), sondern der knallharte Cast in TVTableStringlist.Assign (TStrings(Source)).
Mit einem harten Cast kannst du problemlos ein Apfel als Auto definieren. Erst wenn du Versuchst einzusteigen wirst du Probleme bekommen. |
Re: is Operator macht kommische Dinge
HM,
ist das hier besser?
Delphi-Quellcode:
Procedure TVTableStringlist.Assign(Source:TPersistent);
Begin if assigned(Owner.MyDataset) and not DBProvide.SetSQL(owner.MyDataSet,Source as TStrings, owner.DataSetType,owner.DatabaseType) then Raise ECouldNotSetProperty.Create('TVTabelStringlist.Assign konnte nicht ausgeführt werden.'); end; |
Re: is Operator macht kommische Dinge
Ja.
Aber vergiss nicht das die Anweisung "Source as TStrings" eine Exception auslößt wenn Source nicht vom Typ (oder Subtyp) TStrings ist. |
Re: is Operator macht kommische Dinge
Ja, weil AS intern eine IS Prüfung macht, würde dir dort bei einem Typ der nicht TStrings unter seinen Vorfahren hat eine Exception um die Ohren geschmissen...
|
Re: is Operator macht kommische Dinge
Ja habs gerade festgestellt Exception.....also keine Lösung.
Ich werde wohl der Procedure SetSQL einen Kopf mit nem TPersistent Parameter bauen, Das wäre ja ich nach den Regeln der OOP das Vernünftigste. Danke, für euere schnelle Hilfe trotz der dummen Frage. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 13:40 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz