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

資料check

尚未結案
rita880
一般會員


發表:38
回覆:27
積分:13
註冊:2003-04-15

發送簡訊給我
#1 引用回覆 回覆 發表時間:2003-06-06 10:56:54 IP:61.221.xxx.xxx 未訂閱
請問 : 若資料在寫檔之前, 想check新增的資料在檔案是否已存在, 要如何做比較好呢? tks
timhuang
尊榮會員


發表:78
回覆:1815
積分:1608
註冊:2002-07-15

發送簡訊給我
#2 引用回覆 回覆 發表時間:2003-06-06 11:32:36 IP:203.95.xxx.xxx 未訂閱
請使用 function FileExists(const FileName: string): Boolean; 檢查!!
rita880
一般會員


發表:38
回覆:27
積分:13
註冊:2003-04-15

發送簡訊給我
#3 引用回覆 回覆 發表時間:2003-06-06 13:42:42 IP:61.221.xxx.xxx 未訂閱
引言: 請使用 function FileExists(const FileName: string): Boolean; 檢查!!
因為是要check table中所有的欄位, 所以此種方法也可行嗎? 若可以是否能 將程式的寫法放上來, 因為您這樣表達, 我還是不會 ...tks
channel
尊榮會員


發表:67
回覆:707
積分:854
註冊:2002-05-02

發送簡訊給我
#4 引用回覆 回覆 發表時間:2003-06-06 13:53:20 IP:211.21.xxx.xxx 未訂閱
引言:
引言: 請使用 function FileExists(const FileName: string): Boolean; 檢查!!
因為是要check table中所有的欄位, 所以此種方法也可行嗎? 若可以是否能 將程式的寫法放上來, 因為您這樣表達, 我還是不會 ...tks
一般而言,資料重複,只要您有設Primary Key,資料庫均會幫我們檢查,並且顯示錯誤訊息,我們不須寫程式去控制,只是此訊息是英文的而已,當然可以將此訊息中文化,請參考這兩篇文章: BDE:http://delphi.ktop.com.tw/topic.php?TOPIC_ID=26413 ADO:http://delphi.ktop.com.tw/topic.php?TOPIC_ID=28106 ~小弟淺見,參考看看~
------
~小弟淺見,參考看看~
比爾丐自
初階會員


發表:33
回覆:115
積分:29
註冊:2003-02-14

發送簡訊給我
#5 引用回覆 回覆 發表時間:2003-06-06 17:24:36 IP:218.17.xxx.xxx 未訂閱
引言: 請問 : 若資料在寫檔之前, 想check新增的資料在檔案是否已存在, 要如何做比較好呢? tks
是不是你想要的,共同学习. http://delphi.ktop.com.tw/topic.php?topic_id=26024
RageCaster
一般會員


發表:1
回覆:21
積分:4
註冊:2003-06-02

發送簡訊給我
#6 引用回覆 回覆 發表時間:2003-06-06 18:11:54 IP:202.96.xxx.xxx 未訂閱
如果一定要通过程序来判定的话.你可以用findkey method来写 具体格式如下: FindKey(const KeyValues: array of const): Boolean 通过findkey查找是否存在当前记录,如果找到则showmessage,如果找不到,则进行数据录入操作. 但是ADO不支持FINDKEY方法.
rita880
一般會員


發表:38
回覆:27
積分:13
註冊:2003-04-15

發送簡訊給我
#7 引用回覆 回覆 發表時間:2003-06-07 22:13:41 IP:218.163.xxx.xxx 未訂閱
引言: 請問 : 若資料在寫檔之前, 想check新增的資料在檔案是否已存在, 要如何做比較好呢? tks 我想你們都誤會了我的意思, 因為某些因素所以必須將所有的欄位皆chek一次 是否有重複, 至於key的部份, 我在資料庫中已有設unique key所以沒問題, 主要是輸入的所有資料一定要與querytable中的資料再check一次是否有重複, 不過由你們介紹的資料中, 又讓我學會了一些技巧, tks
channel
尊榮會員


發表:67
回覆:707
積分:854
註冊:2002-05-02

