0

しばらくの間、これに苦労していました。画像タイプのデータを持つ古いテーブル (SQL Server) があります。テキストを取得したい。

これまでのところ、これは私がやったことです。

  • 変換またはキャストを試みます (許可されていません)
  • SP を呼び出して、データを Delphi に持ち込もうとします (バリアントにデータを割り当てるところまで来ました)。
  • RTFからテキストへの関数を調べました(画像データを文字列に入れることができれば、SOで何かが見つかりました)。

これは私がこれまでに持っているコードです。今のところボタンクリックに添付されています(サービスで実行されます)。report var への代入が正しくないと思いますし、SetString も正しくない可能性があります。私がこれを正しい方法で行っているかどうかさえわかりません。

var
report: array of byte;
s: string;

begin
  ADOStoredProc1.Parameters.ParamByName('@EncounterID').Value := '7';

  ADOStoredProc1.Open;
  while not ADOStoredProc1.EOF do
  begin
    report := ADOStoredProc1.FieldByName('Report').Value;
    SetString(s, PAnsiChar(@report[0]), length(report));
    Memo1.Lines.Add(s);

    ADOStoredProc1.Next;
  end;
4

1 に答える 1

1

「RTF画像」で少し混乱しています。RTFテキストのことですか?それともイメージ(写真)?コードから、私は前者を疑っています...

バイトの配列を使用し、すぐにそれを文字列に入れる理由がわかりません。

これは同様に機能するはずです (実際には、(Variant 変換である) を使用せず、関数呼び出しValueを回避するため、より優れています):SetString

while not ADOStoredProc.Eof do
begin
  Memo1.Lines.Add(ADOStoredProc1.FieldByName('Report').AsString;
  ADOStoredProc1.Next;
end;

ただし、おそらくこの方法でメモの RTF 形式を取得できます。フォーマットを削除しようとしている場合は、TRichEdit代わりに a を使用し、EM_STREAMINメッセージを使用してコンテンツを追加してから、TRichEdit.PlainTextプロパティを使用する必要があります。ここにそれを行う例があります。

于 2011-03-14T05:07:19.917 に答える