ASP Kuliah 7: ASP dan Database (2)
Penulis:Eve Cole
Waktu Pembaruan:2009-05-30 19:55:02
Pada kuliah sebelumnya kita telah mempelajari cara membuat koneksi dengan database dan mengambil data dari database. Materi hari ini adalah cara menambahkan data baru ke database, mengubah dan menghapus data di database.
1. Metode 1 untuk menambahkan data baru ke database: Gunakan pernyataan SQL, misalnya wuf50.asp.
Untuk menyederhanakan prosedur di masa depan, bagian koneksi dengan database Access ditempatkan dalam sebuah file. File ini tidak akan dijelaskan kapan diperlukan di masa mendatang.
<% 'AdoAccess.asp
Opsi Eksplisit
Respon. Kedaluwarsa = 0
'Bagian 1: Membangun koneksi
Redupkan Cnn, StrCnn
Setel Cnn = Server.CreateObject("ADODB.Connection")
StrCnn = "Penyedia = Microsoft.Jet.OLEDB.4.0; Sumber Data = C:InetpubhomeaspNorthwind.mdb"
Cnn.Buka StrCnn
%>
Program wuf50.asp
<% @LANGUAGE = VBScript %>
<!--#include file="AdoAccess.asp"-->
<% ' wuf50.asp
'Bagian 2: Tambahkan data baru menggunakan objek Execute of Connection
Redupkan StrSQL, rsTest
StrSQL = "MASUKKAN KE pengirim (nama perusahaan, nomor telepon) VALUES('wu''feng','0571-7227298')"
Cnn.Jalankan StrSQL
%>
<HTML>
<TUBUH>
<% 'Bagian 3: Menampilkan kumpulan rekaman yang diperoleh di browser
Setel rsTest = Cnn.Execute("Pilih * Dari operator")
Lakukan Saat Bukan rsTest.EOF
Respon.Tulis rsTest(0) & " " & rsTest(1) & " " & rsTest(2) & " " & "<BR>"
rsTest.MoveNext
Lingkaran
'Bagian 4: Membersihkan medan perang
Cnn.tutup
Setel rsTest = Tidak Ada: Setel Cnn = Tidak Ada
%>
</BODI>
</HTML>
Harap perhatikan hal-hal berikut:
1. Saat menggunakan pernyataan SQL untuk menambahkan data ke database Access, Anda harus menggunakan Sisipkan Ke. Untuk menambahkan data ke database SQL Server, cukup gunakan Sisipkan.
2. Format penambahan data menggunakan pernyataan SQL adalah seperti pada contoh di atas. Perhatikan bahwa 'wu'feng' perlu ditambahkan. 'wu''feng' harus digunakan dalam pernyataan karena pernyataan SQL menggunakan ' sebagai pembatas string.
3. Dengan menggabungkan contoh ini dengan apa yang Anda pelajari sebelumnya, Anda bisa menambahkan data dari formulir HTML.
4. Perhatikan bahwa terdapat kolom dengan tipe data penomoran otomatis, seperti "ID Pengirim" dalam contoh ini, jadi Anda tidak perlu memikirkan cara menulis kode untuk mendapatkan nomor yang bertambah.
Metode 2: Gunakan metode Addnew pada objek Recordset, misalnya wuf51.asp.
<% @LANGUAGE = VBScript %>
<!--#include file="AdoAccess.asp"-->
<!--#termasuk file="adovbs.inc"-->
<% ' wuf51.asp
'Bagian 2: Tambahkan data baru menggunakan metode AddNew pada objek Recordset
Redupkan StrSQL, rsTest
Setel rsTest = server.CreateObject("ADODB.Recordset")
rsTest.CursorType = adOpenKeySet 'adOpenDynamic
'Tanpa kalimat berikut, database tidak akan diizinkan untuk diperbarui.
rsTest.LockType = adLockOptimis
rsTest.Buka "Pengirim",Cnn,,,adCmdTable
rsTest.TambahkanBaru
rsTest("Nama Perusahaan") = "wu'feng"
rsTest("Telepon") = "0571-7227298"
rsTest.Perbarui
%>
<HTML>
<TUBUH>
<% 'Bagian 3: Menampilkan kumpulan rekaman yang diperoleh di browser
'Pindahkan penunjuk basis data ke catatan pertama dalam tabel
Jika Tidak rsTest.EOF <> 0 Lalu
Response.Tulis "Ada [" & rsTest.RecordCount & "] potongan data di tabel" & "<Br><Br>"
rsTest.MoveFirst
Akhiri Jika
Lakukan Saat Bukan rsTest.EOF
Respon.Tulis rsTest(0) & " " & rsTest(1) & " " & rsTest(2) & " " & "<BR>"
rsTest.MoveNext
Lingkaran
'Bagian 4: Membersihkan medan perang
Cnn.tutup
Setel rsTest = Tidak Ada: Setel Cnn = Tidak Ada
%>
</BODI>
</HTML>
menganalisa:
1. Mengapa menyetel rsTest.LockType = adLockOptimistic
Properti LockType dari objek Recordset memiliki empat nilai opsional:
adLockReadOnly - nilai default, menunjukkan bahwa recordset dibuka dalam mode read-only, sehingga data tidak dapat diubah. Dalam hal ini, kesalahan akan terjadi saat menggunakan metode AddNew.
adLockPessimistic - Penguncian catatan konservatif (entri demi entri). Gunakan metode segera mengunci catatan sumber data saat mengedit. Saat ini, pengguna lain tidak dapat mengakses data tersebut.
adLockOptimistic – Buka penguncian rekaman (entri demi entri). Catatan dikunci hanya ketika metode Pembaruan dipanggil. Coba pikirkan, apakah properti ini mirip dengan properti Kunci dan Buka Kunci pada objek Aplikasi yang kita bicarakan?
adLockBatchOptimistic - buka pembaruan batch. Digunakan untuk memperbarui data dalam batch, sesuai dengan metode UpdateBatch.
Ngomong-ngomong, mari kita sebutkan atribut CursorType yang disebutkan di kuliah sebelumnya, yang juga memiliki empat nilai:
adOpenForwardOnly - Hanya meneruskan kursor, nilai default, hanya dapat menggulir maju dalam catatan. Ini menghemat sumber daya dan meningkatkan kinerja.
adOpenStatic - kursor statis. Salinan statis dari kumpulan catatan yang dapat digunakan untuk menemukan data atau menghasilkan laporan. Selain itu, penambahan, perubahan, atau penghapusan yang dilakukan oleh pengguna lain tidak terlihat. Disarankan untuk hanya menggunakan dua kursor ini di ASP.
adOpenKeyset - Kursor keyset. Kursor keyset mirip dengan kursor dinamis, hanya saja dilarang melihat catatan yang ditambahkan oleh pengguna lain dan dilarang mengakses catatan yang dihapus oleh pengguna lain.
adOpenDynamic - kursor dinamis. Dapat melihat penambahan, perubahan, dan penghapusan yang dilakukan oleh pengguna lain. Semua jenis perpindahan dalam kumpulan data diperbolehkan.
Yang pasti deskripsi abstrak seperti itu agak muluk-muluk, dan saya masih belum begitu memahaminya.
(1) Jika Anda hanya mengambil data, gunakan saja nilai default;
(2) Jika Anda menggunakan metode Pembaruan untuk memperbarui sebagian data, gunakan adLockOptimistic untuk atribut LockType, dan gunakan adLockBatchOptimistic jika Anda menggunakan metode UpdataBatch untuk memperbarui data dalam batch.
(3) Jika ada tindakan tulis ke database, biasanya cukup menggunakan adOpenKeyset untuk atribut CursorType.
Bagaimana dengan itu? Meskipun Anda belum memahaminya, Anda bisa menggunakannya.
2. Jika Anda tidak mahir dalam database, sering kali bermanfaat menggunakan rsTest.MoveFirst untuk memindahkan penunjuk ke catatan pertama sebelum keluaran ditampilkan. Namun jika tidak ada data di database maka metode MoveFirst tidak dapat digunakan, jadi gunakan atribut rsTest.EOF untuk menentukan apakah ada data di database sebelum digunakan.
3. Properti RecordCount (untuk mendapatkan jumlah rekaman dalam kumpulan rekaman) hanya dapat digunakan bila jenis kursor diatur ke adOpenKeyset atau adOpenStatic.
2. Memodifikasi data yang ada di database. Metode 1: Gunakan pernyataan SQL. Misalnya wuf52.asp, programnya pada dasarnya mirip dengan wuf50.asp, hanya bagian-bagian penting yang tercantum di sini.
'Bagian 2: Memodifikasi data menggunakan metode Execute pada objek Connection
Redupkan StrSQL, rsTest
StrSQL = "UPDATE operator SET telepon = '(503) 555-3188' DIMANA telepon SEPERTI '%99%'"
Cnn.Jalankan StrSQL
Untuk mengubah data, Anda tidak perlu menggunakan INSERT INTO...VALUES, tetapi menggunakan pernyataan UPDATE...SET. Klausa WHERE berarti mengubah nomor telepon yang berisi string "99" ("LIKE" dan "% " sering digunakan dalam kueri fuzzy) hingga (503) 555-3188, jika tidak ada ketentuan yang ditetapkan, semua nomor telepon dalam tabel akan diubah.
Metode 2: Gunakan metode Update pada objek Recordset. Program wuf53.asp (mirip dengan wuf51.asp rutin)
'Bagian 2: Memodifikasi data menggunakan metode Update pada objek Recordset
Redupkan StrSQL, rsTest
Setel rsTest = server.CreateObject("ADODB.Recordset")
rsTest.LockType = adLockOptimis
StrSQL = "PILIH nama belakang, nama depan, tanggal lahir DARI karyawan WHERE tanggal lahir = #55-03-04#"
rsTest.Buka StrSQL, Cnn,,,adCmdText
rsTest("nama") = "Cina"
rsTest.Perbarui
menganalisa:
1. Dalam pernyataan SQL, jika database adalah database Access, tanggalnya harus diapit #55-03-04#, seperti dalam contoh ini; jika databasenya adalah database SQL Server, tanggalnya harus diapit '55-03 -04'.
2. Di rsTest.Open StrSQL, Cnn,,,adCmdText, karena parameter pertama adalah pernyataan SQL, parameter kelima adalah adCmdText. Sebenarnya, parameter kelima dapat dihilangkan, tetapi menambahkannya akan membuat eksekusi skrip lebih tinggi.
3. Dengan menggunakan metode satu, Anda dapat memperbarui semua catatan yang memenuhi ketentuan (beberapa catatan atau satu catatan) sekaligus, namun Pembaruan dalam metode dua hanya dapat mengubah catatan saat ini (catatan pertama yang memenuhi ketentuan).
3. Hapus data dalam database Metode 1: Gunakan pernyataan SQL. Wuf55.asp rutin
'Bagian 2: Gunakan pernyataan SQL untuk menghapus data
Redupkan StrSQL, rsTest
StrSQL = "HAPUS DARI operator DIMANA nomor telepon = '0571-7227298'"
Cnn.Jalankan StrSQL
Metode 2: Gunakan metode Hapus objek Recordset. Wuf56.asp rutin
'Bagian 2: Gunakan metode Hapus pada objek Recordset untuk menghapus data
Redupkan StrSQL, rsTest
Setel rsTest = server.CreateObject("ADODB.Recordset")
rsTest.LockType = adLockOptimis
StrSQL = "PILIH * DARI operator DIMANA nomor telepon = '0571-7227298'"
rsTest.Buka StrSQL, Cnn,,,adCmdText
Meskipun Bukan rsTest.EOF
rsTest.Hapus
rsTest.MoveNext
Pergi ke
Jika ada beberapa rekaman dalam kumpulan rekaman yang memenuhi ketentuan, Anda harus menggunakan perulangan. Jika tidak, metode Hapus hanya menghapus rekaman saat ini, yaitu rekaman pertama yang memenuhi ketentuan.
4. Ilmu bermanfaat lainnya
1. Memperbarui data dalam batch Di atas kita berbicara tentang cara menggunakan metode Update pada objek Recordset untuk memperbarui data. Faktanya, objek Recordset dapat mendukung dua jenis pembaruan: pembaruan langsung dan pembaruan batch.
Dengan pembaruan segera, semua perubahan pada data akan segera ditulis ke sumber data saat ini setelah metode Pembaruan dipanggil.
Pembaruan batch memungkinkan penyedia untuk menyimpan perubahan pada beberapa catatan dan kemudian menggunakan metode UpdateBatch untuk mentransfernya ke database dalam satu panggilan. Saat memperbarui beberapa catatan, pembaruan batch lebih efisien daripada pembaruan langsung.
Standarnya adalah mode pembaruan langsung. Untuk menggunakan mode pembaruan batch, gunakan kursor klien, seperti wuf54.asp.
<% @LANGUAGE = VBScript %>
<!--#include file="AdoAccess.asp"-->
<!--#termasuk file="adovbs.inc"-->
<% ' wuf54.asp
'Bagian 2: Mode pembaruan batch
Redupkan StrSQL, rsTest
Setel rsTest = server.CreateObject("ADODB.Recordset")
rsTest.CursorLocation = adUseClient 'Gunakan tipe kursor klien
rsTest.LockType = adLockBatchOptimis
StrSQL = "PILIH * DARI operator DIMANA ponsel SEPERTI '%99%'"
rsTest.Buka StrSQL, Cnn,,,adCmdText
rsTest.MoveFirst
Meskipun Bukan rsTest.EOF
rsTest("Nama Perusahaan") = "Cina"
rsTest.MoveNext
Pergi ke
rsTest.UpdateBatch
%>
<HTML>
<TUBUH>
<% 'Bagian 3: Menampilkan kumpulan rekaman yang diperoleh di browser
rsTest.Permintaan
Lakukan Saat Bukan rsTest.EOF
Respon.Tulis rsTest(0) & " " & rsTest(1) & " " & rsTest(2) & " " & "<BR>"
rsTest.MoveNext
Lingkaran
'Bagian 4: Membersihkan medan perang
Cnn.tutup
Setel rsTest = Tidak Ada: Setel Cnn = Tidak Ada
%>
</BODI>
</HTML>
Melihat:
1) rsTest.CursorLocation = adUseClient memiliki dua nilai, nilai lainnya adalah adUseServer (default). Untuk pemula, jenis kursor pada objek Recordset adalah bagian yang sulit. Saya tidak akan memperkenalkannya secara detail di sini agar tidak semakin bingung . Silakan jelajahi secara perlahan dalam pemrosesan sebenarnya (coba lebih lanjut).
2) rsTest.Requery: Gunakan metode Requery untuk menyegarkan seluruh konten objek Recordset dari sumber data. Memanggil metode ini sama dengan memanggil metode Tutup dan Buka secara berurutan.
2. Pelajari cara menggunakan properti Filter pada objek Recordset
<% @LANGUAGE = VBScript %>
<!--#include file="AdoAccess.asp"-->
<!--#termasuk file="adovbs.inc"-->
<% ' wuf57.asp
'Bagian 2: Menggunakan properti Filter pada objek Recordset
Redupkan StrSQL, rsTest
Setel rsTest = server.CreateObject("ADODB.Recordset")
rsTest.CursorType = adOpenStatic
rsTest.LockType = adLockOptimis
rsTest.Buka "Pengirim",Cnn,,,adCmdTable
'Menyaring record-record yang memenuhi kriteria, sedangkan record-record lainnya disaring
rsTest.Filter = "Nama perusahaan = 'wu''feng'"
Jika rsTest.EOF Lalu 'Jika tidak ada catatan seperti itu, tambahkan
rsTest.TambahkanBaru
rsTest("Nama Perusahaan") = "wu'feng"
rsTest("Telepon") = "0571-7227298"
rsTest.Perbarui
Lain 'Jika ada catatan yang memenuhi kondisi, ubah catatan pertama yang memenuhi kondisi tersebut
rsTest("Telepon") = "(571) 7227298"
rsTest.Perbarui
Akhiri Jika
%>
<HTML>
<TUBUH>
<% 'Bagian 3: Menampilkan kumpulan rekaman yang diperoleh di browser
'Harap bandingkan dengan cermat perbedaan antara ya dan tidak pada kalimat berikut
'rsTest.Filter="" 'Digunakan untuk menghapus atribut Filter
rsTest.MoveFirst
Lakukan Saat Bukan rsTest.EOF
Respon.Tulis rsTest(0) & " " & rsTest(1) & " " & rsTest(2) & " " & "<BR>"
rsTest.MoveNext
Lingkaran
'Bagian 4: Membersihkan medan perang
Cnn.tutup
Setel rsTest = Tidak Ada: Setel Cnn = Tidak Ada
%>
</BODI>
</HTML>
3. Selain dua metode yang diperkenalkan di atas, Anda juga dapat menggunakan pernyataan SQL dan metode Excute dari objek Command untuk memelihara database. Contoh wuf58.asp
<% @LANGUAGE = VBScript %>
<!--#include file="AdoAccess.asp"-->
<!--#termasuk file="adovbs.inc"-->
<% ' wuf58.asp
'Bagian 2: Memelihara database menggunakan pernyataan SQL dan metode Excute dari objek Command
Redupkan StrSQL, rsTest, cmdChange
StrSQL = "MASUKKAN KE pengirim (nama perusahaan, nomor telepon) VALUES('wu''feng','0571-7227298')"
'Buat objek perintah.
Setel cmdChange =server.CreateObject("ADODB.Command")
Setel cmdChange.ActiveConnection = Cnn
cmdUbah.CommandText = StrSQL
cmdUbah.Jalankan
%>
<HTML>
<TUBUH>
<% 'Bagian 3: Menampilkan kumpulan rekaman yang diperoleh di browser
Setel rsTest = server.CreateObject("ADODB.Recordset")
rsTest.Buka "Pengirim", Cnn, , , adCmdTable
Lakukan Saat Bukan rsTest.EOF
Respon.Tulis rsTest(0) & " " & rsTest(1) & " " & rsTest(2) & " " & "<BR>"
rsTest.MoveNext
Lingkaran
'Bagian 4: Membersihkan medan perang
Cnn.tutup
Setel rsTest = Tidak Ada: Setel Cnn = Tidak Ada
%>
</BODI>
</HTML>
Kuliah ini terutama memperkenalkan tiga metode pemeliharaan data. Pemula hanya perlu menguasai dua metode pertama. Secara umum, coba gunakan pernyataan SQL untuk menyelesaikan masalah, yang sederhana dan jelas; keuntungan terbesar menggunakan objek Recordset adalah Anda dapat memanfaatkan sejumlah besar properti dan tipe kursor yang kaya, dan Anda memiliki lebih banyak pilihan, tetapi itu juga membawa beberapa kesulitan untuk digunakan. Kuncinya adalah mengeksplorasi lebih banyak dan bereksperimen lebih banyak.