線上訂房服務-台灣趴趴狗聯合訂房中心
發文 回覆 瀏覽次數:2149
推到 Plurk!
推到 Facebook!

請問有關物件的複製問題

尚未結案
folkchen
高階會員


發表:9
回覆:232
積分:173
註冊:2003-10-09

發送簡訊給我
#1 引用回覆 回覆 發表時間:2004-01-12 12:18:51 IP:211.20.xxx.xxx 未訂閱
請問物件要如何複製並保留它的設定值和資料 例如: 我用ADOQuery和DataSource連到某資料庫,並以SQL查到我要的資料了 但這個物件我要再查其他東西,所以我要Create一個DataSet來放剛剛的資料 用New只會開出一個空的物件,但是用*的做法確會因為下一個查詢而改變資料的內容 所以想請問,有什麼方式可以複製原本那個物件並保留內容值 P.S:因為我是用巢狀Function所以會有這種需求
anpino
版主


發表:31
回覆:477
積分:231
註冊:2003-01-02

發送簡訊給我
#2 引用回覆 回覆 發表時間:2004-01-14 11:44:49 IP:61.66.xxx.xxx 未訂閱
您好, 為DataSet寫一個copy constructor 吧 ~~ copy constructor 是用來複製一模一樣的物件實體(也就是內容通通都一樣)。    for example:    一個Account的物件, 其copy constructor為:
Account(const Account &rhs)
{
  member_data1 = rhs.member_data1;
  ....
}
------------------------------- 數學系是內功很強(邏輯/分析) 資工系是招式很多(程式技巧) 就像令狐沖VS東方不敗:D Programmers Guide http://anpino.begin.8d8d.com
folkchen
高階會員


發表:9
回覆:232
積分:173
註冊:2003-10-09

發送簡訊給我
#3 引用回覆 回覆 發表時間:2004-01-14 14:02:51 IP:211.20.xxx.xxx 未訂閱
感謝你的回覆 但這種方式還是不好用耶~~ 因為我Select出來的東西,是多筆且多個欄位的資料 這種做法,遇到Select的欄位數不一樣,就又要重寫一個了 而且我不知那些屬性和那些值要轉過去 在VB中有 SET 的方式可以Copy物件的所有內容,我想 BCB 應該也會有才對 不知還有沒有其他高手有其他的解決方案 發表人 - folkchen 於 2004/01/14 15:45:17 發表人 - folkchen 於 2004/01/14 15:47:27
anpino
版主


發表:31
回覆:477
積分:231
註冊:2003-01-02

發送簡訊給我
#4 引用回覆 回覆 發表時間:2004-01-14 16:43:32 IP:61.66.xxx.xxx 未訂閱
引言: 我不知那些屬性和那些值要轉過去
呃... 不是很了解您這句的意思耶... 您是要用vector那種方式嗎? 還是我誤解了呢? ------------------------------- 數學系是內功很強(邏輯/分析) 資工系是招式很多(程式技巧) 就像令狐沖VS東方不敗:D Programmers Guide http://anpino.begin.8d8d.com
folkchen
高階會員


發表:9
回覆:232
積分:173
註冊:2003-10-09

發送簡訊給我
#5 引用回覆 回覆 發表時間:2004-01-14 16:48:51 IP:211.20.xxx.xxx 未訂閱
就是說我不知那些東東要做 member_data1 = rhs.member_data1; 這個動作
folkchen
高階會員


發表:9
回覆:232
積分:173
註冊:2003-10-09

發送簡訊給我
#6 引用回覆 回覆 發表時間:2004-01-14 17:31:00 IP:211.20.xxx.xxx 未訂閱
應該說我希望可以整個DataSet丟到另一個物件中 但你說的這個做法,要一個Data一個Data的丟 還是不能達到我的需求
terrychen
尊榮會員


發表:90
回覆:794
積分:501
註冊:2003-05-01

發送簡訊給我
#7 引用回覆 回覆 發表時間:2004-01-14 19:25:33 IP:211.76.xxx.xxx 未訂閱
您好: 參考http://delphi.ktop.com.tw/topic.php?TOPIC_ID=43193 此篇文章很長看完應該有妳要的 ~~應無所住而生其心~~
folkchen
高階會員


發表:9
回覆:232
積分:173
註冊:2003-10-09

