AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

is Operator macht kommische Dinge

Ein Thema von QuickAndDirty · begonnen am 16. Mai 2007 · letzter Beitrag vom 16. Mai 2007
Antwort Antwort
QuickAndDirty

Registriert seit: 13. Jan 2004
Ort: Hamm(Westf)
1.944 Beiträge
 
Delphi 12 Athens
 
#1

is Operator macht kommische Dinge

  Alt 16. Mai 2007, 09:23
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:
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;
Die aufrufende Prozedur der Prozedur mit dem Problem
Delphi-Quellcode:
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;
Hier der betroffene Code.
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;
Andreas
Monads? Wtf are Monads?
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer

Registriert seit: 13. Aug 2002
17.201 Beiträge
 
Delphi 10.4 Sydney
 
#2

Re: is Operator macht kommische Dinge

  Alt 16. Mai 2007, 09:28
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.
Windows Vista - Eine neue Erfahrung in Fehlern.
  Mit Zitat antworten Zitat
QuickAndDirty

Registriert seit: 13. Jan 2004
Ort: Hamm(Westf)
1.944 Beiträge
 
Delphi 12 Athens
 
#3

Re: is Operator macht kommische Dinge

  Alt 16. Mai 2007, 09:31
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;
Andreas
Monads? Wtf are Monads?
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer

Registriert seit: 13. Aug 2002
17.201 Beiträge
 
Delphi 10.4 Sydney
 
#4

Re: is Operator macht kommische Dinge

  Alt 16. Mai 2007, 09:40
Ja.

Aber vergiss nicht das die Anweisung "Source as TStrings" eine Exception auslößt wenn Source nicht vom Typ (oder Subtyp) TStrings ist.
Windows Vista - Eine neue Erfahrung in Fehlern.
  Mit Zitat antworten Zitat
Muetze1
(Gast)

n/a Beiträge
 
#5

Re: is Operator macht kommische Dinge

  Alt 16. Mai 2007, 09:41
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...
  Mit Zitat antworten Zitat
QuickAndDirty

Registriert seit: 13. Jan 2004
Ort: Hamm(Westf)
1.944 Beiträge
 
Delphi 12 Athens
 
#6

Re: is Operator macht kommische Dinge

  Alt 16. Mai 2007, 09:45
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.
Andreas
Monads? Wtf are Monads?
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 14:02 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz