Top-Themen

Aktuelle Themen (A bis Z)

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit

Delphi 7 - TMemoryStream ändert Inhalt beim Speichern

Mitglied: mexx

mexx (Level 2) - Jetzt verbinden

13.04.2007, aktualisiert 16.04.2007, 8590 Aufrufe, 7 Kommentare

Ich verwende die FastReport-Komponenten und speichere einen Report wie folgt in einen Blob-Feld einer FireBird-Datenbank.

[code]
...
var MemStream: TStream;
begin
...
MemStream := TMemoryStream.Create;
MemStream.Position := 0;
FastReport.Report.SaveToStream(MemStream);

QueryInsertReport.ParamByName('FastReport').LoadFromStream(MemStream,ftBlob);
...
end;
[/code]

Die Verfahrensweise habe ich von einer Anleitung für den FastReport. Mit einer ShowMessage auf das Value des Parameters von 'QueryInsertReport.ParamByName('FastReport')' sehe ich, dass Einträge im Report wie ü,ä und ö verändert wurden. Die Umlaute sind nun ##. Speichere ich den Report als Datei passiert das nicht. Speicher ich andere Daten mit Umlauten in der Datenbank, verändern sich die Daten auch nicht.

Es muss also irgendwas beim 'SaveToStream(MemStream)' oder beim 'ParamByName('FastReport').LoadFromStream(MemStream,ftBlob)' mit dem Stream passieren. Aber wie finde ich das raus und welche Möglichkeiten habe ich, das Speichern des Reports als Blob in der Datanbank anders zu machen?

mexx
Mitglied: stoffel17und4
16.04.2007 um 10:03 Uhr
Wäre es evtl. denkbar, dass du in der Datenbank dein BLOB-Feld "unsachgemäss" definiert hast? Z.B. mit einer unpassenden Zeichencodierung? Meine Firebird-BLOBs sind als BLOB SUB_TYPE 0 SEGMENT SIZE 4096 CHARACTER SET NONE definiert, d.h. eine Default-Kodierung der DB wird ignoriert.
Bitte warten ..
Mitglied: mexx
16.04.2007 um 10:23 Uhr
Bei mir sind sie bewusst als Typ 1 definiert, um in Datanbankeditioren mal in das Blobfeld sehen zu können. Was sagt das CHARACTER SET NONE genau aus? den Zeichensatz.
Bitte warten ..
Mitglied: stoffel17und4
16.04.2007 um 10:55 Uhr
Bei mir sind sie bewusst als Typ 1 definiert,
um in Datanbankeditioren mal in das Blobfeld
sehen zu können. Was sagt das CHARACTER
SET NONE genau aus? den Zeichensatz.

Jepp.
NONE heisst: keine Kodierung, also auch insbesondere nicht die Defaultkodierung der Datenbank.
Ich bin mir im Moment nicht sicher, ob nicht gerade bei SUB_TYPE 1 (TEXT) die Zeichencodierung greift.
Wenn also bspw. deine Datenbank mit DEFAULT CHARSET UTF8 gebaut wäre, würde eine Zeichencodierung für Umlaute greifen - also für B(inary)LOBs nehme ich daher immer Typ 0 mit CHARSET NONE.
Nenn mich paranoid, aber es funktioniert

Link zum Thema SUB_TYPE und BLOBs:
http://www.ibphoenix.com/main.nfs?a=ibphoenix&page=ibp_blobs
Bitte warten ..
Mitglied: mexx
16.04.2007 um 11:04 Uhr
Mit anderen Blobfeldern in der Datenbank geht es aber. Der Fehler versteckt sich in der Übergabe des Reports an den Stream und vom Stream als Parameter.
Bitte warten ..
Mitglied: stoffel17und4
16.04.2007 um 11:28 Uhr
Mit anderen Blobfeldern in der Datenbank geht
es aber. Der Fehler versteckt sich in der
Übergabe des Reports an den Stream und
vom Stream als Parameter.

Das glaub ich so nicht.
TMemoryStream verändert keine Daten, sondern ist nur ein Wrapper um einen Memory-Block.
Ich kann mir auch nicht vorstellen, dass ein SaveToStream oder ein LoadFromStream Daten verändert, DAS wäre eine echte Katastrophe

QueryInsertRecord ist welche Komponente?

Ansonsten ist alles so wie ich's auch mache ... und bei mir funktionierts (mit SUB_TYPE 0 und CHARSET NONE).

Im übrigen solltest du nicht wirklich auf die Ausgabe von ShowMessage setzen. Dabei könnte ich mir durchaus vorstellen, dass was schiefgeht (Windows ist auch da ziemlich schrottig). Die Daten die du mit LoadFromStream dem Parameter zuweist werden 1:1 in den internen Puffer kopiert. Da wird nix übersetzt.
Kommen denn deine Daten richtig in der DB an oder glaubst du nur (wg. SHowMessage) das sie falsch sind?
Bitte warten ..
Mitglied: mexx
16.04.2007 um 11:34 Uhr
Bei QueryInsertReport handelt es sich um eine TQuery.

Die Daten kommen ja schon falsch in der DB an. Dort sind die Umlaute keine Umlaute mehr. Da ich aber andere Felder mit Umlauten belegen kann und auch andere Blobfelder selben Typs, und diese Umlaute auch Umlaute bleiben, suche ich den Fehler nicht in der DB. Da ich den Report auch als Datei abspeichern kann und dort der Umlaut auch richtig ist, glaube ich nicht, dass es am Report selbst liegt. Es bleibt nur noch der Transfer vom Report zum BlobStream und vom BlobStream zum Parameter der Query.
Bitte warten ..
Mitglied: stoffel17und4
16.04.2007 um 12:13 Uhr
Bei QueryInsertReport handelt es sich um eine
TQuery.