發送簡訊給我
#8 引用回覆 回覆 發表時間:2003-06-09 13:25:30 IP:211.21.xxx.xxx 未訂閱
引言:
引言: 請問 : 若資料在寫檔之前, 想check新增的資料在檔案是否已存在, 要如何做比較好呢? tks 我想你們都誤會了我的意思, 因為某些因素所以必須將所有的欄位皆chek一次 是否有重複, 至於key的部份, 我在資料庫中已有設unique key所以沒問題, 主要是輸入的所有資料一定要與querytable中的資料再check一次是否有重複, 不過由你們介紹的資料中, 又讓我學會了一些技巧, tks
提供您一個方法試式看:
  • 首先假設您目前在維護的是Query1,您必須再新增一個Query2,其所Select的內容與Query1相同,Query2是為了Check資料是否有重複用的。
  • procedure TForm1.Query1BeforePost(DataSet: TDataSet);
    var
      I: Integer;
    begin
      with Query1 do
      begin
        if State in [dsInsert] then
        begin
          Query2.Close;
          Query2.Filtered := False;
          Query2.Open;
          for I := 0 to FieldCount - 1 do
            if Query2.Locate(Fields[I].FieldName, Fields[I].Value, []) then
              raise Exception.Create(Fields[I].DisplayLabel '資料重複!')
        end
        else if State in [dsEdit] then
        begin
          Query2.Close;
          //修改時需將此次的修改的記錄過濾掉,才不會Check到目前修改的記錄
            //Key_Field表您的Primary Key的欄位 
            Query2.Filter := 'Key_Field<>' DataSet.FieldByName(Key_Field).AsString;
          Query2.Filtered := True;
          Query2.Open;
          for I := 0 to FieldCount - 1 do
            if Query2.Locate(Fields[I].FieldName, Fields[I].Value, []) then
              raise Exception.Create(Fields[I].DisplayLabel '資料重複!');
        end
      end;
    end;
    
~小弟淺見,參考看看~ 發表人 - channel 於 2003/06/09 13:27:35
------
~小弟淺見,參考看看~
rita880
一般會員


發表:38
回覆:27
積分:13
註冊:2003-04-15

發送簡訊給我
#9 引用回覆 回覆 發表時間:2003-06-11 21:54:29 IP:218.163.xxx.xxx 未訂閱
引言:
引言:
引言: 請問 : 若資料在寫檔之前, 想check新增的資料在檔案是否已存在, 要如何做比較好呢? tks 我想你們都誤會了我的意思, 因為某些因素所以必須將所有的欄位皆chek一次 是否有重複, 至於key的部份, 我在資料庫中已有設unique key所以沒問題, 主要是輸入的所有資料一定要與querytable中的資料再check一次是否有重複, 不過由你們介紹的資料中, 又讓我學會了一些技巧, tks
提供您一個方法試式看:
  • 首先假設您目前在維護的是Query1,您必須再新增一個Query2,其所Select的內容與Query1相同,Query2是為了Check資料是否有重複用的。
  • procedure TForm1.Query1BeforePost(DataSet: TDataSet);
    var
      I: Integer;
    begin
      with Query1 do
      begin
        if State in [dsInsert] then
        begin
          Query2.Close;
          Query2.Filtered := False;
          Query2.Open;
          for I := 0 to FieldCount - 1 do
            if Query2.Locate(Fields[I].FieldName, Fields[I].Value, []) then
              raise Exception.Create(Fields[I].DisplayLabel '資料重複!')
        end
        else if State in [dsEdit] then
        begin
          Query2.Close;
          //修改時需將此次的修改的記錄過濾掉,才不會Check到目前修改的記錄
            //Key_Field表您的Primary Key的欄位 
            Query2.Filter := 'Key_Field<>' DataSet.FieldByName(Key_Field).AsString;
          Query2.Filtered := True;
          Query2.Open;
          for I := 0 to FieldCount - 1 do
            if Query2.Locate(Fields[I].FieldName, Fields[I].Value, []) then
              raise Exception.Create(Fields[I].DisplayLabel '資料重複!');
        end
      end;
    end;
    
~小弟淺見,參考看看~ 發表人 - channel 於 2003/06/09 13:27:35
你的方式, 我可以稍為引用, 不過, 我想問題, 我可能還要講想清楚 因為我的一筆record中所以的field都要當做key, 但因為欄位太多了, 所以只有引用幾個比較重要的欄位 流水號, 所以在檔案寫入時, 我須要同時check所有的欄位, 只要有一個field不一樣, 才能真正的寫檔, 否則會造成, 雖然key值不一樣, 但實際上資料是完全一樣的.....tks
channel
尊榮會員


發表:67
回覆:707
積分:854
註冊:2002-05-02

