Sebagai penggemar ASP, saya sering menggunakan objek ADO di halaman ASP untuk mengoperasikan database ODBC. Saya merasa sangat nyaman menggunakan ASP untuk membuat sistem aplikasi WEB. Meskipun dalam karir pemrograman saya, penulis lebih menyukai produk seri Borland dan agak menjijikkan terhadap produk Microsoft, kecuali ASP. Suatu hari saya mendapat ide. Objek ADO adalah objek OLE standar. Akan lebih bagus jika ADO dapat digunakan untuk mengoperasikan database dalam aplikasi DELPHI. Terutama ketika menggunakan DELPHI sebagai aplikasi database jaringan, jika situs WEB adalah situs WINNT dan mendukung halaman ASP, Anda dapat menggunakan objek ADO untuk mengakses database ODBC tanpa mengunggah BDE sebesar itu ke situs tersebut, sehingga Anda dapat sepenuhnya Gunakan keunggulan pemrograman DELPHI dan ASP untuk membuat ISAPI/NSAPI/CGI yang lebih baik.
----Setelah pemrograman dan pengujian, Anda berhasil menggunakan objek ADO untuk mengakses database ODBC di DELPHI.
---- Dalam DELPHI 32-bit, Anda dapat mendeklarasikan variabel varian (seperti AVariant), lalu membuat objek OLE melalui CreateOleObject, seperti AVariant:=CreateOleObject('ADODB.Connection') untuk mendapatkan instance dari objek koneksi database, Kemudian Anda dapat menggunakan metode dan properti objek untuk mengoperasikan database ODBC.
----Berikut ini adalah pengenalan singkat tentang objek ADO yang digunakan untuk mengakses database ODBC serta metode dan propertinya.
---- 1. Objek koneksi database (ADODB.Connection)
---- Objek ini digunakan untuk membuat koneksi dengan database ODBC, dan semua operasi pada database dilakukan melalui koneksi ini.
---- Objek koneksi database ADODB.Connection berfungsi seperti objek TDatabase di Delphi.
---- Metode untuk membuat objek koneksi adalah (AConnection adalah variabel tipe Varian):
---- AConnection:=CreateOleObject('ADODB.Connection')
---- Metode yang digunakan untuk membuat koneksi adalah Terbuka, dan sintaks penggunaannya adalah (ambil objek AConnection sebagai contoh):
---- AConnection.Open(ConnectionString, UserId, Kata Sandi)
---- Ketiga parameter tersebut semuanya bertipe string, dimana UserId dan Password adalah nama pengguna dan kata sandi yang digunakan untuk mengakses
---- Digunakan dalam database, dapat dihilangkan karena nama pengguna dan kata sandi pengguna juga dapat ditentukan dalam ConnectionString. ConnectionString adalah string yang digunakan untuk menggambarkan informasi sumber data ODBC. Formatnya adalah:
'PRovider=Nama Penyedia;DSN=DSNNama;DRIVER=driver; SERVER=server;DATABASE=database;UID=pengguna;
---- di dalam:
---- Penyedia: Penyedia data, defaultnya adalah MSDASQL, adalah Microsoft OLEDB, biasanya dihilangkan
---- DSN: Sumber data sistem ODC (DSN) yang sesuai dengan database yang akan dibuka, yang merupakan parameter opsional.
---- DRIVER: Nama driver yang digunakan untuk membuka database, seperti akses yang sesuai
----Microsoft Access Driver(*.mdb), adalah parameter opsional
---- SERVER: Nama server tempat database yang akan dibuka berada. Tersedia di mesin ini (lokal) dan merupakan parameter opsional.
---- DATABASE: Nama database yang akan dibuka, parameter opsional
---- UID: Nama pengguna, yang digunakan untuk mengakses database, adalah parameter opsional
----PWD: Kata sandi pengguna, yang digunakan untuk mengakses database, adalah parameter opsional
---- Semua parameter di atas adalah parameter opsional, tetapi informasi yang memadai harus disediakan untuk menjelaskan sumber data sistem.
---- Jika DSN sistem ODBC telah ditentukan, bernama MyDsn, maka Anda dapat menggunakan pernyataan berikut untuk membuat koneksi database:
----
AConnection.Open('DSN=MyDsn');
---- Untuk mencegah kesalahan menjalankan aplikasi ketika DSN tidak ada atau pengaturannya diubah oleh orang lain, Anda dapat menggunakan ADODB.Connection untuk membuat sumber data ODBC sementara. Ini dapat memastikan bahwa pengaturan parameter DSN sistem yang kami gunakan sudah benar. Pernyataan berikut dapat membuat DSN sistem ODBC sementara, sesuai dengan database ACCESS, jalurnya adalah
C:Inetpubwwwrootest.mdb AConnection.open('Driver={Microsoft Access Driver (*.mdb)};DBQ=C:inetpubwwwrootest.mdb')
---- Setelah membuat ADODB.Connection, jika Anda tidak perlu mengembalikan hasil operasi (seperti penghapusan, modifikasi, pembaruan, dll.), Anda dapat melakukan operasi SQL normal pada database metode Jalankan ADODB.Connection. Sintaks penggunaannya adalah:
AConnection.Eksekusi( strSQL );
---- Diantaranya, strSQL adalah pernyataan SQL untuk melakukan operasi. Misalnya, operasi penghapusan dapat berupa: hapus dari wfjcommu.
---- 2. Objek kumpulan data (ADODB.RecordSet)
---- Jika Anda ingin melakukan operasi kueri dan mengembalikan hasil kueri, atau jika Anda ingin mengoperasikan tabel data dengan lebih nyaman, Anda perlu menggunakan objek kumpulan data.
---- Objek kumpulan data ADODB.RecordSet berfungsi seperti objek TTable atau TQuery di Delphi.
---- Metode untuk membuat objek kumpulan data adalah (ARecordSet adalah variabel tipe Varian):
----
ARecordSet:=BuatOleObject('ADODB.RecordSet')
---- Metode pengambilan data dari tabel data adalah metode Terbuka. Metode penggunaan spesifiknya adalah:
ARecordSet.Open( strCommand,ActiveConnection,intCursorType,intLockType,intCommandType);
---- Diantaranya: strCommand: string, yang merupakan parameter perintah. Ini bisa berupa nama Tabel, pernyataan SQL, atau nama prosedur tersimpan (StoredProc) di server. Parameter spesifik intCommandType perlu ditentukan.
---- ActiveConnection: Koneksi database yang akan digunakan adalah objek ADODB.Connection.
---- intCursorType: integer panjang, tipe kursor kumpulan data, parameter opsional, silakan lihat komentar di program.
---- intLockType: integer panjang, tipe penguncian tabel data, parameter opsional, silakan lihat komentar di program.
---- intCommandType: integer panjang, tipe parameter perintah, digunakan untuk menunjukkan peran strCommand. Anda dapat menentukan strCommand sebagai perintah (seperti pernyataan SQL) atau tabel data (TTable) atau prosedur tersimpan (StoredProc). Untuk parameter opsional, silakan lihat Komentar di program.
---- Jika Anda menjalankan kueri SQL, Anda dapat menggunakan pernyataan berikut:
ARecordSet.Open('Pilih * dari wfjcommu',adOpenStatic,adLockOptimistic,adCmdText);
---- Properti dan metode umum lainnya yang dibandingkan dengan TTable dan TQuery adalah sebagai berikut (lihat file bantuan ASP untuk detailnya):
eof,bof: eof,bof. MoveFirst, MoveLast: Pertama, LastMovePrevious, MoveNext: Sebelumnya, NextMove: MoveByAddNew: appendUpdate: PostClose: close
---- Hapus plus Pembaruan: hapus, semua modifikasi pada tabel data harus menggunakan Pembaruan agar pengoperasiannya efektif, yang berbeda dengan Delphi
Bidang[NoField]:Field[FieldNo]Field['FieldName']:FieldByName('FieldName')
---- 3. Objek umum lainnya (objek yang berhubungan dengan Delphi):
----
ADODB.Field: TFieldADODB.Parameter: TParaADODB.Error: EDBEngineErrorADODB.Command: Tidak Ada ADODB.Property: Tidak Ada
---- Mari kita lihat contoh penerapannya. Lebih baik mendengar apa yang dikatakan orang lain daripada melihat sendiri contoh sebenarnya. Dalam contoh ini, kami akan mendemonstrasikan cara menggunakan objek ADO untuk melakukan kueri, menambahkan rekaman, mengubah rekaman, dan menghapus rekaman pada tabel data. Silakan merujuk ke komentar di program untuk penggunaan spesifik. Jika Anda memiliki pengalaman dalam pemrograman database Delphi, saya yakin ini tidak sulit untuk dipahami.
---- Dalam contoh kita, database yang digunakan adalah Test.MDB Ada tabel data bernama wfjcommu, yang memiliki lima bidang: AName, Portable, Telp, BP, dan PostAddress, yang mewakili nama, nomor ponsel, nomor telepon. , dan nomor pager masing-masing dan alamat korespondensi.
----
procedure TForm1.Button1Click(Pengirim: TObject);{****************************************** *** ****************
---- Gunakan ADO untuk mengoperasikan database ODBC. Dalam program ini, sumber data sistem ODBC sementara akan dibuat, menunjuk ke database MsAccess, dan kemudian tabel data di dalamnya akan ditampilkan, ditambahkan, diubah, dihapus, dan ditanyakan. Catatan: Silakan klik Kegunaan Pernyataan tersebut berisi unit ComObj
******************************************************* * ***}const{ Beberapa deklarasi konstanta, silakan lihat adovbs.inc untuk detailnya }{ ---- Deskripsi konstanta CommandType---- } adCmdUnknown = 0008;//Tidak diketahui, perlu dinilai oleh sistem, lambat , Nilai default adCmdText = 0001;//Pernyataan perintah seperti pernyataan SQL adCmdTable = 0002;//Nama tabel data adCmdStoredProc = 0004;//Nama prosedur tersimpan {---- Deskripsi konstan CursorType---- } adOpenForwardOnly = 0;//Hanya dapat diakses dalam satu arah dari depan ke belakang, yaitu nilai default adOpenKeyset = 1; //Modifikasi data oleh pengguna lain terlihat, namun penambahan dan penghapusan oleh pengguna lain tidak terlihat adOpenDynamic = 2;//Penambahan, modifikasi, dan penghapusan data oleh pengguna lain terlihat adOpenStatic = 3;//Penambahan, modifikasi, dan penghapusan data oleh pengguna lain tidak terlihat {---- Deskripsi konstan LockType---} adLockReadOnly = 1; //Read-only, nilai default adLockPessimistic = 2; //Saat memodifikasi, kunci berdasarkan satu record adLockOptimistic = 3;//Kunci dengan satu catatan saat memperbarui setelah modifikasi adLockBatchOptimistic = 4;//Kunci catatan saat memperbarui dalam batch var AConnection, ARecordSet: varian; longintTemp: strTemp: string; Sumber data ODBC, menunjuk ke database MsAccess, dan menggunakan DSN ini untuk membuat koneksi database} AConnection := CreateOleObject('ADODB.Connection'); AConnection.Open('Driver={Microsoft Access Driver (*.mdb)};DBQ=C:inetpubwwwrootest'); {Buat objek kumpulan data dan ekstrak data dari tabel data} ARecordSet := CreateOleObject('ADODB.RecordSet'); ARecordSet.open( 'wfjcommu',AConnection, adOpenStatic,adLockOptimistic,adCmdTable ); memo1.lines.clear; memo1.lines.add('********Isi asli tabel data adalah sebagai berikut********'); Tampilkan setiap bidang nama domain} strTemp := '; untuk intIndex := 0 hingga ARecordSet.Fields.count - 1 do strTemp := strTemp + ARecordSet.Fields[intIndex].name+';'; memo1.lines.add( strTemp ); {Menampilkan konten setiap bidang} sementara ARecordSet.eof tidak memulai strTemp := '; .hitung - 1 lakukan strTemp := strTemp + ARecordSet.Fields [intIndex].value+';';memo1.lines.add( strTemp ); [ 'AName'] := '1'; //Akses ARecordSet.Fields['Portable'] menggunakan FieldByName := '2'; ARecordSet.Fields(2) := '3'; //Akses ARecordSet.Fields(3) := '4'; ; ARecordSet.Update;//Perbarui, Posting ARecordSet.MoveFirst;//Pindah ke item pertama, Pertama memo1.lines.add('********Isi tabel data setelah menambahkan record adalah sebagai berikut********'); {menampilkan konten setiap kolom} sedangkan bukan ARecordSet .eof lakukan mulai strTemp := ';untuk intIndex := 0 hingga ARecordSet.fields.count - 1 lakukan strTemp := strTemp + ARecordSet.Fields[intIndex].value+';';memo1.lines.add( strTemp ); ARecordSet.MoveNext; //Pindah ke rekaman berikutnya, Akhir berikutnya; {Ubah rekaman terakhir} ARecordSet.MoveLast; 'Portabel'] := '22'; ARecordSet.Fields(2) := '33'; //Akses ARecordSet.Fields(3) sebagai Fields[index] := '44'; ARecordSet.Fields(4) := '55'; item pertama, First memo1.lines.add('********Isi tabel data setelah modifikasi record terakhir adalah sebagai berikut************'); isi setiap bidang } sementara tidak ARecordSet.eof lakukan mulai strTemp := ';untuk intIndex := 0 hingga ARecordSet.Fields.count - 1 lakukan strTemp := strTemp + ARecordSet.Fields[intIndex].value+';';memo1.lines.add( strTemp ); ARecordSet.MoveNext;//Pindah ke catatan berikutnya, Akhir berikutnya; ARecordSet.MoveLast;//Pindah ke baris terakhir, ARecordSet.delete terakhir;//Hapus, hapus ARecordSet.Update;//Update, tidak diperlukan di Delphi ARecordSet.MoveFirst;//Pindah ke baris pertama, First memo1.lines .add('********Isi tabel data setelah penghapusan record terakhir adalah sebagai berikut********'); {Menampilkan isi setiap kolom} sedangkan bukan ARecordSet.eof mulailah strTemp := '; untuk intIndex := 0 hingga ARecordSet.Fields.count - 1 lakukan strTemp := strTemp + ARecordSet. /Pindah ke bilah berikutnya, ARecordSet.Tutup;{Tutup kumpulan data} {Gunakan pernyataan SQL untuk melakukan kueri, catatan kueri bernama "Zhang San"} {Perhatikan bahwa dalam pernyataan SQL, string harus diapit dalam tanda kutip tunggal} ARecordSet.open( 'pilih * dari wfjcommu di mana AName = 'Zhang San' ', AConnection,adOpenStatic,adLockOptimistic, adCmdText ); memo1.lines.add('********Konten Zhang San adalah sebagai berikut********'); + IntToStr ( ARecordSet.RecordCount ) + 'catatan yang cocok' ); {menampilkan konten setiap bidang} sementara bukan ARecordSet.eof lakukan start strTemp := ' untuk intIndex := 0 hingga ARecordSet.Fields.count - 1 lakukan strTemp : = strTemp + ARecordSet.Fields [intIndex].value+';';memo1.lines.add( strTemp ); ARecordSet.MoveNext;//Pindah ke bilah berikutnya, Ujung berikutnya; {Tutup kumpulan data dan koneksi database} ARecordSet.close;