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

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
Artikel ini telah diarsipkan. Artikel ditawarkan dalam bentuk "apa adanya" dan tidak akan dapat diperbarui lagi.
GEJALA
Saat menghubungkan ke Spreadsheet Excel menggunakan metode DAO OpenRecordset,beberapa nilai pada kolom Excel dapat kembali sebagai Null ketika yang mendasarinilai tidaklah Null. Hal ini biasanya terjadi ketika numerik dan teks datatypesintermixed dalam kolom Excel yang sama.
PENYEBAB
Masalah ini disebabkan oleh pembatasan pengandar Excel ISAM yangSetelah menentukan datatype Excel kolom, itu akan kembali Nulluntuk setiap nilai yang tidak datatype ISAM pengandar gagal untukuntuk Excel kolom. Pengandar Excel ISAM menentukan datatype dariExcel kolom dengan memeriksa sebenarnya nilai pertama beberapa baris dan kemudianmemilih datatype yang mewakili sebagian besar nilai dalam yangsampel.
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 defaultSheet1 spreadsheet. Dalam kolom pertama Sheet1, masukkan berikutnilai-nilai - 123, aaa, 456, bbb, 789. Simpan buku kerja ini di C:\Temp Andadirektori, 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 diBasis Pengetahuan Microsoft:

190195: HOWTO: mengambil informasi dari Excel Sheet dengan DAO
kbDSupport kbdse spreadsheet buku kerja kbDAO350 kbDAO250 kbDAO300 kbIISAM kbExceL kbVBp400 kbVBp500 kbVBp600 kbVBp kbRegistry

Peringatan: Artikel ini telah diterjemahkan secara otomatis

Properti

ID Artikel: 194124 - Tinjauan Terakhir: 12/05/2015 09:27:50 - Revisi: 2.0

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

  • kbnosurvey kbarchive kbprb kbmt KB194124 KbMtid
Tanggapan