Also BDE (?)

Die Daten kommen ja schon falsch in der DB
an. Dort sind die Umlaute keine Umlaute mehr.
Da ich aber andere Felder mit Umlauten
belegen kann und auch andere Blobfelder
selben Typs, und diese Umlaute auch Umlaute
bleiben, suche ich den Fehler nicht in der
DB. Da ich den Report auch als Datei
abspeichern kann und dort der Umlaut auch
richtig ist, glaube ich nicht, dass es am
Report selbst liegt. Es bleibt nur noch der
Transfer vom Report zum BlobStream und vom
BlobStream zum Parameter der Query.

Hm. So langsam verstehe ich was du meinst

Die beiden Stellen die du meinst sind definitiv nicht an irgendeiner "Datenänderung" beteiligt, sondern schieben nur Bits hin und her

Du könntest ja mal die Daten des MemoryStreams (die ja richtig waren) in einen FileStream schreiben (als Referenz) und dann den Parameter mit einem LoadFromFile füllen (macht intern ein LoadFromStream).
Anschließend würde ich den BLOB aus der Datenbank mit einer kleinen Testanwendung auslesen und mit SaveToFile in eine Datei speichern ... Wenn sie identisch sind hast du ein Problem mit deinem DB-Werkzeug das Mist anzeigt. Sind sie nicht identisch könntest du nochmal die CHARSET-Geschichte prüfen.
Und ansonsten - keine Idee, sorry.
Bitte warten ..
Ähnliche Inhalte
Microsoft Office

VBA Zellen markieren bis Inhalt sich ändert

gelöst Frage von charlybyMicrosoft Office3 Kommentare

stelle mich mal wieder blöd an. Das Problem: es besteht eine Tabelle mit Nummern in der Spalte 1. Die ...

Pascal und Delphi

Konvertierung Delphi 7 Anwendung zu Visual C Sharp

Frage von icegetPascal und Delphi2 Kommentare

Hallo liebe Community, habe folgendes Problem: Ich muss eine Anwendung (Delphi 7) weiterentwickeln. Leider kann ich nur Visual C# ...

Datenbanken

Wie kann ich eine Delphi-EXE-Datei öffnen?

gelöst Frage von imebroDatenbanken11 Kommentare

Hallo, wir nutzen ein Programm, welches in Delphi programmiert ist. Das Programm ist bereits 17 Jahre alt und wurde ...

Microsoft Office

Access 2010 - Inhalt eines RTF-Textfeldes als Datei speichern

gelöst Frage von AndyAhMicrosoft Office2 Kommentare

Hi NG, ich möchte den formatierten Inhalt eines als RTF formatierten Textfeldes in eine Datei speichern, um diese weiter ...

Neue Wissensbeiträge
Windows 10
Zero-Day-Lücke in Microsoft Edge
Information von kgborn vor 1 TagWindows 10

In Microsofts Edge-Browser klafft wohl eine nicht geschlossene (0-Day) Sicherheitslücke im Just In Time Compiler (JIT Compiler) für Javascript. ...

Sicherheit
Microsoft und Skype: Sicherheit
Information von kgborn vor 1 TagSicherheit

Die Tage gab es ja einige Berichte zur Sicherheit des Skype-Updaters. Der Updater von Skype läuft unter dem Konto ...

Datenschutz

Behörden ignorieren Sicherheitsbedenken gegenüber Windows 10

Information von Penny.Cilin vor 2 TagenDatenschutz8 Kommentare

Hallo, passend zum Thema Ablösung LIMUX in München ein Beitrag bei Heise (siehe Link folgend). Behörden ignorieren Sicherheitsbedenken gegenüber ...

Sicherheit
Information Security Hub Munich airport
Information von brammer vor 2 TagenSicherheit

Hallo, Neues Center für Cyber Kriminalität am Münchener Flughafen brammer

Heiß diskutierte Inhalte
DSL, VDSL
Mindestgeschwindigkeiten DSL Telekom
Frage von justlukasDSL, VDSL13 Kommentare

Hallo zusammen, Seit diesem Jahr habe ich Verständnisprobleme mit dem Verhalten der Telekom. Wir haben seit einem Jahr VDSL ...

Switche und Hubs
LANCOM-Switch: Probleme (no link) mit SFP-Modulen?
Frage von THETOBSwitche und Hubs10 Kommentare

Hi zusammen, ich habe folgendes Problem: Und zwar habe ich an einem Standort drei Switche verbaut - LANCOM GS-2326P+, ...

Firewall
RB2011 Firewall Rule eine bestimmte Mac oder IP Adresse nicht zu blockieren
Frage von lightmanFirewall10 Kommentare

Hallo liebes Forum mit ihren Spezialisten. Ich habe meine Firewall so konfiguriert das kein Endgerät ohne meine Speziellen Erlaubnis ...

Humor (lol)
Was könnte man mit einem Server machen? Idee gesucht
Frage von 2SeitenHumor (lol)8 Kommentare

Hey Zusammen Ich habe einen alten HP G2 Rackserver zu Hause rumliegen. 28GB Ram, 1xAMD Prozi mit etwa 2GHz. ...