2011-03-14 56 views
0

一直在苦苦挣扎。我们有一个包含图像类型数据的旧表(SQL Server)。我想获得文本。将RTF图像数据转换为纯文本(SQL Server和Dephi BDS 2006)

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

  • 尝试转换或调用SP投它(不允许)
  • 尝试将在数据进入德尔福(我到具有被分配给一个变体的数据点)
  • 看着到一个RTF文本函数(在这里找到的东西,如果我可以将图像数据转换为一个字符串)。

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

我对“RTF图像”有点困惑。你的意思是RTF文本吗?或者一张图片(图片)?从代码,我怀疑前...

我不知道你为什么使用一个字节数组,然后立即把它放入一个字符串。

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

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

你可能会得到不过,这种方式的备忘录RTF格式化。如果您尝试删除格式,则需要改为使用TRichEdit,并使用EM_STREAMIN消息来添加内容,然后使用TRichEdit.PlainText属性。有一个这样做的例子:here

+0

数据存储为二进制图像类型。它实际上是一个RTF数据文件。我似乎记得尝试过AsString并没有取得太大的成功。我会再看看。谢谢! – Rob 2011-03-14 05:46:06

+0

Delphi为它创建了什么类型的字段? (检查ADOStoredProc1.FieldByName('Report')。ClassName)如果它创建了一个TBlobField,你可以获取BlobStream并使用LoadFromStream直接将其添加到TRichEdit;在我的答案中提供的同一个Delphi新闻链接中有代码。 – 2011-03-14 06:04:22

+0

是的,这在一定程度上起作用!还有一个剩余的问题,我会另外问。谢谢。一旦我得到解决,我会发布完整的代码。问题在于,MSSQL在将二进制数据插入数据库时​​会做某些事情。需要弄清楚如何将其翻译回来。 – Rob 2011-03-14 13:41:47