Agus Rahadian perbanyak dan edit terjemahan ini tetapi...

21
Terjemahan A Beginner's Guide to Gambas – Revised Edition Chapter 15 Diterjemahkan oleh Agus Rahadian untuk kepentingan pembelajaran, Silahkan anda perbanyak dan edit terjemahan ini tetapi tidak untuk diperjualbelikan/dikomersilkan. Penterjemah melakukan ini semampunya tanpa ada dan atau meminta donasi dan hanya untuk membantu mereka yang kesulitan dalam memahami buku berbahasa Inggris. Semoga Allah SWT mencerahkan hati dan pikiran kita, Amiin. Penterjemah : Agus Rahadian -[ 1 ]

Transcript of Agus Rahadian perbanyak dan edit terjemahan ini tetapi...

Page 1: Agus Rahadian perbanyak dan edit terjemahan ini tetapi ...staffsite.stimata.ac.id/assets/uploads/files/download/b6f78-gambas... · sistem database yang flat-file dan tidak menggunakan

Terjemahan A Beginner's Guide to Gambas – Revised Edition Chapter 15

Diterjemahkan oleh Agus Rahadian untuk kepentingan pembelajaran, Silahkan andaperbanyak dan edit terjemahan ini tetapi tidak untuk diperjualbelikan/dikomersilkan.Penterjemah melakukan ini semampunya tanpa ada dan atau meminta donasi dan hanyauntuk membantu mereka yang kesulitan dalam memahami buku berbahasa Inggris.Semoga Allah SWT mencerahkan hati dan pikiran kita, Amiin.

Penterjemah : Agus Rahadian -[ 1 ]

Page 2: Agus Rahadian perbanyak dan edit terjemahan ini tetapi ...staffsite.stimata.ac.id/assets/uploads/files/download/b6f78-gambas... · sistem database yang flat-file dan tidak menggunakan

Terjemahan A Beginner's Guide to Gambas – Revised Edition Chapter 15

BAB 15MySQL DAN GAMBAS

Bab ini menjelaskan secara rinci proses menggunakan database MySQL dari dalam lingkunganpemrograman Gambas. Untuk tujuan kita, kita akan mengasumsikan bahwa MySQL sudahterinstal di komputer Anda (atau mesin diakses kepada Anda dari mesin anda) dan bahwa serverMySQL tersedia bagi Anda untuk terhubung ke dari dalam program Gambas Anda. Jika hal initidak terjadi, maka Anda akan harus merujuk ke manual MySQL dan mencari cara untukmenginstal distribusi database MySQL pada sistem tertentu. Anda juga harus menyadari faktabahwa Gambas juga akan bekerja sama dengan PostgreSQL dan SQLite. SQLite bukanlahsebuah arsitektur client / server yang benar seperti MySQL dan PostgreSQL. Ini adalah sebuahsistem database yang flat-file dan tidak menggunakan model klien / server database. Untuk tujuankita dalam bab ini, kita akan tetap ke MySQL karena mungkin yang paling banyak digunakan daritiga produk database.

Paket database MySQL terdiri dari MySQL Server dan berbagai program client. MySQL Serveradalah program yang menyimpan dan mengelola semua database Anda dalam lingkunganMySQL. Program klien yang disertakan dengan MySQL terlalu banyak untuk daftar di sini tetapipenting bagi Anda untuk memahami bahwa setiap aplikasi klien melayani tujuan tertentu yangberkaitan dengan manajemen dan / atau administrasi data atau metadata disimpan pada MySQLServer. Program klien kita akan berhadapan dengan -dalam bab ini- disebut mysql (perhatikan itudieja dalam huruf kecil). Program client menyediakan antarmuka baris perintah (CLI=CommandLine Interface) dapat Anda gunakan untuk mengeluarkan pernyataan SQL interaktif ke MySQLServer dan melihat hasilnya segera ditampilkan. Perbedaan utama antara MySQL dan mysqladalah bahwa MySQL digunakan untuk merujuk pada paket seluruh distribusi MySQL ataumerujuk ke MySQL Server sementara mysql mengacu pada program CLI klien.

Apa tujuan melakukannya melayani untuk memiliki kedua klien dan server bukannya satuprogram? Server dan program client dibagi menjadi entitas yang berbeda sehingga Anda dapatmenggunakan program klien (s) pada sistem Anda untuk mengakses data pada server MySQLyang dapat berjalan pada komputer lain. Dengan memisahkan paket menjadi klien server dan n,berfungsi untuk memisahkan data dari antarmuka pengambilan data. Sebelum Anda mulai bekerjapada bab ini, sangat disarankan agar Anda membiasakan diri dengan MySQL dengan men-download panduan terbaru dari situs web resmi MySQL. Minimal, menyelesaikan tutorial dalamBab 3 dari User Manual MySQL sebelum melanjutkan dengan bab ini. Begitu Anda sudah familiardengan bagaimana dasar SQL operasi bekerja dalam lingkungan MySQL, Anda siap untukmelanjutkan dengan bab ini, yang lebih berfokus pada bagaimana menyelesaikan jenis yang samahal yang tutorial MySQL ditunjukkan, melainkan dari dalam program Gambas.

Untuk mengakses database dalam lingkungan Gambas, Anda perlu memastikan proyek Andamenggunakan komponen gb.db. Bila Anda membuat proyek baru, Anda perlu pergi ke dialogproyek properti dan Anda akan menemukan tab untuk komponen. Dari dalam dialog ini tab, Andadapat memilih komponen yang Anda butuhkan untuk program Anda. Dalam kasus database, Andaakan perlu memeriksa gb.db sebelum Anda dapat menggunakan salah satu kelas yangdidefinisikan oleh komponen ini. Seperti yang kita dinyatakan sebelumnya, komponen gb.dbmemungkinkan Anda untuk mengakses sistem manajemen database berikut: PostgreSQL,MySQL, SQLite2, SQLite3, Firebird, dan ODBC. Karena PostgreSQL dan MySql adalah klien /server database, itu berarti program Anda akan perlu untuk membuat sambungan ke serverdatabase. SQLite adalah database berbasis flatfile sehingga tidak ada proses server untukprogram Anda untuk terhubung dengannya. Namun, ini juga berarti bahwa program Anda mungkinperlu menggunakan nama path yang memenuhi syarat untuk menggunakan setiap file database

Penterjemah : Agus Rahadian -[ 2 ]

Page 3: Agus Rahadian perbanyak dan edit terjemahan ini tetapi ...staffsite.stimata.ac.id/assets/uploads/files/download/b6f78-gambas... · sistem database yang flat-file dan tidak menggunakan

Terjemahan A Beginner's Guide to Gambas – Revised Edition Chapter 15

jika jalan default (yaitu, application path) tidak digunakan.

