編號的生成問題

字號:

問題:
    我跟你說說我這邊的情況吧。好像工號03-0756-004-1JF,表示:03表示03年生產(chǎn),0756是合同號,004表示對方單位的編號,1表示合同的第幾項,JF是表示車間。你說這樣的工號會不會很煩?
    回答:
    我只能說,你在設計數(shù)據(jù)結構的時候就已經(jīng)錯誤了。
    很多程序員認為 “編號”是一個字段,在計算機中這的確是正確的,但是,在計算機中,編號是沒有含義的,沒有語法、沒有組合、沒有任何意義,僅表示記錄的標識。而實際生產(chǎn)中,編號往往包含很多意義(除非你使用數(shù)據(jù)庫查詢系統(tǒng)來管理隨機編號)。因此就像你說的,編號的每個部分都有含義。所以,應該以每個部分為最小單位來建立數(shù)據(jù)庫結構。簡單的說,就是 生產(chǎn)日期、合同號、對方單位編號、車間分幾個字段存儲,這也可以說是“原子性”擴展。其實 SQL 不僅僅可以查詢數(shù)據(jù),還可以組織數(shù)據(jù),比如
    select 日期 & 合同號 & 單位號 & 車間 as 編號,全名 from 產(chǎn)品表
    問題:
    但很慘的是:錄入員已經(jīng)習慣很連續(xù)地錄入03-0456-002-4JF這樣的工號了,叫他們分開來錄入,恐怕很麻煩。
    回答:
    你可以在保存按鈕上寫點代碼切分數(shù)據(jù),即使連續(xù)窗體也可以在 BEFOREUPDATE事件里面寫代碼。代碼可以類似:
    Sub SplitString()
    Dim strA() As String
    strA() = Split(Me.TextBoxA, "-")
    Dim i As Integer
    For i = 0 To UBound(strA)
     Debug.Print strA(i)
     Me("TextBox" & i).value=strA(i)
    Next
    End Sub