2

Embarcadero Delphi XE2 を使用しています

fastreport を作成して (それほど重要ではありません)、TStringStream に保存しています。

次に、テストのために、その TStringStream をファイルに出力すると、PDF が正常に保存され、正常に開きます。重さは約40KB(それ以下)

次に行う必要があるのは、INSERT を使用してこの PDF (TStringStream) を SQL データベースに書き込むことです。これを変更するために行う唯一のことは、" 引用符内にあるため、すべての " を "" に置き換えることです。そうしないと、SQL が機能しません。

奇妙なことに、データベースからファイルをロードするとき、または添付ファイルが以前に保存された PDF データである長さ (添付ファイル) を選択するときです。私がそれを行うと、サイズは 50KB を超え (一部の PDF では約 70KB)、PDF は完全に空白になります。

このプロジェクトでは、いくつかの setParams を許可しない単純な mysql ユニットを使用するか、Google で検索した Blob オブジェクトを介して保存することを余儀なくされています。したがって、この簡単な方法に関する回答が必要です。TStringStream を SQL データベースに挿入します。

データベース フィールドのタイプは MEDIUMBLOB です

前もって感謝します!

ジャック

4

3 に答える 3

3

データベースに blob フィールドを定義すると、DataSet コンポーネントのCreateBlobStream()メソッドをTStream使用して、必要に応じて blob フィールドの読み取りと書き込みに使用できるオブジェクトを取得できます。

TMemoryStreamコードの残りの部分での使用方法によっては、完全に削除できる場合もあります。たとえばTMemoryStream、データベースに保存するためだけに PDF を一時的に保存する場合はTMemoryStream、 を削除して、FastReport が返す を介して PDF を blob フィールドに直接保存するTStreamことができCreateBlobStream()ます。

于 2012-12-13T08:18:24.823 に答える
2

これは、使用しているデータ型によって異なります。tvdien が述べたように、まだお持ちでない場合は、ストレージの BLOB フィールドを確認してください。BLOB フィールドを使用すると、データベースへの読み込みとメモリ ストリームへの保存が簡単になります。データベースにロードするには、次のようにします。

TBlobField(MyQuery.FieldByName('MyName')).LoadFromStream(MyMemoryStream)

データベースからメモリ ストリームへのコピーはSaveToStream、TBlobField クラスの を使用します。

于 2012-12-12T18:56:00.130 に答える
0

問題は次の方法で解決されました。

  1. frxPDFExport によるエクスポート、

  2. そのストリームを TMemoryStream にオーバーライドし、

  3. TMemoryStream を 16 進文字列に変換する

  4. '0x'+converted_hex_stringとしてSQLに挿入します

とにかく助けてくれてありがとう、この答えが同様の問題に役立つことを願っています

重要: PDF の一部の奇妙な ASCII 文字のため、TMemoryStream でなければならなかったため、TStringStream にエクスポートしてから 16 進数に変換すると、破損していました。

ネットで調べると、バイト配列(TMemoryStream)を16進文字列に変換する関数があります。

ジャック。

于 2012-12-17T22:11:57.657 に答える