none
Excel2003用vb6匯入SQL2000 RRS feed

  • 一般討論

  • Excel中有2欄位:產品型號,客戶品號
    有一筆資料的產品型號為: A001, 客戶品號為: 214.1196 設為文字型態
    但透過vb6匯入SQL table時,客戶品號卻變為: 214.12
    請問是為何? 如何解決? (這和我以前遇到的問題不大一樣)
    謝謝!
    註1. vb6的匯入語法為:
    SELECT 產品型號,客戶品號 = CAST(客戶品號 AS VARCHAR(150) ) INTO #TMP_EXCEL FROM OPENROWSET('MICROSOFT.JET.OLEDB.4.0','EXCEL 8.0;IMEX = 1;DATABASE = D:\TEST.XLS',[SHEET1$])
    註2, 若在Excel中,把客戶品號的資料前面加單引號,強制變為文字型態,如: '214.1196 則匯入的資料變正常,問題是,不能要求user每次匯入,就先去加工資料,她們會覺得很麻煩,
    註3, 客戶品號的資料,是文數字混會的,如: 0214.1180C, 206.0596, 但此欄均在儲存格格式設為文字
    2012年5月2日 上午 05:39

所有回覆

  • 請問一下,如果客戶品號是0214.1180C時,你的VB6能成功轉變嗎?

    你能否打印一下那個temp table的schema來看看

    USE tempdb;
    GO
    sp_help '#TMP_EXCEL';


    大家一齊探討、學習和研究,謝謝!
    Microsoft MVP, Microsoft Community Star(TW & HK), MCT,
    MCSD, MCAD, MCSE+I, MCDBA, MCDST, MCSA, MCTS, MCITP, MCPD
    MVP for VB.NET since 2003


    2012年5月2日 上午 06:54
  • 您好,

    如果客戶品號是0214.1180C時,VB6是可以成功轉入的!

    我想, 214.1196 之所以變成 214.12, 可能是因為轉換時,被當成數值而自動進位了,然而設成文字格式也沒用!

    至於temp table的schema, 是很單純的:

    產品型號    varchar   20

    客戶品號    varchar   150

    謝謝

    2012年5月2日 上午 08:26
  • 您好,

    或許能改一下註冊檔試一下哦!

    把TypeGuessRows的值改成0,及檢查一下 ImportMixedTypes的值,試看看!

    HKLM\Software\Microsoft\Jet\4.0\Engines\Excel\TypeGuessRows

    or

    HKLM\SOFTWARE\wow6432node\microsoft\jet\4.0\engines\excel\TypeGuessRows

    透過 OleDb 精準讀入 Excel 檔的方法

    資料被截斷成 255 個字元,Excel ODBC 驅動程式

    PRB: Transfer of Data from Jet 4.0LEDB Source Fails with Buffer Overflow Error


    以上說明若有錯誤請指教,謝謝。
    亂馬客blog: http://www.dotblogs.com.tw/rainmaker/


    • 已編輯 亂馬客 2012年5月4日 上午 12:52
    2012年5月4日 上午 12:50
  • 你可以看看下面的網頁,參考一下

    Retrieving Data From Excel Using OPENROWSET()


    大家一齊探討、學習和研究,謝謝!
    Microsoft MVP, Microsoft Community Star(TW & HK), MCT,
    MCSD, MCAD, MCSE+I, MCDBA, MCDST, MCSA, MCTS, MCITP, MCPD
    MVP for VB.NET since 2003

    2012年5月4日 上午 01:30
  • 亂馬客 您好,

    以下方法,我都試過, 均非絕對有效, 可能此次ok, 下次user遇到另一種資料組合, 又出問題!

    1. Excel首筆數字前加單引號: '
    2. connection string 加: IMEX=1
    3. 改registry
    4. Excel轉csv再轉回,消除控制碼
    5. 匯入前關Excel
    6. SQL Server裝Excel 2003(11.0), Local裝Excel 2003, vb 引用項目: 11.0, connection string 用8.0
    7. Excel格式均改為一致:文字

    -------------

    以前在查google大神時,您的大作我就已拜讀過

    目前我是以vba的方式匯入資料,雖慢,但較可靠!

    謝謝指教! 

    2012年5月4日 上午 02:46
  • 不好意思,英文的網頁,我閱讀起來有點吃力,所以我只看程式碼的部份,好像沒看到什麼絕招.

    也許等公司將來升級到office 2007以上, 我可以改用ACE引擎來匯入, 或者改用NPOI Library ,希望能徹底解決問題!

    我知道還有一招應該可行,但我還沒試, 就是把Excel轉成csv, 再用vb讀入SQL table, 要找時間寫成模組.

    謝謝指教! 

    2012年5月4日 上午 03:16