PRB: Nilai-nilai Excel kembali sebagai NULL menggunakan DAO OpenRecordset

Terjemahan Artikel Terjemahan Artikel
ID Artikel: 194124 - Melihat produk di mana artikel ini berlaku.
Perbesar semua | Perkecil semua

Pada Halaman ini

GEJALA

Saat menghubungkan ke Spreadsheet Excel menggunakan metode DAO OpenRecordset, beberapa nilai pada kolom Excel dapat kembali sebagai Null ketika yang mendasari nilai tidaklah Null. Hal ini biasanya terjadi ketika numerik dan teks datatypes intermixed dalam kolom Excel yang sama.

PENYEBAB

Masalah ini disebabkan oleh pembatasan pengandar Excel ISAM yang Setelah menentukan datatype Excel kolom, itu akan kembali Null untuk setiap nilai yang tidak datatype ISAM pengandar gagal untuk untuk Excel kolom. Pengandar Excel ISAM menentukan datatype dari Excel kolom dengan memeriksa sebenarnya nilai pertama beberapa baris dan kemudian memilih datatype yang mewakili sebagian besar nilai dalam yang sampel.

PEMECAHAN MASALAH

Ada dua cara untuk perilaku ini:
  1. Memastikan bahwa data dalam Excel dimasukkan sebagai teks. Hanya reformatting Excel kolom teks tidak akan melakukannya. Anda harus memasukkan kembali ada nilai setelah reformatting Excel kolom. Dalam Excel, Anda dapat menggunakan F5 untuk memasukkan kembali nilai-nilai yang ada dalam sel terpilih.
  2. Anda dapat menambahkan pilihan IMEX = 1; untuk Excel menghubungkan string dalam OpenDatabase metode. Misalnya:
          Set Db = OpenDatabase("C:\Temp\Book1.xls", _
                False, True, "Excel 8.0; HDR=NO; IMEX=1;")
    
    						
    Catatan: Pengaturan IMEX = 1 memberitahu sopir untuk menggunakan mode impor. Dalam keadaan ini, registri yang menetapkan ImportMixedTypes = teks akan melihat. Hal ini akan memaksa campuran data untuk dikonversikan ke teks. Untuk bekerja terpercaya, Anda mungkin juga harus mengubah pengaturan registri, TypeGuessRows = 8. Islam TERPADU driver secara default terlihat pada baris pertama delapan dan dari sampel itu menentukan datatype. Jika ini delapan baris sampling semua angka, kemudian menetapkan IMEX = 1 tidak akan mengkonversi default datatype untuk teks; itu akan tetap numerik.

    Anda harus berhati-hati bahwa IMEX = 1 tidak boleh digunakan tanpa pandang bulu. Ini adalah Impor modus, sehingga hasil mungkin tak terduga jika Anda mencoba melakukan menambahkan atau memperbarui data dalam mode ini.

    Pengaturan mungkin IMEX adalah:
            0 is Export mode
            1 is Import mode
            2 is Linked mode (full update capabilities)
    
    						
    Kunci registri di mana pengaturan yang diuraikan di atas berada adalah:

    HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Jet\3.5\Engines\Excel

    Lihat bagian referensi dari artikel ini untuk informasi tentang ketika Excel spreadsheet memiliki teks kolom header dengan data numerik.

STATUS

Perilaku ini sesuai rancangannya.

INFORMASI LEBIH LANJUT

Langkah-langkah untuk mereproduksi perilaku

Untuk menduplikasi masalah ini, pertama buat buku kerja Excel dengan default Sheet1 spreadsheet. Dalam kolom pertama Sheet1, masukkan berikut nilai-nilai - 123, aaa, 456, bbb, 789. Simpan buku kerja ini di C:\Temp Anda direktori, dan nama Book1.XLS.

Dalam Visual Basic, buat projek Standard EXE yang baru dan ikuti langkah-langkah ini:
  1. Membuat referensi ke perpustakaan objek Microsoft DAO 3.5. Dalam Visual Basic 6.0, ini akan menjadi perpustakaan objek Microsoft DAO 3.51.
  2. Tambah CommandButton bentuk baru.
  3. Letakkan kode berikut dalam bentuk umum Deklarasi bagian:
          Dim Db As Database
          Dim Rs As Recordset
    
          Private Sub Command1_Click()
              Set Rs = Db.OpenRecordset("Sheet1$")
              'This will print the spreadsheet Text values as Nulls.
    
              Do While Not Rs.EOF
                  Debug.Print Rs(0)
                  Rs.MoveNext
              Loop
    
          End Sub
    
          Private Sub Form_Load()
              'HDR refers to the Excel header row.
          Set Db = OpenDatabase("C:\Temp\Book1.xls", _
                   False, True, "Excel 8.0; HDR=NO;")
    
          End Sub
    
          Private Sub Form_Unload(Cancel As Integer)
              Db.Close
              Set Db = Nothing
    
          End Sub
    
    						
    Menjalankan proyek dengan menekan tombol F5 dan perhatikan bahwa di jendela Debug nilai-nilai teks dicetak sebagai Null. Jika sebagian besar nilai-nilai di Excel Spreadsheet yang teks, maka hasil dari kode di atas akan dibalikkan. Itu adalah, nilai-nilai numerik akan kembali sebagai Nulls.

REFERENSI

Untuk informasi tambahan, silakan lihat artikel berikut di Basis Pengetahuan Microsoft:

190195: HOWTO: mengambil informasi dari Excel Sheet dengan DAO

Properti

ID Artikel: 194124 - Kajian Terakhir: 19 September 2011 - Revisi: 2.0
Berlaku bagi:
  • Microsoft Visual Basic 5.0 Professional Edition
  • Microsoft Visual Basic 6.0 Professional Edition
  • Microsoft Visual Basic 4.0 Enterprise Edition
  • Microsoft Visual Basic 5.0 Enterprise Edition
Kata kunci: 
kbprb kbmt KB194124 KbMtid
Penerjemahan Mesin
PENTING: Artikel ini diterjemahkan menggunakan perangkat lunak mesin penerjemah Microsoft dan bukan oleh seorang penerjemah. Microsoft menawarkan artikel yang diterjemahkan oleh seorang penerjemah maupun artikel yang diterjemahkan menggunakan mesin sehingga Anda akan memiliki akses ke seluruh artikel baru yang diterbitkan di Pangkalan Pengetahuan (Knowledge Base) dalam bahasa yang Anda gunakan. Namun, artikel yang diterjemahkan menggunakan mesin tidak selalu sempurna. Artikel tersebut mungkin memiliki kesalahan kosa kata, sintaksis, atau tata bahasa, hampir sama seperti orang asing yang berbicara dalam bahasa Anda. Microsoft tidak bertanggung jawab terhadap akurasi, kesalahan atau kerusakan yang disebabkan karena kesalahan penerjemahan konten atau penggunaannya oleh para pelanggan. Microsoft juga sering memperbarui perangkat lunak mesin penerjemah.
Klik disini untuk melihat versi Inggris dari artikel ini:194124

Berikan Masukan

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com