Pemrograman Dasar Database SQL Server 2000 Dengan Microsoft Visual Basic 6 Yoga Prihastomo http://prihastomo.wordpress.com Jakarta, 17 Januari 2009 LAB KOMPUTER DASAR STT PLN JAKARTA W orkshop MsVB 6 & SQL Server 2000 | Yoga | 0 SEBUAH PENGANTAR Tak ada kata yang lebih indah dari kalimat “Alhamdulillah, akhirnya selesai juga modul ’copy-paste’ ini”. Maklumlah, modul ini jelas disusun oleh penulis saat waktu senggang di kantor (hehe... jadi curi-curi waktu). Entah apa yang terlintas dalam pikiran para Asisten Lab Komputer STT PLN sehingga ”menjerumuskan” penulis untuk mengajar workshop ini hehe. Modul ini didedikasikan untuk para peserta workshop yang telah bersedia mengikuti workshop ini. Workshop ini kami beri judul ”Pemrograman Dasar Database SQL Server 2000 dengan Microsoft Visual Basic 6”. Apresiasi setinggi-tingginya kepada seluruh Asisten Lab Komputer STT PLN (khususnya panitia) yang telah mempercayakan workshop kali ini untuk disampaikan oleh saya. Modul ini tentu banyak kelemahan dan kekurangan. Oleh karena itu penulis menyertakan DVD yang berisi perangkat lunak untuk menunjang pembaca sekalian mempraktekkan semua hal yang penulis sampaikan, kemudian modul-modul atau tulisantulisan lain yang menunjang pembahasan dari modul ini. Tak lupa pula, kode program (source code) juga penulis sertakan dalam DVD kali ini. Dengan segala kerendahan hati, penulis memohon kritik dan saran atas apa yang penulis sampaikan melalui workshop kali ini. Penyampaian ’unek-unek’ bisa dikirim ke email penulis : [email protected] atau [email protected] . Dan akhirnya penulis berharap semoga workshop (modul) ini dapat menambah pengetahuan kita semua. AMIN Tangerang, 16 Januari 2009 Kala hujan gerimis, dan angin mengeluh serta mendesah. Yoga Prihastomo Manusia Indonesia Biasa 1 W orkshop MsVB 6 & SQL Server 2000 | Yoga | 1 KONSEP DATABASE & SQL Basis Data (Database) Basis data (bahasa Inggris: database), atau sering pula dieja basisdata, adalah kumpulan informasi yang disimpan di dalam komputer secara sistematik sehingga dapat diperiksa menggunakan suatu program komputer untuk memperoleh informasi dari basis data tersebut. Ada pula yang mendefinisikan, basis data adalah kumpulan file/tabel/arsip yang saling berhubungan (berelasi) dan disimpan dalam media penyimpanan elektronik tanpa adanya pengulangan (redudansi) data. Database Management System (DBMS) DBMS adalah perangkat lunak yang menangani semua pengaksesan database. Mempunyai fasilitas membuat, mengakses, memanipulasi dan memelihara basis data. Fungsi DBMS antara lain : 1. Data Definition, DBMS harus dapat mengolah pendefinisian data, 2. Data Manipulation, DBMS harus dapat menangani permintaan dari pemakai untuk mengakses data, 3. Data Security & Integrity, DBMS harus dapat memeriksa security dan integrity data yang didefinisikan oleh DBA, 4. Data Recovery & Concurency, DBMS harus dapat menangani kegagalan–kegagalan pengaksesan database yang dapat disebabkan oleh kesalahan sistem, kerusakan hard disk, dsb, 5. Data Dictionary, DBMS harus menyediakan data dictionary, 6. Performance, DBMS harus menangani unjuk kerja dari semua fungsi seefisien mungkin. Contoh DBMS seperti : Microsoft SQL Server, Oracle, IBM DB2, MySQL, PostgreSQL, Firebird, Teradata, Informix, Sybase Adaptive Server Enterprise dan sebagainya. 2 W orkshop MsVB 6 & SQL Server 2000 | Yoga | Tabel (Table) Tabel adalah inti dari sebuah database. Tabel menyimpan data yang dikelompokkan di dalam bentuk baris dan kolom seperti layaknya lembar kerja. Setiap baris mewakili record, dan setiap kolom adalah atribut atau field. Setiap field mengandung satu jenis informasi. Sebagai contoh : Field bernama jumlah memiliki tipe data Numeric, sementara field bernama Name memiliki informasi bertipe Teks. Field-field pada tabel bisa memiliki pembatasan mengenai isi yang akan disimpan ke dalam field tersebut. Sebagai contoh : Sebuah field bernama Quantity tidak bisa menyimpan teks, hanya bisa menyimpan angka, dan tidak bisa menerima nilai di bawah 1 atau di atas 100. Kemudian terdapat istilah pada tabel, seperti : Tabel Master Tabel master merupakan tabel yang mewakili entitas tertentu, Ia berdiri independen. Tabel master yang nantinya akan dilakukan proses manipulasi data, seperti : update, insert dan delete. Contohnya : tabel barang, mahasiswa, dosen, mata kuliah, customer, supplier, dan sebagainya. Tabel Transaksi Tabel transaksi merupakan tabel yang terbentuk dari hasil transaksi pada suatu form transaksi, Ia tidak bersifat independen atau bergantung dengan tabel lain. Contohnya : tabel transaksi pemesanan barang, transaksi penjualan, dsb. Tabel transaksi ini dibagi menjadi 2, yaitu : Transaksi Header Tabel dimana setiap field hanya ditulis / diinput / disimpan sekali. Artinya dalam sebuah faktur contohnya tanggal faktur, nomor faktur, id pelanggan akan ditulis / diinput satu kali saja atau tidak berulang. Transaksi Detail Tabel dimana setiap field yang ditulis / diinput / disimpan boleh lebih dari satu kali. Artinya dalam satu nomor faktur, kita dapat melakukan transaksi lebih dari satu kali. Misalnya kita dapat memesan 2 monitor, 1 keyboard, 1 “tikus”. Dimana data tersebut boleh berulang dalam satu nomor faktur. Teknik Menggabungkan Tabel Menurut beberapa literatur yang saya baca, maka teknik menggabungkan 2 tabel atau lebih ada 3 teknik yaitu : 1. Teknik Manual Teknik ini adalah yang paling umum dipakai orang dalam menggabungkan tabel, Teknik ini adalah yang paling efisien serta paling cepat untuk menghubungkan 2 tabel atau lebih. Tapi jangan lupa dalam mengetikan nama field harus didahului nama tabel, atau sintaknya : [ NamaTabel.NamaField ] untuk menyingkat nama tabel yang panjang, dapat digunakan prinsip Alias sebagai pengganti nama tabel. 3 W orkshop MsVB 6 & SQL Server 2000 | Yoga | Kemudian untuk teknis penggabungannya, cukup menyamakan Primary Key dan Foreign Key pada masing-masing tabel pada kondisi WHERE Contoh : Tampilkan nama dosen yang mengajar mata kuliah sistem basis data. Jawab : SELECT Dosen.Nama_Dosen, Matakuliah.Nama_Matakul, Matakuliah.SKS FROM Dosen, Matakuliah, Mengajar WHERE Mengajar.Kode_Matakul = Matakuliah.Kode_Matakul AND Mengajar.Kode_Dosen = Dosen.Kode_Dosen AND Matakuliah.Nama_Matakul = 'Sistem Basis Data' 2. Teknik Select Bertingkat (Sub Query) Subquery adalah statement SELECT yang dilampirkan sebagai klausa dalam SQL Statement yang lain. Jadi kita menyamakan Primary Key Dan Foreign Key pada statement SELECT. Jadi ya statement select berada dalam statement select. Contoh : TabelRekening 4 W orkshop MsVB 6 & SQL Server 2000 | Yoga | TabelPelanggan TabelKaryawan Cari nama dan alamat pelanggan yang memiliki rekening dengan saldo lebih dari 4000000. Jawab : SELECT Nama, Alamat FROM TabelPelanggan WHERE No_Kartu IN ( SELECT No_Kartu FROM TabelKaryawan WHERE No_Rek IN ( SELECT No_Rek FROM TabelRekening WHERE Saldo > 4000000) ) 3. Teknik Menggunakan Operator Join Untuk menggabungkan tabel dengan berbagai kondisi yang lebih dinamis, maka kita dapat menggunakan operator JOIN. Contoh : Tabel Pelajaran Tabel Jadwal 5 W orkshop MsVB 6 & SQL Server 2000 | Yoga | 1. CROSS JOIN Syntax : SELECT ………… FROM Tabel1 CROSS JOIN Tabel2 WHERE Kondisi Contoh : SELECT * FROM Pelajaran CROSS JOIN Jadwal WHERE Pelajaran.KodePel = Jadwal.KodePel 2. INNER JOIN Penggunaannya sama dengan CROSS JOIN, namun kondisinya menggunakan kata ON untuk menyamakan keynya. Syntax : SELECT ………… FROM Tabel1 INNER JOIN Tabel2 ON Kondisi Contoh : SELECT * FROM Pelajaran INNER JOIN Jadwal ON Pelajaran.KodePel = Jadwal.KodePel 6 W orkshop MsVB 6 & SQL Server 2000 | Yoga | 3. RIGHT JOIN Apabila kita ingin menampilkan dua tabel, maka tabel yang pertama dianggap tabel kiri (LEFT) dan tabel yang kedua sebagai tabel kanan (RIGHT). Penggunaan operator RIGHT JOIN akan mengakibatkan seluruh data dari tabel kanan tampil seluruhnya, dan apabila salah satu kolom anggota tabel kanan tidak memiliki hubungan dengan data pada tabel kiri (LEFT), maka data pada tabel pertama (LEFT) akan diisi NULL. Nilai NULL berarti tidak ada data yang direlasikan antara tabel pertama dengan tabel kedua. Syntax : SELECT ………… FROM Tabel1 RIGHT JOIN Tabel2 ON Kondisi Contoh : SELECT * FROM Jadwal RIGHT JOIN Pelajaran ON Pelajaran.KodePel = Jadwal.KodePel 4. LEFT JOIN Operator LEFT JOIN memiliki fungsi yang terbalik dengan RIGHT JOIN. Jika RIGHT JOIN menampilkan semua data dari tabel yang dianggap berada di sebelah kanan, maka LEFT JOIN menampilkan seluruh data pada tabel pertama (LEFT) Syntax : SELECT ………… FROM Tabel1 LEFT JOIN Tabel2 ON Kondisi Contoh : SELECT * FROM Pelajaran LEFT JOIN Jadwal ON Pelajaran.KodePel = Jadwal.KodePel 7 W orkshop MsVB 6 & SQL Server 2000 | Yoga | Pandangan (View) View adalah tabel virtual yang isinya ditentukan oleh query ke dalam database. View ini bukanlah tabel fisik, tetapi sekumpulan instruksi yang memberikan hasil serangkaian data. Karakteristik dari view adalah sebagai berikut : Tidak dapat diberi parameter Tidak menyimpan data di dalamnya, melainkan definisi (query) suatu tabel View sebaiknya digunakan apabila kita sering menggunakan query select yang sama dan berulang untuk mengambil data View sangat membantu kita untuk merefleksikan field-field yang tidak ada di satu table tetapi ada di table lain, untuk itu kita bisa gunakan view ini dengan cara membuat relasi (join) antar table-table tersebut View adalah untuk merefleksikan sebuah metadata View menghasilkan result set sedangkan SP tidak (di SP disebutnya return value) Stored Pocedure Sebuah stored procedure adalah precompiled executable object yang terdiri dari satu atau lebih statement SQL. SQL Server memiliki system stored procedure yang sejatinya telah ada untuk memudahkan melakukan administrasi terhadap SQL Server itu sendiri. Selain itu kita juga dapat membuat stored procedure sesuai kebutuhan kita. Karakteristik dari stored procedure adalah sebagai berikut : Dapat menggunakan parameter SP umumnya digunakan untuk mengirim nilai (send return values), mengirim parameter output ataupun enkapsulasi bisnis logic. SP di kompile terlebih dahulu pada saat pertama kali di jalankan. Dari pertimbangan security, stored procedure lebih aman. Stored Procedure sebaiknya digunakan apabila database server terpisah secara fisik dengan aplikasi atau aplikasi Multi Tier Dapat menggunakan T-SQL sehingga dapat melakukan logic business Untuk melakukan suatu proses pengolahan data yang dilakukan di server side 8 W orkshop MsVB 6 & SQL Server 2000 | Yoga | Normalisasi Proses normalisasi merupakan proses pengelompokan data elemen menjadi tabeltabel yang menujukan entity dan relasinya. Pada proses normalisasi selalu diuji pada beberapa kondisi. Apakah ada kesulitan pada saat menambah (insert), menghapus (delete), mengubah (update), membaca (retrieve) pada suatu database. Bila ada kesulitan maka relasi tersebut dipecahkan pada beberapa tabel lagi atau dengan kata lain normalisasi merupakan suatu teknik dalam logical desain sebuah database. Suatu bentuk normalisasi dikatakan sudah berada pada bentuk normal tertentu jika memenuhi beberapa batasan dari tingkatan tertentu. Tingkatan normalisasi yang lebih tinggi dianggap lebih baik dari tingkat di bawahnya. Bentuk-bentuk normalisasi : 1. Bentuk Tidak Normal (UnNormalized) Bentuk ini merupakan sekumpulan data yang akan direkam, tidak ada keharusan mengikuti suatu format tertentu, dapat saja data tidak lengkap atau terduplikasi. Data dikumpulkan apa adanya sesuai dengan kedatangannya. 2. Bentuk Normal Kesatu (1NF atau First Normal Form) Bentuk normal kesatu mempunyai ciri yaitu setiap data dibentuk dalam flat file (file data / rata), data dibentuk dalam satu demi satu record dan nilai dari field-field berupa “atomic value”. Tidak ada set atribut yang berulang-ulang atau atribut bernilai ganda (multi value). Tiap field hanya satu pengertian, bukan merupakan kumpulan data yang mempunyai arti mendua, hanya satu arti saja serta bukanlah pecahan kata-kata sehingga artinya lain. 3. Bentuk Normal Kedua (2NF atau Second Normal Form) Bentuk normal kedua mempunyai syarat yaitu bentuk data telah memenuhi kriteria bentuk normal kesatu. Atribut bukan kunci haruslah bergabung secara fungsi pada kunci utama atau primary key. Sehingga untuk membentuk normal kedua sudah ditentukan kunci-kunci field. Kunci field haruslah unik dan dapat mewakili atribut lain yang menjadi anggotanya. 4. Bentuk Normal Ketiga (3 NF atau Third Normal Form) Untuk membentuk normal ketiga, maka relasi haruslah dalam bentuk normal kedua dan semua atribut bukan primer tidak punya hubungan yang transitif. Dengan kata lain, setiap atribut bukan kunci haruslah bergantung hanya pada primary key secara menyeluruh. 9 W orkshop MsVB 6 & SQL Server 2000 | Yoga | Mengenal SQL SQL adalah kependekan dari Stuctured Query Language. Dalam bahasa Inggris, SQL biasa dibaca sebagai SEQUEL dan bukan ES-KYU-EL. Bahasa ini merupakan standard yang digunakan untuk mengakses basis data relasional. Standar SQL mula-mula didefinisikan oleh ISO (International Standards Organization) dan ANSI (the American National Standards Institute), yang dikenal dengan sebutan SQL86. Seiring dengan perjalanan waktu, sejumlah standar telah ditetapkan. Tabel berikut memperlihatkan keseluruhan standard yang pernah dibuat. STANDARD SQL KETERANGAN SQL86 Standard pertama SQL, yang mendefinisikan fungsi-fungsi minimal dalam produk-produk SQL SQL89 Standard kedua yang menambahkan mekanisme untuk mengimplementasikan hubungan kunci asing (integritas referensial) SQL92 Menentukan hal-hal yang menjadi fitur SQL sebagai bahasa di masa mendatang. Banyak produk DBMS yang mengacu standar ini SQL99 SQL2003 SQL2006 SQL2008 Memperluas SQL92, yang antara lain menyertakan integrasi terhadap pendekatan berorientasi objek Mengenalkan fitur-fitur yang berhubungan dengan XML, fungsi windows, standarisasi sekuesnsial dan kolom dengan property auto generate Mendefinisikan metode bagaimana SQL dapat digunakan dalam konjungsi dengan XML. Export/import data dalam format XML juga makin dipertegas. Sebagai tambahan, fasilitas ini membolehkan aplikasi untuk mengintegrasikan kode SQL untuk digunalan XQuery. Melegalisasi statement Order By diluar definisi kursor. Ditambahkan instead of trigger dan truncate SQL Sebagai Sub Bahasa Penyebutan SQL sebagai bahasa query sebenarnya kurang tepat. Mengapa demikian ? Sebab, fungsi SQL tidak sekedar untuk melakukan query (memperoleh data), melainkan juga dapat digunakan untuk kepentingan lain dalam memanipulasi data. Oleh karena itu, SQL sering kali disebut sebagai suatu subbahasa. Alasannya, walaupun bukan sekedar untuk query, SQL tidak memenuhi persyaratan sebagai bahasa. Beberapa hal yang menjadikan SQL tidak tergolong sebagai bahasa adalah karena tidak ada dukungan Pernyataan penguji kondisi (semacam if pada COBOL), dan Pernyataan pengulangan (semacam while pada C atau repeat pada Pascal). Walaupun hanya sebagai sub bahasa, SQL memungkinkan pemrogram ataupun administrator basis data melakukan hal-hal berikut : Menciptakan dan memodifikasi struktur tabel Mengatur sekuritas pengaksesan terhadap basis data Memperoleh informasi Melakukan peremajaan data dan penambahan isi basis data. 10 W orkshop MsVB 6 & SQL Server 2000 | Yoga | Bentuk-Bentuk SQL Terdapat tiga bentuk SQL, yaitu Interactive, Static dan Dynamic. Interactive SQL bentuk ini digunakan untuk beroperasi secara langsung dengan basisdata untuk menghasilkan keluaran yang ditujukan penggunaan oleh manusia. Pada bentuk ini, SQL dimasukkan lewat kalimat, langsung dieksekusi dan kita dapat melihat hasilnya (jika ada) secara langsung. Static SQL bentuk ini berisi kalimat SQL yang dikodekan (hard code) sebagai bagian aplikasi atau modul kode. Kebanyakan bentuk adalah Embedded SQL dimana kode SQL ditempelkan di kode sumber program yang ditulis dengan bahasa lain seperti C atau Pascal. Agar SQL dapat berhubungan dengan bahasa pemrograman maka diperlukan perluasan terhadap SQL. Keluaran dan Embedded SQL dilewatkan ke variabel anau parameter yang digunakan oleh program. Dynamic SQL bentuk ini merupakan bagian aplikasi atau modul kode tapi kode SQL spesifik yang dieksekusi dihasilkan saat jalan bukan dikodekan di program sebelumnya. Terdapat beberapa perluasan terhadap Static SQL agar memungkinkan Dynamic SQL. Bahasa SQL Bahasa SQL mempunyai beberapa bagian (sub bahasa) : 1. Data Definition Language (DDL). DDL memberikan perintah untuk mendefinisikan skema relasi, penghapusan relasi, membuat indeks dan modifikasi skema relasi. Perintah yang berhubungan seperti : CREATE, ALTER, DROP. 2. Interactive Data Manipulation Language. DML merupakan bahasa query yang berdasarkan pada aljabar relasi dan kalkulus relasi tuple. Termasuk didalamnya adalah perintah untuk penyisipan, penghapusan dan modifikasi. Perintah yang berhubungan seperti : SELECT, INSERT, UPDATE, DELETE. 3. Embedded DML. Bentuk embedded SQL biasanya terdapat dalam bahasa pemrograman multi guna seperti Visual Basic, Delphi, dsb. 4. View Definition. DDL SQL memasukkan perintah untuk mendefinisikan view. 5. Authorization. DDL SQL memasukkan perintah untuk menentukan hak-hak akses ke relasi dan view. Perintah yang berhubungan seperti : GRANT, REVOKE, DENY. 6. Integrity. DDL SQL memasukkan perintah untuk menentukan konstrain integritas yang harus dipenuhi oleh data yang tersimpan dalam basis data. Perintah yang berhubungan seperti : ADD CONSTRAINT, ON DELETE CASCADE, dsb. 7. Transaction control. SQL memasukkan perintah-perintah untuk menentukan awal dan akhir transaksi. Beberapa implementasi juga memungkinkan locking data untuk concurrency control. Perintah yang berhubungan seperti : BEGIN TRANSACTION, COMMIT, ROLLBACK, SAVE. 11 W orkshop MsVB 6 & SQL Server 2000 | Yoga | Perkembangan Microsoft SQL Server Microsoft SQL Server dikenalkan pada tahun 1990 untuk platform Microsoft OS/2 dalam kerjasamanya dengan Sybase. Produk ini berasal dari Sybase SQL Server 4.x untuk platform Unix. Dengan adanya Windows NT, muncul inisiatif untuk membangun SQL Server versi Windows NT sehingga dihasilkan Microsoft SQL Server versi 4.2 untuk platform Windows NT. Kerjasama dengan Sybase masih berlanjut dan diluncurkan SQL Server 6.0 pada tahun 1995 dan setahun kemudian SQL Server versi 6.5 diluncurkan. SQL Server 6.5 memperbarui kemampuan transaksi dan menjadi produk database client/server yang banyak dipakai pada platform Windows NT. Untuk memenuhi kebutuhan pengguna yang makin meningkat, maka SQL Server perlu didisain ulang dan kerjasama dengan Sybase dihentikan. Kemudian Microsoft mengembangkan SQL Server 7.0 yang difokuskan pada tiga area yaitu : Easy to use, Scalability dan Data Warehousing. Pada tahun 2000, kemudian Microsoft meluncurkan SQL Server 2000. Butuh sekitar lima tahun bagi Microsoft untuk meluncurkan Microsoft SQL Server 2005 di tahun 2005 ini bersamaan dengan peluncuran Microsoft Visual Studio 2005. Dan sekitar tiga tahun kemudian, Microsoft kembali mengeluarkan produk DBMS andalan mereka yakni Microsoft SQL Server 2008 yang juga diikuti dengan Microsoft Visual Studio 2008. Pada modul ini akan difokuskan untuk membahas Microsoft SQL Server 2000. SQL Server 2000 mempunyai beberapa edisi. Setiap edisi memberikan performansi dan harga yang berbeda pula, sehingga pemakaiannya dapat disesuaikan dengan kebutuhan si pengguna. Adapun edisi yang dimaksud adalah : EDISI FITUR Enterprise Merupakan edisi terlengkap yang mendukung hingga 32 CPU dan RAM hingga 64 GB. Cocok digunakan untuk perusahaan besar yang membutuhkan performa yang maksimal. Standard Cocok digunakan untuk perusahaan kecil dan menengah. Edisi ini mampu mendukung hingga 4 CPU dan RAM hingga 2 GB Personal Edisi ini berisi alat bantu manajemen lengkap dan fungsi-fungsi umum dari edisi Standard serta cocok digunakan untuk keperluan individu. Edisi ini dijalankan pada sistem operasi yang bukan server, seperti Windows NT Workstation 4.0, Windows 9x, Windows 2000 Professional dan Windows XP. Edisi ini mendukung 2 processor dan performansinya dioptimalkan untuk pemakai tunggal dan workgroup kecil serta mampu menangani lima user yang konkuren. Developer Diluncurkan bersama-sama dengan Microsoft Visual Studio dan hanya disarankan untuk pengembangan aplikasi yang memakai Visual Studio Desktop Engine (MSDE) Edisi ini mempunyai fasilitas mesin database dasar dari SQL Server 2000. Edisi ini tidak mempunyai interface, alat bantu manajemen, kemampuan analisis, penggabungan replikasi, online book. Edisi ini membatasi ukuran database dan beban user Windows CE Merupakan versi SQL Server 2000 untuk alat-alat yang menjalankan Windows CE. Versi Windows CE biasa digunakan untuk PDA & Pocket PC. 12 W orkshop MsVB 6 & SQL Server 2000 | Yoga | Tipe Data SQL-92 standar mendukung bermacam-macam tipe domain yang built-in sebagai berikut : Char(n) : tipe karakter dengan panjang yang tetap (n) (fixed-length character) Varchar(n) : tipe karakter dengan panjang bervariasi. Maksimum panjang n. Int : integer Smallint : small integer Numeric (p,d) : p menunjukkan jumlah digit bilangan dan d menunjukkan jumlah digit dibelakang titik desimal. Real, double precision : floating-point dan double-precision floating point Float (n) : floating-point number Date : tipe kalender SQL Server 2000 sendiri, mendukung sekitar 30 tipe data. Untuk melihatnya, silahkan gunakan perintah sp_datatype_info pada jendela Query Analyzer. Atau bisa dilihat pada Obejct Browser pada Query Analyzaer (F8). Keamanan SQL Server Sekuritas Basis Data (Database security) merupakan proteksi basis data terhadap ancaman atau gangguan melalui kendali yang bersifat teknis maupun administrasi. SQL Server menerapkan : 1. Autentikasi Login. Untuk login, SQL Server menawarkan 2 metode, yang pertama yakni Windows Authentication dan yang kedua SQL Server Authentication. 2. SQL Server juga menerapkan Server Role terhadap user-user yang berada dalam sistem, sehingga hak akses dari masing-masing user dapat diatur. 3. Database Access. User-user juga diberikan limitasi terhadap basis data yang boleh mereka akses. Disini diperlukan peran seorang DBA untuk mengatur manajemen user. 4. Dari segi Control Language, SQL Server menyediakan perintah-perintah untuk mengatur hak akses user seperti : GRANT, REVOKE, DENY dan beberapa stored procedure yang ditujukan untuk maksud ini. Arsitektur Client/Server Microsoft SQL-Server dirancang agar efektif dalam sejumlah lingkungan : 1. Sebagai 2-tier atau multi-tier Client/Server Database System, System client/server dikembangkan sedemikian rupa dimana database ditempatkan pada suatu komputer pusat, disebut sebagai server, dan dibagi-pakai (share) kepada sejumlah user. User melakukan akses ke server rnelalui suatu aplikasi client atau aplikasi server : Dalam 2-tier client/server system, user menjalankan suatu aplikasi pada lokal komputer, disebut sebagai client, yang terkoneksi melatui network ke server yang menjalankan SQL-Server. Aplikasi Client yang menjalankan business logic dan code untuk menampilkan output kepada user, dikenal sebagai thin client. Dalam multi-tier client/server system, logic aplikasi client dijalankan pada 2 lokasi : 13 W orkshop MsVB 6 & SQL Server 2000 | Yoga | Thin client berjalan pada komputer lokal dan focus pada penampilan (display) hasik-hasil ke user. Business logic ditempatkan pada aplikasi server yang dijalankan pada suatu server. Thin client memanggil fungsi-fungsi dan aplikasi server, dimana server memiliki kemampuan multithread yang bekerja dengan beberapa user pada saat yang sama. Server aplikasi membuka suatu koneksi dengan server database. Server database dapat merupakan server yang sama atau dapat juga merupakan server database terpisah yang terkoneksi melalui jaringan. Client Computer SQL Server Client Apllication SQL Server Client Apllication Database Computer SQL Server SQL Server Client Apllication Server Application Internet Information Server Internet Server Internet Client Gambar Client/Server Database System 2. Sebagai Desktop Database System. SQL-Server juga dapat digunakan pada aplikasi yang membutuhkan database stand alone dan tersimpan secara lokal pada komputer client. SQL-Server dapat mengkoordinasi sendiri secara dinamis untuk berjalan efektif dengan resource yang tersedia pada client, tanpa memerlukan administrator database tersendiri. Pembuat aplikasi dapat menyertakan SQL-Server sebagai komponen data storage pada aplikasi mereka. 14 W orkshop MsVB 6 & SQL Server 2000 | Yoga | Localhost Computer Sql Server Databases SQL Server Manager Tools ODBC Driver Microsoft Visual Basic Borland Delphi PHP/ASP (HTML) Other Prog Language Stand Alone Komputer - Arsitektur Pada Aplikasi Tools Management SQL Server Untuk memudahkan melakukan administrasi terhadap basis data, maka SQL Server menyediakan beberapa tools (kakas) seperti : 1. Service Manager Utilitas Service Manager dipakai untuk menjalankan (start) atau memberhentikan (stop dan pause) komponen-komponen server. Komponen-komponen tersebut dijalankan sebagai service pada Microsoft Windows NT, Windows 9x, dan Windows XP sebagai program executable yang terpisah. Gambar Service Manager & Service ManagerOptions 15 W orkshop MsVB 6 & SQL Server 2000 | Yoga | Field Server berisi nama server yang sedang dimonitor. Kotak Services menampilkan servis-servis yang ada serta tampilan grafis dari status servis. Jika sebuah service sedang aktif, ditampilan tanda (icon) berwarna panah hijau. Service Manager mempunyai beberapa fungsionalitas yang tersembunyi. Klik kanan pada title bar akan menampilkan menu aplikasi dengan dua menu tambahan, yaitu Connect dan Options. Jika kita memilih sebuah komputer remote pada kotak server, kita dapat terhubung dengan menu Connect bukan dengan memilih pada kotak Services. Jika kita memilih Options dari menu konteks, maka akan ditampilkan interface dialog Option. 2. Query Analyzer Query Analyzer merupakan alat bantu grafis yang dapat digunakan untuk mendesain, mengetes, dan menjalankan perintah-perintah Transact SQL, stored procedure, batch, dan script secara interaktif. Kita dapat menjalankan Query Analyzer dengan cara : Memanggil dari Enterprise Manager Dari menu Start Dari command prompt dengan menjalankan utilitas isqlw Gambar Query Analyzer 3. Enterprise Manager Enterprise Manager adalah alat bantu administratif yang bersifat Graphical User Interface (GUI). Hal-hal yang dapat kita lakukan melalui Enteprise Manager adalah : Mendefinisikan kelompok-kelompok server yang menjalankan SQL Server, Mendaftarkan sebuah server ke dalam sebuah group, Membuat database, object, login user, dan hak-hak pada setiap server, Memanggil Query Analyzer untuk membuat dan mengeksekusi perintah SQL, Memanggil berbagai wizard yang tersedia. 16 W orkshop MsVB 6 & SQL Server 2000 | Yoga | Gambar SQL Server Enterprise Manager Klik tanda + pada simpul Microsoft SQL Server, akan ditampilkan simpul SQL Server Group, klik tanda + lagi, maka akan ditampilan nama server kita. Klik kanan pada simpul tersebut, kemudian pilih View TaskPad. Ada dua macam tab yang ditampilkan, yaitu General dan Wizards. Tab General menampilkan informasi umum dan tab Wizards akan menampilkan pilihan wizard yang tersedia dan kita dapat memilih dengan mengklik salah satu wizard untuk mengaktifkannya. 17 W orkshop MsVB 6 & SQL Server 2000 | Yoga | Sekilas Database di SQL Server Data Microsoft SQL Server disimpan dalam beberapa database. Data dalam suatu database terorganisasi ke dalam komponen logis bagi user. Suatu database juga secara fisik teridiri dua atau lebih file pada disk. Bila menggunakan suatu database, pekerjaan terutama berlangsung pada komponen logis seperti table, view, file procedure, dan user. Sedangkan secara fisik, file database dapat terlihat pada disk, dan umumnya hanya database administrator yang perlu bekerja dengan komponen fisik tersebut. Database XYZ User View Physical Implementation Data.mdf Data.ndf Log.ldf Gambar Physical Implementation SQL-Server Database File File Database dan SQL-Server dapat dikategorikan menjadi 3 jenis : 1. PRIMARY DATA FILE. Data disimpan dalam file dengan ekstensi “.mdf”. File ini merupakan database yang sesungguhnya, berisi tabel dan objek lain dan database. File ini disebut juga sebagal Primary Data File. 2. SECONDARY DATA FILE. File secondary memiliki ekstensi “.ndf”. File ini merupakan tempat penyimpanan data dan object yang tidak disimpan pada pada file primary. Database tidak harus memiliki file sekunder, tetapi dapat memiliki beberapa file sekunder. 3. LOG. File ini berisi catatan antara lain mengenai modifikasi tabel (UPDATE), input data baru (INSERT), dan penghapusan data (DELETE). Catatan tersebut akan dimanfaatkan oteh SQL-Server jika terjadi kegagalan sistem yang mengakibatkan crash. Dengan catatan yang ada pada file log, SQL-Server melakukan proses recovery, dan melakukan proses “rollback” untuk transaksi yang belum selesai. File LOG memiliki ekstensi “.ldf”. Secara default besar file log adalah 25% dan file data. 18 W orkshop MsVB 6 & SQL Server 2000 | Yoga | 2 KONEKSI, TRANSFORMASI, VB, KONSEP-KONSEP Konsep Connection String Connection String dapat diartikan sebagai kumpulan kata (string) yang mengandung informasi tentang sebuah sumber data (data source) dan secara langsung mengkoneksikannya melalui Driver atau Provider dari masing-masing database sebagai inisialisasi koneksi. Connection string dapat berisi atribut seperti nama driver, nama server / ip server, nama database termasuk didalamnya metode keamanan seperti user name dan password. Berikut ini adalah contoh connection string ke berbagai database : DATABASE SQL Server 7 & 2000 SQL Server 2005 CONNECTION STRING KET JENIS Provider=sqloledb; Data Dource=myServerAddress; Initial Catalog=myDataBase; User Id=myUsername; Password=myPassword; SS OLDB Provider=sqloledb; Data Source=myServerAddress; Initial Catalog=myDataBase;Integrated Security=SSPI; TC OLDB Driver={SQL Server}; Server=myServerAddress; Database=myDataBase; Uid=myUsername; Pwd=myPassword; SS ODBC Driver={SQL Server}; Server=myServerAddress; Database=myDataBase; Trusted_Connection=Yes; TC ODBC Provider=SQLNCLI; Server=myServerAddress; Database=myDataBase; Uid=myUsername; Pwd=myPassword; SS OLDB Provider=SQLNCLI; Server=myServerAddress; Database=myDataBase; Trusted_Connection=yes; TC OLDB Driver={SQL Native Client}; Server=myServerAddress; Database=myDataBase; Uid=myUsername; Pwd=myPassword; SS ODBC Driver={SQL Native Client}; Server=myServerAddress; Database=myDataBase; Trusted_Connection=yes; TC ODBC 19 W orkshop MsVB 6 & SQL Server 2000 | Yoga | SQL Server 2008 MySQL Postgre SQL Oracle IBM DB2 Ms Access 2007 Ms Access 2000/2003 Provider=SQLNCLI10; Server=myServerAddress; Database=myDataBase; Uid=myUsername; Pwd=myPassword; SS OLDB Provider=SQLNCLI10; Server=myServerAddress; Database=myDataBase; Trusted_Connection=yes; TC OLDB Driver={SQL Server Native Client 10.0}; Server=myServerAddress; Database=myDataBase; Uid=myUsername; Pwd=myPassword; SS ODBC Driver={SQL Server Native Client 10.0}; Server=myServerAddress; Database=myDataBase; Trusted_Connection=yes; TC ODBC Provider=MySQLProv; Data Source=mydb; User Id=myUsername; Password=myPassword; SS OLEDB Driver={MySQL ODBC 3.51 Driver};Server= myServerAddress; Port=3306; Database=myDataBase; User=myUsername; Password=myPassword; Option=3; SS ODBC 3.51 Driver={MySQL ODBC 5.1 Driver}; Server= myServerAddress;Port=3306;Database=myDataBase;User=m yUsername;Password=myPassword;Option=3; SS ODBC 5.1 Provider=PostgreSQL OLE DB Provider; Data Source=myServerAddress; location=myDataBase; User ID=myUsername; password=myPassword; timeout=1000; SS OLEDB Driver={PostgreSQL};Server=IP address; Port=5432; Database=myDataBase; Uid=myUsername; Pwd=myPassword; SS ODBC Provider=OraOLEDB.Oracle; Data Source=MyOracleDB; User Id=myUsername; Password=myPassword; SS OLEDB Provider=OraOLEDB.Oracle; Data Source=MyOracleDB; OSAuthent=1; TC OLEDB Driver={Microsoft ODBC for Oracle}; Server=myServerAddress; Uid=myUsername; Pwd=myPassword; SS ODBC Provider=IBMDADB2; Database=myDataBase; Hostname=myServerAddress;Protocol=TCPIP;Port=50000; Uid=myUsername; Pwd=myPassword; SS IBM OLEDB Provider=DB2OLEDB; Network Transport Library=TCPIP; Network Address=myServerAddress; Initial Catalog=MyCtlg; Package Collection=MyPkgCol; Default Schema=Schema; User ID=myUsername; Password=myPassword; SS MS OLEDB Provider=Microsoft.ACE.OLEDB.12.0; Data Source=C:\myFolder\myAccess2007file.accdb; Persist Security Info=False; SS OLEDB Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\mydatabase.mdb;User Id=admin;Password=; SS OLEDB Driver={Microsoft Access Driver (*.mdb)};Dbq=C:\mydatabase.mdb;Uid=Admin;Pwd=; SS ODBC Keterangan : SS = Standard Security TC = Trusted Connection 20 W orkshop MsVB 6 & SQL Server 2000 | Yoga | ODBC (Open Database Connectivity) ODBC merupakan suatu protokol yang berdasarkan database realtional SQL. Secara singkat, begitu suatu driver ODBC diinstall dari suatu produk database, maka dapat mengakses isi dari database tersebut tanpa harus mengetahui kerumitan dibaliknya. ODBC dapat mengakses database apa saja apabila driver database tersebut sudah diinstall. Meskipun demikian teorinya, masih banyak developer yang mengunakan interface lain seperti OLE DB dari Microsoft. ada 3 alasan utama yang menyebabkan developer enggan menggunakan ODBC, yaitu : Terbatas ODBC biasanya mendefinisikan interface saat ODBC driver dikeluarkan. Sehingga apabila muncul fitur baru, ODBC tersebut tidak akan bisa digunakan untuk mengaksesnya. Lambat Dengan interface yang rumit sekali tentunya akan lebih susah untuk mengoptimalkan suatu aplikasi pada platform tertentu. Developer lebih banyak menemui kesulitan saat ingin mengoptimalkan aplikasi mereka. Vendor database tertentu menawarkan solusi mereka sendiri untuk mengoptimalkan penggunaan database mereka. Kemungkinan sulit untuk digunakan Low level fungsi API ODBC jelas menyulitkan developer, baik untuk menggunakan maupun untuk mempelajarinya. Konsep Interface ke Database Pada Visual Basic, teknik pengaksesan ke database dapat dibagi menjadi dua, yakni : Pengaksesan Diatur Oleh Sistem Operasi Teknik ini menggunakan Data Source (ODBC) sebagai jembatan atau perantara ketika kita akan mengkoneksikan database dengan Visual Basic. Pada teknik ini, sistem operasi akan melakukan tugasnya sebagai manajer yang mengatur setiap koneksi ke database yang ada pada komputer. Tentunya database yang diakses adalah database yang sudah terdaftar dalam sistem operasi atau dengan kata lain, database tersebut telah memiliki driver yang ditunjukkan pada Data Source (ODBC). Jadi untuk mengkoneksikan ke database, kita perlu membuat Data Source yang baru (new data source) pada Tab System DSN. Pada tab itu, kita buat Data Source dengan terlebih dahulu menentukan driver yang sesuai, kemudian nama server, teknik authentikasi ke database, nama database. Setelah data source terbentuk, maka kita dapat melakukan tes koneksi ke database. Jika sukses, berarti data source kita dapat mengakses database dengan baik. Setelah koneksi terbentuk dengan benar. Maka berbagai aplikasi seperti Visual Baisc, Miceosoft Access, Microsoft Excel, ASP, dsb, dapat menggunakan fasilitas koneksi ini untuk menghubungkan sumber data dengan aplikasi. 21 W orkshop MsVB 6 & SQL Server 2000 | Yoga | Pengaksesan Diatur Oleh Visual Basic Pada teknik ini, Visual Basic selain bertindak sebagai pemrograman ke databasenya, ia juga mengatur koneksi yang terjadi pada database. Interface atau referensi yang digunakan dapat berupa : Data Access Objects (DAO) Remote Data Objects (RDO) ActiveX Data Objects (ADO) Visual Basic juga menyediakan kontrol-kontrol interface yang terdapat pada menu Component-nya untuk memudahkan user dalam menghubungkan databasenya dengan Visual Basic. Seperti Data (DAO), Microsoft Remote Data Control (MSRDC), Ado Data Control (ADODC), dan sebagainya Namun demikian, Visual Basic juga memberikan keleluasaan bagi mereka yang menyukai menulis program dalam menghubugkan ke databasenya. Jadi untuk menghubungkan ke database, kita juga dapat mengetik script pada editor Visual Basic baik pada form maupun modulenya. Bagi sebagian orang, mereka lebih menyukai teknik ini, selain fleksibel mereka juga menganggap teknik mengkoneksikan database lewat script lebih “elegan”. Gambar Teknik Pengaksesan Database Dari Visual Basic Gambar di atas memberikan gambaran tentang bagaimana sebuah database dapat terkoneksi ke Visual Basic. Setiap metode atau interface memiliki kelebihan dan kekurangan masing-masing. Jadi disini dituntut kejelian pemrogram dalam memanfaatkan fasilitas yang tersedia. Pemrogram harus tahu dengan baik, kapan ia harus memilih sebuah interface dengan untung ruginya. 22 W orkshop MsVB 6 & SQL Server 2000 | Yoga | ADO (ActiveX Data Object) ADO merupakan terobosan yang baru ada mulai Visual Basic 6.0. ADO menjadi interface antara Visual Basic developer dengan data. Sebuah ADO bertindak seperti halnya objek lain yaitu dipanggil metodenya, referensikan propertinya, memonitor eventnya. Dengan menggunakan ADO, gaya pemrograman untuk mengakses database lokal maupun remote menjadi sama yang dapat dilakukan secara universal. Sejak hadirnya Visual Basic 6.0, Microsoft mengenalkan objek baru sebagi standar akses data, yaitu ADO dengan tujuan untuk mempermudah developer mengakses data dari berbagai sumber yang tentu bervariasi, seperti relasional database, mainframe, directory service, dan bahkan web-based content. Gambar ADO Sebagai Interface Pengaksesan Ke Database ADO pertama kali muncul dan disambut baik oleh pasar, pada bulan juli 1998. ADO saat itu baru mencapai versi 2.0. Yang membuat ADO diterima baik oleh banyak developer adalah karena fleksibilitasnya yang tinggi, penggabungan ADO dengan OLE DB yang menghadirkan high-level dan low-level interface untuk akses data. Pada versi 2.7, RDS (Remote Data Service) 1.5 juga telah digabungkan ke dalam ADO sehingga model pemrograman ADO lebih sederhana, handal, dan efesien. Banyak keuntungan yang ditawarkan oleh ADO, antara lain : 23 W orkshop MsVB 6 & SQL Server 2000 | Yoga | Model pemrograman yang mudah dengan model objek yang sederhana Penggunaan bandwidth network yang kecil serta kebutuhan memori (RAM) klien yang lebih rendah. Operasi asynchronous Mendukung lokasi kursor pada client-side maupun server-side Kemampuan menyimpan record set ke dalam suatu file. Jadi, ADO menawarkan sesuatu yang lebih dibanding metode yang telah disebutkan. Sebenernya ada yang namanya ADO Data Control (ADODC) yang terdapat pada komponen visual basic. Menu Project Component (CTRL+T) Microsoft Ado Data Control 6.0 (OLEDB) yang merupakan kontol bagi interface ADO. Gambar Kontrol ADODC Transformasi Data Data Transformation Services (DTS) adalah salah satu modul pada SQL Server yang bisa mengkonversi data dari SQL Server ke format data yang lain yang kompatibel dengan OLE DB, ODBC, dan file teks. Sebuah paket DTS pada dasarnya adalah keterangan yang terperinci mengenai operasi-operasi yang harus dilakukan untuk mengimpor, mengekspor, atau mentransformasi suatu data. Gambar Wizard DTS Import/Export 24 W orkshop MsVB 6 & SQL Server 2000 | Yoga | Paket DTS bisa mencakup meng-copy tabel-tabel antar database dan mentransformasi data dari 1 format ke format yang lain dengan menggunakan ODBC, ActiveX, dan perintah SQL, atau bahkan program-program eksternal yangbisa menjadi bagian dari paket DTS. Jadi kita dapat melakukan transformasi data dari satu format ke format yang lain dalam satu atau beda server dengan mudah menggunakan DTS. Sebagai info. Di SQL Server 2005, Fungsi transformasi data yang selama ini telah ditangani oleh DTS, maka sekarang diganti menjadi SSIS (SQL Server Information Services) dengan kemampuan yang lebih baik dari DTS. Konsep Reference Ketika kita akan menggunakan suatu teknik pengaksesan ke database, atau menggunakan fungsi library Microsoft Excel, dan sebagainya, maka jangan lupa untuk mengaktifkan salah satu referensinya pada menu Project References. Kemudian aktifkan salah satu saja. Jika kita gunakan ADO, maka referencesnya Microsoft ActiveX Data Objects 2.x Library (semakin tinggi versinya semakin lengkap fitur yang ditawarkan). Gambar References Sebuah Project Konsep Form Sebagai Interface Visual Basic menyediakan suatu fasilitas yang fleksibel, yang membolehkan Anda untuk mengkonfigurasikan lingkungan pengembangan pada suatu pilihan yang Anda inginkan. Anda dapat memilih antar muka yang terdiri dari sebuah dokumen atau banyak dokumen, dan Anda dapat menyesuaikan dan memposisikan bermacam IDE (Integrated Development Environment) atau Lingkungan Pengembangan yang saling terintegrasi atau terhubung satu sama lain. Layout Anda akan tetap di antara session atau bagian-bagian antar muka Visual Basic. Form berguna bagi pengguna akhir (end-user) berhubungan/berinteraksi dengan databasenya. Bagi si perancang aplikasi, form adalah tempat kita menaruh kontrol-kontrol untuk manipulasi database. Form ini juga terbagi menjadi 2, yaitu : 25 W orkshop MsVB 6 & SQL Server 2000 | Yoga | Form Master Form yang ditujukan untuk menangani tabel master, biasanya lebih sederhana dan simple. Pada form ini akan dilakukan proses manipulasi data pada tabel master seperti proses insert, update dan delete data. Selain itu kita juga akan gunakan tombol-tombol navigasi untuk “menggerakkan” sebuah record dalam tabel. Form ini berjenis SDI (Single Document Interface) Form Transaksi Form yang ditujukan untuk menangani tabel transaksi, biasanya lebih rumit dan kadang bisa melibatkan lebih dari 3 tabel. Yang jelas konsep header & detail ada pada form transaksi ini. Jika mendesain form, buatlah dengan perasaan yang mendalam, anggaplah kita lagi mendesain rumah untuk kita tinggali, pasti kita akan buat sebagus mungkin kan ? usahakan jangan asal-asalan, gunakan rasa seni kita, curahkan perasaan kita di setiap sudutnya (hehehe). Buatlah orang yang melihat itu terkesan dan betah melihat form yang kita buat. Jika perlu pasang skin biar tambah memikat (hehehe bukan susuk loh). Jika masih belum puas, tambahkan animasi teks biar “hidup”. Namun tapi ada form yang digunakan untuk hal-hal khusus, seperti form untuk Menu (MDI Multiple Document Interface), form untuk login, form untuk animasi loading, dan sebagainya. Form-form ini memang sengaja dibuat untuk menunjang form utama kita yakni form master dan form transaksi dalam sebuah kesatuan sistem. Konsep Kontrol Kontrol merupakan salah satu obyek atau komponen suatu aplikasi yang diletakkan di dalam form untuk membentuk suatu program aplikasi. Jadi sebuah form biasanya disusun atas kontrol-kontrol tertentu sesuai kebutuhan. Kontrol inilah yang nantinya akan berfungsi sebagai interface antara user dengan program aplikasi yang dibangun. Sekarang kita bahas sedikit mengenai kontrol yang standard, bagi yang “expert” tidak perlu dibaca bagian ini. Kontrol ini terletak pada Toolbox. Jika kontrol tidak terlihat, maka klik menu View Toolbox. Berikut ini standar penamaan kontrol (walaupun tidak ada konvensinya secara tertulis). AWALAN cbo chk cmd dir drv fil fra frm grd hsb img KONTROL Combo Box Check Box Command Button Directory List Box Drive List Box File List Box Frame Form Grid Horizontal Scrollbar Image AWALAN lbl lin lst mnu ole opt pic shp tmr txt vsb KONTROL Label Line List Box Menu Ole Client Option Button Picture Box Shape Timer Text Box Vertical Scrollbar 26 W orkshop MsVB 6 & SQL Server 2000 | Yoga | Pointer PictureBox TextBox Label CommandButton Frame OptionButton CheckBox ComboBox ListBox HScrollBar VScrollBar DriveListBox Timer DirListBox FileListBox Shape Line Image Data OLE Gambar Kontrol Standard Pada ToolBox Visual Basic Terlihat sebuah kontrol dengan nama Data dengan referensi Microsoft DAO 3.51 Object Library. Data ini juga merupakan kontrol yang dapat digunakan untuk mengakses database. Namun memiliki banyak kelemahan dalam hal fleksibilitas koneksi. Oleh karena itu kita tidak akan memakainya. Kontrol Untuk Database Pada bagian ini akan dijelaskan kontrol yang nantinya kita akan pakai dalam pengolahan database, seperti : DataGrid, ListView dan SSTab. Ketiga kontrol ini secara default tidak terdapat di Toolbox Standard. Jadi kita perlu menambahkannya dari component. Caranya : menu Project Components (CTRL+T) Untuk kontrol DataGrid, pilih Microsoft DataGrid Control 6.0 (OLEDB) Untuk Kontrol ListView, pilih Microsoft Windows Common Controls 6.0 (SP6) Untuk kontrol SSTab, pilih Microsoft Tabbed Dialog Control 6.0 Setelah ketiganya ter-checklist. Kemudian tekan tombol OK. Maka pada ToolBox akan ditambahkan beberapa komponen seperti DataGrid, ListView dan SSTab. Maka ketiga kontrol ini siap digunakan untuk menyajika data pada database kita. 27 W orkshop MsVB 6 & SQL Server 2000 | Yoga | SSTab Data Grid List View Gambar Kontrol Untuk Database Pada Form Adapun fungsi dari masing-masing kontrol adalah sebagai berikut : SSTab berfungsi untuk menghemat pemakaian form, jadi dalam sebuah form kita dapat meletakkan banyak objek di setiap tab yang ada. Data Grid berfungsi untuk menampilkan data maupun manipulasi (insert, update dan delete data) langsung darinya. Juga untuk memudahkan kita dalam mengambil data dari tabel master untuk form transaksi. List View kita manfaatkan untuk mengentry data ke form transaksi. Jadi data yang dimasukkan lewat list view dapat berulang. Pada List View perlu dilakukan pengaturan sebelum digunakan. Caranya klik kanan pada list view properties. Pada combo view, gantilah menjadi 3-IvwReport, Pada tab column header, tambahkan field judul (insert column) & sesuaikan nama serta ukuran yang akan ditampilkan. Konsep Report Laporan / report berguna untuk menampilkan data yang berasal dari tabel atau query pada database. Seperti : laporan data pelanggan, laporan data barang, dan sebagainya. Namun laporan ini juga dapat digunakan untuk membuat tanda bukti seperti faktur. Untuk membuat laporan, Visual Basic 6 menyediakan feature seperti data report dan crystal report. Namun jika kita ingin membuat laporan yang benar-benar profesional, maka kita dapat menggunakan Seagate Crystal Report Professional versi terbaru atau Active Report Pro. Namun jika kita seorang yang kreatif, maka kita dapat “mengawinkan” antara Visual Basic dengan HTML untuk laporannya dengan VBScript tentunya. 28 W orkshop MsVB 6 & SQL Server 2000 | Yoga | Keuntungan dari pembuatan laporan berupa HTML adalah, ia akan kompatibel di semua platform komputer. Namun dibutuhkan kecermatan serta ketelitian dalam pembuatan laporan menggunakan HTML, karena menurut saya agak rumit bagi orang yang awam dengan HTML. Jadi pada workshop kita kali ini, kita akan mencoba mengenal pembuatan laporan dengan data report dengan sedikit script pemrograman. Jika masih ada waktu, kita akan bahas sedikit Export Data ke Microsof Excel. Software Pihak Ketiga ( Crystal Report, Active Report ) Data Tabel / Query Visual Basic Report Embedded Laporan ( Hard/Soft ) Primitive Report ( HTML, TXT, Excel, dsb ) Gambar Konsep Pembuatan Laporan Konsep Validasi Ketika user ingin menginput field yang bertipe numerik, maka jika ia menginput berupa huruf atau karakter spesial program akan error. Oleh karena itu dibutuhkan suatu prosedur validasi masukan yang berfungsi mengontrol input dari user. Validasi memungkinkan kita untuk memberi tahu pengguna jika ia salah menginput data dengan pesan yang mudah dimengerti. Berikut ini salah satu contoh sederhana penggunaan validasi untuk mengontrol karakter bertipe numerik : Private Sub txtqty_KeyPress(KeyAscii As Integer) If (KeyAscii >= vbKey0 And KeyAscii <= vbKey9) Or KeyAscii = vbKeyBack Then Exit Sub ElseIf KeyAscii = vbKeyReturn Then txtqty.SetFocus Else MsgBox "Data Harus Angka..!", vbOKOnly + vbInformation, "Pesan Kesalahan" KeyAscii = vbKeyBack End If End Sub Konsep validasi juga berguna selain untuk memudahkan pengguna dalam menginput data, mencegah error pada aplikasi, juga berguna untuk meningkatkan keamanan pada aplikasi. Serangan-serangan pada aplikasi dengan memanfaatkan teknik seperti SQL Injection dapat diminimalisir jika salah satunya kita gunakan teknik validasi terhadap suatu inputan. 29 W orkshop MsVB 6 & SQL Server 2000 | Yoga | Konsep Pengampunan Jika kita ingin mengeksekusi suatu perintah (melalui command button) baik itu save, insert, update dan delete data, maka kita akan dihadapkan dengan pertanyaan “Apakah Anda yakin melakukan ini ?” jika jawabannya yakin (yes), maka proses eksekusi dilanjutkan, jika tidak yakin (no) maka proses eksekusi dibatalkan dan keluar dari prosedur eksekusi. Konsep ini berguna untuk meyakinkan pengguna dengan apa yang ia kerjakan. Karena biasanya program aplikasi yang diibuat tidak menyertakan prosedur untuk membatalkan (undo). Namun jika ditinjau dari segi pemrograman terstruktur, maka konsep ini jelas tidak sesuai, karena jika tidak yakin maka akan keluar posedur (exit sub) begitu saja. Berikut ini adalah contoh sederhana dari penggunaan konsep pengampunan : Private Sub cmddel_Click() If MsgBox("Apakah Data Akan Dihapus [Y/T] ?", vbYesNo + vbQuestion, "Pesan Hapus") = vbYes Then RsObat.Delete RsObat.MoveFirst Tampil DataGrid1.Refresh Else Exit Sub End If End Sub Konsep Otomatisasi Penomoran Suatu tabel pada umumnya mempunyai suatu kunci unik (primary key). Kunci ini tentunya telah mengikuti pola penomoran tertentu. Seperti : F0001 untuk record faktur ke-1, B0001 untuk record barang ke-1, dan sebagainya. Ketika kita ingin melakukan penambahan record pada suatu tabel, maka sebaiknya dilakukan penomoran kunci secara otomatis untuk menghindari kesalahan waktu kita melakukan input, hal ini juga meminimaliasasi kerangkapan data (redudansi data). Dengan otomatisasi penomoran, berbagai format dari sebuah inputan dapat kita bentuk sesuai dengan kebutuhan. Berikut ini adalah contoh sederhana dari penggunaan konsep otomatisasi penomoran : Private Sub KosongPesan() Dim NoPes As Integer txttanggal.Text = Date If RSPesanH.RecordCount = 1 Then txtnopesan.Text = "F00001" Else RSPesanH.MoveLast NoPes = Val(Right(RSPesanH![NoPesan], 5)) + 1 txtnopesan.Text = Format(NoPes, "F00000") End If End Sub 30 W orkshop MsVB 6 & SQL Server 2000 | Yoga | Konsep Prosedur Pada Visual Basic, kita mengenal 2 scope prosedur, yaitu : private dan public, sedang dari sisi tipenya ada sub dan function. Pada workshop kita kali ini, kita akan menggunakan sub dan kedua scope prosedur. Private sub berarti prosedurnya hanya dikenal di salah satu form saja. Sedangkan Public sub berarti prosedurnya dikenal diseluruh form dan pada umumnya kita membuatnya di sebuah module. Nanti kita akan membuat banyak prosedur baru (private sub) pada setiap form, karena agar program kita lebih simpel dan jika terjadi kesalahan mudah diperbaiki. Pemanggilan prosedur dilakukan dengan menulis nama prosedurnya atau menggunakan perintah call nama prosedur. Jadi siap-siap untuk mengetik banyak prosedur. Konsep SQL Kita akan memanfaatkan statement SQL dalam Visual Basic untuk melakukan seleksi atas sesuatu hal (fungsi select). Hal ini berarti SQL bertindak sebagai embedded language. Yang akan kita gunakan dalam hal ini adalah bahasa DML (Data Manipulation Language) terutama perintah select. Structured Query Language (SQL) adalah bahasa database relasional yang dibuat berdasarkan suatu standart. Bentuk dasar dari SQL adalah sebagai berikut : SELECT [DISTINCT] select-list FROM from-list WHERE qualification Setiap query dalam SQL harus memiliki klausa SELECT, yang menentukan kolom yang akan ditampilkan pada hasil, dan klausa FROM yang menentukan cross product table. Klausa optional WHERE menentukan syarat-syarat seleksi pada table yang ditunjukkan oleh FROM. Berikut ini akan dibahas sintaksis query SQL dasar dengan lebih mendetail : From list pada klausa FROM adalah daftar nama table. Nama tabel dapat diikuti oleh nama alias; nama alias berguna ketika nama tabel yang sama muncul lebih dari sekali pada from list Select-list adalah daftar nama kolom (termasuk ekspresinya) dari tabel-tabel yang tercantum pada form list. Nama kolom dapat diawali dengan nama alias dari tabel. Kualifikasi pada klausa WHERE merupakan kombinasi boolean atau pernyataan kata sambung logika dari kondisi yang menggunakan eksepresi yang melibatkan operator pembanding. Sedangkan ekspresi itu sendiri dapat berupa nama kolom, konstanta atau aritmatika dan string. Kata kunci distinct bersifat pilihan yang menghapus duplikat dari hasil query. 31 W orkshop MsVB 6 & SQL Server 2000 | Yoga | Konsep Penanganan Kesalahan Konsep penanganan kesalahan (error handling) diperlukan dalam aplikasi agar ada interaksi dari sistem yang memberitahukan kepada pengguna bahwa sistem sedang mengalami kesalahan (error). Penanganan dapat meminimalisasi aplikasi berhenti bekerja (hang) jika terjadi kesalahan. Beberapa statement yang dapat digunakan untuk menangani kesahan sbb : On Error Resume Next On Error GoTo 0 On Error GoTo label Dsb. Berikut ini contoh penanganan kesalahan pada aplikasi : Private Sub Command1_Click() Dim salah As Label On Error GoTo salah Text3.Text = Val(Text1.Text) / Val(Text2.Text) salah: MsgBox "Deskripsi Salah : " & Err.Description & vbLf _ & "Nomor Kesalahan : " & Err.Number & vbLf _ & "Sumber Kesalahan :" & Err.Source, vbOKOnly + vbInformation, "Pesan Salah" Exit Sub End Sub Batasan Sebuah Project Sebuah project di Visual Basic dapat terdiri sampai 32.000 "penanda" (kata kunci "non-reserved") termasuk di dalamnya, tetapi tidak terbatas untuk jumlah form, control, module, variabel, konstanta, prosedur, fungsi, dan objek. Jumlah penanda ini pada kenyataannya tergantung pada jumlah memori yang tersedia. Nama variabel di Visual Basic tidak boleh lebih panjang dari 255 karakter, dan nama untuk form, control, module, dan class tidak boleh lebih panjang dari 40 karakter. Visual Basic tidak membatasi terhadap jumlah objek yang benar-benar digunakan dalam suatu project. Microsoft Visual Basic Microsoft Visual Basic (sering disingkat sebagai VB saja) merupakan sebuah bahasa pemrograman yang bersifat event driven dan menawarkan Integrated Development Environment (IDE) visual untuk membuat program aplikasi berbasis sistem operasi Microsoft Windows dengan menggunakan model pemrograman Common Object Model (COM). Visual Basic merupakan turunan bahasa BASIC dan menawarkan pengembangan aplikasi komputer berbasis grafik dengan cepat, akses ke basis data menggunakan Data Access Objects (DAO), Remote Data Objects (RDO), atau ActiveX Data Object (ADO), serta menawarkan pembuatan kontrol ActiveX dan objek ActiveX. 32 W orkshop MsVB 6 & SQL Server 2000 | Yoga | Beberapa bahasa skrip seperti Visual Basic for Applications (VBA) dan Visual Basic Scripting Edition (VBScript), mirip seperti halnya Visual Basic, tetapi cara kerjanya yang berbeda. Para programmer dapat membangun aplikasi dengan menggunakan komponen-komponen yang disediakan oleh Microsoft Visual Basic Program-program yang ditulis dengan Visual Basic juga dapat menggunakan Windows API, tapi membutuhkan deklarasi fungsi eksternal tambahan. Dalam pemrograman untuk bisnis, Visual Basic memiliki pangsa pasar yang sangat luas. Dalam sebuah survey yang dilakukan pada tahun 2005, 62% pengembang perangkat lunak dilaporkan menggunakan berbagai bentuk Visual Basic, yang diikuti oleh C++, JavaScript, C#, dan Java. VB Codding Style Ketika telah ada dalam lingkungan pemrograman database (ADO), maka ada 2 style penulisan sintaks VB dalam mengolah record-record pada basis data : 1. VB Style Perintah2 seperti : AddNew, Delete, Update, Requery dan sebagainya dapat kita gunakan dalam mengolah record2 pada basis data, Misalnya untuk menambad sebuah record : RS.AddNew RS!Kode = txtKode.Text RS!Judul = txtJudul.Text Rs!Pengarang = txtPengarang.Text RS.Update atau untuk menghapus record : If (MsgBox "Apakah Record akan dihapus ? Y/N",VbYesNo,"Pesan") = vbYes Then RS.Delete If RS.RecordCount = 0 Then MsgBox "Record Kosong" : Exit Sub RS.MoveFirst Call Tampil Else Exit Sub End If 2. SQL Style Perintah2 seperti : Insert, Alter, Update, Delete, Drop, dll bisa digunakan dalam VB. Nah ada kalanya kita menggunakan sintax SQL dalam mengolah record-record pada basis data, misalnya untuk menambah sebuah record, maka yang kita lakukan dengan perintah sql yang di embededkan di vb adalah sbb : 33 W orkshop MsVB 6 & SQL Server 2000 | Yoga | CN.Execute "Insert Into Buku Values Kode = ’" & txtKode.Text & "', _ & Judul = ’" & txtJudul.Text & "', Pengarang = '" & txtPengarang.Text & "'" RS.Requery atau untuk menghapus record : If (MsgBox "Apakah Record akan dihapus ? Y/N",VbYesNo,"Pesan") = vbYes Then CN.Execute "Delete From Buku Where Kode like '" & txtKode.Text & "'%" RS.Requery Call Tampil Else Exit Sub End If 34 W orkshop MsVB 6 & SQL Server 2000 | Yoga | 3 PERANCANGAN, PENGKODEAN, IMPLEMENTASI Mukadimah Bagian ini akan menjelaskan bagaimana membuat database, tabel-tabel dan view pada Microsoft SQL Server. Ada paling tidak dua cara yang dapat dilakukan : 1. Secara Grafis Dengan cara ini, database, tabel & view dibuat secara grafis (GUI) menggunakan Enterprise Manager (EM). Dengan menggunakan EM, maka pekerjaan ini menjadi ”sangat mudah” karena semuanya tinggal klik, dana ada pula fasilitas Wizardnya. 2. Secara Penulisan Kode SQL Dengan cara ini, database, tabel & view dibuat dengan menuliskan kode-kode SQL di dalam Query Analyzer. Workshop ini tentu akan menerapkan cara yang kedua ini, agar peserta sekalian terbiasa dengan kode-kode SQL ini. Mulai Merancang Database 1. Berdo’a dahulu, agar hasilnya maksimal ☺ 2. Buka program Query Analyzer. Menu Start All Programs Microsoft SQL Server Query Analyzer 3. Loginlah, tentukan Nama Server & Metode Autentikasi. Bisa menggunakan Windows Authentication atau SQL Server Authentication. Gambar Connect To SQL Server 35 W orkshop MsVB 6 & SQL Server 2000 | Yoga | 4. Jika berhasil maka jendela kerja Query Analyzer akan ditampilkan. Maka mulailah kita untuk mengetik kode berikut ini : /* MEMBUAT DATABASE */ CREATE DATABASE Workshop /* MENGGUNAKAN DATABASE */ USE Workshop /* MEMBUAT TABEL OBAT */ CREATE TABLE Obat ( KodeObat VARCHAR(10) NOT NULL, NamaObat VARCHAR(50) NULL, Harga INT NULL , Jenis VARCHAR(30) NULL PRIMARY KEY (KodeObat) ) /* MEMBUAT TABEL SUPPLIER */ CREATE TABLE Supplier ( KodeSupp VARCHAR(10) NOT NULL, NamaSupp VARCHAR(50) NULL, Alamat VARCHAR(100) NULL, Telepon VARCHAR(30) NULL, KontakPerson VARCHAR(50)NULL PRIMARY KEY (KodeSupp) ) /* MEMBUAT TABEL PESAN HEADER */ CREATE TABLE PesanHeader ( NoPesan VARCHAR(10) NOT NULL, Tanggal SMALLDATETIME NULL, KodeSupp VARCHAR(10) NOT NULL, SubTotal INT NULL, Diskon INT NULL, Pajak INT NULL, GrandTotal INT NULL PRIMARY KEY (NoPesan) ) /* MEMBUAT TABEL PESAN DETAIL */ CREATE TABLE PesanDetail ( NoPesan VARCHAR(10) NOT NULL, KodeObat VARCHAR(10) NOT NULL, NamaObat VARCHAR(50) NULL, Harga INT NULL, QTY INT NULL, Total INT NULL ) /* MEMBUAT TABEL PEMBAYARAN */ CREATE TABLE Pembayaran ( NoBayar VARCHAR(10) NOT NULL , Tanggal SMALLDATETIME NULL , 36 W orkshop MsVB 6 & SQL Server 2000 | Yoga | KodeSupp VARCHAR(10) NULL, NoPesan VARCHAR(10) NULL, SubTotal INT NULL, Diskon INT NULL, Pajak INT NULL, GrandTotal INT NULL PRIMARY KEY (NoBayar) ) /* MEMASUKKAN DATA KE TABEL OBAT */ INSERT INTO OBAT VALUES ('B00001','Panadol',40000,'Obat Sakit Kepala') INSERT INTO OBAT VALUES ('B00002','Bodrek',35000,'Obat Sakit Kepala') INSERT INTO OBAT VALUES ('B00003','Puyer 16',32000,'Obat Sakit Kepala') INSERT INTO OBAT VALUES ('B00004','Mylanta',300000,'Obat Sakit Maag') INSERT INTO OBAT VALUES ('B00005','Promag',60000,'Obat Sakit Maag') INSERT INTO OBAT VALUES ('B00006','Aleryn Expectorant',250000,'Obat Batuk Cair') INSERT INTO OBAT VALUES ('B00007','Vicks Formula 44',210000,'Obat Batuk Cair') INSERT INTO OBAT VALUES ('B00008','Woods',213000,'Obat Batuk Cair') INSERT INTO OBAT VALUES ('B00009','Diapet',80000,'Obat Sakit Diare') INSERT INTO OBAT VALUES ('B00010','Entrostop',60000,'Obat Sakit Diare') SELECT * FROM OBAT /* MEMASUKKAN DATA KE TABEL SUPPLIER */ INSERT INTO SUPPLIER VALUES ('K00001','PT. Risalah Hati','Jl. Jambu No.12','87686789','Taufik') INSERT INTO SUPPLIER VALUES ('K00002','PT. Terbaik-Terbaik','Jl. Mangga No.89','78968689','Nunung') INSERT INTO SUPPLIER VALUES ('K00003','PT. Roman Picisan','Jl. Apel No.45','78946869','Awal') INSERT INTO SUPPLIER VALUES ('K00004','PT. Kangen','Jl. Durian No.32','55758757','Shinta') INSERT INTO SUPPLIER VALUES ('K00005','PT. Satu Hati','Jl. Melon No.22','85654464','Adi') SELECT * FROM SUPPLIER /* MEMBUAT VIEW VPESAN */ CREATE VIEW VPESAN AS ( SELECT PesanHeader.NoPesan, PesanHeader.Tanggal, PesanHeader.KodeSupp, Supplier.NamaSupp, PesanDetail.KodeObat, PesanDetail.NamaObat, PesanDetail.Harga, PesanDetail.QTY, PesanDetail.Total FROM Supplier INNER JOIN PesanHeader ON Supplier.KodeSupp = PesanHeader.KodeSupp INNER JOIN.PesanDetail ON PesanHeader.NoPesan = PesanDetail.NoPesan ) 5. Eksekusilah dengan cara menekan (F5). Atau dari menu Query Execute. Namun perlu di Blok per blok SQL sebelum di Eksekusi / RUN. 6. Setelah datanbase, tabel & view terbentuk. Maka database workshop siap digunakan. 7. Tahap ini selesai sampai di sini. 37 W orkshop MsVB 6 & SQL Server 2000 | Yoga | Merancang Form & Report Visual Basic 1. Bukalah program Visual Basic, Start All Programs Microsoft Visual Basic 6 Microsoft Visual Basic 6 2. Kemudian buat project baru dengan jenis Standard Exe. 3. Tambahkan 4 form baru, sehingga terdapat 5 form yang akan kita gunakan (form obat, form supplier, form pemesanan obat, form pembayaran dan form menu utama. 4. Tambahkan pula 2 Data Report untuk desain laporan. 5. Sebelum mendesain form, jangan lupa tambahkan component data grid, list view dan sstab dari menu component (CTRL+T) > lihat cara sebelumnya. 6. Kemudian gunakan referensi ADO yaitu Microsoft Activex Data Object 2.0 dari menu Project References. Berikut ini desain Form Menu Utama Berikut ini desain Form Master Data Obat 38 W orkshop MsVB 6 & SQL Server 2000 | Yoga | Berikut ini desain Form Master Data Supplier Berikut ini desain Form Transaksi Pemesanan Obat 39 W orkshop MsVB 6 & SQL Server 2000 | Yoga | Berikut ini desain Form Transaksi Pembayaran Obat Berikut ini desain Data Report Faktur Pembayaran 40 W orkshop MsVB 6 & SQL Server 2000 | Yoga | Berikut ini desain Data Report Faktur Pemesanan Obat Pengkodean Setelah selesai dengan mendesain database dan form-form. Maka tahap selanjutnya adalah menambahkan kode program. Logika sebelum menuliskan kode progarm : 1. Kita perlu mendefiniskan variabel koneksi ke database, tabel dan view. Jika kita mendeklarasikan variabel tersebut di module, maka kita dapat menggunakan deklarasi Public/Global. Jika kita mendekarasikannya di form, maka kita dapat menggunakan DIM sebagai keyword untuk deklarasi. Misalnya : Dim Con As New ADODB.Connection Dim RsObat As New ADODB.Recordset 2. Setelah mendeklarasikan variabel koneksi, maka langkah selanjutnya adalah membuka koneksi melalui variabel tersebut. Misalnya untuk membuka koneksi database : Set Con = New ADODB.Connection Con.CursorLocation= AdUseClient Con.Open "Provider=SqlOledb; Data Source=Server; Initial Catalog=Workshop; User ID=sa; Password=password;" Untuk mengetes koneksi database : kita dapat menggunakan sintaks seperti : If Con.State = 1 Then MsgBox "Koneksi Sukses" Else MsgBox "koneksi Gagal" Jika sukses, maka variabel Con siap digunakan untuk menghubungkan database dengan visual basic. 41 W orkshop MsVB 6 & SQL Server 2000 | Yoga | Untuk variabel koneksi tabel, kita dapat menggunakan kode : Set RsObat = New ADODB.Recordset RsObat.CursorLocation = AdUseClient StrSql = "SELEcT KodeObat, NamaObat, Harga, Jenis FROM Obat ORDER BY KodeObat" RsObat.Open StrSql, Con, 1,2 Membuka koneksi dapat diletakkan pada even Private Sub Form_Load() atau dalam sebuah prosedur baru. 3. Setelah koneksi / hubungan antara aplikasi dan database terbentuk, maka, kita perlu membuat procedur-procedur tambahan yang ditujukkan untuk meningkatkan efisiensi pengkodean kita. Misalnya Procedure untuk mengkosongkan Kontrol TextBox. Procedur untuk pengisian Kode/ID secara otomatis dan sebagainya. 4. Setelah prosedur-prosedur menambahkan kode tambahan program di terbentuk, setiap kontrol maka selanjutnya sesuai dengan adalah kebutuhan. Penambahan kode program ini juga dipengaruhi oleh logika dari jalannya sistem. 5. Dalam menulisakan kode, sebaiknya kita selalu melakukas tes Trial and Error untuk menemukan kesalahan pada logika program kita. Tahap ini tentunya dibutuhkan ketelitian dan kecermatan si pemrogram aplikasi. 42 W orkshop MsVB 6 & SQL Server 2000 | Yoga | Kode Module 'Deklarasi Variabel Global Global DB As New ADODB.Connection Global RsObat As New ADODB.Recordset Global RSSupplier As New ADODB.Recordset Global RSPesanH As New ADODB.Recordset Global RSPesanD As New ADODB.Recordset Global RSBayar As New ADODB.Recordset Global RSQPesan As New ADODB.Recordset Global char As String Global v, i As Integer 'Prosedur Buka Koneksi Database Public Sub BukaKoneksi() Set DB = New ADODB.Connection DB.CursorLocation = adUseClient DB.Open "Provider=SQLOLEDB.1;Integrated Security=SSPI;Persist Security Info=False;User ID=sa;Initial Catalog=Workshop;Data Source=TI-04" End Sub 'Prosedure Buka Koneksi Tabel Obat Public Sub BukaObat() Set RsObat = New ADODB.Recordset RsObat.CursorLocation = adUseClient RsObat.Open "SELECT KodeObat, " _ & "NamaObat, " _ & "Harga, " _ & "Jenis " _ & "FROM Obat", DB, adOpenDynamic, adLockOptimistic End Sub 'Prosedure Buka Koneksi Tabel Supplier Public Sub BukaSupplier() Set RSSupplier = New ADODB.Recordset RSSupplier.CursorLocation = adUseClient RSSupplier.Open "SELECT KodeSupp, " _ & "NamaSupp, " _ & "Alamat, " _ & "Telepon, " _ & "KontakPerson " _ & "FROM Supplier", DB, adOpenDynamic, adLockOptimistic End Sub 'Prosedure Buka Koneksi Tabel PesanHeader Public Sub BukaPesanH() Set RSPesanH = New ADODB.Recordset RSPesanH.CursorLocation = adUseClient RSPesanH.Open "SELECT NoPesan, " _ & "Tanggal, " _ & "KodeSupp, " _ & "SubTotal, " _ & "Diskon, " _ & "Pajak, " _ & "GrandTotal " _ & "FROM PesanHeader", DB, adOpenDynamic, adLockOptimistic End Sub 43 W orkshop MsVB 6 & SQL Server 2000 | Yoga | 'Prosedure Buka Koneksi Tabel PesanDetail Public Sub BukaPesanD() Set RSPesanD = New ADODB.Recordset RSPesanD.CursorLocation = adUseClient RSPesanD.Open "SELECT NoPesan, " _ & "KodeObat, " _ & "NamaObat, " _ & "Harga, " _ & "QTY, " _ & "Total " _ & "FROM PesanDetail", DB, adOpenDynamic, adLockOptimistic End Sub 'Prosedure Buka Koneksi Tabel Pembayaran Public Sub BukaBayar() Set RSBayar = New ADODB.Recordset RSBayar.CursorLocation = adUseClient RSBayar.Open "SELECT NoBayar, " _ & "Tanggal, " _ & "KodeSupp, " _ & "NoPesan, " _ & "SubTotal, " _ & "Diskon, " _ & "Pajak, " _ & "GrandTotal " _ & "FROM Pembayaran", DB, adOpenDynamic, adLockOptimistic End Sub Kode Menu Utama Public char As String Public v, i As Integer Private Sub Form_Load() Me.Top = (Screen.Height - Height) / 2 Me.Left = (Screen.Width - Width) / 2 Form5.Caption = " Menu Utama char = Me.Caption v = Len(char) End Sub " Private Sub Form_Unload(Cancel As Integer) If MsgBox("Apakah Akan Keluar Aplikasi [Y/T] ?", vbYesNo + vbQuestion, "Pesan Keluar") = vbYes Then MsgBox "Terima Kasih Telah Menggunakan Aplikasi Ini, Untuk Kritik Dan Saran Kirimkan Ke : [email protected]", vbOKOnly + vbInformation, "Pesan Keluar" End Else Exit Sub End If End Sub Private Sub cmdobat_Click() Form1.Show Me.Hide End Sub Private Sub cmdsupp_Click() Form2.Show 44 W orkshop MsVB 6 & SQL Server 2000 | Yoga | Me.Hide End Sub Private Sub cmdpesan_Click() Form3.Show Me.Hide End Sub Private Sub cmdbayar_Click() Form4.Show Me.Hide End Sub Private Sub cmdkeluar_Click() If MsgBox("Apakah Akan Keluar Aplikasi [Y/T] ?", vbYesNo + vbQuestion, "Pesan Keluar") = vbYes Then MsgBox "Terima Kasih Telah Menggunakan Aplikasi Ini, Untuk Kritik Dan Saran Kirimkan Ke : [email protected]", vbOKOnly + vbInformation, "Pesan Keluar" End Else Exit Sub End If End Sub Private Sub cmdobat_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single) cmdobat.BackColor = &HE29B81 cmdsupp.BackColor = &HB0D798 cmdpesan.BackColor = &HB0D798 cmdbayar.BackColor = &HB0D798 cmdkeluar.BackColor = &HB0D798 End Sub Private Sub cmdsupp_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single) cmdobat.BackColor = &HB0D798 cmdsupp.BackColor = &HE29B81 cmdpesan.BackColor = &HB0D798 cmdbayar.BackColor = &HB0D798 cmdkeluar.BackColor = &HB0D798 End Sub Private Sub cmdpesan_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single) cmdobat.BackColor = &HB0D798 cmdsupp.BackColor = &HB0D798 cmdpesan.BackColor = &HE29B81 cmdbayar.BackColor = &HB0D798 cmdkeluar.BackColor = &HB0D798 End Sub Private Sub cmdbayar_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single) cmdobat.BackColor = &HB0D798 cmdsupp.BackColor = &HB0D798 cmdpesan.BackColor = &HB0D798 cmdbayar.BackColor = &HE29B81 cmdkeluar.BackColor = &HB0D798 End Sub Private Sub cmdkeluar_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single) 45 W orkshop MsVB 6 & SQL Server 2000 | Yoga | cmdobat.BackColor = &HB0D798 cmdsupp.BackColor = &HB0D798 cmdpesan.BackColor = &HB0D798 cmdbayar.BackColor = &HB0D798 cmdkeluar.BackColor = &HE29B81 End Sub Private Sub Timer1_Timer() Me.Caption = Left$(char, i) i=i+1 If i = v Then i=0 End If End Sub Kode Form Obat Private Sub Form_Load() Me.Top = (Screen.Height - Height) / 2 Me.Left = (Screen.Width - Width) / 2 Call BukaKoneksi Call BukaObat If RsObat.RecordCount > 0 Then Call Tampil Call DGObat Form1.Caption = " Form Master Obat End Sub " Private Sub Form_Unload(Cancel As Integer) Tombol True Call Kosong Call TutupKoneksi Form5.Show Unload Me End Sub Private Sub Tampil() txtkode.Text = RsObat!KodeObat txtnama.Text = RsObat!NamaObat txtharga.Text = RsObat!Harga txtjenis.Text = RsObat!Jenis End Sub Private Sub Kosong() txtkode.Text = "" txtnama.Text = "" txtharga.Text = "" txtjenis.Text = "" End Sub Private Sub DGObat() Set RsObat = New ADODB.Recordset RsObat.CursorLocation = adUseClient RsObat.Open "select * from Obat", DB, adOpenDynamic, adLockOptimistic Set DataGrid1.DataSource = RsObat AturDataGrid DataGrid1.Refresh 46 W orkshop MsVB 6 & SQL Server 2000 | Yoga | End Sub Private Sub AturDataGrid() DataGrid1.Columns(0).Width DataGrid1.Columns(1).Width DataGrid1.Columns(2).Width DataGrid1.Columns(3).Width End Sub = = = = 1200 2200 1600 1800 Private Sub Tombol(Buka As Boolean) cmdadd.Enabled = Buka cmdedit.Enabled = Buka cmddel.Enabled = Buka cmdfind.Enabled = Buka End Sub Private Sub KosongObat() Dim KodeObat As Integer If RsObat.RecordCount = 0 Then txtkode.Text = "B00001" Else RsObat.MoveLast KodeObat = Val(Right(RsObat![KodeObat], 5)) + 1 txtkode.Text = Format(KodeObat, "B00000") End If End Sub Private Sub TutupKoneksi() RsObat.Close Set RsObat = Nothing DB.Close Set DB = Nothing End Sub Private Sub cmdadd_Click() Kosong Tombol False KosongObat txtnama.SetFocus End Sub Private Sub cmdsave_Click() If MsgBox("Apakah Data Akan Disimpan [Y/T] ?", vbYesNo + vbQuestion, "Pesan Simpan") = vbYes Then RsObat.AddNew RsObat!KodeObat = txtkode.Text RsObat!NamaObat = txtnama.Text RsObat!Harga = txtharga.Text RsObat!Jenis = txtjenis.Text RsObat.Update DataGrid1.Refresh Kosong Tombol True Else Exit Sub End If Tampil End Sub 47 W orkshop MsVB 6 & SQL Server 2000 | Yoga | Private Sub cmdedit_Click() RsObat!KodeObat = txtkode.Text RsObat!NamaObat = txtnama.Text RsObat!Harga = txtharga.Text RsObat!Jenis = txtjenis.Text RsObat.Update DataGrid1.Refresh End Sub Private Sub cmddel_Click() If MsgBox("Apakah Data Akan Dihapus [Y/T] ?", vbYesNo + vbQuestion, "Pesan Hapus") = vbYes Then RsObat.Delete RsObat.MoveFirst Tampil DataGrid1.Refresh Else Exit Sub End If End Sub Private Sub cmdfind_Click() CARI = InputBox("Ketik Kode Obat Yang Dicari !", "Cari Obat") Dim Ketemu As Integer Ketemu = 0 RsObat.MoveFirst Do Until RsObat.EOF If UCase(Trim(RsObat!KodeObat)) = UCase(Trim(CARI)) Then Ketemu = 1 Exit Do End If RsObat.MoveNext Loop If Ketemu = 1 Then Tampil Else MsgBox "Data Tidak Ditemukan", vbOKOnly, "Pesan Cari" End If End Sub Private Sub cmdexit_Click() If MsgBox("Apakah Akan Keluar Form [Y/T] ?", vbYesNo + vbQuestion, "Pesan Keluar") = vbYes Then Kosong Tombol True TutupKoneksi Form5.Show Unload Me Else Exit Sub End If End Sub Private Sub cmdfirst_Click() RsObat.MoveFirst Tampil Tombol True End Sub 48 W orkshop MsVB 6 & SQL Server 2000 | Yoga | Private Sub cmdnext_Click() RsObat.MoveNext If RsObat.EOF Then MsgBox "Data Sudah Di Akhir", vbOKOnly, "Pesan Next" RsObat.MoveLast End If Tampil Tombol True End Sub Private Sub cmdprev_Click() RsObat.MovePrevious If RsObat.BOF Then MsgBox "Data Sudah Di Awal", vbOKOnly, "Pesan Previous" RsObat.MoveFirst End If Tampil Tombol True End Sub Private Sub cmdlast_Click() RsObat.MoveLast Tampil Tombol True End Sub Private Sub txtcarikode_Change() Set RsObat = New ADODB.Recordset RsObat.CursorLocation = adUseClient RsObat.Open "Select * From Obat Where KodeObat Like '" & txtcarikode.Text & "%'", DB, adOpenDynamic, adLockOptimistic Set DataGrid1.DataSource = RsObat AturDataGrid DataGrid1.Refresh End Sub Private Sub txtcarinama_Change() Set RsObat = New ADODB.Recordset RsObat.CursorLocation = adUseClient RsObat.Open "Select * From Obat Where NamaObat Like '" & txtcarinama.Text & "%'", DB, adOpenDynamic, adLockOptimistic Set DataGrid1.DataSource = RsObat AturDataGrid DataGrid1.Refresh End Sub Private Sub txtharga_KeyPress(KeyAscii As Integer) If (KeyAscii >= vbKey0 And KeyAscii <= vbKey9) Or KeyAscii = vbKeyBack Then Exit Sub ElseIf KeyAscii = vbKeyReturn Then txtharga.SetFocus Else MsgBox "Data Harus Angka..!", vbOKOnly + vbInformation, "Pesan Kesalahan" KeyAscii = vbKeyBack End If End Sub 49 W orkshop MsVB 6 & SQL Server 2000 | Yoga | Kode Form Supplier Private Sub Form_Load() Me.Top = (Screen.Height - Height) / 2 Me.Left = (Screen.Width - Width) / 2 Call BukaKoneksi Call BukaSupplier If RSSupplier.RecordCount > 0 Then Call Tampil Call DGSUpplier Form2.Caption = " Form Master Supplier End Sub " Private Sub Form_Unload(Cancel As Integer) Tombol True Call Kosong Call TutupKoneksi Form5.Show Unload Me End Sub Private Sub Tampil() txtkode.Text = RSSupplier!KodeSupp txtnama.Text = RSSupplier!NamaSupp txtalamat.Text = RSSupplier!Alamat txttelepon.Text = RSSupplier!Telepon txtkontak.Text = RSSupplier!KontakPerson End Sub Private Sub Kosong() txtkode.Text = "" txtnama.Text = "" txtalamat.Text = "" txttelepon.Text = "" txtkontak.Text = "" End Sub Private Sub DGSUpplier() Set RSSupplier = New ADODB.Recordset RSSupplier.CursorLocation = adUseClient RSSupplier.Open "select * from Supplier", DB, adOpenDynamic, adLockOptimistic Set DataGrid1.DataSource = RSSupplier AturDataGrid DataGrid1.Refresh End Sub Private Sub AturDataGrid() DataGrid1.Columns(0).Width DataGrid1.Columns(1).Width DataGrid1.Columns(2).Width DataGrid1.Columns(3).Width DataGrid1.Columns(4).Width End Sub = = = = = 850 2200 1700 1000 1200 Private Sub Tombol(Buka As Boolean) cmdadd.Enabled = Buka 50 W orkshop MsVB 6 & SQL Server 2000 | Yoga | cmdedit.Enabled = Buka cmddel.Enabled = Buka cmdfind.Enabled = Buka End Sub Private Sub KosongSupp() Dim KodeSupp As Integer If RSSupplier.RecordCount = 0 Then txtkode.Text = "K00001" Else RSSupplier.MoveLast KodeSupp = Val(Right(RSSupplier![KodeSupp], 5)) + 1 txtkode.Text = Format(KodeSupp, "K00000") End If End Sub Private Sub TutupKoneksi() RSSupplier.Close Set RSSupplier = Nothing DB.Close Set DB = Nothing End Sub Private Sub cmdadd_Click() Kosong Tombol False KosongSupp txtnama.SetFocus End Sub Private Sub cmdsave_Click() If MsgBox("Apakah Data Akan Disimpan [Y/T] ?", vbYesNo + vbQuestion, "Pesan Simpan") = vbYes Then RSSupplier.AddNew RSSupplier!KodeSupp = txtkode.Text RSSupplier!NamaSupp = txtnama.Text RSSupplier!Alamat = txtalamat.Text RSSupplier!Telepon = txttelepon.Text RSSupplier!KontakPerson = txtkontak.Text RSSupplier.Update DataGrid1.Refresh Kosong Tombol True Else Exit Sub End If Tampil End Sub Private Sub cmdedit_Click() RSSupplier!KodeSupp = txtkode.Text RSSupplier!NamaSupp = txtnama.Text RSSupplier!Alamat = txtalamat.Text RSSupplier!Telepon = txttelepon.Text RSSupplier!KontakPerson = txtkontak.Text RSSupplier.Update DataGrid1.Refresh End Sub 51 W orkshop MsVB 6 & SQL Server 2000 | Yoga | Private Sub cmddel_Click() If MsgBox("Apakah Data Akan Dihapus [Y/T] ?", vbYesNo + vbQuestion, "Pesan Hapus") = vbYes Then RSSupplier.Delete RSSupplier.MoveFirst Tampil DataGrid1.Refresh Else Exit Sub End If End Sub Private Sub cmdfind_Click() CARI = InputBox("Ketik Kode Supplier Yang Dicari !", "Cari Supplier") Dim Ketemu As Integer Ketemu = 0 RSSupplier.MoveFirst Do Until RSSupplier.EOF If UCase(Trim(RSSupplier!KodeSupp)) = UCase(Trim(CARI)) Then Ketemu = 1 Exit Do End If RSSupplier.MoveNext Loop If Ketemu = 1 Then Tampil Else MsgBox "Data Tidak Ditemukan", vbOKOnly, "Pesan Cari" End If End Sub Private Sub cmdexit_Click() If MsgBox("Apakah Akan Keluar Form [Y/T] ?", vbYesNo + vbQuestion, "Pesan Keluar") = vbYes Then Call Kosong Tombol True Call TutupKoneksi Form5.Show Unload Me Else Exit Sub End If End Sub Private Sub cmdfirst_Click() RSSupplier.MoveFirst Tampil Tombol True End Sub Private Sub cmdnext_Click() RSSupplier.MoveNext If RSSupplier.EOF Then MsgBox "Data Sudah Di Akhir", vbOKOnly, "Pesan Next" RSSupplier.MoveLast End If Tampil Tombol True 52 W orkshop MsVB 6 & SQL Server 2000 | Yoga | End Sub Private Sub cmdprev_Click() RSSupplier.MovePrevious If RSSupplier.BOF Then MsgBox "Data Sudah Di Awal", vbOKOnly, "Pesan Previous" RSSupplier.MoveFirst End If Tampil Tombol True End Sub Private Sub cmdlast_Click() RSSupplier.MoveLast Tampil Tombol True End Sub Private Sub txtcarikode_Change() Set RSSupplier = New ADODB.Recordset RSSupplier.CursorLocation = adUseClient RSSupplier.Open "Select * From Supplier Where KodeSupp Like '" & txtcarikode.Text & "%'", DB, adOpenDynamic, adLockOptimistic Set DataGrid1.DataSource = RSSupplier AturDataGrid DataGrid1.Refresh End Sub Private Sub txtcarinama_Change() Set RSSupplier = New ADODB.Recordset RSSupplier.CursorLocation = adUseClient RSSupplier.Open "Select * From Supplier Where NamaSupp Like '" & txtcarinama.Text & "%'", DB, adOpenDynamic, adLockOptimistic Set DataGrid1.DataSource = RSSupplier AturDataGrid DataGrid1.Refresh End Sub \ Kode Form Transaksi Private Sub Form_Load() Me.Top = (Screen.Height - Height) / 2 Me.Left = (Screen.Width - Width) / 2 Call Call Call Call Call BukaKoneksi BukaPesanH BukaPesanD BukaObat BukaSupplier If RSSupplier.RecordCount > 1 Then Call DGSUpplier If RsObat.RecordCount > 1 Then Call DGObat Call KosongPesan Form1.Caption = " Form Transaksi Pemesanan End Sub " Private Sub Form_Unload(Cancel As Integer) 53 W orkshop MsVB 6 & SQL Server 2000 | Yoga | Form5.Show Unload Me End Sub Private Sub Kosong() txtkodeobat.Text = "" txtnamaobat.Text = "" txtharga.Text = "" txtqty.Text = "" txttotal.Text = "" End Sub Private Sub KosongPesan() Dim NoPes As Integer txttanggal.Text = Date If RSPesanH.RecordCount = 0 Then txtnopesan.Text = "F00001" Else RSPesanH.MoveLast NoPes = Val(Right(RSPesanH![NoPesan], 5)) + 1 txtnopesan.Text = Format(NoPes, "F00000") End If End Sub Private Sub DGSUpplier() Set RSSupplier = New ADODB.Recordset RSSupplier.CursorLocation = adUseClient RSSupplier.Open "select * from Supplier", DB, adOpenDynamic, adLockOptimistic Set DataGrid1.DataSource = RSSupplier AturSupplier DataGrid1.Refresh End Sub Private Sub AturSupplier() DataGrid1.Columns(0).Width DataGrid1.Columns(1).Width DataGrid1.Columns(2).Width DataGrid1.Columns(3).Width DataGrid1.Columns(4).Width End Sub = = = = = 1000 2500 2500 1300 1300 Private Sub DGObat() Set RsObat = New ADODB.Recordset RsObat.CursorLocation = adUseClient RsObat.Open "select * from Obat", DB, adOpenDynamic, adLockOptimistic Set DataGrid2.DataSource = RsObat AturObat DataGrid2.Refresh End Sub Private Sub AturObat() DataGrid2.Columns(0).Width DataGrid2.Columns(1).Width DataGrid2.Columns(2).Width DataGrid2.Columns(3).Width End Sub = = = = 1300 3500 1800 2000 Private Sub DataGrid1_Click() txtkodesupp.Text = RSSupplier!KodeSupp 54 W orkshop MsVB 6 & SQL Server 2000 | Yoga | txtnamasupp.Text = RSSupplier!NamaSupp txtalamat.Text = RSSupplier!Alamat txttelepon.Text = RSSupplier!Telepon txtkontak.Text = RSSupplier!KontakPerson End Sub Private Sub DataGrid2_Click() txtkodeobat.Text = RsObat!KodeObat txtnamaobat.Text = RsObat!NamaObat txtharga.Text = RsObat!Harga End Sub Private Sub DataGrid2_ColEdit(ByVal ColIndex As Integer) DataGrid2_Click End Sub Private Sub ListView1_ItemClick(ByVal Item As MSComctlLib.ListItem) X = ListView1.SelectedItem.Index txtkodeobat.Text = ListView1.ListItems(X).Text txtnamaobat.Text = ListView1.ListItems(X).SubItems(1) txtharga.Text = ListView1.ListItems(X).SubItems(2) txtqty.Text = ListView1.ListItems(X).SubItems(3) txttotal.Text = ListView1.ListItems(X).SubItems(4) End Sub Private Sub txtqty_Change() Dim vtxttotal vtxttotal = Val(txtharga) * Val(txtqty) txttotal.Text = vtxttotal End Sub Private Sub txtqty_KeyPress(KeyAscii As Integer) If (KeyAscii >= vbKey0 And KeyAscii <= vbKey9) Or KeyAscii = vbKeyBack Then Exit Sub ElseIf KeyAscii = vbKeyReturn Then txtqty.SetFocus Else MsgBox "Data Harus Angka..!", vbOKOnly + vbInformation, "Pesan Kesalahan" KeyAscii = vbKeyBack End If End Sub Private Sub cmdadd_Click() If txtqty.Text = "" Or txtkodeobat.Text = "" Then Exit Sub ListView1.ListItems.Add(, , txtkodeobat).Text = txtkodeobat.Text X = ListView1.ListItems.Count ListView1.ListItems(X).SubItems(1) = txtnamaobat.Text ListView1.ListItems(X).SubItems(2) = txtharga.Text ListView1.ListItems(X).SubItems(3) = txtqty.Text ListView1.ListItems(X).SubItems(4) = txttotal.Text txtsubtot = Val(txttotal) + ListView1.ListItems(X).SubItems(4) txtdiskon = Val(txtsubtot) * 0.05 txtpajak = Val(txtsubtot) * 0.1 txtgrandtot = Val(txtsubtot) + Val(txtpajak) - Val(txtdiskon) Kosong txtkodeobat.SetFocus End Sub Private Sub cmdsave_Click() 55 W orkshop MsVB 6 & SQL Server 2000 | Yoga | If MsgBox("Apakah Data Akan Disimpan [Y/T] ?", vbYesNo + vbQuestion, "Pesan Simpan") = vbYes Then RSPesanH.AddNew RSPesanH![NoPesan] = txtnopesan.Text RSPesanH![Tanggal] = txttanggal.Text RSPesanH![KodeSupp] = txtkodesupp.Text RSPesanH![SubTotal] = txtsubtot.Text RSPesanH![Diskon] = txtdiskon.Text RSPesanH![Pajak] = txtpajak.Text RSPesanH![GrandTotal] = txtgrandtot.Text RSPesanH.Update For X = 1 To ListView1.ListItems.Count RSPesanD.AddNew RSPesanD![NoPesan] = txtnopesan.Text RSPesanD![KodeObat] = ListView1.ListItems(X).Text RSPesanD![NamaObat] = ListView1.ListItems(X).SubItems(1) RSPesanD![Harga] = ListView1.ListItems(X).SubItems(2) RSPesanD![Qty] = ListView1.ListItems(X).SubItems(3) RSPesanD![Total] = ListView1.ListItems(X).SubItems(4) RSPesanD.Update Next X Else Exit Sub End If End Sub Private Sub cmddel_Click() If txtqty.Text = "" Or txtkodeobat.Text = "" Then Exit Sub ListView1.ListItems.Remove (ListView1.SelectedItem.Index) Kosong End Sub Private Sub cmdedit_Click() If txtqty.Text = "" Or txtkodeobat.Text = "" Then Exit Sub For X = 1 To ListView1.ListItems.Count If ListView1.ListItems(X).Text = txtkodeobat.Text Then baris = X Exit For End If Next ListView1.ListItems(baris).SubItems(3) = txtqty.Text Kosong txtkodeobat.SetFocus End Sub Private Sub cmdcancel_Click() ListView1.ListItems.Clear End Sub Private Sub cmdprint_Click() Set RSQPesan = New ADODB.Recordset Strsql = "Select * From vPesan Where NoPesan = '" & txtnopesan & "' And KodeSupp = '" & txtkodesupp & "'" RSQPesan.Open Strsql, DB, adOpenDynamic, adLockOptimistic Set DataReport1.DataSource = RSQPesan With DataReport1 .Sections("Header").Controls("lblnopesan").Caption = txtnopesan.Text 56 W orkshop MsVB 6 & SQL Server 2000 | Yoga | .Sections("Header").Controls("lbltanggal").Caption = txttanggal.Text .Sections("Header").Controls("lblkodesupp").Caption = txtkodesupp.Text .Sections("Header").Controls("lblnamasupp").Caption = txtnamasupp.Text .Sections("Detail").Controls("Text1").DataField = "KodeObat" .Sections("Detail").Controls("Text2").DataField = "NamaObat" .Sections("Detail").Controls("Text3").DataField = "Harga" .Sections("Detail").Controls("Text4").DataField = "QTY" .Sections("Detail").Controls("Text5").DataField = "Total" End With DataReport1.Show End Sub Private Sub cmdexit_Click() If MsgBox("Apakah Akan Keluar Form [Y/T] ?", vbYesNo + vbQuestion, "Pesan Keluar") = vbYes Then Form5.Show Unload Me Else Exit Sub End If End Sub Private Sub txtcarikodesupp_Change() Set RSSupplier = New ADODB.Recordset RSSupplier.CursorLocation = adUseClient RSSupplier.Open "Select * From Supplier Where KodeSupp Like '" & txtcarikodesupp.Text & "%'", DB, adOpenDynamic, adLockOptimistic Set DataGrid1.DataSource = RSSupplier AturSupplier DataGrid1.Refresh End Sub Private Sub txtcarinamasupp_Change() Set RSSupplier = New ADODB.Recordset RSSupplier.CursorLocation = adUseClient RSSupplier.Open "Select * From Supplier Where NamaSupp Like '" & txtcarinamasupp.Text & "%'", DB, adOpenDynamic, adLockOptimistic Set DataGrid1.DataSource = RSSupplier AturSupplier DataGrid1.Refresh End Sub Private Sub txtcarikodeobat_Change() Set RsObat = New ADODB.Recordset RsObat.CursorLocation = adUseClient RsObat.Open "Select * From Obat Where KodeObat Like '" & txtcarikodeobat.Text & "%'", DB, adOpenDynamic, adLockOptimistic Set DataGrid2.DataSource = RsObat AturObat DataGrid2.Refresh End Sub Private Sub txtcarinamaobat_Change() Set RsObat = New ADODB.Recordset RsObat.CursorLocation = adUseClient RsObat.Open "Select * From Obat Where NamaObat Like '" & txtcarinamaobat.Text & "%'", DB, adOpenDynamic, adLockOptimistic Set DataGrid2.DataSource = RsObat AturObat 57 W orkshop MsVB 6 & SQL Server 2000 | Yoga | DataGrid2.Refresh End Sub Kode Form Pembayaran Private Sub Form_Load() Me.Top = (Screen.Height - Height) / 2 Me.Left = (Screen.Width - Width) / 2 Call BukaKoneksi Call DGBayar Call DGPesan KosongBayar Form4.Caption = " End Sub Form Transaksi Pembayaran " Private Sub Form_Unload(Cancel As Integer) Form5.Show Unload Me End Sub Private Sub DGPesan() Set RSPesanH = New ADODB.Recordset RSPesanH.CursorLocation = adUseClient RSPesanH.Open "select * from pesanheader", DB, adOpenDynamic, adLockOptimistic Set DataGrid1.DataSource = RSPesanH DataGrid1.Refresh End Sub Private Sub DGBayar() Set RSBayar = New ADODB.Recordset RSBayar.CursorLocation = adUseClient RSBayar.Open "select * from pembayaran", DB, adOpenDynamic, adLockOptimistic Set DataGrid2.DataSource = RSBayar AturPembayaran DataGrid2.Refresh End Sub Private Sub AturPembayaran() DataGrid2.Columns(0).Width DataGrid2.Columns(1).Width DataGrid2.Columns(2).Width DataGrid2.Columns(3).Width DataGrid2.Columns(4).Width DataGrid2.Columns(5).Width DataGrid2.Columns(6).Width DataGrid2.Columns(7).Width End Sub = = = = = = = = 800 1100 1100 1100 1100 1100 1100 1200 Private Sub DataGrid1_Click() txtkodesupp.Text = RSPesanH!KodeSupp txtnopesan.Text = RSPesanH!NoPesan txtsubtotal.Text = RSPesanH!SubTotal txtdiskon.Text = RSPesanH!Diskon txtpajak.Text = RSPesanH!Pajak txtgrandtotal.Text = RSPesanH!GrandTotal End Sub 58 W orkshop MsVB 6 & SQL Server 2000 | Yoga | Private Sub DataGrid1_ColEdit(ByVal ColIndex As Integer) DataGrid1_Click End Sub Private Sub Kosong() txtnobayar.Text = "" txttanggal.Text = "" txtkodesupp.Text = "" txtnopesan.Text = "" txtsubtotal.Text = "" txtdiskon.Text = "" txtpajak.Text = "" txtgrandtotal.Text = "" End Sub Private Sub KosongBayar() Dim NoBayar As Integer txttanggal.Text = Date If RSBayar.RecordCount = 0 Then txtnobayar.Text = "F00001" Else RSBayar.MoveLast NoBayar = Val(Right(RSBayar![NoBayar], 5)) + 1 txtnobayar.Text = Format(NoBayar, "F00000") End If End Sub Private Sub cmdsave_Click() If txtkodesupp.Text = "" Then Exit Sub If MsgBox("Apakah Data Akan Disimpan [Y/T] ?", vbYesNo + vbQuestion, "Pesan Simpan") = vbYes Then RSBayar.AddNew RSBayar![NoBayar] = txtnobayar.Text RSBayar![Tanggal] = txttanggal.Text RSBayar![KodeSupp] = txtkodesupp.Text RSBayar![NoPesan] = txtnopesan.Text RSBayar![SubTotal] = txtsubtotal.Text RSBayar![Diskon] = txtdiskon.Text RSBayar![Pajak] = txtpajak.Text RSBayar![GrandTotal] = txtgrandtotal.Text RSBayar.Update DGBayar Kosong KosongBayar Else Exit Sub End If End Sub Private Sub cmdcancel_Click() Kosong KosongBayar End Sub Private Sub cmdprint_Click() Set RSPesanH = New ADODB.Recordset Strsql = "Select * From Pembayaran Where NoBayar = '" & txtnobayar & "'" RSPesanH.Open Strsql, DB, adOpenDynamic, adLockOptimistic Set DataReport2.DataSource = RSPesanH 59 W orkshop MsVB 6 & SQL Server 2000 | Yoga | With DataReport2 .Sections("Header").Controls("lblnobayar").Caption = txtnobayar.Text .Sections("Header").Controls("lbltanggal").Caption = txttanggal.Text .Sections("Header").Controls("lblkodesupp").Caption = txtkodesupp.Text .Sections("Header").Controls("lblnopesan").Caption = txtnopesan.Text .Sections("Header").Controls("lblsubtotal").Caption = txtsubtotal.Text .Sections("Header").Controls("lbldiskon").Caption = txtdiskon.Text .Sections("Header").Controls("lblpajak").Caption = txtpajak.Text .Sections("Header").Controls("lblgrandtotal").Caption = txtgrandtotal.Text End With DataReport2.Show End Sub Private Sub cmdexit_Click() If MsgBox("Apakah Akan Keluar Form [Y/T] ?", vbYesNo + vbQuestion, "Pesan Keluar") = vbYes Then Form5.Show Unload Me Else Exit Sub End If End Sub ..:: SILAHKAN TAMBAHKAN/UBAH KODE PROGRAM AGAR PERFORMANSINYA LEBIH BAIK ::.. 60 W orkshop MsVB 6 & SQL Server 2000 | Yoga | Pendistribusian Aplikasi Jika ternyata setelah pengecekan aplikasi tidak ditemukan bug yang signifikan. Maka tahap akhir dari pembuatan aplikasi adalah mendistribusikannya. Visual Basic 6 menyediakan fasilitas untuk mendistribusikan palikasi melalui menu Addins Paackage & Dployment Wizard. Selain menggunakan fasilitas pendisribusian aplikasi kepunyaan Visual Basic 6, maka kita dapat menggunakan perangkat lunak pihak ketiga seperti InstallShield. Biasanya, software pihak ketiga menawarkan fasilitas yang "lebih" baik dalam melakukan kustomasi / pengaturan pembuatan paket distribusi aplikasi. Namun sayangnya... software-software in biasanya tidak gratis hehe. Kecuali Anda membelinya di pusat perbajakan :) 61 W orkshop MsVB 6 & SQL Server 2000 | Yoga | 4 HALAMAN MENYEBALKAN & NARSIS Harus Berakhir Akhirnya workshop ini harus berakhir sampai disini. Terima kasih yang tak terhingga kepada para peserta & panitia yang sudah dengan sabar mengikuti workshop ini. Sekali lagi saya mohon maaf jika ada kata-kata yang tidak berkenan dan salah ketik, maklum lah nulisnya sambil ngantuk. Dan juga minta maaf seandainya modul ini tidak sesuai harapan. Segala caci-maki, sumpah-serapah, omelan, kritik, saran, pujian, unekunek bisa disampaikan melalui email penulis : Email/YM : 1. [email protected] 2. [email protected] Blog : http://prihastomo.wordpress.com Plurk : http://www.plurk.com/yogap Daftar Pustaka http://www.globalkomputer.com/Bahasan/Database http://id.wikipedia.org http://en.wikipedia.org Manual, Advance Microsoft Visual Basic 6, 2nd Edition, Microsoft Press Manual SQL Server 2000 Online Book Wassalamu’alaikum Wr. Wb. Hormat Saya, Yoga Prihastomo Orang Indonesia Biasa 62