Autor |
Beitrag |
mexx
      
Beiträge: 1183
|
Verfasst: Mi 24.01.07 12:23
Hallo,
ich möchte einen Report als Stream in ein Blob-Feld speichern. Dafür gibt es ja die Procedure SaveToStream. Leider weis ich nicht, wie ich sie anwenden kann, dass das Blob gespeichert wird und wie ich dem Speichern noch andere Parameter mitgebe, wie zum Beispiel die Primär-Schlüssel der Tabelle.
Hier mal meine Anfänge.
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10:
| function TFastRepotModul.MainDesignerSaveReport(Report: TfrxReport; SaveAs: Boolean): Boolean; var BlobStream: TSTream; begin BlobStream := TMemoryStream.Create; MainFstRpt.SaveToStream(BlobStream,false,false);
BlobStream.Free; end; |
Schreibt einfach auf, was euch einfällt oder Links, wo ich mir was anlesen kann.
Thx, mexx
_________________ Das Unsympathische an den Computern ist, dass sie nur ja oder nein sagen können, aber nicht vielleicht.
|
|
UGrohne
      

Beiträge: 5502
Erhaltene Danke: 220
Windows 8 , Server 2012
D7 Pro, VS.NET 2012 (C#)
|
Verfasst: Mi 24.01.07 16:28
Mit welchen Komponenten arbeitest Du? IBX? ZEOS?
Du kannst das beispielsweise über Parameter bei einem Query-Objekt erledigen. Im Moment habe ich aber keinen Beispiel-Code da. Nur dieses Tutorial. Aber vielleicht hilft Dir das schon einmal.
|
|
mexx 
      
Beiträge: 1183
|
Verfasst: Mi 24.01.07 16:32
Ich verwende Delphi7, FastReport4.0 und InfoPower Komponenten(Database, Query,...). Ein Wechsel der Kompontenten kommt ist nicht möglich. Ich werde mir die Source mal vornehmen. Vielen Dank! Was andere nicht davon abhalten sollte, Ihr Wissen preis zu geben.
_________________ Das Unsympathische an den Computern ist, dass sie nur ja oder nein sagen können, aber nicht vielleicht.
|
|
hansa
      
Beiträge: 3079
Erhaltene Danke: 9
|
Verfasst: Mi 24.01.07 17:35
Guck mal hier : www.delphi-tutorials.de Das ist Lemmy's Seite. Da ist ein Tutorial vorhanden : "Blobs in IB/FB" oder so ähnlich. Les dir das mal durch.
_________________ Gruß
Hansa
|
|
mexx 
      
Beiträge: 1183
|
Verfasst: Mo 29.01.07 12:54
Die Links haben mir nicht geholfen. Das Tutorial kann man kaum als ein solches Bezeichnen! 2 Seiten und mehr Geschichte als erklärter Quellcode. Meine Frage bleibt also noch offen. Wie Speicher und Lade ich Blobs?
_________________ Das Unsympathische an den Computern ist, dass sie nur ja oder nein sagen können, aber nicht vielleicht.
|
|
mkinzler
      
Beiträge: 4106
Erhaltene Danke: 13
Delphi 2010 Pro; Delphi.Prism 2011 pro
|
Verfasst: Mo 29.01.07 13:17
Schau dir mal die TBlobStream-Klasse an.
_________________ Markus Kinzler.
|
|
UGrohne
      

Beiträge: 5502
Erhaltene Danke: 220
Windows 8 , Server 2012
D7 Pro, VS.NET 2012 (C#)
|
Verfasst: Mo 29.01.07 13:20
Ich habe mal nach den InfoPower-Komponenten gesucht. Seltsamerweise finde ich dort keine Datenbankzugriffskomponenten. Bist Du sicher, dass dort welche dabei sind? Und wenn nicht, welche Komponenten verwendest Du für den Zugriff auf Firebird? BDE? ZEOS? IBX?
|
|
mexx 
      
Beiträge: 1183
|
Verfasst: Mo 29.01.07 13:32
Also die Komponenten sind von Wall2Wall, wo auch die FirstClass-Komponenten her kommen. Die Verbindung erfolgt über TDatabase mit Session. Normale TDatasource. Nur die Query ist eine TwwQuery. Sie ist nicht besonders anders als die normale TQuery, sie besitzt nur mehr funktionen. Mir geht es primär um das Laden und Speichern von Blobs in die Firebird.
Die FastReport-Komponenten kennt wohl keiner? Mein Ziel ist es FastReports zu speichern, mal als Template mal als Child. Und auch wieder zu laden.
Moderiert von UGrohne: Beiträge zusammengefasst.
_________________ Das Unsympathische an den Computern ist, dass sie nur ja oder nein sagen können, aber nicht vielleicht.
|
|
UGrohne
      

Beiträge: 5502
Erhaltene Danke: 220
Windows 8 , Server 2012
D7 Pro, VS.NET 2012 (C#)
|
Verfasst: Mo 29.01.07 14:04
Wenn Du sagst, Du verwendest TDatabase und TQuery, dann frage ich mich, warum Dir beide Tutorials nichts gebracht haben, denn genau diese Vorgehen sollten dort auch funktionieren. Was hast Du denn geschrieben, was nicht funktioniert hat? Und worin äußerte es sich, dass es nicht funktioniert hat?
FastReport kennen sicher ein paar hier, aber die haben damit ja überhaupt nichts zu tun. Genauso wie InfoPower.
|
|
mexx 
      
Beiträge: 1183
|
Verfasst: Mo 29.01.07 14:14
Ich befürchte fast, wir reden an einander vorbei.
Ich habe eine Firebird-Tabelle, mit einen Feld "ID","Bezeichnung","Blob". In das Blob möchte ich nun meinen Report speichern und laden. Aber wie, wenn ich einen bestimmte ID haben möchte?
Um es noch genauer zu machen. Ich möchte nun diesen Report als Template speichern. Da ich aber weder weis, wie ich ÜBERHAUPT ein Blob speicher, noch wie ich ein Template als Blob speicher und lade, weis ich nicht wo ich anfangen soll.
Ich habe NULL ahnung vom umgang mit Blob. Überall wird zwar erklärt wie es geht, aber zum einem immer nur anhand einer Datei, wo das Kriterium einer Tabellen-ID nicht erklärt wird, oder es wird nur gezeigt, wie ich einen Stream erzeuge, aber nicht abspeicher. Die Hilfe für die FastReport ist sehr mangelhaft.
_________________ Das Unsympathische an den Computern ist, dass sie nur ja oder nein sagen können, aber nicht vielleicht.
|
|
UGrohne
      

Beiträge: 5502
Erhaltene Danke: 220
Windows 8 , Server 2012
D7 Pro, VS.NET 2012 (C#)
|
Verfasst: Mo 29.01.07 14:21
Wie bereits gesagt, FastReport hat damit AFAIK nichts zu tun. Das Einzige, was Du brauchst ist Quelltext, wie man eine Datei in ein Blob-Feld speichert und wieder daraus lädt. Oder irre ich mich da?
Wenn nicht, dann sollten Dir die beiden genannten Quellen eigentlich reichen. Was meinst Du aber mit der bestimmte ID? Die musst Du doch nur setzen, wenn Du die brauchst. Normalerweise arbeitet man für die IDs mit Generatoren. Oder willst Du eine Baumstruktur abbilden? Dann brauchst Du ein weiteres Feld, das die ID des Parents enthält.
Irgendwie blick ich langsam nicht mehr, was Du eigentlich genau machen willst, für Deine eigentliche Frage sollte inzwischen genug hier stehen.
|
|
mexx 
      
Beiträge: 1183
|
Verfasst: Mo 29.01.07 14:24
Mir ist schon klar, dass ich die ID generieren lassen kann. Aber wie speicher ich den Stream zum Beispiel bei der ID 4 ab? Einen Stream zu erzeugen ist kein Problem und Ihn zu speichern, aber wie mache ich das bei der ID 4?
_________________ Das Unsympathische an den Computern ist, dass sie nur ja oder nein sagen können, aber nicht vielleicht.
|
|
mkinzler
      
Beiträge: 4106
Erhaltene Danke: 13
Delphi 2010 Pro; Delphi.Prism 2011 pro
|
Verfasst: Mo 29.01.07 14:28
Hast du die Tabelle um ein Blob-feld erweitert?
_________________ Markus Kinzler.
|
|
mexx 
      
Beiträge: 1183
|
Verfasst: Mo 29.01.07 14:29
Ja
_________________ Das Unsympathische an den Computern ist, dass sie nur ja oder nein sagen können, aber nicht vielleicht.
|
|
mkinzler
      
Beiträge: 4106
Erhaltene Danke: 13
Delphi 2010 Pro; Delphi.Prism 2011 pro
|
Verfasst: Mo 29.01.07 14:31
Dann verstehe ich deine Frage nicht ganz.
_________________ Markus Kinzler.
|
|
mexx 
      
Beiträge: 1183
|
Verfasst: Mo 29.01.07 14:35
Ich habe einen Report. Man könnte diesen Report als Datei abspeichern. Statt Ihn aber als Datei abzuspeichern, möchte ich den Report, in eine Firebird-Datenbank speichern. In eine dafür vorgesehene Tabelle mit einem Primärschlüssel. Bei den Report handelt es sich um einen mit FastReport 4.0 erstellten Report. Die einzige Information, welche ich über das Speichern von solchen Reports in Datenbanken habe, ist die mangelnde Hilfe der FastReport-Komponeten, welche mir lediglich sagt, dass es geht, aber leider nicht wie.
Wie speicher ich einen Report in einer Datenbank?
Edit:
Delphi-Quelltext 1: 2: 3: 4: 5:
| Blobstream := TStream.Create; BlobStream.Position := 0; MainFstRpt.SaveToStream(BlobStream); BlobStream.Free; |
Bei der MainFstRpt handelt es sich um die Non-VCL von FastReport. Nun habe ich den erstellten Report als Stream und möcte diesen nun in der Tabelle abspeichern. Aber unter einen Bestimmten schlüssel der Tabelle, welchen ich auch kenne. Sagen wir mal 4! Wie speicher ich nun diesen Stream in die Tabelle?
_________________ Das Unsympathische an den Computern ist, dass sie nur ja oder nein sagen können, aber nicht vielleicht.
|
|
mkinzler
      
Beiträge: 4106
Erhaltene Danke: 13
Delphi 2010 Pro; Delphi.Prism 2011 pro
|
Verfasst: Mo 29.01.07 14:41
|
|
UGrohne
      

Beiträge: 5502
Erhaltene Danke: 220
Windows 8 , Server 2012
D7 Pro, VS.NET 2012 (C#)
|
Verfasst: Mo 29.01.07 15:13
Nimm doch einfach den Quellcode aus meinem ersten Link, lass das INSERT weg und mach den Select auf den Datensatz mit der ID. Wir können Dir hier keinen Quellcode für Copy & Paste geben, Du musst schon selbst auch etwas machen.
|
|
mexx 
      
Beiträge: 1183
|
Verfasst: Mo 29.01.07 15:24
Das will ich ja auch nicht. Hilfe zur Selbsthilfe bringt viel mehr. Der einfache Satz "Mexx, behandel ein Blob wie ein Value eines Insert bzw. eines Updates." hätte meine Fragen beantwortet. Dann hätte ich gewusst, dass ich den Stream zu zuweisen muss und über eine einfach SQL abschicke. Es ist erschreckend, aber so einfach die Lösung ist, sie steht nirgenswo geschrieben.
Aber ein Hauptproblem bleibt bestehen. Reports als Template in Blob speichern. Du hast von Usern gesprochen, die mit FastReport arbeiten. Kannst Du mir Ihren Namen nenne. Ein paar theretische Fragen würde ich klären wollen.
_________________ Das Unsympathische an den Computern ist, dass sie nur ja oder nein sagen können, aber nicht vielleicht.
|
|
UGrohne
      

Beiträge: 5502
Erhaltene Danke: 220
Windows 8 , Server 2012
D7 Pro, VS.NET 2012 (C#)
|
Verfasst: Mo 29.01.07 15:55
Im Moment kenne ich keine Namen, tut mir leid. Aber ich verstehe nicht, wie Du mit Hilfe meines Links nicht auf genau das Ergebnis kommen konntest, denn schließlich hab ich dort auch einen Datensatz selektiert und dann ein Blob eingefügt. Deswegen hab ich einfach nicht verstanden, worauf Du hinaus willst.
|
|