全國最多中醫師線上諮詢網站-台灣中醫網
發文 回覆 瀏覽次數:3305
推到 Plurk!
推到 Facebook!

關於DBGrid顯示memo型態資料問題

答題得分者是:ccchen
chinliang
一般會員


發表:16
回覆:26
積分:13
註冊:2002-06-17

發送簡訊給我
#1 引用回覆 回覆 發表時間:2002-09-04 11:30:27 IP:210.243.xxx.xxx 未訂閱
在程式設計俱樂部沒人回答,故再此請各位先進看看,如蒙賜教,感激不盡,謝謝.    為了在DBGrid中能顯示memo,在DBGrid的DrawDataCell的事件中加入以下程式碼,但是小弟有問題的是在 Table1 --> DataSource --> DBGrid 下能夠正常執行,但在ClientDataSet --> DataSource --> DBGrid下卻不能執行.    錯誤在型熊轉換部份:    Table1.FieldByName('memo') as TBlobField 正確    Enquiry_AllMedTableClientDmod.cdsMed_patient_register.FieldByName('memo') as TBlobField 錯誤    錯誤訊息  "Invalid class typecast"    小弟想不懂的是,上面二個陳述式均是由TField 轉成 TBloBField,一個卻有問題,不知為那方面的問題,請 各位先進不吝指教, 謝謝!    
  if Field is TMemoField then
  begin
    Table1.Locate('date_',dbgRegister.fields[0].Value ,[loCaseInsensitive]);
    with (Sender as TDBGrid).Canvas do
    begin
      bs := TBlobStream.Create(Table1.FieldByName('memo') as TBlobField, bmRead);
      FillChar(P,SizeOf(P),#0);
      bs.Read(P, 50);
      bs.Free;
      hStr := StrPas(P);
      while Pos(#13, hStr) > 0 do
        hStr[Pos(#13, hStr)] := ' ';
      while Pos(#10, hStr) > 0 do
        hStr[Pos(#10, hStr)] := ' ';
      FillRect(Rect);
      TextOut(Rect.Left, Rect.Top, hStr);
    end;
  end; 
ccchen
版主


發表:61
回覆:940
積分:1394
註冊:2002-04-15

發送簡訊給我
#2 引用回覆 回覆 發表時間:2002-09-04 12:13:33 IP:61.219.xxx.xxx 未訂閱
我測試了一下, 將ClientDataSet中之Field Cast成TBLOBField, 沒問題啊 環境是Win98, Delphi6, Oracle之Long row
chinliang
一般會員


發表:16
回覆:26
積分:13
註冊:2002-06-17

發送簡訊給我
#3 引用回覆 回覆 發表時間:2002-09-04 16:36:50 IP:210.243.xxx.xxx 未訂閱
版主您好: 試了很久還是不行,這個問題已經困擾我好久,想說不知道可不可以寄我寫的範例給版主你看一下,我寫了一個用Table直接去連DBDEMOS的biolife.db,這是可以跑的,另一個是Client端用ClientDataSet去接AP Server的資料,一樣都是連biolife.db,但是則會在轉換部份有錯誤. 希望版主能幫忙小弟,萬分感激.
ccchen
版主


發表:61
回覆:940
積分:1394
註冊:2002-04-15

發送簡訊給我
#4 引用回覆 回覆 發表時間:2002-09-05 16:34:53 IP:61.219.xxx.xxx 未訂閱
改用TClientDataSet之CreateBlobStream
procedure TForm1.DBGrid1DrawDataCell(Sender: TObject; const Rect: TRect;
  Field: TField; State: TGridDrawState);
var
  P: array [0..50] of char;
  bs: TStream;
  hStr: String;
begin
  if Field is TMemoField then
  begin
    with (Sender as TDBGrid).Canvas do
    begin
      bs := ClientDataSet1.CreateBlobStream(field, bmRead);
chinliang
一般會員


發表:16
回覆:26
積分:13
註冊:2002-06-17

發送簡訊給我
#5 引用回覆 回覆 發表時間:2002-09-05 16:58:22 IP:210.243.xxx.xxx 未訂閱
版主你好: 非常感謝版主能抽空看小弟的程式,而且也順利了解決小弟很久以來的問題,好高興喔,本來想說如果弄不出就想要放棄,把這個欄位拿掉不要顯示算了,但是就是很不甘心,可是就是找不到範例,去程式設計師俱樂部問,都沒有回應,但是在這裡得到版主及其他先進指導,真是非常敬佩各位能熱心的回答新手的問題,不知道什麼時候自己才能幫助別人解決問題。 不好意思想再問一下版主,遇到很難的問題都去那裡找資料呢?雖然說Delphi的HELP也有很多資料,但是有時查出來幫助也不是很大,請賜教。 最後,再次感謝版主,謝謝。
ccchen
版主


發表:61
回覆:940
積分:1394
註冊:2002-04-15

發送簡訊給我
#6 引用回覆 回覆 發表時間:2002-09-05 17:50:38 IP:203.217.xxx.xxx 未訂閱
引言: 版主你好: 非常感謝版主能抽空看小弟的程式,而且也順利了解決小弟很久以來的問題,好高興喔,本來想說如果弄不出就想要放棄,把這個欄位拿掉不要顯示算了,但是就是很不甘心,可是就是找不到範例,去程式設計師俱樂部問,都沒有回應,但是在這裡得到版主及其他先進指導,真是非常敬佩各位能熱心的回答新手的問題,不知道什麼時候自己才能幫助別人解決問題。 不好意思想再問一下版主,遇到很難的問題都去那裡找資料呢?雖然說Delphi的HELP也有很多資料,但是有時查出來幫助也不是很大,請賜教。 最後,再次感謝版主,謝謝。
你可以先在本網站用"搜尋文章"找看看有沒有類似問題, 找到的內容可能包含以前別人問過的, Delphi官方文章, 甚至3rd Party元件, 也可以找書,(不過大部分中文書比較沒什麼內容). 再不行就發問, 你寄來的Sample就很恰當的表達了問題, 不過較理想的方法是將壓縮檔貼到"會員求助程式上傳區貼上後Righ Click選"複製捷徑", 發問時將此捷徑貼上. "新手必看"內有詳細說明
系統時間:2024-04-26 21:17:26
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!