請問各位高手,能不能將附件中的vb源碼轉換到 OFFICE ACCESS 中 使用,謝謝!以下是源碼:
  Public Function CodeX_To_CodeY(ByVal strIn As String, ByVal intCodePage As Integer) As String
'  1、   利用   strConv   函數將   Unicode   字串轉換成   DBCS   +SBCS   字串;
'  2、   計算長度   (以bytes為單位,即英文文字算一字,中文算二個字。);
'  3、   取出每一字的第一位元組數值、第二位元組數值。(此一部份請參考王國榮一書的介紹);
'  4、   其次依據第一、第二位元數值,找出簡體中文對照表   (tbl936)   裡的繁體中文的索引值;
'  5、   根據索引值,找出陣列裡相對位置的數值   (X);
'  6、   利用   Chr(x)   函數轉換相對的繁體中文。有關程式碼只節錄三函數   (codeX_To_CodeY,CrossRef,InCodePage)   之一如下:
'
'  只要擴增對照表範圍,如   CNS、ETEN、MAC、HZ   等,本函數相對在   SELECT...END   SELECT   區擴充即可。
'
          Dim bytIn()                                                     As Byte
          Dim bytTemp(1)                                               As Byte
          Dim lngCrossNo                                               As Long
          Dim lngIndex                                                   As Long
          Dim lngLength                                                 As Long
          Dim strOut                                                       As String
            
          On Error Resume Next
            
          '   若「是否載入成功」之值為否,則呼叫「載入BIG   5,   GB對照資料」程序。
          If Not mblnLoadData Then Call LoadArrayFromDatabase
          '   若「是否載入成功」之值為否,讓傳入值放置於傳回值(=不變)。
          If Not mblnLoadData Then
                  CodeX_To_CodeY = strIn
                  Exit Function
          End If
            
          '   strConv函數將Unicode字串轉換成   DBCS   +SBCS字串
          '   即英文文字算一字,中文算二個字。
          bytIn = StrConv(strIn, vbFromUnicode)
    
          '   陣列長度。
          lngLength = UBound(bytIn)
          '   索引起始值。
          lngIndex = 0
            
          Do While lngIndex <= lngLength
                  '   放置第一位元組。(176)
                  bytTemp(0) = bytIn(lngIndex)
                  '   放置第二位元組。(162)
                  bytTemp(1) = bytIn(lngIndex + 1)
                    
                  '   將第一位元組及第二位組轉換成對照表裡的次序編號(Order   Number)。
                  '   如「阿」字,   Big   5   CODE   為AAFC   (170,252)
                  '   經計算lngCrossNo   =   1567
                  '   至tbl950資料表去找欄位   OrderNo   =   1567,則在欄位   Code   為   GB   CODE   對照碼   B0A2   。
    
                  '   如「阿」字,   GB   CODE   為B0A2   (176,162)
                  '   經計算lngCrossNo   =   1411
                  '   至tbl936資料表去找欄位   OrderNo   =   1411,則在欄位   Code為   Big   5對照碼   AAFC。
                  lngCrossNo = CrossRef(bytTemp, intCodePage)
                    
                  Select Case intCodePage
                          Case 936           '   GB   Code.
                                  '   判斷字元是否為GB   Code,與對照號碼是否位於   [0,8177]   區間。
                                  If InCodePage(bytTemp, intCodePage) And (lngCrossNo >= 0) And (lngCrossNo <= 8177) Then
                                          '   利用   CHR   函數轉換對照表相對的Big   5   Code
                                          '   val("&hAAFC")   =   -21764
                                          '   chr(-21764)       =   "阿"
                                          strOut = strOut & Chr(mintOrder936(lngCrossNo))
                                          lngIndex = lngIndex + 2
                                  '   如果不符合條件,可以判斷為Ascii。
                                  Else
                                          strOut = strOut & Chr(bytTemp(0))
                                          lngIndex = lngIndex + 1
                                  End If
                                    
                          Case 950           '   Big   5   Code.
                                  '   判斷字元是否為BIG   5   Code,與對照號碼是否位於   [0,14757]   區間。
                                  If InCodePage(bytTemp, intCodePage) And (lngCrossNo >= 0) And (lngCrossNo <= 14757) Then
                                          '   利用   CHR   函數轉換對照表相對的Big   5   Code
                                          '   val("&hAAFC")   =   -20318
                                          '   chr(-20318)       =   "阿"   (請用簡體中文系統檢視)
                                          strOut = strOut & Chr(mintOrder950(lngCrossNo))
                                          lngIndex = lngIndex + 2
                                  '   如果不符合條件,可以判斷為Ascii。
                                  Else
                                          strOut = strOut & Chr(bytTemp(0))
                                          lngIndex = lngIndex + 1
                                  End If
                  End Select
          Loop
          CodeX_To_CodeY = strOut
  End FunctionPrivate Function CrossRef(ByRef bytChrString() As Byte, ByVal intCodePage As Integer) As Long
    Dim intX As Integer
    Dim intY As Integer    On Error GoTo CrossRef_EH    intX = bytChrString(0)
    intY = bytChrString(1)    Select Case intCodePage
    Case 936        CrossRef = (intX - 161) * 94 + (intY - 161)
    Case 950        If (intY >= 64) And (intY <= 126) Then
            CrossRef = (intX - 161) * 157 + (intY - 64)
        End If        If (intY >= 161) And (intY <= 254) Then
            CrossRef = (intX - 161) * 157 + 63 + (intY - 161)
        End If
    End Select    Exit Function
CrossRef_EH:
    CrossRef = -1
End Function

解决方案 »

  1.   

    主要是以下代碼如何融合到access中:Public Sub LoadArrayFromDatabase()
        Dim lngCnt                          As Integer
        Dim objConn                         As ADODB.Connection
        Dim objField                        As ADODB.Field
        Dim objRec                          As ADODB.Recordset
        Dim strSQL(1 To 2)                  As String
        
        'On Error GoTo LoadArrayFromDatabase_EH
        
        mblnLoadData = True
        
        strSQL(1) = "SELECT CODE FROM tbl950 ORDER BY ORDERNO "
        
        strSQL(2) = "SELECT CODE FROM tbl936 ORDER BY ORDERNO "
        
        Set objConn = New ADODB.Connection
        objConn.Open gstrConnectionString
        
        Set objRec = New ADODB.Recordset
        objRec.CursorLocation = adUseClient
       
        objRec.Open strSQL(1), objConn, adOpenDynamic, adLockReadOnly
       
        Set objField = objRec.Fields(CODE)
       
        For lngCnt = 0 To 14757
            mintOrder950(lngCnt) = Val("&H" & objField.Value)
            objRec.MoveNext
        Next lngCnt
        
        objRec.Close
        '
        Set objRec = New ADODB.Recordset
        objRec.CursorLocation = adUseClient
        
        objRec.Open strSQL(2), objConn, adOpenDynamic, adLockReadOnly
       
        Set objField = objRec.Fields(CODE)
        
        For lngCnt = 0 To 8177
            mintOrder936(lngCnt) = Val("&H" & objField.Value)
            objRec.MoveNext
        Next lngCnt
        
        objRec.Close
        objConn.Close
        
        Exit Sub
        
    LoadArrayFromDatabase_EH:
        mblnLoadData = False
    End Sub謝謝~
      

  2.   

    這是 adodb 的聯接
    Public Function gstrDBFile_CodePage() As String
        gstrDBFile_CodePage = CurrentProject.Connection  '.Path & "\CodePage.mdb"
    End FunctionPublic Function gstrConnectionString()
        gstrConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & gstrDBFile_CodePage
    End Function