将RTF图像数据转换为纯文本(SQL Server和Dephi BDS 2006)

时间:2011-03-14 04:25:46

标签: sql-server delphi delphi-2006

暂时挣扎着这个。我们有一个旧表(SQL Server)具有图像类型数据。我想得到文字。

到目前为止,这就是我所做的。

  • 尝试转换或转换(不允许)
  • 尝试通过调用SP将数据带入delphi(我已经将数据分配给变体)
  • 查看RTF到文本函数(在SO上找到一些东西,如果我可以将图像数据放到字符串中)。

这是我到目前为止的代码。它现在附加到按钮单击(将在服务中运行)。我认为报告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;

1 个答案:

答案 0 :(得分:1)

我对" RTF图像"感到有些困惑。你的意思是RTF文字吗?还是图像(图片)?从代码中,我怀疑前者......

我不确定你为什么要使用一个字节数组然后立即将它放入一个字符串中。

这应该同样有效(实际上,更好,因为它不使用Value(这是变体转换)并避免SetString函数调用):

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

但是,您可能会以这种方式在备忘录中获得RTF格式。如果您尝试删除格式,则需要使用TRichEdit,并使用EM_STREAMIN消息添加内容,然后使用{{1}属性。这是here的一个例子。