Komponen gb.db telah dirancang untuk menciptakan perantara (diabstraksikan) lapisan antaraserver database dan program anda. Hal ini memungkinkan Anda untuk menggunakan kode yangsama terlepas dari backend database Anda memutuskan untuk menggunakan. Ada beberapaperingatan, tentu saja. Pendekatan ini disarikan hanya bekerja jika Anda telah membuat databaseAnda dengan menggunakan database manager atau dengan menggunakan komponen gb.db.Furtherrmore, Anda harus menggunakan metode Find, Create dan Edit dilengkapi dengankomponen gb.db. Anda tidak dapat menempatkan nilai-nilai SQL secara langsung dalampermintaan - Anda harus menggunakan fitur metode substitusi tersebut untuk mencapai itu.Akhirnya, Anda tidak dapat menggunakan metode Exec untuk mengirim permintaan SQL langsungke server untuk mengakses server-fitur khusus. Sementara ini terdengar cukup ketat, padakenyataannya itu bukan halangan untuk program anda. Mengingat beberapa peringatan, Andadapat menyelesaikan hampir semua operasi database yang diperlukan dari dalam lingkunganGambas. Kelas-kelas yang didukung dalam komponen gb.db adalah Blob, Connection, DB,Database, DatabaseUser, Field, Index, Hasil, ResultField, Tabel. Catatan: Gambas 3 memperkenalkan kelas baru yang disebut Connections.

Blob Class

Kelas Blob adalah obyek dikembalikan oleh field Blob, yang merupakan jenis data yang digunakandalam SQLite3 mengandung data format yang tak tentu, seperti data type Varian dalam Gambas.Hal ini memungkinkan kita untuk membaca atau menulis data bila tipe data yang akan menerimavariabel tidak diketahui. Blob memiliki dua sifat: Data, yang menetapkan atau mengembalikan isiblob, dan Length, yang mengembalikan panjang isi Blob dalam bytes.

Connection Class

Kelas Connection menetapkan koneksi ke database. Agar berhasil terhubung ke database, Andaharus terlebih dahulu membuat objek koneksi dan mengatur sifat yang diperlukan yang akandigunakan oleh database. Selanjutnya Anda harus memanggil method Open. Jika Andatersambung ke database SQLite dan properti Name adalah null, database dibuka dalam memori.Jika Name ditentukan adalah path absolut, pathname digunakan. Jika Name yang ditetapkanadalah path relatif dan properti Host nol, database terletak dalam aplikasi sementara direktori / tmp/ gambas. $UID / sqlite. Jika tidak, Host akan berisi nama direktori database dan path file databaseadalah hasil dari concatenating Host dan nilai Name properti. Kelas ini creatable dan konvensipemanggilan adalah:

DIM hConnection AS ConnectionhConnection = NEW Connection()

1. Properti Connection

Ketika objek hConnection diberi contoh, itu menciptakan objek kekosongan koneksi baru.Anda kemudian akan perlu mengatur properti untuk objek ini. Properti yang dapat Andagunakan dengan objek koneksi meliputi:

• CharsetCharset adalah properti read-only yang mengembalikan charset yang digunakanoleh database. Hal ini mungkin bagi Anda untuk menyimpan string Anda dalamdatabase secara langsung dalam format UTF-8. Namun, Anda juga bisa dapat

Penterjemah : Agus Rahadian -[ 3 ]

Page 4: Agus Rahadian perbanyak dan edit terjemahan ini tetapi ...staffsite.stimata.ac.id/assets/uploads/files/download/b6f78-gambas... · sistem database yang flat-file dan tidak menggunakan

Terjemahan A Beginner's Guide to Gambas – Revised Edition Chapter 15

menggunakan properti dikombinasikan dengan Conv$() subroutine untukmengkonversi dari format UTF-8 ke format charset database. Namun Menggunakancharset database yang datang pada biaya dalam kinerja. Hal ini karena Anda harusmenggunakan Conv$ () subroutine setiap kali Anda membaca atau menulis datastring untuk field pada database. Untuk saat ini, ini adalah satu-satunya cara Andadapat melakukan ini jika Anda ingin menggunakan string berbasis fungsi SQL danbuilt-in rutinitas semacam sistem manajemen database (MySQL, PostgreSQL, atauSQLite). Versi mendatang dari Gambas otomatis dapat membuat konversi antarastring Gambas dan charset database.

• DatabasesProperti Database dapat diperiksa untuk mendapatkan obyek koleksi yang akanberisi nama dari semua database yang dikelola oleh server database. Sintaksadalah:

PROPERTY Databases AS .ConnectionDatabases

Pengumpulan data yang dihasilkan (yang enumerable menggunakanpernyataan FOR EACH) akan sama seperti jika Anda mengetik SHOWDATABASES dari CLI mysql client.

• Error

Properti ini mengembalikan kode kesalahan terakhir yang diajukan oleh driverdatabase.

• Host

Anda dapat menggunakan properti host untuk mengatur atau mendapatkan namahost dari mana server database berada. Nama host dapat berupa nama mesin ataualamat IP. Host default bernama localhost. Dalam SQLite, nama host tidak relevankarena SQLite bukanlah sytstem database klien / server. Namun, dari versi 0.95 kedepan, adalah mungkin bagi Anda untuk mengatur jalur path database SQLitedengan menggunakan properti ini. Sintaks untuk menggunakan properti Host:

PROPERTY Host AS String

• Login

Properti Login digunakan untuk mengatur atau mendapatkan data login penggunayang digunakan untuk membangun koneksi ke database. Sekali lagi, ini berlakuuntuk MySQL dan PostgreSQL, bukan SQLite. Karena SQLite tidak memiliki konseppengguna, akses ke database SQLite dikendalikan oleh pengaturan file izin dari filedatabase itu sendiri. Ini berarti bahwa properti Login selalu akan diatur ke user iddari user yang menjalankan program Gambas yang menggunakan databaseSQLite. Sintaks adalah:

PROPERTY Login AS String

Penterjemah : Agus Rahadian -[ 4 ]

Page 5: Agus Rahadian perbanyak dan edit terjemahan ini tetapi ...staffsite.stimata.ac.id/assets/uploads/files/download/b6f78-gambas... · sistem database yang flat-file dan tidak menggunakan

Terjemahan A Beginner's Guide to Gambas – Revised Edition Chapter 15

• Name

Properti Name set atau mendapatkan nama database yang Anda ingin terhubungke. Jika Anda tidak menentukan nama, database sistem default digunakan. UntukPostgreSQL database default bernama template1 dan mySQL itu bernama mysql.Untuk SQLite, nama default adalah / tmp / sqlite.db. Untuk setiap akses database,Namun, pengguna harus memiliki setidaknya membaca dan menghubungkan hakakses untuk menggunakan database ini. Sqlite akan mencari database pertamadengan mencoba untuk menggunakan nama path lengkap jika telah diberikan. Jikatidak, itu akan memeriksa untuk melihat apakah variabel host telah ditetapkan. Jikaitu terjadi, SQLite akan melihat nama jalan yang ditetapkan dalam variabel. JikaGAMBAS_SQLITE_DBHOME variabel lingkungan telah ditetapkan, maka SQLiteakan menggunakannya sebagai direktori kerja saat ini. Hal ini juga memungkinkanuntuk membuat dan menggunakan database di memori dengan menyetel propertiName untuk ": memori:" daripada "mysql" atau "postgresql" atau "sqlite". Sintaksadalah:

PROPERTY Name AS String

• Opened

Properti Boolean mengembalikan TRUE jika koneksi dibuka. Sintaks adalah:

PROPERTY READ Opened AS Boolean

• Password

Properti Password akan mengembalikan atau mengatur sandi yang digunakanuntuk membangun koneksi ke database. Konvensi pemanggilan adalah:

PROPERTY Password AS String

• Port

Properti Port digunakan untuk mendapatkan atau mengatur port TCP / IP yangdigunakan untuk membangun koneksi ke database. Port default tergantung padaTipe koneksi. Sintaks adalah:

PROPERTY Port AS String

• Tables

