access在导出csv文件时,可能会对非空的字符型内容,默认添加双引号("),所以直接用execl打开时看不到,而在读取后,用来比较等,就会出错.

 

  1. 'tblName 要处理的表名 
  2. 'FileFullPath 选择的csv文件 
  3. Private Function ImportFile(ByVal tblName As String, FileFullPath As String, _ 
  4.     Optional FieldDelimiter As String = ",", _ 
  5.     Optional RecordDelimiter As String = vbCrLf) As Boolean 
  6.     On Error GoTo BACKERR: 
  7.  
  8.     Dim objDB As DAO.Workspace 
  9.     Dim db As DAO.Database 
  10.     Dim rs As DAO.Recordset 
  11.     Dim iFileNum As Integer 
  12.     Dim sFileContents As String         ' csv文件数据 
  13.     Dim sTableSplit() As String         ' csv以行为单位的数据组 
  14.     Dim sRecordSplit() As String        ' csv每行内以(,)分隔开后的数据组 
  15.     Dim lCtr As Integer 
  16.     Dim iCtr As Integer 
  17.     Dim lRecordCount As Long            ' csv文件内的行数 
  18.     Dim tmp As String 
  19.     ' csv文件数据的取得 
  20.     iFileNum = FreeFile 
  21.     Open FileFullPath For Binary As #iFileNum 
  22.     sFileContents = Space(LOF(iFileNum)) 
  23.     Get #iFileNum, , sFileContents 
  24.     Close #iFileNum 
  25.     sTableSplit = Split(sFileContents, RecordDelimiter) 
  26.     ' 每行数据的项目数取得 
  27.     lRecordCount = UBound(sTableSplit) 
  28.     ' 对应项目名取得 
  29.     sRecordFields = Split(sTableSplit(0), FieldDelimiter) 
  30.      
  31.     Set objDB = DBEngine.Workspaces(0) 
  32.     Set db = CurrentDb 
  33.      
  34.     objDB.BeginTrans 
  35.     For lCtr = 1 To lRecordCount - 1 
  36.         ' 每一行的数据取得 
  37.         tmp = Replace(CStr(sTableSplit(lCtr)), Chr(34), ""
  38.        ' 去除双引号(") 
  39.         sRecordSplit = Split(tmp, FieldDelimiter) 
  40.          
  41.         Set rs = db.OpenRecordset("A", dbOpenDynaset) 
  42.         rs.FindFirst "ID= '1-" & sRecordSplit(12) & "-" & sRecordSplit(13) & "'" 
  43.                          
  44.         If rs.NoMatch = False Then 
  45.             rs.Edit 
  46.             rs!modified = Now                    
  47.             rs!modifieduser = Comm.getUserId     
  48.             rs.Update 
  49.         End If 
  50.     Next lCtr 
  51.      
  52.    objDB.CommitTrans 
  53.      
  54.    rs.Close 
  55.    db.Close 
  56.    objDB.Close 
  57.    Set rs = Nothing 
  58.    Set db = Nothing 
  59.    Set objDB = Nothing 
  60.    ImportFile = True 
  61.    Exit Function 
  62. BACKERR: 
  63.    objDB.Rollback 
  64.    rs.Close 
  65.    db.Close 
  66.    objDB.Close 
  67.    Set rs = Nothing 
  68.    Set db = Nothing 
  69.    Set objDB = Nothing 
  70.    ImportFile = False 
  71.      
  72.     'MsgBox Err.Number & "->" & Err.Description 
  73. End Function