發送簡訊給我
#8 引用回覆 回覆 發表時間:2004-01-15 08:43:31 IP:211.20.xxx.xxx 未訂閱
看來真是我要的東東,太感謝了 他提出的時間還比我早了一點 ccc 以後我也該去Delphi區逛逛了 謝謝你~~
folkchen
高階會員


發表:9
回覆:232
積分:173
註冊:2003-10-09

發送簡訊給我
#9 引用回覆 回覆 發表時間:2004-01-15 13:26:51 IP:211.20.xxx.xxx 未訂閱
引言: 您好: 參考http://delphi.ktop.com.tw/topic.php?TOPIC_ID=43193 此篇文章很長看完應該有妳要的 ~~應無所住而生其心~~
看完了,但Delphi我不會,所以有好幾個地方我不知如何改寫 請問有人可以忙改寫下面的程式段嗎 因為我也是BCB新手,只好請大家幫忙了 謝謝~~ ******************************************************************
uses typInfo;    function CloneProperty2(SourceComp, TargetComp: TObject): Boolean;
var
  i: Integer;
  Properties : PPropList;
begin
  Result := True;
  try
    for i := 0 to GetPropList(SourceComp, Properties) - 1 do
    begin
      if LowerCase(Properties[i].Name) = 'name' then continue;
      if not IsPublishedProp(SourceComp, Properties[I].Name) then Continue;
      if not IsPublishedProp(TargetComp, Properties[I].Name) then Continue;
      if PropType(SourceComp, Properties[I].Name) <> PropType(TargetComp, Properties[I].Name) then
        Continue;
      case PropType(SourceComp, Properties[i].Name) of
      tkClass:
        SetObjectProp(TargetComp, Properties[i],
        GetObjectProp(SourceComp, Properties[i]));
      tkMethod:
        SetMethodProp(TargetComp, Properties[I], GetMethodProp(SourceComp,
          Properties[I]));
      else
        SetPropValue(TargetComp, Properties[i].Name, GetPropValue(SourceComp,
        Properties[i].Name));
      end;
    end;
  except
    Result := False;
  end;
end;
****************************************************************** 發表人 - folkchen 於 2004/01/15 13:30:07
anpino
版主


發表:31
回覆:477
積分:231
註冊:2003-01-02

發送簡訊給我
#10 引用回覆 回覆 發表時間:2004-01-16 10:03:09 IP:61.66.xxx.xxx 未訂閱
#include     bool CloneProperty2(TObject *SourceComp, TObject *TargetComp)
{
  int i;
  PPropList Properties;      Result = True;
  try
  {
    for (i = 0 ; i <= GetPropList(SourceComp, Properties) - 1; i   ) 
    {
      if (LowerCase(Properties[i]->Name) == "name") 
            continue;
      if (!IsPublishedProp(SourceComp, Properties[I]->Name))
            Continue;
      if (!IsPublishedProp(TargetComp, Properties[I]->Name))
            Continue;
      if (PropType(SourceComp, Properties[I]->Name) != PropType(TargetComp, Properties[I]->Name)) 
            Continue;
      switch(PropType(SourceComp, Properties[i]->Name))
      {
      case tkClass:
        SetObjectProp(TargetComp, Properties[i],
        GetObjectProp(SourceComp, Properties[i]));
        break;
      case tkMethod:
        SetMethodProp(TargetComp, Properties[I], GetMethodProp(SourceComp,
          Properties[I]));
          break;
      default:
        SetPropValue(TargetComp, Properties[i]->Name, GetPropValue(SourceComp,
        Properties[i]->Name));
        break;
      };
    }
  }
  catch(...)
  {
    Result = False;
  }
}  
以上, 請參照。
folkchen
高階會員


發表:9
回覆:232
積分:173
註冊:2003-10-09

發送簡訊給我
#11 引用回覆 回覆 發表時間:2004-01-20 08:16:41 IP:211.20.xxx.xxx 未訂閱
anpino大大 你的程式段有點Error但改一下就可以compile了 可是GetPropList在Link時還是會Error耶~~ 除了 include tpeInfo.hpp 以外,還要做什麼嗎??
anpino
版主


發表:31
回覆:477
積分:231
註冊:2003-01-02