Properti Tabel digunakan untuk memperoleh koleksi virtual yang dapat digunakanuntuk mengelola semua tabel dari database. Sintaks adalah:

PROPERTY Tables AS .ConnectionTables

• Type

Properti Type merupakan tipe server database Anda ingin terhubung ke. PadaGambas, tipe database saat ini didukung adalah: "postgresql", "mysql", dan "sqlite".Properti tipe menggunakan sintaks ini:

Penterjemah : Agus Rahadian -[ 5 ]

Page 6: Agus Rahadian perbanyak dan edit terjemahan ini tetapi ...staffsite.stimata.ac.id/assets/uploads/files/download/b6f78-gambas... · sistem database yang flat-file dan tidak menggunakan

Terjemahan A Beginner's Guide to Gambas – Revised Edition Chapter 15

PROPERTY Type AS String

• User

Ini sinonim dengan Properti Password. Sintak adalah :

PROPERTY User AS String

Properti Users mengembalikan koleksi semua pengguna terdaftar di databaseserver. Seperti benda koleksi lainnya, dapat disebutkan dengan FOR EACH. Sintaksadalah:

PROPERTY Users AS .ConnectionUsers

• VersionProperti Version adalah nilai read-only yang mengembalikan versi database bahwadriver terhubung dengan. Sintaks adalah:

PROPERTY READ Version AS Integer

2. Konsep Transaksi

Ada kalanya urutan yang database tindakan (atau query) yang dieksekusi adalah penting.Kadang-kadang, sebuah program harus memastikan semua permintaan dalam kelompokdijalankan dengan sukses dan dalam rangka atau proses tidak satupun dari mereka samasekali. Sebuah contoh klasik yang diambil dari lingkungan perbankan. Jika jumlah uangyang diberikan (misalnya, 100 dolar) yang diambil dari satu account dan diposting ke akunyang lain, kita akan mengharapkan tindakan berikut terjadi:

UPDATE account1 SET balance = balance - 100;UPDATE account2 SET balance = balance + 100;

Kedua pertanyaan harus mengeksekusi berhasil atau tidak harus mengeksekusi. Uangtidak dapat ditransfer dari satu account dan gagal yang akan diposting ke akun lainnya.Kedua pertanyaan membentuk satu transaksi yang terdiri dari dua tindakan yang terpisah(debit 100 dari account1 dan kredit 100 sampai account2). Sebuah transaksi hanya satuatau lebih query database individu dikelompokkan bersama antara BEGIN dan COMMITpernyataan. Tanpa pernyataan COMMIT, transaksi tidak permanen dan dapat dibalikdengan pernyataan ROLLBACK.

MySQL otomatis melakukan pernyataan yang bukan merupakan bagian dari prosestransaksi. Hasil dari pernyataan UPDATE atau INSERT SQL yang tidak didahului denganBEGIN akan segera dapat dilihat oleh semua koneksi ke database karena komit secaraotomatis dilakukan. Kebanyakan database yang mampu mencapai hal ini dikatakan ACID-compliant. Model ACID merupakan salah satu konsep tertua dan paling penting dari teoridatabase. Empat tujuan yang harus dipenuhi untuk setiap database yang akandipertimbangkan handal adalah Atomicity, Consistency, Isolation dan Durability (ACID).Mari kita periksa masing-masing empat karakteristik secara rinci.

AtomicityAtomicity berarti modifikasi database harus mengikuti aturan "semua atau tidak samasekali". Setiap transaksi dianggap sebagai unit "atom". Jika ada bagian dari transaksigagal, seluruh transaksi gagal. Hal ini penting DBMS memelihara sifat atom dari transaksi

Penterjemah : Agus Rahadian -[ 6 ]

Page 7: Agus Rahadian perbanyak dan edit terjemahan ini tetapi ...staffsite.stimata.ac.id/assets/uploads/files/download/b6f78-gambas... · sistem database yang flat-file dan tidak menggunakan

Terjemahan A Beginner's Guide to Gambas – Revised Edition Chapter 15

dalam keadaan apapun.

ConsistencyConsistency menyatakan hanya data yang valid akan ditulis ke database. Apabila suatutransaksi dieksekusi yang melanggar aturan konsistensi database, seluruh transaksi akandigulung kembali dan database akan dikembalikan ke keadaan konsisten dengan aturan.Sebaliknya, jika transaksi mengeksekusi berhasil, ia akan mempertahankan keadaankonsistensi.

Isolation

Isolasi memerlukan beberapa transaksi yang terjadi secara bersamaan tidakmempengaruhi satu sama lain. Misalnya, jika Pengguna A melakukan transaksi dalamwaktu bersamaan dengan transaksi PenggunaB, kedua transaksi harus beroperasi padadatabase dalam isolasi “kebahagiaan”. Database harus melakukan satu transaksi sebelumyang lain. Ini mencegah transaksi dari membaca data menengah dihasilkan sebagai efeksamping dari transaksi lain. Isolasi tidak menjamin transaksi baik akan mengeksekusipertama, hanya saja mereka tidak akan saling mengganggu.

Durability

Durabilitas memastikan setiap transaksi berkomitmen untuk database tidak akan hilang.Hal ini dilakukan melalui backup database dan log transaksi yang memfasilitasi pemulihantransaksi yang dilakukan meskipun ada kegagalan berikutnya. Sekarang, mari kita lihatmetode kelas Koneksi Gambas tersedia bagi Anda dalam program Anda.

3. Metode Koneksi Kelas

Kelas Connection menyediakan sebagian besar metode Anda akan perlu untuk membuatkoneksi ke database dan mengeksekusi satu atau lebih transaksi untuk mencari,menambah, mengubah, atau menghapus data.

Open/Close

Metode Open digunakan untuk membuka koneksi ke database. Sebelum membuatpanggilan ke Open, Anda harus mengatur properti koneksi dengan data yang diperlukanuntuk menggunakan database. Umumnya, minimal Anda akan perlu untuk menentukanjenis database, host, login ID dan password, dan nama database yang ingin Anda gunakan.Sintaks untuk terbuka adalah:

FUNCTION Open ( ) AS Boolean

Contoh kode di bawah ini menunjukkan bagaimana menggunakan method Open untukmenghubungkan jrittinghouse pengguna ke database MySQL bernama "GambasBugs"yang disimpan di Host localhost :

DIM $hConn As NEW ConnectionWITH $hConn .Type = "mysql" .Host = "localhost" .Login = "jrittinghouse" .Password = "ab32e44" .Name = "GambasBugs"END WITH

Penterjemah : Agus Rahadian -[ 7 ]

Page 8: Agus Rahadian perbanyak dan edit terjemahan ini tetapi ...staffsite.stimata.ac.id/assets/uploads/files/download/b6f78-gambas... · sistem database yang flat-file dan tidak menggunakan

Terjemahan A Beginner's Guide to Gambas – Revised Edition Chapter 15

TRY $hConn.OpenIF Error THEN PRINT "Database cannot be opened. Error = "; Error.Text

Untuk menutup koneksi, cukup memanggil metode Close. Dalam contoh kita di atas, Anda bisa menggunakan kode ini:

$hConn.Close

dan koneksi akan ditutup. Untuk selanjutnya menggunakan data yang disimpan dalam database, Anda akan perlu untuk membuka kembali database dengan menggunakan method Open.

Beggin/Commit/Rollback

Seperti yang kita dinyatakan sebelumnya, transaksi adalah satu atau lebih query databaseindividu yang dikelompokkan bersama-sama antara pernyataan BEGIN dan COMMIT.Tanpa pernyataan COMMIT, transaksi tidak permanen dan dapat dibalik denganpernyataan ROLLBACK. Ingat bahwa MySQL otomatis melakukan pernyataan yang bukanmerupakan bagian dari proses transaksi (didefinisikan oleh BEGIN dan COMMIT). PadaGambas, disarankan agar Anda menggunakan metode Cari, Buat, dan Edit untuk membuatperubahan ke database. Hal ini membantu untuk menjaga independensi kode danmemungkinkan Anda untuk menulis satu bagian dari kode yang akan bekerja dengandatabase yang didukung oleh Gambas. Gambas menggunakan objek hasil untukmengembalikan hasil query SQL.

Find

Tersebut metode Find mengembalikan sebuah objek read-only Result digunakan untukquery catatan dalam tabel tertentu. Konvensi menghubungi Find adalah:

FUNCTION Find (Table AS String [, Request AS String, Arguments AS , ... ] ) AS Result

Request merupakan pernyataan WHERE SQL yang digunakan untuk query tabel. Argumenyang dikutip seperlunya (ditentukan oleh sintaks SQL), dan diganti dalam string Request. Iabekerja seperti fungsi Subst () dalam kasus ini. Dengan menggunakan metode Findmemungkinkan Anda untuk menulis permintaan yang independen dari database, yangberarti ia akan bekerja dengan PostgreSQL atau MySQL tanpa perubahan kode yangdiperlukan.

Create

Metode Create digunakan untuk membangun baca / tulis objek Result yang dapat digunakan untuk membuat catatan dalam sebuah tabel. Standar konvensi pemanggilan adalah:

FUNCTION Create ( Table AS String ) AS Result

Edit

Metode Edit mengembalikan sebuah objek baca / tulis Result digunakan untuk mengedit catatan dalam tabel yang ditentukan. Request adalah SQL WHERE Clause digunakan untuk menyaring tabel, dan Argumen yang dikutip dibutuhkan oleh sintaks SQL dan diganti dalam string Request sebagaimana telah dijelaskan sebelumnya. Standar konvensi

Penterjemah : Agus Rahadian -[ 8 ]

Page 9: Agus Rahadian perbanyak dan edit terjemahan ini tetapi ...staffsite.stimata.ac.id/assets/uploads/files/download/b6f78-gambas... · sistem database yang flat-file dan tidak menggunakan

Terjemahan A Beginner's Guide to Gambas – Revised Edition Chapter 15

pemanggilan adalah:

FUNCTION Edit ( Table AS String [ , Request AS String, Arguments AS , ... ] ) AS Result

Berikut adalah contoh kode untuk menunjukkan bagaimana Edit () bekerja:

DIM MyResult AS ResultDIM sQuery AS StringDIM iParm AS IntegersQuery = "Select * from tblDEFAULT where id = "' we will insert a parameter value (12) at the end of the query stringiParm = 12$hConn.BeginMyResult=$hConn.Edit("tblDEFAULT", sQuery, iParm)MyResult!Name = "Mr Rittinghouse" ' Set a field value$hConn.Update ' Update with the new value$hConn.Commit ' make the changes permanent$hConn.Close ' close the database connection

Exec

Metode Exec mengeksekusi permintaan SQL dan mengembalikan sebuah objek read-onlyResult yang berisi hasil dari permintaan. Standar konvensi pemanggilan adalah:

FUNCTION Exec ( Request AS String, Arguments AS , ... ) AS Result

Request adalah SQL WHERE Clause dan Argumen harus dikutip seperti yangdipersyaratkan oleh sintaks SQL.

Limit

Metode ini membatasi jumlah record yang dikembalikan oleh permintaan berikutnya.Setelah query dijalankan, jumlah record yang dikembalikan ulang ke terbatas. Metode inimengembalikan sambungan itu berlaku untuk, sehingga Anda dapat menulis sesuatuseperti itu:

DB.Limit(X).Exec(...)

Quote

Metode Quote mengembalikan sebuah identifier quote dapat Anda gunakan untukmenyisipkan dalam query SQL. Pengenal ini dapat menjadi tabel atau nama field.Sintaks adalah:

FUNCTION Quote ( Name AS String ) AS String

Mekanisme mengutip tergantung pada driver database server tertentu yang membuat metode ini diperlukan jika Anda perlu untuk menulis database-independen kode. Berikut adalah contoh bagaimana menggunakan Quote: ' Returns number of records in a querys DBTable' is the name of the table. Since the name can include reserved'characters it needs to be surrounded by quote marksrResult = $hConn.Exec("SELECT COUNT(*) AS iNumRecs FROM " & DB.Quote(sDBTable))PRINT rResult!iNumRecs

Penterjemah : Agus Rahadian -[ 9 ]

Page 10: Agus Rahadian perbanyak dan edit terjemahan ini tetapi ...staffsite.stimata.ac.id/assets/uploads/files/download/b6f78-gambas... · sistem database yang flat-file dan tidak menggunakan

Terjemahan A Beginner's Guide to Gambas – Revised Edition Chapter 15

Subst

Metode Subst menciptakan sebuah kalimat SQL dengan menggantikan argumen dalam format string. Sintaks adalah:

FUNCTION Subst ( Format AS String, Arguments AS, ... ) AS String

Format adalah kalimat SQL, dan Argumen adalah argumen untuk menggantikan. Tersebut& 1, 2 & ... pola dalam string Format digantikan oleh masing-masing representasi SQL dariargumen ke-1, ke-2 .... Argumen-argumen ini quote sesuai dengan sintaks SQL database.Argumen yang digunakan dalam cara yang sama bahwa mereka digunakan dalam fungsiSubst$, dibahas dalam Bab 7.

Untuk contoh :

PRINT DB.Subst(“WHERE Name = &1 AND Date = &2”, “Benoit”, Now)

mengembalikan output ini :

WHERE Name = 'Benoit' AND Date = '2011-02-15 11:51:33.043'

4. Hasil Obyek

Obyek Hasilnya adalah kelas yang digunakan untuk mengembalikan hasil dari permintaanSQL. Kelas ini tidak creatable dan bertindak seperti array read-only. Hal ini enumerablemenggunakan pernyataan FOR EACH. Mendeklarasikan dan iterate objek hasil sebagaiberikut:

DIM hResult AS ResultFOR EACH hResult 'do something with the dataNEXT

Kode snippet di bawah ini menunjukkan bagaimana Anda bisa mendapatkan nilai dari fielddalam rekor saat objek Result:

DIM MyResult AS ResultDIM MyVariant AS VariantMyVariant = MyResult [Field AS String]

Kelas ResultField merupakan salah satu bidang objek Result. Anda dapat menggunakanmetode Find untuk memilih bidang tertentu sebelum menggunakannya. Sifat kelas iniadalah mendukung Length, Name, Resultl dan Type. Hal ini juga memungkinkan untukmenghitung data yang ResultField dengan kata kunci FOR EACH. Kelas ini tidak creatable.Kode di bawah ini menunjukkan Anda bagaimana untuk mengubah nilai dari field dalamrekor saat objek Result:

DIM MyResult AS ResultDIM MyVariant AS Variant

MyResult [Field AS String] = MyVariant

