![]() |
Datenbank: Firebird • Version: 2.1 • Zugriff über: Fibplus 6.50
Fastreport Objekt in abhängikeit von DB Feld
Hallo zusammen
in einer Anwendung verwede ich einen Report für mehrere Ausdruckvarianten mit wechselnden Feldern in den Datasets. Dies geht auch einwandfrei. Nun sind aber in einigen Datasets Felder die in anderen nicht vorhanden sind. Bis jetzt habe ich das versucht ( und ähnliches ): ( Fastreport Script )
Delphi-Quellcode:
Es erschein immer die Fehlermeldung:
procedure PLACEMENTOnBeforePrint(Sender: TfrxComponent);
begin if <default.FieldByName('PLACEMENT')> is not NULL then begin PLACEMENT.Visible end end; Could not convert variant of type (Null) into type (Integer Unknown variable or Datafield: default.FieldByName('PLACEMENT') Habt Ihr einen Tipp? Manfred |
Re: Fastreport Objekt in abhängikeit von DB Feld
Sorge einfach dafür, dass in allen Datasets die selben Felder sind. Ich weiss nicht, ob man in FastScript auf die Existenz von Feldern prüfen kann; deine Abfrage fragt ja nur ab, ob der wert des Feldes NULL ist, existiert das Feld nicht kommt die gennate Fehlermeldung.
|
Re: Fastreport Objekt in abhängikeit von DB Feld
Hallo mkinzler
Danke für Deine schnelle Antwort. Shalom Manfred |
Re: Fastreport Objekt in abhängikeit von DB Feld
Nun ja, per Holzhammer dafür sorgen, dass überflüssige Felder in der DB sind das geht wohl auch. :zwinker: Ich würde allerdings eher Dataset.FieldExist auswerten.
|
Re: Fastreport Objekt in abhängikeit von DB Feld
Es handelt sich hier aber nicht um Delphi, sondern die Pascalvariante von Fastcript. Wenn dort diese Methode existiert, dann sollte man diese natürlich verwenden
|
Re: Fastreport Objekt in abhängikeit von DB Feld
Zitat:
Das Problem tritt an einigen Stellen auf. Zum Beispiel auch, wenn in einem Vergleich eine leere Zeichenkette vorhanden ist. Ich habe den Eindruck, das es sich hier um einen Bug im Fastreport handelt. Der Scriptinterpreter versucht für den Vergleich in einen Integer Wert zu wandeln. Ist das nicht möglich, dann kommt dieser Fehler. Die Exception tritt in Fastsript auch auf wenn ich z.B. eine Spalte summiere und es hier eine Leerzeile gibt. Ich habe mir damals geholfen, indem ich im Quellcode des Scriptinterpreters die Konvertierung gepatcht habe. ( if isNull or length(Val)=0 then result := 0; Gruß Peter |
Re: Fastreport Objekt in abhängikeit von DB Feld
@Hansa: Danke für Deinen Hinweis. Die DB muss ja nicht unbeding gefüllt werden es reicht ja wenn man es so löst:
SQL-Code:
aber die Variante mit Dataset.FieldExist währe das angemehmste. Habe es aber noch nicht hinbekommen.
SELECT
ID,ACCEPTANCE,STATUS,NOTE,NC,CS,OPT, L_UPDATE,STAT_UPDATE,STAT_DEL,'' SCHOOLJ,'' PERSONS FROM HOTEL @Peter: Danke für Deine Hinweise. Shalom Manfred |
Re: Fastreport Objekt in abhängikeit von DB Feld
Hallo nochmals
habe noch einen Tipp aus der Fastreport Newsgroup bekommen.
Delphi-Quellcode:
Was mir nicht ganz klar ist, wie kann ich hier das Objekt 'PERSONS' ein/ausschalten.
procedure DefaultPERSONSOnBeforePrint(Sender: TfrxComponent);
var i: Integer; ds: TfrxDataSet; list: TStringList; begin ds := Report.GetDataset('default');// username of ds list := TStringList.Create; ds.GetFieldList(list); for i := 0 to list.Count - 1 do somevar := ds.Value[list[i]]; // get field value by its name end; Der Punkt
Delphi-Quellcode:
ist das was mir nicht klar ist. Ich muss ja noch definieren welches Feld er suchen soll. :coder2:
>> somevar := ds.Value[list[i]]; // get field value by its name
Ein kleiner Tipp? Manfred |
Re: Fastreport Objekt in abhängikeit von DB Feld
Es wird dir eine Liste mit allen Felder geliefert. Jetzt musst du überprüfen, ob dein Feld dabei ist
|
Re: Fastreport Objekt in abhängikeit von DB Feld
Hallo nochmals
bin ein wenig weiter..
Delphi-Quellcode:
if ['db_list'] ist in Klamern da dies anscheinend Notwenig ist.
procedure DefaultPERSONSOnBeforePrint(Sender: TfrxComponent);
var i: Integer; ds: TfrxDataSet; list: TStringList; db_list: String; begin ds := Report.GetDataset('default');// username of ds list := TStringList.Create; ds.GetFieldList(list); for i := 0 to list.Count - 1 do begin db_list := ds.Value[list[i]]; // get field value by its name if ['db_list'] = 'PERSONS' then DefaultPERSONS.Visible := true; ds.Next; end; end; Zitat:
Invalid Variant Operation PS: Bei dem Wert PERSONS geht es nicht um den Inhalt der Spalte sondern um den Splatennamen. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 19:01 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 by Thomas Breitkreuz