Delphi-PRAXiS
Seite 1 von 3  1 23      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi Fastreport Objekt in abhängikeit von DB Feld (https://www.delphipraxis.net/133704-fastreport-objekt-abhaengikeit-von-db-feld.html)

manfred_h 7. Mai 2009 08:23

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:
procedure PLACEMENTOnBeforePrint(Sender: TfrxComponent);
begin
  if <default.FieldByName('PLACEMENT')> is not NULL then
  begin
    PLACEMENT.Visible
  end              
end;
Es erschein immer die Fehlermeldung:
Could not convert variant of type (Null) into type (Integer
Unknown variable or Datafield: default.FieldByName('PLACEMENT')

Habt Ihr einen Tipp?

Manfred

mkinzler 7. Mai 2009 08:29

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.

manfred_h 7. Mai 2009 08:36

Re: Fastreport Objekt in abhängikeit von DB Feld
 
Hallo mkinzler

Danke für Deine schnelle Antwort.

Shalom
Manfred

Hansa 7. Mai 2009 08:59

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.

mkinzler 7. Mai 2009 09:05

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

hanspeter 7. Mai 2009 09:40

Re: Fastreport Objekt in abhängikeit von DB Feld
 
Zitat:

Zitat von manfred_h
Es erschein immer die Fehlermeldung:
Could not convert variant of type (Null) into type (Integer
Unknown variable or Datafield: default.FieldByName('PLACEMENT')

Habt Ihr einen Tipp?

Manfred


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

manfred_h 7. Mai 2009 10:53

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:
SELECT
    ID,ACCEPTANCE,STATUS,NOTE,NC,CS,OPT,
    L_UPDATE,STAT_UPDATE,STAT_DEL,'' SCHOOLJ,'' PERSONS
FROM HOTEL
aber die Variante mit Dataset.FieldExist währe das angemehmste. Habe es aber noch nicht hinbekommen.

@Peter: Danke für Deine Hinweise.

Shalom
Manfred

manfred_h 8. Mai 2009 16:17

Re: Fastreport Objekt in abhängikeit von DB Feld
 
Hallo nochmals

habe noch einen Tipp aus der Fastreport Newsgroup bekommen.
Delphi-Quellcode:
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;
Was mir nicht ganz klar ist, wie kann ich hier das Objekt 'PERSONS' ein/ausschalten.
Der Punkt
Delphi-Quellcode:
>> somevar := ds.Value[list[i]]; // get field value by its name
ist das was mir nicht klar ist. Ich muss ja noch definieren welches Feld er suchen soll. :coder2:

Ein kleiner Tipp?
Manfred

mkinzler 8. Mai 2009 17:21

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

manfred_h 11. Mai 2009 16:09

Re: Fastreport Objekt in abhängikeit von DB Feld
 
Hallo nochmals

bin ein wenig weiter..

Delphi-Quellcode:
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;
if ['db_list'] ist in Klamern da dies anscheinend Notwenig ist.
Zitat:

Make sure when passing the variable a value if it is a string variable to
use extra apostrophe's ['myvariable'] = ''''+string+''''
or it will be an expression and trigger the ogv event.
Erhalte aber immer noch eine Fehlermeldung:
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 14:49 Uhr.
Seite 1 von 3  1 23      

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