如何合併兩個Table |
答題得分者是:P.D.
|
superrakce
一般會員 發表:24 回覆:35 積分:11 註冊:2006-10-09 發送簡訊給我 |
1. 有兩個資料表,必須取出在利用程式處理欄位值,然後合併且會過瀘掉重複的資料
如果用兩個adoquery 取得兩個資料集,那我在欄位處理完後,該如何在本機將資料合併? 2.自建adotable 一定要有 connectionstring 嗎? 我只是想要自建個資料表塞值 var at :TADOTable; af: TWideStringField; begin at := TADOTable.Create(owner); af := TWideStringField.Create(at); af.Name := 'ad1'; at.Fields.Add(af); at.Active := true; 編輯記錄
|
P.D.
版主 發表:603 回覆:4038 積分:3874 註冊:2006-10-31 發送簡訊給我 |
你問了一個好大的問題,
那也只能大方向來說 兩個資料表是異質性還是同質性(也就是我們常說是同一資料檔內的兩份表, 還是不同資料檔的兩份表) 如果要考慮這樣合併, 通常會利用第3組資料表(TEMPDB) 來做為中間介面, 把第一份表複製到第3份表, 然後與第2份表比對, 相同的就不要再加進來 這是最簡單的想法, 當然如果是同資料檔, 則可以利用SQL語法來過濾兩表中具有相同記錄的, 然後再做處理(還是要第3份表來暫存), 但至少可以減少用迴圈方式, 省很多時間 ===================引 用 superrakce 文 章=================== 1. 有兩個資料表,必須取出在利用程式處理欄位值,然後合併且會過瀘掉重複的資料 如果用兩個adoquery 取得兩個資料集,那我在欄位處理完後,該如何在本機將資料合併? 2.自建adotable 一定要有 connectionstring 嗎? 我只是想要自建個資料表塞值 var at :TADOTable; af: TWideStringField; begin at := TADOTable.Create(owner); af := TWideStringField.Create(at); af.Name := 'ad1'; at.Fields.Add(af); at.Active := true; |
superrakce
一般會員 發表:24 回覆:35 積分:11 註冊:2006-10-09 發送簡訊給我 |
讓我把狀況巨細靡遺的表示:
Atable:姓名、身份證(加密) Btable:會員編號、身份證(明碼) 所以兩個資料表是無法在資料庫裡做合併查詢的 所以當使用者下關鍵字搜尋的時 搜尋姓名:select ? from Atable where 姓名 like ?(然後撈出來去解密接著搜尋Btable) 搜尋會員編號:select ? from Btable where 會員編號 like ?(撈出來加密接著搜尋Atable) 當這兩個表都過瀘完出來,最後在本機合併,就不想要再有任何連線返回資料庫了 所以我想要在本機建立一個沒有連線資料庫的資料表 合併這兩個篩選後的資料 這是當資料庫的資料這以這種形式儲存時,我所能想出來的解決辦法 或者有其實更適當的做法我都來try 看看 |
sryang
尊榮會員 發表:39 回覆:762 積分:920 註冊:2002-06-27 發送簡訊給我 |
在本機建立記憶體中的資料集可以使用 TClientDataSet 或是 TAdoDataSet
無論是使用 TClientDataSet 還是 TAdoDataSet 方法都一樣 [code delphi] // 建立 FieldDef with ADODataSet1.FieldDefs.AddFieldDef do begin Name := '姓名'; DataType := ftString; Size := 10; end; with ADODataSet1.FieldDefs.AddFieldDef do begin Name := '會員編號'; DataType := ftString; Size := 10; end; with ADODataSet1.FieldDefs.AddFieldDef do begin Name := '身份證'; DataType := ftString; Size := 10; end; // 依據 FieldDefs 建立空的資料集 ADODataSet1.CreateDataSet; [/code] 接下來就可以往 ADODataSet1 裡面塞資料了
------
歡迎參訪 "腦殘賤貓的備忘錄" http://maolaoda.blogspot.com/ |
superrakce
一般會員 發表:24 回覆:35 積分:11 註冊:2006-10-09 發送簡訊給我 |
如果我在本機建立了兩個TAdoDataSet
該如何join 這兩個tadodataset? 還是要用lookup field? 用Filter 去篩選至第三個TAdoDataSet? 小弟目前的作法是把資料取出,填值到DataSet 然後加密或解密再去搜尋另一份集料集 DataSet 的LookupFied該如何加入? [code delphi] var ds:TDataSet; aq:TADOquery; begin (以下省略) ds.FieldDefs.Add('身份證',ftString,15,true); ds.FieldDefs.Add('o身份證',ftString,15,true); //ds.FieldDefs.Add('姓名',ftString,20,true); with TStringField.Create(ds)do begin FieldName:='姓名'; FieldKind:=fkLookup; DataSet:=ds; Name:='FieldName'; KeyFields:='o身份證'; LookupDataSet:=aq; LookupKeyFields:='身份證'; LookupResultField:='姓名'; ds.FieldDefs.Add(FieldName,ftString,50,False); end; [/code] 會出現 「Cannot perform this operation on an open dataset 」的錯誤
編輯記錄
superrakce 重新編輯於 2012-02-05 23:31:11, 註解 無‧
|
P.D.
版主 發表:603 回覆:4038 積分:3874 註冊:2006-10-31 發送簡訊給我 |
要create field , TAdoDataSet 不可以在開啟狀況, 把 Active 改為 False
===================引 用 superrakce 文 章=================== 如果我在本機建立了兩個TAdoDataSet 該如何join 這兩個tadodataset? 還是要用lookup field? 用Filter 去篩選至第三個TAdoDataSet? 小弟目前的作法是把資料取出,填值到DataSet 然後加密或解密再去搜尋另一份集料集 DataSet 的LookupFied該如何加入? [code delphi] var ds:TDataSet; aq:TADOquery; begin (以下省略) ds.FieldDefs.Add('身份證',ftString,15,true); ds.FieldDefs.Add('o身份證',ftString,15,true); //ds.FieldDefs.Add('姓名',ftString,20,true); with TStringField.Create(ds)do begin FieldName:='姓名'; FieldKind:=fkLookup; DataSet:=ds; Name:='FieldName'; KeyFields:='o身份證'; LookupDataSet:=aq; LookupKeyFields:='身份證'; LookupResultField:='姓名'; ds.FieldDefs.Add(FieldName,ftString,50,False); end; [/code] 會出現 「Cannot perform this operation on an open dataset 」的錯誤 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |