問題是這樣的
公司有一個刷卡鐘系統
原本將簡單的刷卡資料存入資料庫即可
但是可能使用者會再同一天的同一個上午刷第二次
要如何判斷將第二次的資料不寫入資料庫咧???
因為寫入資料庫的動作是一次就全部寫入了
刷卡機不會自動分辨
譬如說
000001號卡在12/31日刷了三次
紀錄分別為
000001 2002/12/31 08:00  ---->上班刷卡
000001 2002/12/31 08:01  ---->誤刷
000002 2002/12/31 08:01  ---->其他人上班刷卡
000001 2002/12/31 17:30  ---->下班刷卡
因為第一筆及第三筆、第四筆都是正確的
所以我要將第二筆資料不寫入資料庫
我要如何判斷呢????
想了半天還是想不出來如何做好
麻煩請幫幫忙
給我的概念好嗎!!!謝謝!!!
創作者介紹
創作者 vbqa 的頭像
vbqa

小吳 VBQA 程式設計討論

vbqa 發表在 痞客邦 留言(7) 人氣()


留言列表 (7)

發表留言
  • doculars
  • 所有的資料, 都必須有一個「唯一鍵值」 !!
    這是建立資料庫的基本概念...
  • 笨平平
  • 謝謝....doculars
    我將資料庫設定為唯一值
    錯誤的部分的確可以不再寫入
    但是會迸出唯一值不可重複的訊息
    因為我想將程式固定開啟抓取資料後
    立即關閉程式
    跳出了訊息就無法自動關閉了
    這一段您有什麼看法
    我使用了
    on error resume next
    但是無法忽略
    請幫幫我
    謝謝您
  • toney
  • 這個問題我之前也有過,這種狀況大都是在刷卡時與他人閒聊而忘了是否有刷卡,
    但是刷卡記錄應是全部存檔作為原始資料,再另開一個table做為判讀後資料,
    判讀時可比對該卡號與之前一筆的時間差是否為十分鐘內,即可勿略不存檔。
  • Mac
  • 因為我目前不是很清楚您的要求跟需求
    所以我自述一下我自己的做法
    由於刷卡簽到主要是要取的上下班時間而已
    所以我並不管中間如何的重刷或再刷
    在出報表時我只抓day's min & max time而已
    因為我可以取得中間經過時間
    這樣不僅減少自己的麻煩
    也減少程式上的判斷
    (但如果您要練功力 那我就無話可說)
    macliuMac -tech.idv.tw
    Mac
  • doculars
  • 這裡您的觀念有錯誤.
    1. 紀錄刷卡的資料表, 單純紀錄刷卡資料, 不要把判斷的結果也併入.
    2. 做唯一鍵值, 是因為如果需要修改, 可以根據唯一鍵值去修改該筆資料.
    而您會出現鍵值重複, 表示您的資料, 做唯一鍵值的設定一定有錯誤,
      而錯誤的原因很可能是因為 1, 所產生的錯誤. 所以這個問題其實根本
      不該存在, 修正第一項錯誤後, 應該會自動消失.
  • TEST
  • 我的方法 ~~~
    1.每次刷卡時便偵測目前此人編號在今天刷了多少次紀錄~~
    2.若0,1次則直接新增資料
    3.若偵測目前刷卡為第三次則直接更新排序後的第二次的資料不做新增!
    4.或許兩台刷卡機 ~~ 分別為上班與下班 這樣在資料上註記是上班或下班
    則較容易判別資料~~~

    [特殊情形]
    1.但若(上班或下班)忘了刷卡 + 誤刷卡 = 2 筆資料 ~~~ 那就得手動比對資料囉!
    ....需請員工誤刷時立即告知或是月結單天時數時特別比對是否有異常時數!
    2.可是有可能中途請事假又返回公司~~同天會有四筆以上的資料喔!
    這可在月結算時數時回扣事假時數~~
    3.若請事假 + 誤刷卡 + 忘刷卡 + ... ~~~ %$^%$KHB --> 請他走路吧!
    呼~~~最好刷卡兼打卡 ~~~ 打卡 + 人工閱覽 或許會戰勝設計師的腦袋!
    4.很多突發的事件可能上線後再慢慢修正 ~~~ 打卡為主 刷卡為輔!

  • doculars
  • .....
    不要把簡單的問題弄複雜..
    還有, 你也犯了我說的錯誤, 沒有把刷卡紀錄與分析歸納分別.
    這樣你光寫邏輯判斷就會吐血.
    請對系統分析好好用功...=.=!!