發送簡訊給我
#12 引用回覆 回覆 發表時間:2004-01-26 08:13:00 IP:61.66.xxx.xxx 未訂閱
您好, GetPropList應該是自訂函式,  請您找找原始DELPHI程式碼, 應該有GetPropList 這個函式。    您所提供的原程式只有uses typInfo; 也就是說只有include tpeInfo.hpp 。 <>< face="Verdana, Arial, Helvetica">引言: anpino大大 你的程式段有點Error但改一下就可以compile了 可是GetPropList在Link時還是會Error耶~~ 除了 include tpeInfo.hpp 以外,還要做什麼嗎?? ------------------------------- 數學系是內功很強(邏輯/分析) 資工系是招式很多(程式技巧) 就像令狐沖VS東方不敗:D Programmers Guide http://anpino.begin.8d8d.com
folkchen
高階會員


發表:9
回覆:232
積分:173
註冊:2003-10-09

發送簡訊給我
#13 引用回覆 回覆 發表時間:2004-02-03 10:02:35 IP:211.20.xxx.xxx 未訂閱
引言: 您好, GetPropList應該是自訂函式, 請您找找原始DELPHI程式碼, 應該有GetPropList 這個函式。 您所提供的原程式只有uses typInfo; 也就是說只有include tpeInfo.hpp 。 <>< face="Verdana, Arial, Helvetica">引言: anpino大大 你的程式段有點Error但改一下就可以compile了 可是GetPropList在Link時還是會Error耶~~ 除了 include tpeInfo.hpp 以外,還要做什麼嗎??
------------------------------- 數學系是內功很強(邏輯/分析) 資工系是招式很多(程式技巧) 就像令狐沖VS東方不敗:D Programmers Guide http://anpino.begin.8d8d.com 我是有找到原始DELPHI程式碼,請問要如何讓它在BCB上執行?
anpino
版主


發表:31
回覆:477
積分:231
註冊:2003-01-02

發送簡訊給我
#14 引用回覆 回覆 發表時間:2004-03-01 10:53:42 IP:61.66.xxx.xxx 未訂閱
引言: 我是有找到原始DELPHI程式碼,請問要如何讓它在BCB上執行?
抱歉... 因為在飆專案, 所以一陣子沒來。 delphi的源碼仍需以delphi轉為bcb碼才能在bcb compiler 並在bcb上執行。 或者您直接用delphi 來編譯, 用c呼叫執行也行。 (我想我還是來寫個轉碼程式好了,希望到時folkchen能抽空測試一下囉^^*) ------------------------------- 數學系是內功很強(邏輯/分析) 資工系是招式很多(程式技巧) 就像令狐沖VS東方不敗:D Programmers Guide http://anpino.begin.8d8d.com
folkchen
高階會員


發表:9
回覆:232
積分:173
註冊:2003-10-09

發送簡訊給我
#15 引用回覆 回覆 發表時間:2004-03-01 11:37:56 IP:211.20.xxx.xxx 未訂閱
真是太感謝了 因為我沒有delphi所以一直沒有去編譯它 最後我只好在程式段中Create 物件,再一個個的屬性去設 算是呆呆的做法,也不能用在別的物件上 若你可以編譯給我那是最好的,一定幫測的囉~~ 麻煩你了
anpino
版主


發表:31
回覆:477
積分:231
註冊:2003-01-02

發送簡訊給我
#16 引用回覆 回覆 發表時間:2004-04-07 17:33:55 IP:218.32.xxx.xxx 未訂閱
folkchen您好, 由於工作繁忙的關係, 目前才剛著手寫bcb<->delphi的轉碼程式。 因為這篇文章是由terrychen 君給您答覆的, 所以我個人認為您應該先將分數給他。    至於轉碼程式, 我寫好之後會放在會員發表區。 若有不便,尚望海涵。 ------------------------------- 數學系是內功很強(邏輯/分析) 資工系是招式很多(程式技巧) 就像令狐沖
folkchen
高階會員


發表:9
回覆:232
積分:173
註冊:2003-10-09

發送簡訊給我
#17 引用回覆 回覆 發表時間:2005-04-12 11:03:48 IP:211.20.xxx.xxx 未訂閱
包子老大好像有更簡單的做法 http://delphi.ktop.com.tw/forum.asp?FORUM_ID=1220
系統時間:2024-04-30 6:55:40
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!