Properti yang dapat Anda gunakan dengan objek hasil meliputi Available, Connection,Count, Fields, Indeks, Length dan Max. Available akan mengembalikan nilai TRUE jika

Penterjemah : Agus Rahadian -[ 10 ]

Page 11: Agus Rahadian perbanyak dan edit terjemahan ini tetapi ...staffsite.stimata.ac.id/assets/uploads/files/download/b6f78-gambas... · sistem database yang flat-file dan tidak menggunakan

Terjemahan A Beginner's Guide to Gambas – Revised Edition Chapter 15

hasilnya menunjuk ke catatan database yang sudah ada. Connection mengembalikan objekConnection orangtua. Count memberitahu Anda jumlah record (baris) kembali denganobyek hasil. Fields mengembalikan koleksi field dalam tabel database dikembalikan denganobjek hasil. Indeks mengembalikan indeks (baris pointer atau kursor saat ini) dari catatansaat ini, dimulai dari nol. Length adalah sama dengan jumlah dan digunakan secarabergantian. Max kembali Result.Count-1.

Metode didukung oleh kelas objek hasil termasuk Delete, MoveFirst, MoveLast, MoveNext,MovePrevious, MoveTo, dan Update. Sebagian besar yang cukup jelas, tetapi metodeUpdate digunakan untuk menulis ulang catatan saat ini untuk database dengan perubahandata yang ditentukan. Jika Anda menggunakan MoveTo dan menentukan indeks yang batalatau tidak sah, maka akan mengembalikan nilai TRUE menunjukkan kesalahan. Sekarangbahwa kita memiliki pemahaman dasar tentang apa objek hasil dan bagaimanamenggunakannya, mari kita lihat bagaimana Gambas memungkinkan Anda untukmenemukan data dalam database dengan metode Find.

DB Class

Kelas ini merupakan koneksi database saat ini. Kelas ini bersifat statis dan semua anggotanyajuga statis. Sebagian besar sifat dari kelas ini adalah sama dengan kelas Connection jadi kamihanya akan mencakup mereka yang berbeda, yaitu Current, Database, dan Debug. Currentmengembalikan atau menetapkan sambungan saat ini. Database mengembalikan koleksi semuadatabase yang dikelola oleh server database. Debug set atau mengembalikan TRUE jikakomponen database dalam modus debug. Ketika bendera debug diatur, setiap query dikirim kesetiap driver database yang dicetak pada output standard error (umumnya, konsol). Metode yangdigunakan dalam kelas DB adalah sama dengan yang digunakan di kelas Connection (Begin,Close, Commit, Create, Delete, Edit, Exec, Find, Limit, Open, Quote dan Rollback. Subst) jadi kitatidak akan mengulangi informasi di sini.

Database

Kelas Database digunakan untuk mewakili informasi yang berkaitan dengan database. Kelas initidak creatable. Sifat-sifat yang dapat Anda gunakan dengan kelas ini termasuk Connection,Name, dan Sistem. Connection dapat digunakan untuk mendapatkan obyek Connection parent.Name akan mengembalikan nama database dan Sistem akan mengembalikan nilai TRUE jikadatabase adalah sistem database. Kelas database hanya memiliki satu metode, Delete, yang akanmenghapus database.

DatabaseUser

Kelas DatabaseUser digunakan untuk mewakili pengguna database. Kelas ini tidak creatable.Tersebut mendukung User properti kelas adalah Administrator, Connection, Name dan Password.Administrator adalah properti read-only yang mengembalikan TRUE jika pengguna adalahadministrator database. Connection mengembalikan objek induk koneksi pengguna. Name akanmengembalikan nama pengguna dan Password akan mendapatkan atau menetapkan sandi yangterkait dengan pengguna. Ketika Anda membaca properti, Anda harus mendapatkan passworddalam bentuk terenkripsi. Kelas DatabaseUser memiliki metode tunggal, Delete yang digunakanuntuk menghapus pengguna dari database.

Penterjemah : Agus Rahadian -[ 11 ]

Page 12: Agus Rahadian perbanyak dan edit terjemahan ini tetapi ...staffsite.stimata.ac.id/assets/uploads/files/download/b6f78-gambas... · sistem database yang flat-file dan tidak menggunakan

Terjemahan A Beginner's Guide to Gambas – Revised Edition Chapter 15

Field

Kelas Field digunakan untuk merepresentasikan data untuk table field. Kelas ini tidak creatable.Properti yang mendukung hal ini adalah kelas Default, Length, Name, Tabel, dan Type. Standarmengembalikan nilai default dari field. Lentgh akan mengembalikan panjang maksimum kolomteks. Jika ruas teks yang diperiksa tidak memiliki batas yang ditentukan, nilai nol dikembalikan.Name akan mengembalikan nama field dan Tabel mengembalikan objek tabel di mana fielddiciptakan. Type mengembalikan datatype bahwa field mewakili. Gambas akan mengembalikansalah satu dari konstanta berikut:

gb.Boolean, gb.Integer, gb.Float, gb.Date or gb.String

Index

Kelas Index merupakan indeks tabel. Kelas ini tidak creatable. Sifat kelas ini mendukung adalahFields, Name, Primer, Tabel, dan unik. Fields mengembalikan daftar commaseparated string yangmewakili bidang yang membentuk indeks. Name mengembalikan nama indeks sementara Primerakan mengembalikan nilai TRUE jika indeks adalah indeks utama dari tabel. Tabel akanmengembalikan objek tabel yang memiliki indeks ini. Unik mengembalikan TRUE jika indeks unik.

Table

Kelas Table merupakan definisi dari tabel database. Kelas ini tidak creatable. Sifat-sifat yangdidukung oleh kelas Table termasuk Connection, Fields, Indeks, Name, primaryKey, Sistem danType. Connection dapat digunakan untuk mendapatkan obyek Connection parent. Fields akanmengembalikan koleksi field table sementara Indeks akan mengembalikan koleksi indeks tabel.Name akan mengembalikan nama tabel. PrimaryKey akan mengembalikan atau mengatur primarykey dari tabel. Primary Key adalah sebuah array string yang berisi nama masing-masing fieldprimary key. Sistem akan mengembalikan nilai TRUE jika database adalah sistem database. Typemengembalikan atau menetapkan jenis tabel. Properti ini unik untuk MySQL dan hanya digunakandengan database MySQL. Kelas ini hanya memiliki satu metode, Update, yang disebut untukbenar-benar membuat tabel dalam database saat ini terhubung.

Penterjemah : Agus Rahadian -[ 12 ]

Page 13: Agus Rahadian perbanyak dan edit terjemahan ini tetapi ...staffsite.stimata.ac.id/assets/uploads/files/download/b6f78-gambas... · sistem database yang flat-file dan tidak menggunakan

Terjemahan A Beginner's Guide to Gambas – Revised Edition Chapter 15

Contoh Program Database

Bagian sebelumnya dari bab ini telah dijelaskan tentang komponen database Gambas dan fituryang disediakan di dalamnya. Namun, tidak ada pengganti bekerja dengan kode nyata dalamaplikasi nyata. Kapal gambas dengan program database contoh yang ditulis oleh pendiri GambasBenoit Minisini, dan program ini merupakan contoh yang sangat baik bagaimana kode programanda untuk menggunakan database dalam lingkungan Gambas.

