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

Frage Entwicklung

Mitglied: mexx

mexx (Level 2) - Jetzt verbinden

13.04.2007, aktualisiert 16.04.2007, 8568 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

Windows 10 Fall Creators Update - Neue Funktion Hyper-V Standardswitch kann ggf. Fehler bei Proxy Configs verursachen

Erfahrungsbericht von rzlbrnft vor 5 StundenWindows 101 Kommentar

Hallo Kollegen, Da wir die Gefahr lieben, haben wir bei einigen Usern nun mittlerweile das Creators Update drauf. Einige ...

Sicherheit

TLS-Zertifikat und privater Schlüssel von Microsofts Dynamics 365 geleakt

Information von Penny.Cilin vor 6 StundenSicherheit

Microsoft hat versehentlich das TLS-Zertifikat inklusive dem privaten Schlüssel seiner Business-Anwendung Dynamics 365 geleakt. TLS-Zertifikat und privater Schlüssel von ...

Viren und Trojaner

Deaktivierter Keylogger in HP Notebooks entdeckt

Information von bitcoin vor 1 TagViren und Trojaner2 Kommentare

Ein Grund mehr warum man Vorinstallationen der Hersteller immer blank bügeln sollte Der deaktivierte Keylogger findet sich im vorinstallierten ...

Router & Routing

Lets Encrypt kommt auf die FritzBox

Information von bitcoin vor 1 TagRouter & Routing

In der neuesten Labor-Version der FB7490 integriert AVM unter anderem einen Let's Encrypt Client für Zugriffe auf das Webinterface ...

Heiß diskutierte Inhalte
Netzwerkmanagement
Firefox Profieles im Roaming
gelöst Frage von Hendrik2586Netzwerkmanagement17 Kommentare

Hallo liebe Leute. :) Ich hab da ein kleines Problem, welches anscheinend nicht unbekannt ist. Wir nutzen hier in ...

LAN, WAN, Wireless
Brainstorming, einfachste Option 1 getrenntes LAN (mit WAN zugang)
Frage von 132954LAN, WAN, Wireless13 Kommentare

Hi, folgendes: Wir bekommen eine Glasfaser Leitung, Und das sollte Optional so aussehen: Ein Modem/Router für das WAN, ein ...

Batch & Shell
Trusted Sites für alle User auf dem PC einpflegen
Frage von xXTaKuZaXxBatch & Shell12 Kommentare

Aufgabestellung: Es sollen auf 1 PC (bzw. mehreren PCs) vertrauenswürdige Sites per Powershell eingetragen werden, die für alle User ...

Netzwerkgrundlagen
Hi eine blöde frage. xD
Frage von 132954Netzwerkgrundlagen12 Kommentare

Also: Habe 2012 r2 essentials neuinstalliert, allerdings installiert diese version ja gleich diesen gangen AD kram mit, den hab ...