Senin, 27 Februari 2012

VB6 / Crystal Report 8,5 kesalahan: Sebuah string diperlukan di sini


Saya baru-baru tua Warisan visual basic 6 / kristal laporan proyek yang menghubungkan ke server sql database. Pesan kesalahan saya mendapat (Kesalahan # -2147191803 A String diperlukan di sini) saat mencoba menjalankan proyek tampaknya dipersempit ke. Printout perintah di kode berikut:
'Login ke database 
  Set Tabel = Report.Database.Tables 
  Set Tabel = Tables.Item (1) 
  Table.SetLogOnInfo ConnName, dbname, user, pass 
  Domainname = CStr (dipilih) 
  'Set parameter Fields 
  'Deklarasi parameter pemegang 
  Set ParamDefs = Report.ParameterFields 
  'Store parameter objek 
  Untuk Setiap ParamDef Dalam ParamDefs 
  Dengan ParamDef 
  MsgBox ( "domainname:" + domainname) 
  Select Case. ParameterFieldName 
  Case "Nama Perusahaan" 
  . SetCurrentValue Domainname 
  Akhir Pilih 
  Select Case. Nama 
  Kasus "(? Company Name)" 
  . SetCurrentValue Domainname 
  Akhir Pilih 
  'Bendera untuk melihat apa yang ditetapkan ke nilai sekarang 
  MsgBox ( "paramdef:" + ParamDef.Value) 
  Akhir Dengan 
  Berikutnya 
  Report.EnableParameterPrompting = False 
  Screen.MousePointer = vbHourglass 
  'CRViewer1.ReportSource = Laporan 
  'CRViewer1.ViewReport 

  test = 1 
  Report.PrintOut ** ** 
  test = test + 3 
  currenttime = Str (Now) 
  currenttime = Ganti (currenttime, "/", "-") 
  currenttime = Ganti (currenttime, ":", "-") 
  Domainname = Ganti (domainname, ".", "") 
  startName = mPath + "\ crysta ~ 1.pdf" 
  endName = mPath + "\" + domain + "\" + domain + "" + currenttime + ". pdf" 
  rc = MsgBox ( "Tunggu pekerjaan PDF selesai", vbInformation, "H / W Report") 
  Nama startName Sebagai endName 
  Screen.MousePointer = vbDefault 
  End If 
Selama lari, bentuk muncul, yang ParamDef menetapkan variabel "nama perusahaan" dan ketika sampai di garis yang Report.PrintOut petunjuknya untuk mencetak, itu melempar kesalahan. I'm guessing laporan kristal tidak menerima "Company Name" untuk benar menjalankan laporan kristal. Apakah ada orang yang tahu cara untuk mendiagnosis ini ... baik di VB6 atau laporan kristal sisi untuk menentukan apa yang saya hilang di sini?
thanks in advance!
UPDATE:
  • dimasukkan CStr (dipilih) untuk memaksa domainname untuk menjadi string
  • msgboxes dimasukkan ke dalam untuk loop di atas dan di bawah. setcurrentvalue baris
  • dimasukkan Kasus "(? Perusahaan Nama)" pernyataan untuk melihat apakah yang membantu pengaturan nilai
  • mencoba. AddCurrentValue dan. SetCurrentValue fungsi seperti yang disarankan oleh situs-situs forum lain
  • memutuskan bahwa itu .. environement perkembangan saya dimuat di komputer lain dengan VB6 yang sama persis laporan kristal 8,5 berjalan di WinXP sp2 prof dan kesalahan yang sama muncul.
dan ketika saya menjalankan MsgBox (ParamDef.Value) dan juga muncul kosong hilang dengan string yang sama kesalahan. Saya juga tidak bisa menemukan dokumentasi pada kelas craxdrt.ParameterFieldDefinition untuk melihat apa yang tersembunyi fungsi lain yang tersedia. Ketika saya melihat daftar metode dan properti variabel, tidak daftar SetCurrentValue sebagai salah satu fungsi.
Any ideas on this?
thanks lagi di muka
#: 103261     visual-studio    vb6    vb    crystal-reports     User: phill
Berikut adalah cara saya menetapkan parameter pada Crystal (yang datang bersama. NET - tidak tahu apakah itu membantu Anda).
Dim dv As New ParameterDiscreteValue 
dv.Value = showphone 
rpt.ParameterFields("showphone").CurrentValues.Add(dv) 

#: 104259     visual-studio    vb6    vb    crystal-reports     User: nathaniel
terima kasih tapi itu tidak benar-benar membantu. cara set paramters tampaknya benar-benar berbeda. NET   #:27406  phill
dipilih adalah string input variabel yang diambil dari formulir dengan drop-down pilih kotak. Aku sebelumnya menempatkan kotak pesan di sana untuk memastikan adanya variabel melewati tepat sebelum Report.Printout dan itu tidak muncul. Domainname variabel ini juga dinyatakan sebagai tipe string.
#: 103451     visual-studio    vb6    vb    crystal-reports     User: phill
Berapakah nilai dari variabel yang dipilih?
Table.SetLogOnInfo ConnName, dbname, user, pass

Domainname = dipilih

'Set parameter Fields 
Jika tidak sebuah string, maka yang mungkin menjadi masalah. Kristal mengharapkan sebuah string variabel dan ketika ia tidak menerima apa yang diharapkan, ia melempar kesalahan.
#: 103346     visual-studio    vb6    vb    crystal-reports     User: Arthur Miller
Berikut ini adalah contoh hidup menetapkan parameter yang kita gunakan:
For Each CRXParamDef In CrystalReport.ParameterFields 
  Select Case CRXParamDef.ParameterFieldName 
    Case "@start" 
      CRXParamDef.AddCurrentValue CDate("1/18/2002 12:00:00AM") 
    Case "@end" 
      CRXParamDef.AddCurrentValue Now 
  End Select 
Next 
Ini sebenarnya adalah contoh yang ditulis dalam VBScript untuk Crystal 8,5 pencetakan laporan, tetapi sintaks adalah sama untuk VB6
#: 223789     visual-studio    vb6    vb    crystal-reports     User: smbarbour
Dari sudut pandang Anda harus mendapatkan pesan kesalahan yang sama jika Anda membuka laporan dalam Laporan Crystal Perancang dan beralih ke modus pratinjau. The Designer harus juga menunjukkan Anda pesan dengan lokasi yang tepat dari masalah, misalnya bidang yang tidak dapat diperlakukan sebagai string.
Masalahnya bukanlah bahwa lapangan lebih dari 255 byte tidak dapat dicetak. Masalahnya adalah bahwa suatu bidang lebih dari 255 byte tidak dapat digunakan dalam formula, sebagai semacam kriteria ...
#: 131863     visual-studio    vb6    vb    crystal-reports     User: n/a
Aku menambahkan sebuah field untuk tampilan di sql server 2005 database dan memverifikasi laporan menentangnya yang melakukannya dengan tidak ada kesalahan. Apakah itu ada hubungannya dengan masalah saya?
#: 115538     visual-studio    vb6    vb    crystal-reports     User: phill
Hal ini dapat terjadi dalam laporan kristal 8,5 jika Anda mengubah panjang kolom string yang Anda gunakan dalam laporan Anda sehingga melebihi 255 byte. Ini dapat juga terjadi jika Anda mengubah tipe kolom dari varchar ke nvarchar (double byte string!)
Alasan untuk ini adalah bahwa laporan kristal 8,5 memperlakukan semua senar lebih dari 255 bytes sebagai memo field.
Saya menyarankan youe upgrade ke laporan kristal XI - API tidak berubah banyak.
#: 114059     visual-studio    vb6    vb    crystal-reports     User: n/a
Aku akan memeriksa ke dalam kolom tipe variabel.
Sedangkan untuk upgrade, saya sudah mencoba menjalankannya dalam laporan kristal xi dan itu menghasilkan runtime error. Hal ini ada hubungannya dengan Crystal Report Engine Perpustakaan dll yang dirubah somwhere antara dua versi
thanks for the suggestion!   #:27216  phill
Aku ingin tahu apakah saya akan lebih mudah mengubah kode ini untuk vb.NET?
#: 108929     visual-studio    vb6    vb    crystal-reports     User: phill

VB6 / Crystal Report 8.5 error: A string is required here









Bagaimana menggunakan ADO dengan Data Excel dari Visual Basic atau VBA

Artikel ini membahas penggunaan objek Data ActiveX (ADO) dengan spreadsheet Microsoft Excel sebagai sumber data. Artikel juga menyoroti isu-isu sintaks dan keterbatasan tertentu ke Excel. Tulisan ini tidak mendiskusikan OLAP atau PivotTable teknologi atau lain khusus menggunakan Excel data.

Untuk tambahan informasi, klik nomor artikel di bawah ini untuk melihat artikel di Basis Pengetahuan Microsoft:
303814  Cara menggunakan ADOX dengan Data Excel dari Visual Basic atau VBA

INFORMASI LEBIH LANJUT

PENDAHULUAN

Baris dan kolom dari Microsoft Excel spreadsheet erat menyerupai baris dan kolom tabel database. Selama pengguna pikiran bahwa Microsoft Excel bukanlah sebuah sistem manajemen basisdata relasional, dan mengakui keterbatasan-keterbatasan yang memaksakan fakta ini, itu sering masuk akal untuk mengambil keuntungan dari Excel dan alat-alat untuk menyimpan dan menganalisis data.

Microsoft Objek Data ActiveX memungkinkan untuk mengobati buku kerja Excel seolah-olah itu database. Artikel ini membahas cara untuk mencapai hal ini dalam berikut bagian:CATATAN: Pengujian untuk artikel ini dilakukan dengan Microsoft Data Akses komponen (MDAC) 2,5 pada Microsoft Windows 2000 dengan Visual Basic 6.0 Service Pack 3 dan Excel 2000. Artikel ini tidak dapat mengakui atau mendiskusikan perbedaan dalam perilaku yang pengguna dapat mengamati dengan versi yang berbeda dari MDAC, Microsoft Windows, Visual Basic, atau Excel.

Menyambung ke Excel dengan ADO

ADO dapat terhubung ke Excel file data dengan salah satu dari dua OLE Penyedia DB termasuk dalam MDAC:
  • Microsoft Jet penyedia DB OLE - atau -
  • Penyedia DB Microsoft OLE untuk ODBC driver

Cara menggunakan penyedia DB OLE Microsoft Jet

Penyedia Jet memerlukan hanya dua lembar informasi dalam rangka untuk menyambung ke sumber data Excel: jalan, termasuk nama berkas, dan Versi berkas Excel.

Jet selular menggunakan rangkaian sambungan
Dim cn as ADODB.Connection
Set cn = New ADODB.Connection
With cn
 .Provider = "Microsoft.Jet.OLEDB.4.0"
 .ConnectionString = "Data Source=C:\MyFolder\MyWorkbook.xls;" & _
"Extended Properties=Excel 8.0;"
 .Open
End With
    
Penyedia versi: Hal ini diperlukan untuk menggunakan penyedia 4.0 Jet; The Jet 3.51 penyedia tidak mendukung pengandar Jet ISAM. Jika Anda menetapkan Jet 3.51 Penyedia, pada jangka waktu yang Anda menerima pesan galat berikut:
Tidak bisa menemukan ISAM diinstal.
Versi Excel: Menentukan Excel 5.0 untuk buku kerja Excel 95 (versi 7,0 Excel), dan Excel 8.0 untuk Excel 97, Excel 2000 atau Excel 2002 (XP) buku kerja (versi 8.0, 9.0, dan 10,0 Excel).

Jet selular menggunakan kotak Dialog Properti Data Link

Jika Anda menggunakan ADO Data Control atau Data lingkungan dalam aplikasi Anda, kemudian Data Link properti kotak dialog akan ditampilkan untuk mengumpulkan sambungan diperlukan pengaturan.
  1. Pada Penyedia tab, pilih penyedia 4.0 Jet; Jet 3.51 penyedia tidak mendukung pengandar Jet ISAM. Jika Anda menentukan penyedia 3.51 Jet, saat menjalankan Anda menerima pesan galat berikut:
    Tidak bisa menemukan ISAM diinstal.
  2. Pada Sambungan tab, Telusuri untuk file buku kerja Anda. Mengabaikan "User ID" dan "Password" entri, karena ini tidak berlaku untuk koneksi Excel. (Anda tidak dapat membuka sandi-dilindungi berkas Excel sebagai sumber data. Ada lagi informasi mengenai topik ini nanti dalam artikel ini.)
  3. Pada All tab, pilih Panjang properti dalam daftar, dan kemudian klik Mengedit nilai. Masukkan Excel 8.0; memisahkan dari setiap lain ada entri dengan tanda titik koma (;). Jika Anda menghilangkan langkah ini, Anda menerima pesan galat ketika Anda tes Anda sambungan, karena penyedia Jet mengharapkan Microsoft Access database kecuali Anda menentukan sebaliknya.
  4. Kembali ke Sambungan tab dan klik Uji sambungan. Catatan yang muncul kotak pesan yang memberitahu Anda bahwa proses telah berhasil.
Pengaturan sambungan penyedia Jet lain

Judul kolom: Secara default, diasumsikan bahwa baris pertama sumber data Excel Anda berisi judul kolom yang dapat digunakan sebagai lapangan nama. Jika hal ini tidak terjadi, Anda harus mengubah ini berangkat, atau pertama Anda baris data "menghilang" untuk digunakan sebagai nama kolom. Hal ini dilakukan dengan menambahkan opsional HDR = pengaturan Panjang properti dari rangkaian sambungan. Default, yang tidak perlu ditentukan, adalah HDR = Yes. Jika Anda tidak memiliki judul kolom, Anda perlu menentukan HDR = No; penyedia nama kolom F1, F2, dll. Karena Panjang properti string sekarang berisi beberapa nilai, itu harus tertutup dalam ganda kutipan itu sendiri, ditambah tambahan sepasang tanda kutip ganda untuk memberitahu Visual Dasar untuk mengobati set pertama kutipan sebagai nilai literal, seperti dalam berikut contoh (di mana spasi tambahan telah ditambahkan untuk visual kejelasan).
.ConnectionString = "Data Source=C:\MyFolder\MyWorkbook.xls;" & _
"Extended Properties=" " Excel 8.0; HDR=No;" " "
    

Menggunakan penyedia DB Microsoft OLE untuk ODBC driver

Penyedia untuk ODBC driver (yang artikel ini merujuk sebagai "ODBC penyedia" untuk kepentingan keringkasan) juga memerlukan hanya dua (2) potongan informasi untuk menyambung ke sumber data Excel: nama sopir, dan buku kerja jalur dan nama file.

PENTING: Koneksi ODBC ke Excel ini hanya bisa dibaca secara default. ADO Anda Recordset LockTypepengaturan properti tidak menimpa pengaturan sambungan-tingkat ini. Anda harus mengatur ReadOnlyuntuk Palsu dalam rangkaian sambungan Anda atau konfigurasi DSN Anda jika Anda ingin untuk mengedit data Anda. Jika tidak, Anda menerima pesan galat berikut:
Operasi harus menggunakan permintaan updateable.
ODBC selular menggunakan rangkaian sambungan DSN-kurang
Dim cn as ADODB.Connection
Set cn = New ADODB.Connection
With cn
 .Provider = "MSDASQL"
 .ConnectionString = "Driver={Microsoft Excel Driver (*.xls)};" & _
"DBQ=C:\MyFolder\MyWorkbook.xls; ReadOnly=False;"
 .Open
End With
    
ODBC selular menggunakan String koneksi dengan DSN
Dim cn as ADODB.Connection
Set cn = New ADODB.Connection
With cn
 .Provider = "MSDASQL"
 .ConnectionString = "DSN=MyExcelDSN;"
 .Open
End With
    
ODBC selular menggunakan kotak Dialog Properti Data Link

Jika Anda menggunakan ADO Data Control atau Data lingkungan dalam aplikasi Anda, kemudian Data Link properti kotak dialog akan ditampilkan untuk mengumpulkan sambungan diperlukan pengaturan.
  1. Pada Penyedia tab, pilih Penyedia DB Microsoft OLE untuk ODBC driver.
  2. Pada Sambungan tab, pilih DSN ada yang ingin Anda gunakan, atau memilih Menggunakan rangkaian sambungan. Ini memunculkan standar DSN kotak dialog konfigurasi untuk mengumpulkan pengaturan sambungan yang diperlukan. Ingat untuk membatalkan default hanya-baca pengaturan jika diinginkan, seperti yang disebutkan sebelumnya.
  3. Kembali ke Sambungan tab, dan klik Uji sambungan. Catatan yang muncul kotak pesan yang memberitahu Anda bahwa proses telah berhasil.
Lainnya pengaturan sambungan penyedia ODBC

Judul kolom: Secara default, diasumsikan bahwa baris pertama sumber data Excel Anda berisi judul kolom, yang dapat digunakan sebagai lapangan nama. Jika hal ini tidak terjadi, Anda harus mengubah ini berangkat, atau pertama Anda baris data "menghilang" untuk digunakan sebagai nama kolom. Hal ini dilakukan dengan menambahkan opsional FirstRowHasNames = pengaturan untuk rangkaian sambungan. Default, yang tidak harus ditentukan, adalah FirstRowHasNames = 1, di mana 1 = True. Jika Anda tidak memiliki judul kolom, Anda perlu menentukan FirstRowHasNames = 0, di mana 0 \U003d false; pengandar nama bidang F1, F2, dan sebagainya. Opsi ini ini tidak tersedia pada kotak dialog konfigurasi DSN.

Namun, karena untuk bug pada pengandar ODBC, menentukan FirstRowHasNames pengaturan saat ini tidak berpengaruh. Dengan kata lain, Excel ODBC driver (MDAC 2,1 dan belakangan) selalu memperlakukan baris pertama dalam data tertentu sumber sebagai nama kolom. Untuk tambahan informationon Kolom menuju bug, klik nomor artikel di bawah ini untuk melihat artikel di Basis Pengetahuan Microsoft:
288343  BUG: Excel ODBC Driver Disregards FirstRowHasNames atau Header pengaturan
Baris Scan: Excel tidak menyediakan ADO dengan skema rinci tentang data berisi informasi, seperti database relasional. Oleh karena itu, pengandar harus memindai melalui setidaknya beberapa baris yang ada data untuk membuat dugaan yang berpendidikan pada jenis data dari setiap kolom. The default untuk "Baris untuk memindai" adalah delapan (8) baris. Anda dapat menentukan nilai integer dari salah satu (1) untuk enam belas (16) baris, atau Anda dapat menentukan nol (0) untuk memindai semua ada baris. Hal ini dilakukan dengan menambahkan opsional MaxScanRows = pengaturan untuk rangkaian sambungan, atau dengan mengubah Baris Scan pengaturan dalam kotak dialog konfigurasi DSN.

Namun, karena untuk bug di pengandar ODBC, menentukan baris untuk memindai (MaxScanRows) pengaturan saat ini tidak berpengaruh. Dengan kata lain, Excel ODBC driver (MDAC 2.1 dan kemudian) selalu memindai baris pertama 8 di sumber data tertentu dalam untuk menentukan setiap kolom datatype.

Untuk informasi tambahan tentang Baris Scan bug, termasuk solusi sederhana, klik nomor artikel di bawah ini untuk melihat artikel di dalam Basis Pengetahuan Microsoft:
189897  Xl97 Revisi teknis: Data dipotong ke 255 karakter dengan Excel ODBC Driver
Pengaturan lain: Jika Anda membangun rangkaian sambungan Anda dengan menggunakan The Data Link properti kotak dialog, Anda mungkin melihat beberapa lainnya Panjang properti pengaturan yang ditambahkan ke rangkaian sambungan yang tidak benar-benar diperlukan, seperti:
... DefaultDir=C:\WorkbookPath;DriverId=790;FIL=excel 8.0;MaxBufferSize=2048;PageTimeout=5;
    
"Collating urutan" pesan kesalahan di Editor Visual Basic

Dalam Visual Basic desain lingkungan dengan Versi MDAC, Anda mungkin melihat kesalahan berikut saat pesan pertama Anda program menyambung ke sumber data Excel saat desain:
Dipilih menyusun urutan tidak didukung oleh sistem operasi.
Pesan ini muncul hanya dalam IDE dan tidak akan muncul dalam dikompilasi Versi program. Untuk informasi tambahan, klik nomor artikel di bawah ini untuk melihat artikel di Basis Pengetahuan Microsoft:
246167  PRB: Collating urutan kesalahan pembukaan ADODB Recordset pertama kalinya melawan Excel XLS

Pertimbangan yang berlaku untuk kedua penyedia DB OLE

Hati-hati tentang jenis Data campuran

Seperti yang dinyatakan sebelumnya, ADO harus menebak pada jenis data untuk setiap kolom di lembar kerja Excel atau kisaran. (Ini tidak terpengaruh oleh Excel sel format pengaturan.) Masalah yang serius dapat muncul jika Anda memiliki nilai-nilai numerik dicampur dengan nilai-nilai teks dalam kolom yang sama. Kedua Jet dan Penyedia ODBC kembali data mayoritas ketik, tapi kembali NULL (kosong) nilai-nilai untuk tipe data minoritas. Jika dua jenis sama dalam campuran kolom, penyedia memilih angka atas teks.

Misalnya:
  • Dalam Anda delapan (8) dipindai baris, jika kolom berisi lima (5) nilai-nilai numerik dan tiga (3) teks nilai, penyedia kembali lima (5) nomor dan tiga (3) nilai null.
  • Dalam Anda delapan (8) dipindai baris, jika kolom berisi tiga (3) nilai numerik dan lima (5) teks nilai, penyedia kembali tiga (3) null nilai-nilai dan lima (5) teks nilai.
  • Dalam Anda delapan (8) dipindai baris, jika kolom berisi empat (4) nilai-nilai numerik dan empat (4) teks nilai, penyedia kembali empat (4) nomor dan empat (4) nilai null.
Sebagai hasilnya, jika Anda kolom berisi nilai-nilai campuran, Anda hanya jalan adalah untuk menyimpan nilai-nilai numerik dalam kolom teks, dan untuk mengubah mereka kembali ke nomor bila diperlukan dalam aplikasi klien dengan menggunakan Visual Basic VAL fungsi atau setara.

Untuk mengatasi masalah ini untuk hanya-baca data, mengaktifkan Impor Mode dengan menggunakan pengaturan "IMEX = 1" di bagian diperpanjang properti dari rangkaian sambungan. Ini memberlakukanImportMixedTypes = teks pengaturan registri. Namun, perlu diketahui bahwa update mungkin memberikan tak terduga hasil dalam mode ini. Untuk informasi tambahan tentang pengaturan ini, klik nomor artikel di bawah ini untuk melihat artikel di dalam Basis Pengetahuan Microsoft:
194124  PRB: Nilai-nilai Excel kembali sebagai NULL menggunakan DAO OpenRecordset
Anda tidak dapat membuka sandi-dilindungi Workbook

Jika buku kerja Excel yang dilindungi oleh sandi, Anda tidak dapat membukanya untuk mengakses data, bahkan dengan menyediakan sandi yang benar dengan pengaturan sambungan Anda, kecuali jika buku kerja file sudah terbuka di Microsoft Excel aplikasi. Jika Anda mencoba, Anda menerima galat berikut pesan:
Bisa tidak mendekripsi berkas.
Untuk informasi tambahan, klik nomor artikel di bawah ini untuk melihat artikel dalam Pengetahuan Microsoft Base:
211378  XL2000: "Tidak dapat mendekripsi berkas" Error dengan sandi dilindungi File

Mengambil dan mengedit Data Excel dengan ADO

Bagian ini membahas dua aspek bekerja dengan Excel Anda data:
  • Bagaimana memilih data - dan -
  • Cara mengubah data

Cara memilih Data

Ada beberapa cara untuk memilih data. Kamu bisa:

  • Pilih Excel data dengan kode.
  • Pilih Excel data dengan ADO Data kontrol.
  • Pilih Excel data dengan Data lingkungan perintah.

Pilih Excel Data dengan kode

Excel data dapat terkandung dalam buku kerja Anda di salah satu berikut:

  • Seluruh lembar kerja.
  • Kisaran bernama sel pada lembar kerja.
  • Disebutkan namanya kisaran sel pada lembar kerja.
Menentukan lembar kerja

Untuk menentukan lembar kerja sebagai recordsource Anda, gunakan lembar kerja nama diikuti tanda dolar dan dikelilingi oleh kurung. Untuk contoh:
strQuery = "SELECT * FROM [Sheet1$]"
    
Anda juga dapat membatasi nama lembar kerja dengan single kutipan miring karakter (') ditemukan pada keyboard di bawah tilde (~). Misalnya:
strQuery = "SELECT * FROM `Sheet1$`"
    
Microsoft lebih suka kurung, yang berdiri Konvensi untuk nama objek database bermasalah.

Jika Anda menghilangkan keduanya tanda dolar dan tanda kurung, atau hanya tanda dolar, Anda menerima pesan galat berikut:
... Jet database engine tidak dapat menemukan objek tertentu
Jika Anda menggunakan tanda dolar tetapi menghilangkan kurung, Anda akan melihat pesan kesalahan berikut:
Kesalahan sintaks di dari klausa.
Jika Anda mencoba untuk menggunakan tanda kutip tunggal yang biasa, Anda menerima pesan galat berikut:
Kesalahan sintaks dalam permintaan. Permintaan tidak lengkap klausa.
Menentukan kisaran bernama

Untuk menentukan kisaran bernama sel sebagai recordsource Anda, hanya menggunakan nama ditetapkan. Misalnya:
strQuery = "SELECT * FROM MyRange"
    
Menentukan rentang disebutkan namanya

Untuk menentukan kisaran sel sebagai disebutkan Anda recordsource, menambahkan notasi standar Excel baris/kolom ke ujung lembar nama dalam kurung. Misalnya:
strQuery = "SELECT * FROM [Sheet1$A1:B10]"
    
Hati-hati tentang menentukan lembar kerja: Penyedia mengasumsikan bahwa Anda tabel data dimulai dengan sebagian besar-atas, kiri, non-kosong sel pada lembar kerja tertentu. Dalam kata lain, tabel data dapat dimulai pada baris 3, kolom c tanpa masalah. Namun, Anda tidak dapat, misalnya, ketik gelar worksheeet di atas dan ke kiri data di sel A1.

Hati-hati tentang menentukan rentang: Ketika Anda menentukan lembar kerja sebagai recordsource Anda, penyedia menambahkan catatan baru di bawah ada catatan di lembar kerja sebagai ruang memungkinkan. Ketika Anda menentukan berbagai (bernama atau disebutkan namanya), Jet juga menambahkan catatan baru di bawah ini ada catatan dalam kisaran sebagai ruang memungkinkan. Namun, jika Anda requery pada kisaran asli, recordset dihasilkan tidak termasuk Catatan baru ditambahkan di luar jangkauan.

Dengan MDAC versi sebelum 2.5, ketika Anda menentukan kisaran bernama, Anda tidak dapat menambahkan catatan baru luar didefinisikan batas jangkauan, atau Anda menerima pesan galat berikut:
Tidak dapat memperluas kisaran bernama.

Pilih Excel Data dengan Data ADO Control

Setelah Anda menentukan pengaturan sambungan data Excel sumber pada General tab ADODC Propertikotak dialog, klik Recordsource tab. Jika Anda memilih CommandType adCmdText, Anda dapat memasukkan Pilih permintaan di Perintah teks kotak dialog dengan sintaks yang dijelaskan sebelumnya. Jika Anda memilih CommandType adCmdTable, dan Anda menggunakan penyedia Jet, drop-down Daftar menampilkan kisaran bernama dan nama lembar kerja yang tersedia dalam buku dipilih kerja, dengan kisaran bernama terdaftar pertama.

Dialog ini kotak benar menambahkan tanda dolar nama lembar kerja, tetapi tidak menambahkan diperlukan kurung. Sebagai hasilnya, jika Anda hanya memilih nama lembar kerja dan klik Oke, Anda menerima pesan galat berikut kemudian:
Kesalahan sintaks di dari klausa.
Anda harus secara manual menambahkan kurung, sekitar nama lembar kerja. (Ini combo box memungkinkan pengeditan.) Jika Anda menggunakan ODBC penyedia, Anda melihat hanya bernama rentang yang tercantum dalam daftar drop-down. Namun, Anda dapat secara manual memasukkan lembar kerja nama dengan delimiters sesuai.

Pilih Excel Data dengan Data lingkungan perintah

Setelah menyiapkan Data lingkungan koneksi untuk Excel Anda data sumber, membuat yang baru Perintahobjek. Jika Anda memilih Sumber Data dari Pernyataan SQL, Anda dapat memasukkan permintaan dalam textbox yang menggunakan sintaks yang dijelaskan sebelumnya. Jika Anda memilih Sumber Data dariDatabase objek, pilih Tabel pertama daftar drop-down, dan Anda menggunakan penyedia Jet, daftar drop-down menampilkan kisaran bernama dan nama-nama lembar kerja yang tersedia dalam buku dipilih kerja, dengan kisaran bernama terdaftar pertama. (Jika Anda memilih lembar kerja nama di lokasi ini, Anda tidak perlu menambahkan kurung di sekitar nama lembar kerja secara manual seperti yang Anda lakukan untuk mengontrol Data ADO.) Jika Anda menggunakan ODBC penyedia, Anda melihat hanya kisaran bernama tercantum dalam drop-down daftar. Namun, Anda dapat secara manual masukkan nama lembar kerja.

Bagaimana perubahan Excel Data: mengedit, menambah dan menghapus

Mengedit

Anda dapat mengedit Excel data dengan metode ADO normal. Recordset bidang yang sesuai dengan sel-sel pada lembar kerja Excel mengandung Excel Formula (mulai dengan "=") read-only dan tidak dapat diedit. Ingat bahwa koneksi ODBC ke Excel ini hanya bisa dibaca secara default, kecuali jika Anda Tentukan jika tidak pada setelan koneksi Anda. Lihat sebelumnya di bawah "menggunakan Microsoft penyedia DB OLE untuk ODBC driver."

Tambahkan

Anda dapat menambahkan catatan untuk Excel recordsource sebagai ruang memungkinkan. Namun, jika Anda menambahkan baru catatan di luar jangkauan Anda awalnya ditentukan, catatan-catatan ini tidak terlihat jika Anda requery pada kisaran asli spesifikasi. Lihat sebelumnya di bawah "perhatian tentang menentukan rentang."

Dalam keadaan tertentu, ketika Anda menggunakan AddNew dan Pemutakhiran metode ADO Recordsetmungkin objek untuk menyisipkan baris baru data ke tabel Excel, ADO Masukkan nilai data ke kolom salah dalam Excel. Untuk informasi tambahan, klik artikel nomor di bawah ini untuk melihat artikel di dalam Basis Pengetahuan Microsoft:
314763  FIX: ADO memasukkan Data ke salah kolom dalam Excel
Hapus

Anda lebih dibatasi dalam menghapus Excel Dados daripada data dari sumber data relasional. Dalam database relasional, tidak memiliki "baris" makna atau keberadaan selain "record"; dalam lembar kerja Excel, hal ini tidak benar. Anda dapat menghapus nilai di bidang (sel). Namun, Anda tidak dapat:
  1. Menghapus catatan seluruh sekaligus atau Anda menerima pesan galat berikut:
    Menghapus data pada tabel terkait tidak didukung oleh ISAM ini.
    Anda hanya dapat menghapus catatan oleh blanking isi bidang masing-masing individu.
  2. Menghapus nilai dalam sel yang mengandung Excel formula atau Anda menerima pesan galat berikut:
    Operasi ini tidak diperbolehkan dalam konteks ini.
  3. Anda tidak dapat menghapus spreadsheet kosong row(s) di mana data yang dihapus didirikan, dan recordset Anda akan terus menampilkan kosong Catatan sesuai dengan baris ini kosong.
Hati-hati tentang mengedit data Excel dengan ADO: Ketika Anda memasukkan teks data ke Excel dengan ADO, nilai teks didahului dengan single kutipan. Ini dapat menyebabkan masalah kemudian di bekerja dengan data baru.

Mengambil struktur sumber Data (Metadata) dari Excel

Anda dapat mengambil data tentang struktur Excel data sumber (tabel dan ladang) dengan ADO. Hasil berbeda sedikit antara dua OLE DB penyedia, walaupun keduanya kembali setidaknya sama jumlah kecil berguna bidang informasi. Metadata ini dapat diperoleh dengan OpenSchema metode ADO Sambunganobjek, yang mengembalikan ADO Recordset objek. Anda juga dapat menggunakan Data ActiveX Microsoft lebih kuat Objek ekstensi untuk perpustakaan Data definisi bahasa dan keamanan (ADOX) untuk tujuan ini. Dalam kasus sumber data Excel Namun, di mana "meja" adalah lembar kerja atau kisaran bernama, dan "lapangan" adalah salah satu dari sejumlah terbatas datatypes generik, kekuatan tambahan ini tidak berguna.

Query tabel informasi

Berbagai benda yang tersedia di database relasional (tabel, pandangan, disimpan prosedur, dan sebagainya), sumber data Excel memperlihatkan hanya meja setara, terdiri dari lembar kerja dan kisaran bernama didefinisikan di buku kerja yang ditentukan. Kisaran bernama diperlakukan sebagai "Meja" dan lembar kerja diperlakukan sebagai "Sistem meja", dan tidak ada banyak berguna tabel informasi Anda dapat mengambil luar properti ini "table_type". Anda meminta daftar tabel tersedia di buku kerja dengan kode berikut:
Set rs = cn.OpenSchema(adSchemaTables)
    
Penyedia Jet mengembalikan recordset dengan sembilan (9) bidang, yang populates hanya empat (4):

  • table_name
  • table_type ("Meja" atau "Sistem meja")
  • date_created
  • date_modified
Tanggal dua kolom untuk meja tertentu selalu menunjukkan sama nilai, yang tampaknya menjadi "tanggal terakhir." Dengan kata lain, "date_created" ini tidak dapat diandalkan.

Penyedia ODBC juga kembali Recordset dengan sembilan (9) bidang, yang populates hanya tiga (3):

  • table_catalog, folder di mana buku kerja adalah terletak.
  • table_name.
  • table_type, seperti tercantum sebelumnya.
Menurut dokumentasi ADO, dimungkinkan untuk mengambil Daftar lembar kerja hanya, misalnya, dengan menentukan berikut tambahan kriteria untuk OpenSchema metode:
Set rs = cn.OpenSchema(adSchemaTables, Array(Empty, Empty, Empty, "System Table"))
    
Sayangnya, hal ini tidak bekerja terhadap sumber data Excel dengan MDAC versi kemudian daripada 2.0, menggunakan penyedia baik.

Permintaan bidang informasi

Setiap bidang (kolom) di sumber data Excel adalah salah satu datatypes berikut:

  • numerik (ADO datatype 5, adDouble)
  • mata uang (ADO datatype 6, adCurrency)
  • logis atau boolean (ADO datatype 11, adBoolean)
  • tanggal (ADO datatype 7, adDate, menggunakan Jet; 135, adDBTimestamp, menggunakan ODBC)
  • teks (iklan ADO...Char jenis, seperti 202, adVarChar, 200, adVarWChar atau serupa)
Numeric_precision untuk kolom numerik selalu kembali 15 (yang presisi maksimum di Excel); character_maximum_length teks kolom selalu kembali sebagai 255 (yang lebar maksimum tampilan, tapi tidak panjang maksimum, teks dalam Excel kolom). Tidak ada banyak informasi berguna bidang yang Anda dapat memperoleh luar data_type properti. Anda meminta daftar bidang yang tersedia dalam tabel dengan kode berikut:
Set rs = cn.OpenSchema(adSchemaTables, Array(Empty, Empty, "TableName", Empty))
    
Penyedia Jet mengembalikan recordset yang berisi 28 bidang, yang populates delapan (8) untuk bidang dan sembilan (9) untuk bidang teks. The bidang yang berguna mungkin ini:

  • table_name
  • column_name
  • ordinal_position
  • data_type
Penyedia ODBC mengembalikan recordset mengandung 29 bidang, dari yang populates sepuluh (10) untuk bidang dan 11 untuk bidang teks. The berguna bidang yang sama seperti sebelumnya.

Menghitung tabel dan ladang dan sifat

Kode Visual Basic (seperti contoh berikut) dapat digunakan untuk menghitung meja dan kolom dalam Excel sumber data dan tersedia bidang informasi tentang masing-masing. Ini contoh output hasil untuk suatu Listbox, List1, bentuk yang sama.
Dim cn As ADODB.Connection
Dim rsT As ADODB.Recordset
Dim intTblCnt As Integer, intTblFlds As Integer
Dim strTbl As String
Dim rsC As ADODB.Recordset
Dim intColCnt As Integer, intColFlds As Integer
Dim strCol As String
Dim t As Integer, c As Integer, f As Integer
Set cn = New ADODB.Connection
With cn
 .Provider = "Microsoft.Jet.OLEDB.4.0"
 .ConnectionString = "Data Source=" & App.Path & _
"\ExcelSrc.xls;Extended Properties=Excel 8.0;"
 '.Provider = "MSDASQL"
 '.ConnectionString = "Driver={Microsoft Excel Driver (*.xls)};" & _
"DBQ=" & App.Path & "\ExcelSrc.xls; "
 .CursorLocation = adUseClient
 .Open
End With
Set rsT = cn.OpenSchema(adSchemaTables)
intTblCnt = rsT.RecordCount
intTblFlds = rsT.Fields.Count
List1.AddItem "Tables: " & intTblCnt
List1.AddItem "--------------------"
For t = 1 To intTblCnt
 strTbl = rsT.Fields("TABLE_NAME").Value
 List1.AddItem vbTab & "Table #" & t & ": " & strTbl
 List1.AddItem vbTab & "--------------------"
 For f = 0 To intTblFlds - 1
  List1.AddItem vbTab & rsT.Fields(f).Name & _
vbTab & rsT.Fields(f).Value
 Next
 List1.AddItem "--------------------"
 Set rsC = cn.OpenSchema(adSchemaColumns, Array(Empty, Empty, strTbl, Empty))
 intColCnt = rsC.RecordCount
 intColFlds = rsC.Fields.Count
 For c = 1 To intColCnt
  strCol = rsC.Fields("COLUMN_NAME").Value
  List1.AddItem vbTab & vbTab & "Column #" & c & ": " & strCol
  List1.AddItem vbTab & vbTab & "--------------------"
  For f = 0 To intColFlds - 1
   List1.AddItem vbTab & vbTab & rsC.Fields(f).Name & _
vbTab & rsC.Fields(f).Value
  Next
  List1.AddItem vbTab & vbTab & "--------------------"
  rsC.MoveNext
  Next
  rsC.Close
  List1.AddItem "--------------------"
  rsT.MoveNext
Next
rsT.Close
cn.Close
    

Menggunakan jendela tampilan Data

Jika Anda membuat data link ke sumber data Excel dalam Visual Dasar Data tampilan jendela, jendela Data lihat menampilkan informasi yang sama yang Anda dapat mengambil pemrograman seperti yang dijelaskan sebelumnya. Secara khusus, catatan bahwa penyedia Jet daftar lembar kerja dan kisaran bernama di bawah "Meja" di mana penyedia ODBC menunjukkan hanya bernama rentang. Jika Anda menggunakan ODBC Penyedia dan memiliki tidak didefinisikan apapun kisaran bernama, "Tabel" daftar akan kosong.

Excel keterbatasan

Menggunakan Excel sebagai sumber data terikat oleh internal keterbatasan buku kerja Excel dan lembar kerja. Ini termasuk, tapi tidak terbatas:

  • Lembar kerja ukuran: 65.536 baris oleh 256 kolom
  • Sel isi (teks): karakter 32,767
  • Lembar di buku kerja: dibatasi oleh tersedia memori
  • Nama-nama dalam buku kerja: dibatasi oleh memori yang tersedia