Gunakan objek ADO untuk mengakses data ODBC dalam program DELPHI
--------------------------------------------------- -----------------------------------
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, saya pengecualian untuk ASP. Suatu hari tiba-tiba terlintas di benak saya bahwa objek ADO adalah objek OLE standar. Alangkah baiknya 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. Dengan cara ini, Anda dapat memanfaatkan sepenuhnya keunggulan pemrograman DELPHI dan ASP untuk membuat ISAPI/NSAPI/CGI lebih baik. Setelah pemrograman dan pengujian, Anda berhasil menggunakan objek ADO untuk mengakses database ODBC di Delphi. Sekarang saya akan menuliskan pengalaman saya dan membagikannya kepada semua orang, sehingga kita dapat memiliki metode lain untuk mengakses database ODBC.
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 objek koneksi database, dan kemudian Anda dapat menggunakan Metode dan properti objek ini digunakan 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. Koneksi)
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:=BuatOleObject('A DODB.Connection')
Metode yang digunakan untuk membuat koneksi adalah Terbuka, dan sintaks penggunaannya adalah (mengambil 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 pengguna, yang dapat dihilangkan ketika digunakan untuk mengakses database, 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=Nama DSN; DRIVER=driver; SERVER=server;
di dalam:
Penyedia: Penyedia data, MSDASQL secara default, Microsoft OLEDB, biasanya dihilangkan;
DSN: Sumber data sistem OBDC (DSN) yang sesuai dengan database yang akan dibuka adalah parameter opsional;
DRIVER: Nama driver yang digunakan dalam database untuk dibuka, seperti akses yang sesuai dengan Microsoft Access Driver (*.mdb), yang merupakan 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, yang merupakan parameter opsional;
UID: nama pengguna, yang digunakan untuk mengakses database, merupakan parameter opsional;
PWD: Kata sandi pengguna, yang digunakan untuk mengakses database, adalah parameter opsional.
Parameter di atas bersifat opsional, namun informasi yang memadai harus disediakan untuk menjelaskan sumber data sistem.
Jika DSN sistem ODBC telah ditentukan dan diberi nama 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. Hal ini dapat memastikan bahwa pengaturan parameter sistem DSN yang kita gunakan sudah benar . Pernyataan berikut dapat membuat DSN sistem ODBC sementara, sesuai dengan database ACCESS, jalurnya adalah C:Inetpub wwwroot test.mdb:
AConnection.open('Driver= {Microsoft Access Driver (*.mdb)};DBQ=C:inetpub wwwroot est.mdb')
Setelah membuat ADODB.Connection, jika tidak perlu mengembalikan hasil operasi (seperti penghapusan, modifikasi, pembaruan, dll.), Anda dapat melakukan operasi SQL normal pada database , Jalankan, digunakan. Sintaksnya adalah:
AConnection.Eksekusi( strSQL );
Diantaranya, strSQL adalah pernyataan SQL untuk melakukan operasi. Misalnya, operasi penghapusan dapat berupa: hapus dari wfjcommu. Gunakan AConnection.Close untuk menutup koneksi database.
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 bertindak seperti objek TTable atau TQuery di Delphi.
Metode untuk membuat objek kumpulan data adalah (ARecordSet adalah variabel tipe Varian):
ARecordSet:=BuatOleObject ('ADODB.RecordSet')
Metode untuk memperoleh data dari tabel data adalah metode Terbuka. Metode penggunaan spesifiknya adalah:
ARecordSet.Open( strCommand,ActiveConnection,int CursorType,intLockType, intCommandType);
di dalam:
strCommand: String, yang merupakan parameter perintah. Dapat berupa nama Tabel, pernyataan SQL, atau nama prosedur tersimpan (StoredProc) di server.
ActiveConnection: Koneksi database yang akan digunakan adalah objek 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: Bilangan bulat 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 opsional). parameter, silakan lihat komentar di program.
Untuk mengeksekusi query SQL, Anda dapat menggunakan pernyataan berikut:
ARecordSet.Open('Pilih * dari wfjcommu',adOpenStatic,ad LockOptimistic,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 Update: hapus, semua modifikasi pada tabel data harus menggunakan Update agar pengoperasiannya efektif, berbeda dengan Delphi.
Bidang[No.Field]: Bidang[No.Field]
Bidang['Nama Bidang']: BidangBerdasarkan Nama('Nama Bidang')
3. Objek umum lainnya (objek yang berhubungan dengan Delphi):
ADODB.Field: TField ADODB.Parameter: TPara ADODB.Error: EDBEngineError
Perintah ADODB: Tidak ada ADODB.Properti: Tidak ada
Mari kita lihat contoh aplikasinya:
prosedur 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: Harap sertakan unit ComObj dalam pernyataan Penggunaan
******************************************************* * ***}
const{Beberapa deklarasi konstanta, silakan lihat adovbs.inc untuk detailnya}
{----Deskripsi konstan tentang 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 satu arah dari depan ke belakang, yang merupakan 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; //Hanya baca, nilai default
adLockPessimistic = 2; //Saat memodifikasi, kunci dengan satu record
adLockOptimistic = 3; //Saat memperbarui setelah modifikasi, kunci dengan satu catatan
adLockBatchOptimistic = 4; //Rekam kunci selama pembaruan batch
var
AConnection, ARecordSet : varian;
longintTemp : bilangan bulat;
strTemp: tali;
intIndex : bilangan bulat;
mulai
{Buat sumber data ODBC sementara, arahkan ke database MsAccess, dan gunakan DSN ini untuk membuat koneksi database}
AConnection := CreateOleObject('ADODB.Connection');
AConnection.Open('Driver={Microsoft Access Driver (*.mdb)};DBQ=C:inetpubwwwroot est');
{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 nama domain setiap domain}
strTemp := '';
untuk intIndex := 0 hingga ARecordSet.Fields.count - 1 lakukan
strTemp := strTemp + ARecordSet.Fields[intIndex].nama+';';
memo1.lines.add( strTemp );
{Menampilkan konten setiap domain}
sementara ARecordSet.eof tidak melakukannya
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 bilah berikutnya, Berikutnya
akhir;
{Tambahkan catatan}
ARecordSet.AddNew;//Tambahkan,Tambahkan
ARecordSet.Fields['AName'] := '1';//Akses berdasarkan FieldByName
ARecordSet.Fields['Portabel'] := '2';
ARecordSet.Fields(2) := '3';//Akses dalam bentuk Fields[index]
ARecordSet.Fields(3) := '4';
ARecordSet.Fields(4) := '5';
ARecordSet.Update;//Update, Posting
ARecordSet.MoveFirst;//Pindah ke item pertama, Pertama
memo1.lines.add('********Isi tabel data setelah ditambahkan record adalah sebagai berikut********');
{Menampilkan konten setiap domain}
sementara ARecordSet.eof tidak melakukannya
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 bilah berikutnya, Berikutnya
akhir;
{Ubah catatan terakhir}
ARecordSet.MoveLast;
ARecordSet.Fields['AName'] := '11';//Akses menggunakan FieldByName
ARecordSet.Fields['Portabel'] := '22';
ARecordSet.Fields(2) := '33';//Akses dalam bentuk Fields[index]
ARecordSet.Fields(3) := '44';
ARecordSet.Fields(4) := '55';
ARecordSet.Update;//Update, Posting
ARecordSet.MoveFirst;//Pindah ke item pertama, Pertama
memo1.lines.add('********Isi tabel data setelah record terakhir diubah adalah sebagai berikut********');
{Menampilkan konten setiap domain}
sementara ARecordSet.eof tidak melakukannya
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 bilah berikutnya, Berikutnya
akhir;
{hapus catatan terakhir}
ARecordSet.MoveLast;//Pindah ke bilah terakhir, Terakhir
ARecordSet.delete;//Hapus, hapus
ARecordSet.Update;//Update, tidak diperlukan di Delphi
ARecordSet.MoveFirst;//Pindah ke item pertama, Pertama
memo1.lines.add('********Isi tabel data setelah dilakukan penghapusan record terakhir adalah sebagai berikut********');
{Menampilkan konten setiap domain}
sementara ARecordSet.eof tidak melakukannya
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 bilah berikutnya, Berikutnya
akhir;
ARecordSet.Close;{Tutup kumpulan data}
{Gunakan pernyataan SQL untuk menanyakan catatan bernama "Zhang San"}
{Perhatikan bahwa dalam pernyataan SQL, string harus diapit tanda kutip tunggal}
ARecordSet.open( 'pilih * dari wfjcommu dimana AName = ''Zhang San''',
AConnection,adOpenStatic,adLockOptimistic,adCmdText );
memo1.lines.add('********Isi Zhang San adalah sebagai berikut********');
memo1.lines.add( 'Total' + IntToStr( ARecordSet.RecordCount ) + 'Catatan yang cocok' );
{Menampilkan konten setiap domain}
sementara ARecordSet.eof tidak melakukannya
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 bilah berikutnya, Berikutnya
akhir;
{Tutup kumpulan data dan koneksi database}
ARecordSet.close;
AConnection.close;
akhir;
Mendengarkan orang lain mengatakan lebih baik mengalaminya sendiri dengan melihat contoh nyata. 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.
Basis data yang digunakan dalam contoh kita adalah Test.MDB, yang memiliki tabel data bernama wfjcommu, dengan lima bidang AName, Portable, Telp, BP, dan PostAddress, yang mewakili nama, nomor ponsel, nomor telepon, nomor pager, dan alamat surat masing-masing.
Program di atas telah di-debug dan diteruskan di bawah PWIN98+ Delphi 3.0+PWS (Personal Web Server) 4.0.