2014-12-05 111 views
0

我正在使用DoCmd.TransferSpreadsheet將數據從Excel導入到Access。 一切工作正常,除了一些Excel行被截斷,因爲訪問單個行(不是字段)的字節太多。如何在使用DoCmd.TransferSpreadsheet時避免accdb行大小限制?

我注意到,Access中的每個字段都被創建爲文本(255),而我的Excel行不超過100個字符。

我認爲,如果我設法導入創建默認長度爲100個字符的字段的Excel文件,我將不再獲取截斷的數據。

有沒有辦法將Access字段的默認文本長度設置爲特定的數字?


UPDATE

在Access降低默認的字段文本尺寸2010頁的選項似乎運行DoCmd.TransferSpreadsheet

回答

0

我寫我自己的導入功能,以及它的工作原理:

' Import from an Excel with a default field length different from 255 (must be < 255) 
Function importFromExcel(fileName As String, fieldLength as integer) 
    Dim my_xl_app As Object 
    Dim my_xl_worksheet As Object 
    Dim my_xl_workbook As Object 
    Set my_xl_app = CreateObject("Excel.Application") 
    Set my_xl_workbook = my_xl_app.Workbooks.Open(fileName) 
    Set s = my_xl_workbook.Worksheets(1) 

    Dim fieldsNumber As Integer 
    Dim recordNumber As Long 
    fieldsNumber = s.cells(1, s.Columns.Count).End(1).Column 
    recordNumber = s.cells(s.Rows.Count, 1).End(3).Row 
    tablename = "[" & Replace(GetFilenameFromPath(fileName), ".", "_") & "]" 
    On Error Resume Next 
    DoCmd.RunSQL "DROP TABLE " & tablename 
    On Error GoTo 0 

    ' Creo tabella 
    sql = "CREATE TABLE " & tablename & " (F1 TEXT(" & fieldLength & ")) " 
    DoCmd.RunSQL sql 

    For i = 2 To fieldsNumber 
     sql = "ALTER TABLE " & tablename & " ADD COLUMN F" & i & " TEXT(" & fieldLength & ")" 
     DoCmd.RunSQL sql 
    Next 



    ' Ora insert 
    For i = 1 To recordNumber 
     sql = "INSERT INTO " & tablename & " VALUES (" 
     For j = 1 To fieldsNumber 
      sql = sql & " '" & Replace(s.cells(i, j), "'", "''") & "'," 
     Next 
     sql = Mid(sql, 1, Len(sql) - 1) 
     sql = sql & ")" 

    Next 

    my_xl_workbook.Close SaveChanges:=False 
    Set my_xl_app = Nothing 
End Function 
0

時要設置訪問(2007年)的默認文字長度,單擊Office被忽略按鈕>「訪問選項按鈕」>「對象設計器」(位於左側窗格中),然後在表格設計下的默認文本字段大小框中輸入50,然後單擊確定。

+0

正如我在寫更新,默認的文本大小被忽略,當我導入具有DoCmd.TransferDatasheet – kiks73 2014-12-05 14:21:54

+0

數據看出剛過,對不起。 – Veve 2014-12-05 14:45:47

相關問題