Kita akan bekerja dengan versi modifikasi dari program ini bernama "database1", ditemukan padaDVD yang menyertai buku ini. Untuk memulai, mulailah Gambas dan memilih program database1dari DVD. Ketika IDE muncul, Anda akan melihat bahwa program ini mengandung dua bentuk,FMain dan frequest. FMain akan terlihat seperti ini:

Gambar 108: The FMain form dalam mode desain.

Program ini akan memungkinkan Anda untuk memilih apa platform database untuk menggunakan(yaitu, PostgreSQL, MySQL, atau SQLite) dan tentukan nama host, nama database, user ID danpassword. Sebuah opsi untuk secara otomatis membuat database ada dan diaktifkan setiap kalikotak centang dicentang. Setelah Anda telah berhasil terhubung ke database, Anda memilikipilihan untuk membuat tabel, menghapus, atau mengisinya dengan beberapa data uji. PermintaanSQL kotak di bagian bawah formulir akan memungkinkan Anda untuk melakukan query terhadapdatabase SQL. Semua dalam semua, program ini menunjukkan hampir semua yang anda perlutahu untuk koneksi ke database menggunakan Gambas. Bentuk FRequest jauh lebih sederhana

Penterjemah : Agus Rahadian -[ 13 ]

Page 14: Agus Rahadian perbanyak dan edit terjemahan ini tetapi ...staffsite.stimata.ac.id/assets/uploads/files/download/b6f78-gambas... · sistem database yang flat-file dan tidak menggunakan

Terjemahan A Beginner's Guide to Gambas – Revised Edition Chapter 15

untuk membangun. Hal ini ditunjukkan pada gambar di bawah ini:

Gambar 109: FRequest Form dalam mode desain

Bentuk FRequest berisi kendali tunggal, yang kita belum pernah diperkenalkan, kontrol TableView.Kontrol ini ditemukan dalam toolset QT kita bahas sebelumnya. Kami akan menunjukkan kepadaAnda bagaimana menggunakan kontrol ini ketika kita membahas kode bentuk FRrequest bawah.

Untuk saat ini, mari kita melompat ke kode untuk bentuk FMain dan melihat bagaimana segalanyaberjalan

' Gambas class file

$ hConn dinyatakan sebagai variabel pribadi dan akan digunakan oleh semua subrutin dalam filekelas. Perhatikan bahwa variabel diawali dengan simbol $ untuk menunjukkan itu adalah variabelkelas privat. Meskipun tidak diperlukan, itu adalah konvensi pemrograman yang baik untuk diikuti.

PRIVATE $hConn AS Connection

Setiap kali pengguna telah mengisi data pada bagian atas formulir dengan nama penggunamereka, host, password, dll, dan klik tombol connect, program ini akan datang ke subroutine inidan mencoba untuk menggunakan data tersebut untuk membuat koneksi ke database.

PUBLIC SUB btnConnect_Click() 'we need to have a string to work with so declare sName as local DIM sName AS String 'now we get a little tricky. if a database was previously opened 'and is still open, this next line would close it. Using TRY

Penterjemah : Agus Rahadian -[ 14 ]

Page 15: Agus Rahadian perbanyak dan edit terjemahan ini tetapi ...staffsite.stimata.ac.id/assets/uploads/files/download/b6f78-gambas... · sistem database yang flat-file dan tidak menggunakan

Terjemahan A Beginner's Guide to Gambas – Revised Edition Chapter 15

'would allow any error to be caught (see CATCH below). 'If there is not an open database to close, no harm was done 'and the code execution proceeds.

TRY $hConn.Close 'we assign the data in the Textbox txtName to our string var sName 'and set the database connection properties to the values provided 'by the user by using the WITH/END WITH construct.

sName = txtName.Text WITH $hConn .Type = cmbType.Text 'the type of database platform to use .Host = txtHost.Text 'host name of the database .Login = txtUser.Text 'USER ID .Password = txtPassword.Text 'USER password END WITH

'at this point, all the connection properties are set but 'we have not opened the connection yet. The following code 'segment will see if a database with the name specified by 'sName exists and, if not, it will create it if the checkbox to 'create database is checked. IF chkCreate.Value THEN $hConn.Open 'open the connection 'see if a database sName exists and if not, add it to the server IF NOT $hConn.Databases.Exist(sName) THEN $hConn.Databases.Add(sName) ENDIF 'now close the connection $hConn.Close ENDIF

'now, we are ready to open the database. Either it already existed 'and we open that database or we will open the new one we created 'if the checkbox was checked. First, set the Name property for the 'connection to sName and then call the Open method: $hConn.Name = sName $hConn.Open 'we set the enabled properties for both program forms to TRUE 'and place some default text in the SQL request box at the 'bottom of the FMain form: frmDatabase.Enabled = TRUE frmRequest.Enabled = TRUE txtRequest.Text = "SHOW TABLES"'if our TRY failed or if any error occurred during this subroutine,'the CATCH statement would display an ERROR dialog with the text of'the error message. DConv will convert the system charset to UTF-8.

CATCH Message.Error(DConvError.Text))END 'of connectBtn_Click subroutine

Jika, setelah koneksi database didirikan, pengguna akan mengklik tabel Create "test" tombol,subrutin ini akan dieksekusi.

Penterjemah : Agus Rahadian -[ 15 ]

Page 16: Agus Rahadian perbanyak dan edit terjemahan ini tetapi ...staffsite.stimata.ac.id/assets/uploads/files/download/b6f78-gambas... · sistem database yang flat-file dan tidak menggunakan

Terjemahan A Beginner's Guide to Gambas – Revised Edition Chapter 15

PUBLIC SUB btnCreate_Click() 'declare a local Table variable DIM hTable AS Table 'add the table to the database using the Add method

hTable = $hConn.Tables.Add(txtName.text) 'now add the fields of the table to the table we just added 'note that we specify the field name and data type for each 'of the fields we insert into the table. For string data, 'we also specify the maximum length of the string field. hTable.Fields.Add("id", gb.Integer) hTable.Fields.Add("firstname", gb.String, 16) hTable.Fields.Add("name", gb.String, 32) hTable.Fields.Add("birth", gb.Date) hTable.Fields.Add("active", gb.Boolean) hTable.Fields.Add("salary", gb.Float) 'we can specify a primary key for the database table. In this 'case, the id field is used as we can create unique integer index 'data hTable.PrimaryKey = ["id"] 'the call to the Update method commits the changes to the database 'and makes them permanent. hTable.Update

'now we put up a simple dialog to inform the user we have 'successfully completed the creation task. Message.Info("Table " & txtName.Text & " has been created.") 'this code enables or disables the 'buttons depending on the state of the database. For example, 'if there is data already in the database table, it does not make 'sense to fill that table again, so that button would be disabled. 'however, the delete button would be enabled so the data could be 'removed. If the database table is deleted, then it would be 're-enabled and if the table is created and no data exists, 'the fill button would again be enabled, etc. This prevents errors 'from clicking on a button where an action could not be performed 'successfully. btnFill.Enabled = TRUE btnDelete.Enabled = TRUE btnCreate.Enabled = FALSE 'next, we add some default text to the SQL query box txtRequest.Text = "Show TABLES"'the CATCH statement would display an ERROR dialog with the text of'the error message if any error occurs in this subroutine.CATCH Message.Error(DConv(Error.Text))END 'of the create button subroutine

Jika, setelah koneksi database didirikan, pengguna akan mengklikMenghapus tabel "test" tombol, subrutin ini akan dieksekusi.

PUBLIC SUB btnDelete_Click() 'remove the table

TRY $hConn.Tables.Remove(txtName.Text) 'put up a message to inform the user the table is gone Message.Info("Table "& txtName.Text & " has been removed") 'enable or disable the buttons to make sense. If the table

Penterjemah : Agus Rahadian -[ 16 ]

Page 17: Agus Rahadian perbanyak dan edit terjemahan ini tetapi ...staffsite.stimata.ac.id/assets/uploads/files/download/b6f78-gambas... · sistem database yang flat-file dan tidak menggunakan

Terjemahan A Beginner's Guide to Gambas – Revised Edition Chapter 15

'has been removed, it cannot be deleted again and it cannot 'be filled since it does not exist. All that is left is to 'recreate it and that button is enabled. btnDelete.Enabled = FALSE btnFill.Enabled = FALSE btnCreate.Enabled = TRUE 'no table exists to query so blank out the SQL query text. txtRequest.Text = ""'if an error occurs in the subroutine catch it here and show a dialog'message to the user.CATCH Message.Error(Error.Text)END 'the delete button subroutine

Jika koneksi database telah ditetapkan dan pengguna telah menciptakan tabel, perlu adabeberapa data tambahan untuk membuatnya berguna. Subroutine ini dijalankan dan akanmenambah semi-arbitrary data ke tabel. Ini akan secara acak memilih nama pertama dari arraylima nama yang diberikan dan menggabungkan nomor berlawanan dengan "Name #" string untukmelayani sebagai nama belakang. Tanggal lahir dibuat secara acak dengan memilih nilai yangmenambahkan nomor acak dari 1-10,000 ke tanggal dasar 1 Januari 1970. Rekor memilikibendera yang aktif, secara acak ditetapkan juga. Angka gaji yang dipilih secara acak dalamkisaran 1.000 hingga 10.000. Akhirnya, metode Update akan menaruh semua data dalam tabeldan membuat COMMIT ke database. Mari kita lihat setiap baris kode untuk melihat betapamudahnya hal ini dilakukan di Gambas:

PUBLIC SUB btnFill_Click() 'we need an integer counter iInd to be our index and we

'need a Result object to store our results DIM iInd AS Integer DIM rTest AS Result 'set the Busy flag to prevent interruptions to our process INC Application.Busy 'we are going to start the database transaction process with BEGIN $hConn.Begin 'create the database table first 'rTest = $hConn.Create("test") rTest = $hConn.Create(txtName.Text)

'now, set up a loop to create 100 records FOR iInd = 1 TO 100 'make the record id be the counter variable value rTest!id = iInd 'randomly set the first name to be one of the five in the array rTest!firstname = ["Paul","Pierre","Jacques","Antoine","Mathieu"][Int(Rnd(5))] 'make the last name a catenated value with the integer index value rTest!name = "Name #" & iInd 'randomly choose a date by adding a value from 1 – 10,000 to the 'base date of Jan 1, 1970 rTest!birth = CDate("01/01/1970") + Int(Rnd(10000)) 'set the active flag to either 0 or 1 (TRUE or FALSE) rTest!active = Int(Rnd(2)) 'randomly choose a salary figure from 1,000 to 10,000 rTest!salary = Int(Rnd(1000, 10000))

'update this record with the data semi-arbitrary data values rTest.Update NEXT 'iteration of the loop

Penterjemah : Agus Rahadian -[ 17 ]

Page 18: Agus Rahadian perbanyak dan edit terjemahan ini tetapi ...staffsite.stimata.ac.id/assets/uploads/files/download/b6f78-gambas... · sistem database yang flat-file dan tidak menggunakan

Terjemahan A Beginner's Guide to Gambas – Revised Edition Chapter 15

'commit all added records to the database $hConn.Commit'last thing to execute before leaving the subroutineFINALLY 'decrement the busy flag DEC Application.Busy 'pop up a message to inform the user what we did Message.Info(txtName.Text & " has been filled.") 'put a default SQL query in the SQL Query textbox txtRequest.Text = "select * from " & txtName.Text 'fix our buttons to make sense btnFill.Enabled = FALSE btnDelete.Enabled = TRUE btnCreate.Enabled = FALSE'if something goes wrong, abort all changes with the Rollback and'show the error message to the userCATCH $hConn.Rollback

Message.Error(Error.Text)END 'of the fill data subroutine

Jika pengguna memasukkan permintaan SQL apapun dalam kotak query SQL di bagian bawahformulir, kita akan menggunakan metode Exec untuk melakukan query dan tampilan hasil daripermintaan menggunakan formulir FRrequest. Berikut adalah cara yang dilakukan:

PUBLIC SUB btnRun_Click() 'declare a result object to hold the results of the query DIM rData AS Result 'declare a form variable so we can show the FRequest form DIM hForm AS FRequest 'execute the query using the Exec method and assign the results to 'the result object rData rData = $hConn.Exec(txtRequest.Text) 'pass the database connection handle and the result data to the 'FRequest form when it is instantiated hForm = NEW FRequest($hConn, rData) 'now display the form to the user with the result data hForm.Show'come here if there is a problem in the subroutine and display a msgCATCH Message.Error(Error.Text)END 'of sql query subroutine

Setiap kali program kami berjalan dan bentuk FMain terbuka, kita perlu instantiate Connectionvariabel kita $ hConn. Setiap kali formulir ditutup, kami akan menutup koneksi.

PUBLIC SUB Form_Open() $hConn = NEW ConnectionEND

PUBLIC SUB Form_Close() $hConn.CloseEND

Selanjutnya, kita perlu melihat bentuk FRrequest dan melihat bagaimana kode yang menampilkandata hasil objek bila dipanggil. Berikut adalah kode untuk itu:

Penterjemah : Agus Rahadian -[ 18 ]

Page 19: Agus Rahadian perbanyak dan edit terjemahan ini tetapi ...staffsite.stimata.ac.id/assets/uploads/files/download/b6f78-gambas... · sistem database yang flat-file dan tidak menggunakan

Terjemahan A Beginner's Guide to Gambas – Revised Edition Chapter 15

' Gambas class file' fRequest.class declares two private variables to use in this class' one for the connection, one for the result data.PRIVATE $hConn AS ConnectionPRIVATE $rData AS Result'a constructor routine will be used to receive the connection handle 'and the results of a query as parameters whenFRequest is called by'the FMain form.PUBLIC SUB _new(hConn AS Connection, rData AS Result) 'assign the hConn parameter to our private $hConn variable $hConn = hConn 'assign the rData parameter to our $rData private variable 'these assignments are made so the $ prefixed variables are 'visible to the entire class, not just the constructor routine. $rData = rData 'call our little subroutine to display the title in the form window RefreshTitle 'the ReadData subroutine is used to populate our TableView control ReadData 'resize the window to center on the desktop ME.Move(Int(Rnd(Desktop.W - ME.W)), Int(Rnd((Desktop.H - ME.H))))END 'of the constructor'this subroutine simply updates the window captionPRIVATE SUB RefreshTitle() 'we need a local string variable DIM sTitle AS String 'we will concatenate the connection name to the text for the caption sTitle = ("SQL Query Results ") & " - " & $hConn.Name 'and set the title property to be the string variable value ME.Title = sTitleEND

Subrutin readdata () digunakan untuk mendefinisikan struktur data yang diberikan dalam dari objekhasil untuk kontrol TableView. Hal ini menentukan jumlah field dari obyek hasil dan menyiapkankolom dalam tabel, menempatkan nama kolom (field) yang tepat dan tipe data. Tipe dataditentukan dengan memanggil subrutin lain, WidthFromType () untuk mendapatkan informasitersebut.

Basis QT Library Kontrol TableView sudah usang di Qt Library, yang telah digantikan dengankontrol QTable. Namun, Gambas telah menambahkan kontrol TableView sendiri, sehingga masihdapat digunakan dan kami akan menunjukkan kepada Anda bagaimana hal itu dilakukan.

PRIVATE SUB ReadData() 'this variable is declared but never used, you can comment it out DIM hTable AS Table DIM hField AS ResultField DIM iInd AS Integer 'set the application busy flag to avoid interruptions INC Application.Busy 'reset row count of the TableView control to zero tbvData.Rows.Count = 0 'set the number of columns to be the same number ' as the number of fields in the result object tbvData.Columns.Count = $rData.Fields.Count 'now we will iterate through each field of the result object and

Penterjemah : Agus Rahadian -[ 19 ]

Page 20: Agus Rahadian perbanyak dan edit terjemahan ini tetapi ...staffsite.stimata.ac.id/assets/uploads/files/download/b6f78-gambas... · sistem database yang flat-file dan tidak menggunakan

Terjemahan A Beginner's Guide to Gambas – Revised Edition Chapter 15

'get the name of the field and the data type and set the TableView 'column headings and field type/size as appropriate FOR EACH hField IN $rData.Fields WITH hField 'this is a debug line that was commented out 'PRINT .Name; ": "; .Type; " "; .Length 'this next line sets the column name to be the field name tbvData.Columns[iInd].Text = .Name 'here, the call to WidthFromType is used to determine what data 'type the field is and what the appropriate width should be tbvData.Columns[iInd].Width = WidthFromType(tbvData, .Type, .Length, .Name) END WITH 'increment our index counter INC iInd NEXT 'iteration of result data 'set the number of TableView rows to be the same as the number 'of rows of data in the result object tbvData.Rows.Count = $rData.Count'last thing we do in this subroutine is decrement the busy flagFINALLY DEC Application.Busy'if there were any errors in this subroutine we would show a messageCATCH Message.Error("Cannot exec request." & "\n\n" & Error.Text)END 'of ReadData subroutine

Bit berikutnya kode diaktifkan setiap kali data yang hadir. Event data dari kontrol TableViewdigunakan sebagai driver untuk aktivasi subrutin ini. Ini menyisipkan baris data dari objek hasil kebaris saat ini dan kolom kontrol TableView. Ingatlah bahwa Anda tidak pernah memanggil eventdata secara langsung. Ada dokumentasi yang sangat sedikit tersedia untuk kontrol TableViewsehingga tidak dinyatakan di sini harus dianggap sebagai jawaban definitif untukmenggunakannya. Namun, pendekatan umum untuk menggunakan kontrol TableView adalahuntuk pertama memuat semua data yang akan ditampilkan ke dalam array dan mempersiapkankontrol TableView dengan baris dan kolom seperti yang dilakukan dalam subrutin readdata atas.

Proses sangat mengisi array dan mendefinisikan kolom dengan cara ini memaksa widget yangdigunakan dalam kontrol TableView untuk membuat panggilan internal untuk event data yangbenar-benar yang mengisi sel dengan data dari array Anda. Terserah Anda untuk kode pernyataanpenugasan (s) yang memindahkan data dari objek hasil ke baris dan kolom TableView di manaAnda ingin data yang ditampilkan. Hal penting untuk diingat adalah bahwa Anda harus memilikievent handler, tbvControl_Data (...) di suatu tempat di file kelas Anda untuk melakukan hal ini.Dalam kontrol TableView, data yang segar hanya apa yang terlihat di kontrol. Kontrol dapatmenampilkan sejumlah besar data tanpa memegang salah satu nilai data secara langsung dalampenyimpanan itu sendiri. Itulah array yang digunakan untuk program anda. Meskipun terdengaragak canggung, itu adalah solusi pragmatis yang memungkinkan Gambas untuk menampilkandata dari database dengan cara yang cukup efisien.

PUBLIC SUB tbvData_Data(Row AS Integer, Column AS Integer) 'this gets to the correct row $rData.MoveTo(Row) 'this actually assigns data from the results object to the tableview tbvData.Data.Text = Str($rData[tbvData.Columns[Column].Text])END

Jika formulir tersebut diubah ukurannya oleh pengguna, kita perlu mengubah ukuran kontrol.Subroutine ini akan melakukan trik.

Penterjemah : Agus Rahadian -[ 20 ]

Page 21: Agus Rahadian perbanyak dan edit terjemahan ini tetapi ...staffsite.stimata.ac.id/assets/uploads/files/download/b6f78-gambas... · sistem database yang flat-file dan tidak menggunakan

Terjemahan A Beginner's Guide to Gambas – Revised Edition Chapter 15

PUBLIC SUB Form_Resize() tbvData.Resize(ME.ClientW, ME.ClientH)END

Ketika data sedang dibaca dari obyek hasil, subrutin ini disebut untuk menentukan apa jenis datauntuk setiap bidang berturut-turut. Sifat dari kelas Field dikirimkan sebagai parameter ke fungsi inidan digunakan dalam statemen SELECT. Hal ini memastikan data yang ditempatkan di sel-selindividual dari kontrol TableView tidak disingkat dan akan ditampilkan dengan benar, terlepas daripengaturan font properti yang didirikan oleh kontrol TableView sendiri.

PRIVATE FUNCTION WidthFromType(hCtrl AS control, iType AS Integer, iLength AS Integer, sTitle ASString) AS Integer DIM iWidth AS Integer SELECT CASE iType CASE gb.Boolean iWidth = hCtrl.Font.Width(Str(FALSE)) + 32 CASE gb.Integer iWidth = hCtrl.Font.Width("1234567890") + 16 CASE gb.Float iWidth = hCtrl.Font.Width(CStr(Pi) & "E+999") + 16 CASE gb.Date iWidth = hCtrl.Font.Width(Str(Now)) + 16 CASE gb.String IF iLength = 0 THEN iLength = 255 iLength = Min(32, iLength) iWidth = hCtrl.Font.Width("X") * iLength + 16 END SELECT iWidth = Max(iWidth, hCtrl.Font.Width(sTitle) + 8) RETURN iWidthEND

Akhirnya, jika pengguna mengklik pada "x" di sudut kanan atas jendela untuk menutup program,kami datang ke rutinitas, dan hal dekat ke bawah.

PUBLIC SUB Form_Close() ME.CloseEND

Ketika Anda menjalankan program Contoh database, hal itu mewajibkan anda memiliki sistemdatabase seperti PostgreSQL atau MySQL diinstal pada sistem Anda. Anda harus memiliki accountpengguna dan password untuk menggunakan sistem database. Mengingat peringatan tersebut,jalankan program dan login ke dalam database. Anda dapat bermain-main, membuat dan mengisitabel percobaan, dan membuat pertanyaan dengan program. Pada titik ini, Anda telah belajarsemua dasar-dasar untuk menghubungkan dan menggunakan database di Gambas. Dalam babberikutnya, kita akan membahas hal-hal penting untuk membuat program anda tersedia bagipengguna secara global, proses yang disebut internasionalisasi (I18N).

Penterjemah : Agus Rahadian -[ 21 ]