2011-03-14 28 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