請問怎麼比較兩個DBGrid中的值? |
尚未結案
|
diary
一般會員 發表:6 回覆:4 積分:2 註冊:2002-08-05 發送簡訊給我 |
我需要用兩個DBGrid讀出兩個不同query中的欄位值
可是卻不知道該怎樣比較兩個不同DBGrid上Column[0]中的值
再寫入一個memo中 例如:DbGrid1中的Columns[0]中列出4個rows值為 (dog,cat,mouse,rabbit) 而 DBGrid2中的Columns[0]中列出5個rows值為 (dog,bird,mouse,cat,rabbit)
判斷出DBGrid2的Columns[0]比DBGrid1的Columns[0]多出一個bird的值,然後再把bird寫到memo中 請問要怎麼比較出DBGrid1跟DBGrid2中的Columns[0]中的值不同再寫入memo中呢? 謝謝各位的幫忙
|
channel
尊榮會員 發表:67 回覆:707 積分:854 註冊:2002-05-02 發送簡訊給我 |
引言: 我需要用兩個DBGrid讀出兩個不同query中的欄位值 可是卻不知道該怎樣比較兩個不同DBGrid上Column[0]中的值 再寫入一個memo中 例如:DbGrid1中的Columns[0]中列出4個rows值為 (dog,cat,mouse,rabbit) 而 DBGrid2中的Columns[0]中列出5個rows值為 (dog,bird,mouse,cat,rabbit) 判斷出DBGrid2的Columns[0]比DBGrid1的Columns[0]多出一個bird的值,然後再把bird寫到memo中 請問要怎麼比較出DBGrid1跟DBGrid2中的Columns[0]中的值不同再寫入memo中呢? 謝謝各位的幫忙先在private宣告: function CompareField(DataSet1, DataSet2: TDataSet): String;//比較兩個Table不同的Field procedure WriteMemo(xStr: String; DataSet: TDataSet);//將不同的Field的值寫入Memo function TForm1.CompareField(DataSet1, DataSet2: TDataSet): String; var I, J : Integer; aStr: String; aNotFind: Boolean; begin aStr := ''; for I := 0 to DataSet1.FieldCount - 1 do begin aNotFind := True; for J := 0 to DataSet2.FieldCount - 1 do begin if DataSet1.Fields[I].FieldName = DataSet2.Fields[J].FieldName then begin aNotFind := False; Break; end; end; if aNotFind then if aStr = '' then aStr := DataSet1.Fields[I].FieldName else aStr := aStr ',' DataSet1.Fields[I].FieldName; end; Result := aStr; end; procedure TForm1.WriteMemo(xStr: String; DataSet: TDataSet); var I: Integer; aSL: TStringList; begin aSL := TStringList.Create; try aSL.CommaText := xStr; for I := 0 to aSL.Count - 1 do with DataSet do begin Close; Open; First; while not Eof do begin Memo1.Lines.Add(FieldByName(aSL.Strings[I]).AsString); Next; end; end; finally FreeAndNil(aSL); end; end; procedure TForm1.Button1Click(Sender: TObject); var aSL: TStringList; begin if Table1.FieldCount > Table2.FieldCount then WriteMemo(CompareField(Table1,Table2), Table1) else WriteMemo(CompareField(Table2,Table1), Table2); end;我試過了,沒有問題,您可以試試看… ~小弟淺見,參考看看~
------
~小弟淺見,參考看看~ |
Mickey
版主 發表:77 回覆:1882 積分:1390 註冊:2002-12-11 發送簡訊給我 |
你應該要用 DataSet 來做比對,如 :
query2.first; while not query2.eof do begin if not query1.locate('[FieldName]',query2,fieldbyname('[FieldName]').asstring,[]) then memo.lines.add(query2,fieldbyname('[FieldName]').asstring); query2.next; end;晚了一步, channel 的比較完整, 棒棒 發表人 - |
timhuang
尊榮會員 發表:78 回覆:1815 積分:1608 註冊:2002-07-15 發送簡訊給我 |
一個比較簡單的想法, 其實這個若是都來自於資料庫的資料的話, 可以用下 query 的方式來找出不同的資料, 當然若只是 UI 上的資料比對, 那就用前兩位前輩的方式來解, 若只是要找出不同的資料並寫回 TMemo 中的話, 建議可以用下 SQL Query 的方式來進行. 如原來的 DBGrid1 的 dataset 中的資料為
select col_1, col_2 ... from table1
DBGrid2 的 dataset 資料為
select col_1, col_2 ... from table2
那就利用
select col_1 from table1 where col_1 not in (select col_1 from table2)
就可以找出所有原來 dbgrid1 中有, 但是 dbgrid2 中沒有的資料了.
|
diary
一般會員 發表:6 回覆:4 積分:2 註冊:2002-08-05 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |