我现在碰到了这样一个问题,我在将数据登记入数据库时,要生成一个编码,他的格式为 年+月+日+000~999在只有一台机器工作时,生成唯一编码正确,可是在多台机器同时工作吧,就出错了,请问高手,这个唯一编码要如何实现啊,就是在有多台机器同时将数据存在数据时,要如何生成这个唯一编码啊

解决方案 »

  1.   

    在保存的时候
    先 begintrans
    然后再获得编号
    保存
    if err.number=0 then
     committrans
    else
      goto errhandle
    end if
      

  2.   

    用 DATE+TIME,应该不会重复,还不行的话,在加上随机数。
      

  3.   

    Public Function GetMaxID(colID As String, TableName As String) As String
    '**********************************************************************
    '  获取编号的函数,colID为传递过来的编号字段,tablename为所要查询的表名
    '**********************************************************************
      Dim T1 As Integer, T2 As String, T3 As String
      Dim rst As ADODB.Recordset
      Dim Sqlstring As String
      Set rst = New ADODB.Recordset
      Sqlstring = "select top 1 " & colID & " from " & TableName & " order by " & colID & " desc "
      On Error GoTo Errhandle
      Set rst = ExecuteSQL(Sqlstring)
      T1 = rst.Fields(0).DefinedSize
      If rst.EOF = True Then
        GetMaxID = String(T1 - 1, "0") & "1"
      Else
        T2 = CInt(rst.Fields(0).Value)
        T2 = T2 + 1
        T3 = String(T1 - Len(Trim(Str(T2))), "0") & CStr(T2)
        GetMaxID = T3
      End If
      Set rst = Nothing
      Exit Function
    Errhandle:
      MsgBox "获取编号出错,请与管理员联系", vbOKOnly + vbCritical, App.title
      Set rst = Nothing
    End Function
    这个函数不和你的一样,但差不多.你只需要将服务器时间取出来,然后配合后边的就差不多了.
    我的编号比较简单,只是10位数!你参考一下吧.
      

  4.   

    Public Function GetServerTime() As Date
    '***************************************
               '取服务器时间
    '***************************************
      Dim Sqlstring As String
      Dim rst As ADODB.Recordset
      Set rst = New ADODB.Recordset
      Sqlstring = "select substring(convert(varchar(20),getdate(),20),12,9)"
      Set rst = ExecuteSQL(Sqlstring)
      On Error GoTo Errhandle
      GetServerTime = CDate(rst.Fields(0).Value)
      rst.Close
      Set rst = Nothing
    Errhandle:    '出错取本地时间
      GetServerTime = Time
      Set cnn = Nothing
    End Function
      

  5.   

    Public Function GetServerDate() As Date
    '*****************************************
    '        '获取服务器时间的函数
    '*****************************************
      On Error GoTo Errhandle
      Dim cnn As ADODB.Connection
      Dim cmd As ADODB.Command
      Dim para1 As ADODB.Parameter
      Set cnn = New ADODB.Connection
      Set para1 = New ADODB.Parameter
      Set cmd = New ADODB.Command
      cnn.ConnectionString = ConnectString
      cnn.Open
      cmd.CommandText = "my_get_severtime"
      cmd.ActiveConnection = cnn
      cmd.CommandType = adCmdStoredProc
      Set para1 = cmd.CreateParameter("mydate", adDate, adParamOutput)
      cmd.Parameters.Append para1
      cmd.Execute
      GetServerDate = cmd.Parameters("mydate")
      Set cnn = Nothing
      Set cmd = Nothing
      Set para1 = Nothing
      Exit Function
    Errhandle:                  '如果获得服务器时间出错,则调用本地时间
      GetServerDate = Date
      Set cnn = Nothing
      Set cmd = Nothing
      Set para1 = Nothing
    End Function
      

  6.   

    可以啊.怎么不可以.
    不过我想以后方便做成access平台的,所以就这样了.省得以后再改程序.