發送簡訊給我
#10 引用回覆 回覆 發表時間:2003-06-12 09:46:08 IP:211.21.xxx.xxx 未訂閱
引言: 你的方式, 我可以稍為引用, 不過, 我想問題, 我可能還要講想清楚 因為我的一筆record中所以的field都要當做key, 但因為欄位太多了, 所以只有引用幾個比較重要的欄位 流水號, 所以在檔案寫入時, 我須要同時check所有的欄位, 只要有一個field不一樣, 才能真正的寫檔, 否則會造成, 雖然key值不一樣, 但實際上資料是完全一樣的.....tks
哦!您是要在編修的這筆資料的所有欄位作比對,再提供您一個方法參考:
procedure TForm1.Table1BeforePost(DataSet: TDataSet);
var
  I, J: Integer;
begin
  for I := 0 to Table1.FieldCount - 1 do
    for J := 0 to Table1.FieldCount - 1 do
    begin
      if I <> J then
        if Table1.Fields[I].AsString = Table1.Fields[J].AsString then
          raise Exception.Create('有資料重覆,請重新輸入!');
    end;
end;
~小弟淺見,參考看看~
------
~小弟淺見,參考看看~
rita880
一般會員


發表:38
回覆:27
積分:13
註冊:2003-04-15

發送簡訊給我
#11 引用回覆 回覆 發表時間:2003-06-16 23:19:13 IP:218.163.xxx.xxx 未訂閱
謝謝channel的幫忙......   可能我解釋的不好, 比如說一個table的唯一key是所有欄位組合而成, 因此 就沒有設key, 所以在一筆recrod要寫入時, 須判斷檔案中是否有完全相同的資 料存在.....不知這樣說, 你是否能了改呢? 再次謝謝你不厭其煩的幫忙
channel
尊榮會員


發表:67
回覆:707
積分:854
註冊:2002-05-02

發送簡訊給我
#12 引用回覆 回覆 發表時間:2003-06-18 10:07:27 IP:211.21.xxx.xxx 未訂閱
引言: 謝謝channel的幫忙...... 可能我解釋的不好, 比如說一個table的唯一key是所有欄位組合而成, 因此 就沒有設key, 所以在一筆recrod要寫入時, 須判斷檔案中是否有完全相同的資 料存在.....不知這樣說, 你是否能了改呢? 再次謝謝你不厭其煩的幫忙 < face="Verdana, Arial, Helvetica"> 在BeforePost的事件寫這一段程式:
var
  qry: TQuery;
begin
  qry := TQuery.Create(nil);
  with qry do
  try
    Close;
    SQL.Clear;
    SQL.Add('Select * From TableName Where Field1 Field2 Field3 .... = :xField');
    ParamByName('xField').AsString := DataSet.FieldByName('Field1').AsString 
                                      DataSet.FieldByName('Field2').AsString
                                      DataSet.FieldByName('Field3').AsString
                                      ......;
 
    Open;
    if DataSet.State in [dsInsert] then
      if RecordCount > 0 then
        raise Exception.Create('資料重複!')
  finally
    Free;
  end;
end;
這一段大致的意思如下: 您Table的唯一key是所有欄位組合而成,而沒有設key,那就在條件式(Where)把所有的欄位相加,然後傳入新增完的所有欄位值相加去搜尋Table的資料是否有存在。 ~小弟淺見,參考看看~ 發表人 - channel 於 2003/06/18 10:29:36
------
~小弟淺見,參考看看~
rita880
一般會員


發表:38
回覆:27
積分:13
註冊:2003-04-15

發送簡訊給我
#13 引用回覆 回覆 發表時間:2003-06-18 22:01:19 IP:218.163.xxx.xxx 未訂閱
引言: 在BeforePost的事件寫這一段程式:
var
  qry: TQuery;
begin
  qry := TQuery.Create(nil);
  with qry do
  try
    Close;
    SQL.Clear;
    SQL.Add('Select * From TableName Where Field1 Field2 Field3 .... = :xField');
    ParamByName('xField').AsString := DataSet.FieldByName('Field1').AsString 
                                      DataSet.FieldByName('Field2').AsString
                                      DataSet.FieldByName('Field3').AsString
                                      ......;
 
    Open;
    if DataSet.State in [dsInsert] then
      if RecordCount > 0 then
        raise Exception.Create('資料重複!')
  finally
    Free;
  end;
end;
這一段大致的意思如下: 您Table的唯一key是所有欄位組合而成,而沒有設key,那就在條件式(Where)把所有的欄位相加,然後傳入新增完的所有欄位值相加去搜尋Table的資料是否有存在。 ~小弟淺見,參考看看~ 發表人 - channel 於 2003/06/18 10:29:36
謝啦,
系統時間:2024-11-23 12:38:38
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!