0

一直在为这个苦苦挣扎。我们有一个包含图像类型数据的旧表(SQL Server)。我想得到文本。

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

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

这是我到目前为止的代码。它现在附加到单击按钮(将在服务中运行)。我认为对报告变量的分配是不对的,而且 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文本吗?还是图像(图片)?从代码中,我怀疑前者......

我不确定您为什么要使用字节数组,然后立即将其放入字符串中。

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

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

不过,您可能会以这种方式在备忘录中获得 RTF 格式。如果您尝试去除格式,则需要使用 aTRichEdit代替,并使用EM_STREAMIN消息添加内容,然后使用TRichEdit.PlainText属性。这里有一个这样做的例子。

于 2011-03-14T05:07:19.917 回答