Tahukah Anda, bahwa posting ini telah dipindahkan ke Tutorial Membuat Koneksi Database Menggunakan Delphi, Zeos & MySQL di website baru kami? Komentar di blog ini tidak akan kami layani lagi. Silahkan bertanya atau tinggalkan komentar pada link di atas. Viva Delphier!
Setelah tutorial koneksi database dengan Delphi & MySQL, kini kita akan mengikuti sebuah tutorial membuat koneksi database dengan Delphi, MySQL dan Zeos Database Object. Kita tahu, Zeos tidak hanya untuk MySQL, tapi juga Interbase, Firebird, SQLite dan lainnya. Namun kita batasi saja pada MySQL, ya. Mengingat ruang dan yang paling penting, MySQL adalah database open source terbaik dan paling populer saat ini.
Instalasi Zeos DBO v.7.0.0 pada Delphi 2009 dan Delphi 2010 (Unicode) dapat dilihat di : https://jokorb.wordpress.com/2011/01/03/install-zeos-dbo-7-0-0-alpha-di-delphi-2010/
Kita awali dengan spesifikasi software yang saya gunakan dalam tutorial ini. Saya menggunakan Delphi 6, Zeos DBO 6.6.3-Stable dan MySQL 5 Comunnity Server.
Saya asumsikan Anda sudah memiliki MySQl yang terinstall di PC Anda. Jika belum, silahkan download MySQL 5 Comunnity Server. Langkah-langkah di sini mungkin bisa membantu Anda menginstall MySQL. Untuk Zeos, silhakan kunjungi website development Zeos untuk mendownload. Zeos versi 6.6.3-stable yang telah diperkecil – dengan membuang resource yang tidak diperlukan – bisa Anda download di akhir tulisan ini.
OK. Pertama, kita buat database contoh sebuah tabel pelanggan di dalamnya untuk kita gunakan dalam tutorial ini. Masuklah ke command prompt dan jalankan mysql client. Saya menggunakan perintah-perintah berikut:
### jokorb adalah user name saya di MySQL. Sesuaikan punya Anda.###
C:\Documents and Settings\user>mysql -u jokorb -p
Enter password: ********
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 10
Server version: 5.1.22-rc-community MySQL Community Server (GPL)
Type ‘help;’ or ‘\h’ for help. Type ‘\c’ to clear the buffer.
mysql> create database contoh;
Query OK, 1 row affected (0.00 sec)mysql> use contoh;
Database changed
mysql> create table pelanggan(
-> id int(6) not null auto_increment,
-> nama varchar(30) not null default ‘anonymous’,
-> alamat varchar(50),
-> telepon varchar(15),
-> primary key (id)
-> );
Query OK, 0 rows affected (0.09 sec)
mysql> exit;
Bye
C:\Documents and Settings\user>exit
Setelah mengetik exit yang terakhir di command prompt, jendela command prompt akan ditutup. Kita telah punya sebuah database contoh dan sebuah tabel pelanggan di dalamnya. Kita lanjut dengan instalasi Zeos DBO di Delphi.
Instalasi Zeos Database Object
- Ekstrak file ZEOSDBO-6.6.3-stable.zip hasil download ke sebuah folder, taruhlah, di C:\ZEOSDBO-6.6.3-stable.
- Masuk ke dalam folder tersebut. Cek apakah folder Packages\DelphiX\Build sudah ada. DelphiX berarti Delphi6, Delphi7 atau versi lainnya sesuai versi Delphi yang akan Anda gunakan. Berhubung saya menggunakan Delphi 6, maka folder yang harus saya cek adalah Packages\Delphi6\Build. Jika folder Build belum ada, buatlah dulu.
- Jalankan Delphi. Dari Delphi, buka file ZeosDbo.bpg dari folder Packages\DelphiX. Kompile semua project dari menu Project>Compile All. Berikut Binary Package yang harus terkompilasi:
- Sudah? Close All. Tambahkan path folder C:\ZEOSDBO-6.6.3-stable\Packages\DelphiX\Build ke Delphi Library Path. Caranya masuk ke menu Tools>Environment Options. Pada dialog yang muncul, klik tab Library, dan klik tombol elipsis di samping kanan combobox Library path. Dialog Directories akan muncul.
Klik tombol elipsis yang dilingkari, pilih folder C:\ZEOSDBO-6.6.3-stable\Packages\DelphiX\Build di mana Anda meletakkan Zeos DBO hasil kompilasi. Tombol Add akan menjadi aktif. Klik Tombol Add, kemudian klik OK. Kembali ke dialog Environment Options. Klik OK lagi.
- Tinggal menginstal komponen-komponen akses data di Component Palette. Buka file ZComponentDesign.dpk dalam folder C:\ZEOSDBO-6.6.3-stable\Packages\DelphiX. Jika file ini tidak Anda temukan, pilih saja file ZComponent.dpk. Klik tombol Install. Jika tak ada error melintang, Anda telah mempunyai Zeos DBO terinstall di Component Palette Delphi Anda. Amin 😉
Contoh Aplikasi Menggunakan Zeos Database Object
Tentu saja bagian ini ga’ boleh lewat. Langsung saja.
- Buat sebuah aplikasi baru.
- Tambahkan sebuah TZConnection, TZTable dari page Zeos Access ke form.
Tambahkan juga sebuah TDataSource dari page Data Access. Juga sebuah TDBGrid dan sebuah TDBNavigator, keduanya dari page Data Controls. - Atur tata letak komponen-komponen agar enak dilihat. Saya membuatnya seperti ini:
- Atur setting koneksi TZConnection. Protocol diset ke MySQL. Ada beberapa pilihan, tapi buat jaga-jaga dengan versi MySQL yang berbeda, kita gunakan MySQL thok saja.
- Atur juga properti TZConnection yang lain seperti gambar berikut:
- Jika sudah, set properti Connected ke True. Kini atur proprerti connection milik TZTable ke ZConnection1. Atur properti TableName menjadi pelanggan. Set properti Active ke True. Lanjutkan dengan mengeset properti DataSet milik DataSource1 menjadi ZTable1. Terakhir, atur properti DataSource milik DBNavigator1 dan DBGrid1 menjadi DataSource1.
- Jika tidak ada error, aplikasi Anda sudah terkoneksi dengan MySQL server via Zeos DBO. Tekan F9 Untuk menjalankan aplikasi Anda. Cobalah menginputkan beberapa data.
Download
Download Zeos DBO 6.6.3-stable-packed-down
Download Source code tutorial – Link Alternatif (File Zip)
Zeos DBO versi 7.0.0 untuk Delphi 2009/2010 dapat didownload di sini. Cara instalasi dan penggunaannya sama saja.
Seperti biasa, file-file hasil download harus diganti ekstensinya dari .ppt menjadi .zip. Dan yang tidak kalah penting, scan dulu file-file hasil ekstraksi sebelum Anda gunakan.
Referensi
Berikut beberapa alamat web yang bisa Anda jadikan referensi terkait dengan tutorial ini:
- Tip-Tip Koneksi Delphi & MySQL oleh Euis Marlina (Adeisti)
- Zeos Di Delphi
- Oracle 10g & MySQL dengan Delphi
- Maseko’s MySQL Tutorials
- Delphi vs. MySQL on Diskusiweb
- Tutorial instalasi Zeos pada Delphi
oleh Euis Marlina (adeisti.blogspot.com)
Selamat Mencoba. Untuk Mba’ Euis Marlina, thanks berat atas postingnya.
ga bisa di ekstrak boss……
Terima kasih infonya. saya baru mulai pake postgres dan zeos.
Sekalian nanya nih, emang cara penulisan syntax di sql nya mesti pake tanda kutip ya untuk nama tabel, nama field baik untuk insert, update dan delete?
Buat Gaptek_club:
Bisa Boss….
Ganti dulu tuh ekstensi filenya dari ppt ke zip.
Buat Yohanes:
Gak juga kok. Kalau PostgreeSQL punya aturan sendiri yang mesti pake tanda petik, ya, saya juga baru dengar. Kebanyakan itu opsional kalau dalam nama tabel dsb. ada spasi.
mas,mau tanya nich,,database ku waktu tak akses pada komputer client kug muncul tulisan gini ya ” SQL Error: Can’t connect to MySQL server on ‘127.0.0.1’
padahal pada ZConnection1 bagian host name udah tak isi IP Address server.apa ada bagian2 lain yang harus disetting ya mas???
tolong bantuannya ya mas…
Periksa Firewall di komputer server. Pastikan MySQL Server (dan port 3306) telah dizinkan oleh Firewall untuk diakses dari komputer lain.
terima kasih bozz…oy mau tanya kalo prosedur ngopy file pada delphi gimana ya?.contohnya gini: misalkan aku punya file “a”, trus ketika program aplikasi tak run,maka secara ototmatis file “a” itu ngopy ke drive sesuai dengan setting pada program aplikasi yang udah aku buat…
terima kasih atas tutorialnya mas,,,sekarang database ku di server udah connect ke client…semoga sukses selalu buat ms joko..
mau tanya neh….
kalau misalnya, ada 2 user yang berbeda, meng-edit record yang sama, akan terjadi error pada saat penyimpanan data.
apa yang harus dilakukan yah?
tanpa harus disconnect zconnection nya.
help me plz…..
thx
selain pake zeos ada lagi ga boss koneksi ke mysql yg gampangan buat pemula sperti saya ini?
Yohana, Server databasenya pake apa? Hampir semua RDBMS baik yang lokal maupn yang n-tier sudah mendukung konsep locking dan transaksi. MySQL, MS Access, secara default menyediakan mekanisme locking yang memproteksi sebuah record diedit bersamaan. Caranya dengan mencatat sebuah perubahan di penyimpanan sementara (tergantung locking-method) saat user lain melakukan perubahan. Perubahan kedua baru akan dilakukan ke record sesungguhnya saat yang pertama selesai.
Untuk menjamin integritas data, opsi transaksi bisa dipertimbangkan, sehingga kolisi (tabrakan perubahan data) bisa diminimalkan.
Untuk database BDE bawaan Delphi, file PDOXUSRS.NET di drive C:\ digunakan untuk tujuan locking, meskipun sudah tidak direkomendasikan lagi penggunaanya.
gaptek_club,
Menurut saya, ZEOS adalah yang termudah, kecuali proses instalasinya. Anda bisa mencoba MyDAC (DAC For MySQL) dan MySQLDAC. Websitenya saya lupa, silahkan googling dulu dah :-). DBExpress tentu saja jangan dilupakan, hanyasanya, dukungan versi MySQL kadang membingungkan. Untuk penggunaan DBExpress + Delphi + MySQL, Anda bisa cek di sini.
Trims atas komentarnya…
Salam.
Ada yg tau gimana cara panggil fungsi di mysql dgn menggunakan zeos pada delphi??
Pake TZStroredProc Boss 🙂 Tingal setting koneksinya dan beberapa properti, jadi….
aku pake db firebird dan zeos utk koneksinya ke delphi.
cm, biasanya klo terjadi lock kya gitu, kita kan tinggal refresh zquery nya. ini koq gak bisa yah? harus disconnect dl zconnectionnya baru bs refresh data.
pny ym gak?
plz add me: johana_tiro
i need ur help.
thx a lot
Allow cmuanyanya..
Critanya aku simpan server database nya di kompi1, pake wamp v2.
trus diakses pake zeos di kompi 2(satu jaringan),kok gk bisa ya??
ada tulisan eror +- “SQL error : Host xxxx not allowed to connect to this MYSQL server”
Mohon pencerahan para sesepuh…
Silahkan cek apakah MySQL Server mengijinkan akses dari kompi2? Defaultnya cuma localhost. Selain localhost, hanya bisa dengan akun ROOT dan password .
Silahkan cek di database mysql, tabel users.
HTH dan salam kenal.
—————————————–
Untuk Yohana, saya ga’ coba Zeos dengan FB. Jadi belum bisa saya jawab dengan pasti. Kalau ZQuery.Requery() ga bisa juga? Atau ZQuery.ReOpen()?
tolong kasi tau contoh program delphi menggunakan crystal report donk sekalian contoh programnya
Mohon maaf sebelumnya, Mas Izal. Beberapa saat lalu saya pernah ditanya yang mirip, jadi jawabannya sama: Saya belum pernah pake Crystal Report di Delphi, juga development tool lainnya.
Tapi berikut link yang mungkin bisa membantu Anda:
Crystal Report Tutorial PDF.
Trims, Mas. Blognya bagus juga. Kebetulan saya juga Delphi user. Oh ya, Mas. Kalau boleh tanya, gimana caranya bikin database jaringan di MySQL? Soalnya saya bingung cari record lock-nya kok nggak ada, padahal di foxpro ada? apa mesti pakai Lock Tables ya?
Trims.
MySQL sudah otomatis lock. FoxPro masih menggunakan metode locking konvensional, menggunakan metode file-sharing, sedang MySQL sudah lebih advanced dan selalu berbentuk client-server, kecuali untuk kasus-kasus tertentu, misalnya untuk embedded version.
🙂
MySQL menggunakan table-level locking untuk tabel-tabel bertipe ISAM, MyISAM dan Memory Tables atau HEAP Tables. Untuk tipe DBD, MySQL menggunakan page-level locking. Untuk locking per record (row-level locking), MySQL mengaplikasikannya pada tipe table InnoDB, yang merupakan jenis terbaik untuk transaksi skala besar dan frequensi update data yang tinggi. Tentu saja dengan beban pada komputer mesin server MySQL yang lebih besar. Masing-masing dengan lebih-kurangnya lah 🙂
Ass…Kum Salam kenal Semuanya.
Mas, gimana caranya membuat aplikasi client server menggunakan delphi & mysql klo ada modulnya emaillin ke saya donk. Jadi Gini mas aplikasinya bisa dipake bareng2 dlm waktu yg bersamaan. Soalnya Saya butuh buat bikin Laporan KP & yang nantinya bisa diteruskan ke Skripsi
Tks
Soal modul sih, ga ada 😦
Tapi untuk software kayak yang dimaksud, contoh-contoh yang tersedia di internet sangat banyak. Silhakan di sini. Contoh yang terdapat di sini juga sudah bisa digunakan, tinggal dikembangkan saja :-).
Dan ya, FYI, semua software database client-server dengan database MySQL adalah multi-user alias bisa dipake banyak user secara bersamaan.
Demikian, semoga membantu. Dan salam kenal 🙂
Tks Infonya
Oia saya mo nanya lagi neh
Saya instal komponen zoes di PC yang satu sukses terinstall & berjalan dgn mulus trus saya instal lagi di PC yang satu lagi dgn step yang sama kok error trus ya.
Mas aku pengen tanya…mohon dibantu ya..
1. saya koneksi database mysql pakek zeos, yang terdiri banyak form, dan zconnectionnya aku taruh di menu utama, ketika zconnectionya aku putus koneksinya “zconnection.disconnect” dan saya masuk ke form yang lain dan terkoneksi databasenya dengan zconnection yang ada di menu utama, kok masih aktifya..walaupun udah disconnect. apa karna lain form ya..”koneksi tabel yang lain melalui zconnection yang ada di menu” ex. zquery.connection:=fmenu.zconnection
2. gimana mas cara integrasi file help chm di delphi..
Terima kasih atas bantuanya.
Bila Dataset diaktifkan sementara ZConnection sedang tidak aktif, ZConnection akan diaktifkan secara otomatis oleh Datasetnya.
Tentang penggunaan/integrasi file help dengan aplikasi Delphi, saya sudah menulisnya di sini.
bos2..
mau tanya kalo cara koneksi dari postgreSQL menggunakan delphi 7 bagaimana yah?
tolong dibimbing seperti koneksi dari mySQL ke delphi…
thx b 4…
Mohon maaf bos, saya ga pake PostgreeSQL, jadi untuk tutorialnya mungkin ga bisa sekarang. Tapi pada dasarnya, koneksinya sama saja dengan MySQL, yang berbeda (signifikan), hanyalah setting koneksinya:
1. Pada ZEOS, perbedaan terletak pada protokol koneksi yang dipake, yang lainnya, seperti host, username, password dan database, pada dasarnya sama saja.
2. Pada DBExpress, yang berbeda adalah setting koneksi saat Anda membuat koneksi baru, yaitu tipe koneksi, yang lainnya beda-beda tipis saja 🙂
Sorry tutorialnya belum bisa sekarang….
Jumpa lagi Mas Joko di Thread yang berbeda…
Mudah-mudahan ngga bosen, saya yakin Mas Joko semakin bertambah ilmunya dengan menjawab semua pertanyaan di Forum yang Mas buat, bahkan sampai di kirimi e-mail secara khusus untuk menjawab pertanyaan yang sekiranya panjang…
Mau tanya tentang metode LOCKING database MySQL. Udah otomatis atau perlu di konfigurasi manual (atau request ke Server MySQL agar melakukan LOCKING). Locking kan biasanya diterapkan hanya pada satu record pada sebuah tabel. Bagaimana jika memiliki relasi antar tabel??? Apakah semua tabel-tabel yang saling berrelasi di-locking sesuai dengan record yang sedang aktif??? NNNN, kalo boleh tau MySQL menerapkan method lockingnya apa??? Thanks….
Saya dulu dapet kuliahannya, cuman lupa… (Maklum, saya anak Matematik, bukan ILKOMP)…
RAVE
Apakah bisa mendesain RAVE saat run time… Karena koneksi ke database juga dilakukan saat run time..
Apakah Ada Quick Report yang stabil??? Saya pakai bawaan Delphi 7. Koq banyak banget BUGS-nya, terutama FONT dan tampilan… Setting Printer juga ngga nyambung….
Makasih atas jawabannya…
MySQL otomatis melakukan locking saat terjadi update. Teramasuk untuk multitable. Tapi untuk yang multitable (relasi) update, sebaiknya manfaatkan transaksi. Silahkan kunjungi MySQL website untuk info lebih lengkap.
Setau saya, Transaksi optimal pada MySQL jika Anda menggunakan tipe InnoDB untuk tabel-tabelnya. MySQL menggunakan row dan table, serta isolation level locking. Tergantung tipe tabel. Untuk MyISAM dan in-memory table, MySQL mengunakan table-level, sedang InnoDB, MySQL menggunakan row-level locking.
Rave sudah lama saya tidak gunakan, soalnya ga fokus ke database sih. QuickReport memang mengandung BUG. Rave juga, kadang ada halaman yang ga keprint. Baiknya sih pake FreeReport/FastReport.
Maksud Rave disesain saat runtime bagaimana? Koneksi DB bisa kok saat design time. Ntar kalau sudah jadi, baru dimatikan lagi buat nanti runtime koneksinya.
MySQL otomatis melakukan locking saat terjadi update. Teramasuk untuk multitable. Tapi untuk yang multitable (relasi) update, sebaiknya manfaatkan transaksi. Silahkan kunjungi MySQL website untuk info lebih lengkap.
Setau saya, Transaksi optimal pada MySQL jika Anda menggunakan tipe InnoDB untuk tabel-tabelnya. MySQL menggunakan row dan table, serta isolation level locking. Tergantung tipe tabel. Untuk MyISAM dan in-memory table, MySQL mengunakan table-level, sedang InnoDB, MySQL menggunakan row-level locking.
Rave sudah lama saya tidak gunakan, soalnya ga fokus ke database sih. QuickReport memang mengandung BUG. Rave juga, kadang ada halaman yang ga keprint. Baiknya sih pake FreeReport/FastReport.
Maksud Rave disesain saat runtime bagaimana? Koneksi DB bisa kok saat design time. Ntar kalau sudah jadi, baru dimatikan lagi buat nanti runtime koneksinya.
Saya mencium sesuatu yang memusingkan… (ABOUT InnoDB dan Transaksi…)
Rave desain saat runtime?? Maksud saya, di sana ada semacam QRDBText (kalo di Quick report), saya bisa mengatur Field-nya saat run time. Tapi, karena di rave disimpan di file terpisah (.rav) saya tidak bisa mengatur layaknya sebuah variabel…
About back up??
mau nanya?
komponen zeos bisa dihubungkan dengan fast report?
gimana caranya? thanks
aku coba koneksi ko kluar ini ya…
ERROR 1251: Client does not support authentication protocol requested by server; consider upgrading MySQL client
gimana caranya om??biar g eror lagi…
thanks..
Penggunaan Server MySQL yang ebih baru dari yang didukung client (dalam hal ini LibMySQL.dll yang dipakai oleh Delphi) biasanya akan memunculkan pesan seperti ini, terutama saat login.
Anda dapat menggunakan LibMySQL.dll yang terdapat dalam folder %MySQLServerFolder%\Bin, dikopi ke %Windows%\System32 untuk menjalan program sebagai RTL, dan kopi juga ke %DelphiFolder%\Bin untuk keperluan desain pada Delphi.
Penanganan lebih lanjut dapat Anda peroleh di http://lists.mysql.com/mysql/179529
mengapa ketika saya menggunakan ztable1 dan saya aktifkan disana slalu keluar pesan error:
Range check error
mhon bantuannya..
Untuk permasalahan Range Check Error, menurut developer ZEOS DBO, merupakan bug yang pada versi 6.6.3 (yang saya gunakan dalam tutorial ini) telah diperbaiki.
Bila Anda menggunakan versi yang lebih lama, cobalah mengupgrade dari dengan versi 6.6.3 atau yang lebih baru.
saya menggunakan zeos terbaru
ZEOSDBO-6.6.4-stable
dan kedua pesan eror di atas (yg pernah saya tulis seblumnya) ada…kalo yg 6.6.3 seperti yg mas joko pakai…saia belum mencobanya…
@BEJITALUN:
Bagaimana dengan LibmySQL? Perlu Anda informasikan versi Delphi, MySQL Server dan versi ZEOS. Jika ZEOS sudah OK, coba cek lagi MYSQL servernya versi berapa. Saya tidak ingat pasti, tapi ada versi MySQL yang tidak disupport oleh Delphi versi tertentu. Zeos bisa membantu mengatasi perbedaan ini, tapi pastikan LibMYSQL.dll yang digunakan oleh ZEOS maupun delphi dan juga saat runtime nanti benar-benar sesuai dengan versi MySQL.
Saya sarankan, gunakan LibMYSQL yang terdapat pada folder %MYSQL_FOLDER%\Bin.
halow…
saya jg baru belajar koneksi mysql dg zeos 6.6.1 beta dan delphi 6 …saya udah mencoba buat aplikasi sederhana sama sperti yg ada di ‘Contoh Aplikasi Menggunakan Zeos Database Object’ yg jokorb buat….tp pada saat di F9
muncul 3 baris error yaitu:
1.[Warning] ZDbcConnection.pas(763): Return value of function ‘TZAbstractConnection.PingServer’ might be undefined
2.[Error] ZPlainMySqlDriver.pas(988): Undeclared identifier: ‘ValueFromIndex’
3.[Fatal Error] ZDbcMySql.pas(64): Could not compile used unit ‘ZPlainMySqlDriver.pas’
ada yg bisa bantu gak salahnya dimana..?
bingung 😦
saya udah nambahin semua file dll yang ada di foler master zeos \ lib\mysql\
mau tanya gan,,,,cara koneksikan zeos ke mysql hosting bagai mana ya gan,,saya coba2 ga bisa2
@PCDWI:
Ada unit yang diperlukan oleh Aplikasi Anda tapi tidak ditemukan oleh Delphi. COba perhatikan lagi langkah-langkah instalasinya, terutama pada library path yang harus disertakan (Langkah 4.). Bila Anda kurang yakin, tambahkan saja semua subfolder dalam folder ZEOS ke Library Path.
Bila masih error, download lagi ZEOS DBO yang baru untuk memastikan tidak ada file yang hilang/korup.
Trimakasih untuk jawabannya…kalo mau install ulang, gmana dg component zeos yg udah ada di component pallete?
apakah dibiarkan saja …? lalu melakukan langkah instalasi dari pertama lg?…terimakasih
halow saya bertanya lagi yah….
saya bingung langkah ke 4 yang menyatakan
1.”close all” berarti menutup delphi juga ya…?
2.”Klik tombol elipsis yang dilingkari, pilih folder C:\ZEOSDBO-6.6.3-stable\Packages\DelphiX\Build di mana Anda meletakkan Zeos DBO hasil kompilasi.”
hasil kompilasi maksudnya yg mana ya..?
@pcdwi:
Instalasi ulang sebaiknya mengikuti petunjuk upgrade daari ZEOS developer (biasanya disertakan dalam paket download).
Ini untuk memudahkan, sebab, ada upgrade yang tidak menambahkan folder baru dan komponen baru, dan ada juga yang menyertakan komponen baru/folder baru.
Untuk menghapus komponen di komponen palette, coba lewat menu COmponent>Configure Packages, dan hapus komponen-komponen milik Zeos.
1. Close All berarti klik menu “FILE>CLOSE ALL” 🙂
2. Hasul kompilasi maksudnya hasil kompilasi package (file-file *.BPL). Bila langkah 3. telah dilakukan dengan benar tanpa error, dalam folder “C:\ZEOSDBO-6.6.3-stable\Packages\DelphiX\Build” akan tersimpan file-file *.BPL hasil kompilasi pada langlah 3.
Demikian, HTH.
wah…wah…wah…
Alternatif buat delphier ada disini ..
mantab..mantab..mantab..
dear
thanks untuk jawabannya…saya udah nyobain lg udah berhasil menginstall…lalu sy coba buat aplikasi menyertakan zconnection,ztable,datasourcer,dbgrid…pd zconection udah bisa conek tp saat di f9…
muncul error…wah jd mkn pusing…
[Fatal Error] Unit1.pas(7): Unit ZConnection was compiled with a different version of ZDbcIntfs.IZConnection
saya skrg pake zeos 6.6.4 stable,mysql server 5,delphi 6..
terimakasih sblmnya…
Salam sejahtera bos..
saya mau tanya . Pertanyaan saya sama dengan
Endri Wiguna
ketika hostnamenya saya ganti dengan ip address dan kebetulan saya memakai wamp server terdapat tulisan eror +- “SQL error : Host xxxx not allowed to connect to this MYSQL server”
Mohon pencerahan para sesepuh…
Anda harus mensetting nama user yang Anda gunakan untuk koneksi.
misalkan usernya “contoh”, Anda harus menggrant akses untuk user contoh pada host “localhost’ dan “%” (sembarang host).
Navicat MySQL atau SQLFront for MySQL dapat membantu. Atau bila tidak, PHPMyAdmin bawaan WAMP juga bisa membantu Anda melakukan granting akses ini. 🙂
hai bang joko..jumpa lagi..
gini mau berbagi aja,sy bingung setelah berhasil menginstall zeos ke component pallete delphi,sya coba buat aplikasi spt yg anda buat tp saat sya jalankan muncul error.
[Fatal Error] ZComponent.inc(54): File not found: ‘..\Zeos.inc’
sya udah copy file tsb ke foler tmp project sy, tp tetap muncul terus..sya sblmnya udh tambah file2 dari folder src tp stuck tetap di error di atas..
sbnarnya sy salah dimananya yah … ??
bisa tolong dibantu gak..ato bang joko tau situs lain yg bisa jadi rujukan..? thanks
Saya donwload ZeosDBO versi 6.6.4 itu di dalam file .zip tidak ada folder lib yang untuk dicopykan di C:\Windows\System32 lalu itu gimana? Karena DB yang saya gunakan yaitu MySQL 5.x
Ga ada folder lib yang harus dikopi ke System32. Coba baca lg lebih seksama 🙂
mw tanat klo buat form login ahar dapat nyambung dengan database gimana ya??
misalnya:
id :
password :
,login,
lha agar bisa konek ke table gimana ya??
gimana cara merefresh Ztabel menggunakan thread, sering muncul acces violation
Karena update memakai ZQuery. penegn langsung tau perubahannya di DBGrid otomatis Ztable mesti di refresh (ZTable->datasource->dBGrig)
kendalanya sring muncul “acces violation…..”
Trime kasih
method (procedure & function) pada VCL tidak dapat diakses secara langsung dari dalam thread. Harus lewat pemanggilan method Synchronize(nama_method).
Silahkan dibaca lagi artkel-artikel mengenai VCL Access within a thread.
mas saya ambil artikelnya ya…..terima kasih sebelumnya….dan sukses selalu untuk anda dan jangan berhenti untuk menulis…saya mendukungmu…..
mas tolong dong gimana tuh cara koneksi database yang bertype paradox ama program delphi yang saya buat ???plis dong beri pencerahan ???
Anda bisa lihat tutorial mengenai interface Delphi ke database paradox di sini:
https://jokorb.wordpress.com/2008/09/09/membuat-form-interface-database/
mas,ap file mysql.dll harus disertakan di aplikasi yang kita buat!
Yang benar adalah file LibMYSQL.dll, harus disertakan satu folder dengan file exe aplikasi yang kita buat. Atau, diletakkan di folder %WINDOWS%\System32 biar lebih aman.
🙂
mas saya mau nanya nih
saya coba mau koneksi db dg zeos
setelah properti2 pendukung tuk koneksi ke db saya isi
trus saya isi properti connection menjadi true keluar pesan
dynamic library libmysqlclient.so not found
itu knapa ya?
mohon bantuannya
terima kasih
Sy pake ADO untk koneksi ke MySQL dg driver MySQL ODBC 3.51 Driver. Sy punya SQL Script, sy load, kemudian dimasukkan ke ADOQuery (dgn bbrp teknik). Nah, jika ada baris perintah untk INSERT sementara terjadi duplikasi Primary Key, maka Program menampilkan pesan kesalahan bhw tlh trjadi duplikasi, lalu program keluar. Bgmn caranya agar program tdk langsung keluar, tetapi mengeksekusi perintah SQL brktnya. Sy sdh pake try…finally g ngebantu. Please?
@Cecep: Loh? kok libmysqlclient.so?
itu kan hanya untuk Linux-based Delphi (Kylix)? Yang under Windows, Zeos hanya memerlukan LibMySQL.dll…
Coba baca komen2 yang lebih awal di atas, tentang masalah tidak ditemukannya LibMySQL.dll
@Roni:
1. Primary Keynya Apa? Bila int(x) dengan opsi Auto_Increment, maka nilai field ini pada script SQL sebaiknya dihilangkan untuk menghindari duplikasi.
2. Error Trapping pada Delphi , ya, Try..Finally dan try.. Except.
Sejauh info di komen Anda, saya gak bisa mendiskusikan lebih lanjut. Kecuali Anda menyertakan potongan skripnya, untuk saya lihat terlebih dulu….
Permasalahan sebenarnya, apakah Ada suatu prosedur pada Delphi yang bisa menangkap error yang diakibatkan oleh kesalahan pada Query. Istilahnya, setelah terjadi error langsung continue ke perintah query berikutnya. Biasanya kalo ada eror seperti itu, Delphi langsung break dan terminated the application. Ini saya sertakan potongan scriptnya:
var
SQLScript : string;
//script SQL diload ke dalam memo
procedure TForm1.LoadSQLScript1Click(Sender: TObject);
begin
if OpenDialog1.Execute then begin
SQLScript := OpenDialog1.FileName;
Memo1.Clear;
Memo1.Lines.LoadFromFile(SQLScript);
end else begin
SQLScript := EmptyStr;
Memo1.Clear;
end;
end;
//Saya gunakan istilah InjectData (merge data, dari external tabel ke tabel yang sudah ada)
procedure TForm1.InjectData1Click(Sender: TObject);
var
i : integer;
s : string;
begin
if Memo1.Lines.Count > 0 then begin
i := 0;
repeat
s := ”;
//salin script hanya yang merupakan perintah
//CREATE atau INSERT
repeat
s := Memo1.Lines[i];
inc(i);
until (Pos(‘CREATE’,s) 0) OR (Pos(‘INTO’,s) 0);
dec(i);
s := ”;
repeat
s := s + Memo1.Lines[i];
inc(i);
until (copy(s,length(s),1) = ”) OR (copy(s,length(s),1) = ‘;’) OR (i > Memo1.Lines.Count) OR (copy(s,length(s),2) = ‘-‘);
if (Pos(‘CREATE’,s) 0) OR (Pos(‘INTO’,s) 0) then begin
ADOQuery1.Close;
ADOQuery1.SQL.Clear;
ADOQuery1.SQL.Add(s);
ADOQuery1.ExecSQL; //Disini, kalau s merupakan
//perintah INSERT dan terjadi
//duplikasi key, maka delphi
//akan mem-break program
//Saya inginnya, Delphi tidak
//melakukan apa-apa, cukup
//perintah tersebut tidak diekse
//kusi. Jadi langsung mengerja
//kan perintah berikutnya
//(pakai repeat).
inc(i);
until i > Memo1.Lines.Count;
end else
ShowMessage(‘There”s no SQL Script loaded.’);
end;
Tengkyu…(maaf, saya posting comment di atas pakai HP, jadi ngga mungkin nulisin script yang panjang gitu…)
Sory, ada yg ketinggalan. Shrsnya stlh ADOQuery1.ExecSQL; ditambahkan end; ditggu jwbnya.
Aku dh coba cara lain, dan cukup brhasil. Kira2 langkahnya kyk gn:
1. Load SQL Script. Sisipkan perintah ‘DROP DATABASE IF EXISTS TEMP; CREATE DATABASE TEMP;USE TEMP’ dibagian atas script, load selain perintah CREATE DATABASE.
2. Buat koneksi k Database TEMP, tampilkan tabel pada combobox.
3. Setip ComboBox dipilih, tampilkan isi tabel pd DBGrid melalui DataSource
4. Untk menginject data dr tabel yg dipilih trlbh dahulu dibaca struktur tabel, dan temukan primary key.
5. Bandingkan setiap record dgn tabel target. Dgn memanfaatkan primary key tadi, bs di cek apakah data pd record aktif ada pada tabel target? Jika tdk ada, susun script SQL untk meng INSERT data (perhatikan struktur tabel)
Ada yg punya solusi lbh jitu?
Gak usah pake combobox, dbgrid atau Control lainnya, lambat.
ADOConnection1.GetTableNames(); -> Tabel
ADOConnection1.GetFieldNames(); -> Fields
Untuk pemanfaatan primary key buat deteksi data ada atau tidak di tabel target, menurut saya sudah cocok. Kalau primary key sudah ada, mungkin perlu perintah UPDATE sebagai pengganti INSERT buat mengedit data.
Yang jadi pertimbangan, apakah perlu mengecek primary key, sementara ada script DROP DATABASE dan CREATE DATABASE? Otomatis database yg baru dibuat kosong dan primary key tidak ada.
Sebagai catatan, untuk mempermudah, buat membackup data sebaiknya jangan pake SQL script, tapi dibuat tool sendiri, misalnya pake TClientDataSet, agar format data lebih terstruktur dan lebih stabil.
Wah klo pake drop database ntar smua tabel hilang? Pdhl cm tabel trtntu yg dipilih dr ComboBox (ADOConnection1.GetTableName(ComboBox1.Items). Jd mnrt sy tetep perlu cek primary key. Kasusnya gn, SQL Script diperoleh dr hsl export data yg diinput, tp tdk lgsg trhubung dgn kmptr server. Sy backupnya pakai mysqldump, jd memanfaatkan ShellExecute
Ntar dech aq kirimin script lengkapnya. Maklum, lg pake HP.
iya dong, pake drop table lebih ok 🙂
Berarti bukan merge atau InjectDB donk…? Kalo pake Drop Tables, malah jadinya replace data donk.. Trus data yang udah ada dikemanain?? Ini script punya saya:
//——————————————————————1st
unit UnitImportNew;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, Grids, DBGrids, DB, StdCtrls, ShellAPI, ADODB;
type
TfmImportNew = class(TForm)
GroupBox1: TGroupBox;
Button1: TButton;
Edit1: TEdit;
GroupBox2: TGroupBox;
Label1: TLabel;
ComboBox1: TComboBox;
DataSource1: TDataSource;
DBGrid1: TDBGrid;
Button2: TButton;
Button3: TButton;
OpenDialog1: TOpenDialog;
ADOConnection1: TADOConnection;
ADOTable1: TADOTable;
tb_target: TADOTable;
ADOQuery1: TADOQuery;
Button4: TButton;
procedure FormCreate(Sender: TObject);
procedure ComboBox1Change(Sender: TObject);
procedure Button3Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure Button4Click(Sender: TObject);
procedure FormClose(Sender: TObject; var Action: TCloseAction);
procedure FormDestroy(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
fmImportNew: TfmImportNew;
implementation
uses UnitDataModule;
{$R *.dfm}
var
Batch,
SQL : TextFile;
server,
user,
password,
database,
driver,
s : string;
procedure TfmImportNew.Button1Click(Sender: TObject);
var
ConnStr : string;
begin
if OpenDialog1.Execute then begin
Edit1.Text := OpenDialog1.FileName;
ComboBox1.Items.Clear;
AssignFile(SQL,ExtractFilePath(Application.Exename)+’bin\script.sql’);
Rewrite(SQL);
Writeln(SQL,’DROP DATABASE IF EXISTS TEMP;’);
Writeln(SQL,’CREATE DATABASE IF NOT EXISTS TEMP;’);
Writeln(SQL,’USE TEMP’);
AssignFile(Batch,Edit1.Text);
Reset(Batch);
while not EOF(Batch) do begin
Readln(Batch,s);
if (uppercase(copy(s,1,3)) ‘USE’) AND (uppercase(copy(s,1,15)) ‘CREATE DATABASE’) then
Writeln(SQL,s);
end;
CloseFile(Batch);
CloseFile(SQL);
AssignFile(Batch,ExtractFilePath(Application.Exename)+’batch.bat’);
Rewrite(Batch);
writeln(Batch,’@echo off’);
writeln(Batch,’CD bin’);
writeln(Batch,’mysql -uroot -ppwd < script.sql');
CloseFile(Batch);
ShellExecute(0, 'open', PChar(ExtractFilePath(Application.Exename)+'batch.bat'), nil, PChar(ExtractFilePath(Application.Exename)), 2);
ADOConnection1.Connected := False;
connStr := 'Provider=MSDASQL.1;Extended Properties="DATABASE=TEMP;DRIVER={MySQL ODBC 3.51 Driver};OPTION=0;PORT=0;SERVER=localhost;UID=root;PASSWORD=pwd"';
ADOConnection1.ConnectionString := connStr;
ADOConnection1.Connected := True;
end;
end;
procedure TfmImportNew.ComboBox1Change(Sender: TObject);
begin
ADOTable1.Close;
ADOTable1.TableName := ComboBox1.Text;
ADOTable1.Open;
DataSource1.DataSet := ADOTable1;
end;
procedure TfmImportNew.Button3Click(Sender: TObject);
begin
Close;
end;
//Tombol Import di Click
procedure TfmImportNew.Button2Click(Sender: TObject);
var
i : integer;
Nama_Tabel : TStrings;
Ada : Boolean;
PriKey : array of string;
str : string;
n_OK,
n_ALL : integer;
begin
SetLength(PriKey,1);
Nama_Tabel := TStringList.Create;
DM.ADOConnection1.GetTableNames(Nama_Tabel);
Ada := False;
for i := 0 to Nama_Tabel.Count-1 do
if Nama_Tabel[i] = ADOTable1.TableName then
Ada := True;
if not Ada then
Application.MessageBox('Tabel yang Anda pilih tidak terdapat pada database server!','Tabel tidak ada',MB_OK or MB_ICONEXCLAMATION)
else begin
tb_target.Close;
tb_target.Connection := DM.ADOConnection1;
tb_target.TableName := ADOTable1.TableName;
tb_target.Open;
if tb_target.FieldCount ADOTable1.FieldCount then
Application.MessageBox(‘Kedua tabel tidak memiliki kolom yang sama!’,’Kolom tidak sama’,MB_OK or MB_ICONEXCLAMATION)
else begin
n_OK := 0;
n_ALL := 0;
//get primary key
ADOQuery1.Close;
ADOQuery1.SQL.Clear;
ADOQuery1.SQL.Add(‘DESC ‘+tb_target.TableName);
ADOQuery1.Open;
i := 0;
while not (ADOQuery1.Eof) do begin
if ADOQuery1.Fields[3].AsString = ‘PRI’ then begin //field yang merupakan primary key
PriKey[i] := ADOQuery1.Fields[0].AsString;
inc(i);
SetLength(PriKey,i+1);
end;
ADOQuery1.Next;
end;
//Lakukan iterasi
ADOTable1.First;
while not ADOTable1.Eof do begin
str := ”;
for i := 0 to high(PriKey) – 1 do
str := str + PriKey[i] + ‘ = ‘ + QuotedStr(ADOTable1.FieldByName(PriKey[i]).AsString) + ‘ AND ‘;
Delete(str,length(str)- 4,5);
DM.qrTemp.Close;
DM.qrTemp.SQL.Clear;
DM.qrTemp.SQL.Add(‘SELECT * FROM ‘+ADOTable1.TableName+’ WHERE ‘+Str);
DM.qrTemp.Open;
inc(n_ALL);
if DM.qrTemp.RecordCount = 0 then begin
DM.qrTemp2.Close;
DM.qrTemp2.SQL.Clear;
DM.qrTemp2.SQL.Add(‘INSERT INTO ‘+ADOTable1.TableName+’ VALUES (‘);
str := ”;
for i := 0 to ADOTable1.FieldCount – 1 do
if (ADOTable1.Fields[i].DataType = ftDate) OR (ADOTable1.Fields[i].DataType = ftDateTime) then
str := str + QuotedStr(FormatDateTime(‘yyyy’,ADOTable1.Fields[i].AsDateTime)+’-‘+FormatDateTime(‘mm’,ADOTable1.Fields[i].AsDateTime)+’-‘+FormatDateTime(‘dd’,ADOTable1.Fields[i].AsDateTime)) + ‘,’
else
str := str + QuotedStr(ADOTable1.Fields[i].AsString) + ‘,’;
Delete(str,length(str),1);
DM.qrTemp2.SQL.Add(str);
DM.qrTemp2.SQL.Add(‘)’);
DM.qrTemp2.ExecSQL;
inc(n_OK);
end;
ADOTable1.Next;
end;
MessageDlg(‘Result :’#13#10+IntToStr(n_ALL)+’: record(s) scanned’#13#10+IntToStr(n_OK)+’: new record(s) merged’, mtInformation, [mbOK], 0)
end;
end;
Nama_Tabel.Free;
end;
procedure TfmImportNew.Button4Click(Sender: TObject);
begin
ADOConnection1.GetTableNames(ComboBox1.Items);
ComboBox1.ItemIndex := -1;
end;
procedure TfmImportNew.FormClose(Sender: TObject;
var Action: TCloseAction);
begin
DM.qrTemp.Close;
DM.qrTemp.SQL.Clear;
DM.qrTemp.SQL.Add(‘DROP DATABASE IF EXISTS TEMP’);
DM.qrTemp.ExecSQL;
end;
procedure TfmImportNew.FormDestroy(Sender: TObject);
begin
if FileExists(ExtractFilePath(Application.Exename)+’batch.bat’) then
DeleteFile(ExtractFilePath(Application.Exename)+’batch.bat’);
if FileExists(ExtractFilePath(Application.Exename)+’bin\script.sql’) then
DeleteFile(ExtractFilePath(Application.Exename)+’bin\script.sql’);
end;
end.
//Sedangkan untuk script export, aku pake seperti ini:
procedure TfmUtama.ExportDatabase1Click(Sender: TObject);
var
command : string;
Batch : TextFile;
begin
command := ‘mysqldump -uroot -ppwd -h localhost -B mydb > “‘;
saveDialog1.FileName := server+’_’+DateToStr(Date);
if SaveDialog1.Execute then begin
command := command + SaveDialog1.FileName+'”‘;
AssignFile(Batch,ExtractFilePath(Application.Exename)+’batch.bat’);
Rewrite(Batch);
writeln(Batch,’@echo off’);
writeln(Batch,’CD bin’);
Writeln(Batch,command);
writeln(Batch,’exit’);
CloseFile(Batch);
ShellExecute(0, ‘open’, PChar(ExtractFilePath(Application.Exename)+’batch.bat’), nil, PChar(ExtractFilePath(Application.Exename)), 2);
end;
end;
//Semoga memahami maksud saya…
mas,,mau tanya..
gimana cara manipulasi data pake syntax..
kan klo pake ADO tuh penulisan misal syntaknya :
with dm.ADOQ_coba do
begin
Close;
Open;
SQL.Clear;
SQL.Add(query);
ExecSQL;
Active:=True;
end;
klo pake Zeos gimana syntaknya?soalnya klo saya pake syntak d atas tuh pasti minta ZDbcPostgreSqlUtils.pas
Jangan lupa menambahkan semua folder yang ada dalam subfolder ZeosDBO ke dalam Library Path.
Untuk statemen update atau insert, gunakan
ZConnection.ExecuteDirect( SQL ), jangan menggunakan
ZQuery atau ZReadOnlyQuery.
HTH 🙂
@Mas JOKO
Kalau pakai DROP TABLE, berarti semua data yang terdapat pada tabel tujuan hilang semua dunk???!!! Padahal kan mau merge…???!!! Kalo DROP TABLE Guampang bangets…
Ini script punya saya (99% work):
//LOAD Script SQL
procedure TfmImportNew.btLoadSQLClick
(Sender: TObject);
var
ConnStr : string;
begin
if OpenDialog1.Execute then begin
Edit1.Text := OpenDialog1.FileName;
ComboBox1.Items.Clear;
AssignFile(SQL,ExtractFilePath(Application.Exename)+’bin\script.sql’);
Rewrite(SQL);
Writeln(SQL,’DROP DATABASE IF EXISTS TEMP;’);
Writeln(SQL,’CREATE DATABASE IF NOT EXISTS TEMP;’);
Writeln(SQL,’USE TEMP’);
AssignFile(Batch,Edit1.Text);
Reset(Batch);
while not EOF(Batch) do begin
Readln(Batch,s);
if (uppercase(copy(s,1,3)) ‘USE’) AND (uppercase(copy(s,1,15)) ‘CREATE DATABASE’) then
Writeln(SQL,s);
end;
CloseFile(Batch);
CloseFile(SQL);
AssignFile(Batch,ExtractFilePath(Application.Exename)+’batch.bat’);
Rewrite(Batch);
writeln(Batch,’@echo off’);
writeln(Batch,’CD bin’);
writeln(Batch,’mysql -uroot -pmypwd < script.sql');
CloseFile(Batch);
ShellExecute(0, 'open', PChar(ExtractFilePath(Application.Exename)+'batch.bat'), nil, PChar(ExtractFilePath(Application.Exename)), 2);
ADOConnection1.Connected := False;
connStr := 'Provider=MSDASQL.1;Extended Properties="DATABASE=TEMP;DRIVER={MySQL ODBC 3.51 Driver};OPTION=0;PORT=0;SERVER=192.168.0.1;UID=root;PASSWORD=mypwd"';
ADOConnection1.ConnectionString := connStr;
ADOConnection1.Connected := True
ADOConnection1.GetTableNames(ComboBox1.Items);
ComboBox1.ItemIndex := -1;
end;
end;
//Script Merge Data
procedure TfmImportNew.Button2Click(Sender: TObject);
var
i : integer;
Nama_Tabel : TStrings;
Ada : Boolean;
PriKey : array of string;
str : string;
begin
SetLength(PriKey,1);
Nama_Tabel := TStringList.Create;
DM.ADOConnection1.GetTableNames(Nama_Tabel);
Ada := False;
for i := 0 to Nama_Tabel.Count-1 do
if Nama_Tabel[i] = ADOTable1.TableName then
Ada := True;
if not Ada then
Application.MessageBox('Tabel yang Anda pilih tidak terdapat pada database server!','Tabel tidak ada',MB_OK or MB_ICONEXCLAMATION)
else begin
tb_target.Close;
tb_target.Connection := DM.ADOConnection1;
tb_target.TableName := ADOTable1.TableName;
tb_target.Open;
if tb_target.FieldCount ADOTable1.FieldCount then
Application.MessageBox(‘Kedua tabel tidak memiliki kolom yang sama!’,’Kolom tidak sama’,MB_OK or MB_ICONEXCLAMATION)
else begin
//get primary key
ADOQuery1.Close;
ADOQuery1.SQL.Clear;
ADOQuery1.SQL.Add(‘DESC ‘+tb_target.TableName);
ADOQuery1.Open;
//DataSource1.DataSet := ADOQuery1;
i := 0;
while not (ADOQuery1.Eof) do begin
if ADOQuery1.Fields[3].AsString = ‘PRI’ then begin
PriKey[i] := ADOQuery1.Fields[0].AsString;
inc(i);
SetLength(PriKey,i+1);
end;
ADOQuery1.Next;
end;
//Lakukan iterasi
ADOTable1.First;
while not ADOTable1.Eof do begin
str := ”;
for i := 0 to high(PriKey) – 1 do
str := str + PriKey[i] + ‘ = ‘ + QuotedStr(ADOTable1.FieldByName(PriKey[i]).AsString) + ‘ AND ‘;
Delete(str,length(str)- 4,5);
DM.qrTemp.Close;
DM.qrTemp.SQL.Clear;
DM.qrTemp.SQL.Add(‘SELECT * FROM ‘+ADOTable1.TableName+’ WHERE ‘+Str);
DM.qrTemp.Open;
if DM.qrTemp.RecordCount = 0 then begin
DM.qrTemp2.Close;
DM.qrTemp2.SQL.Clear;
DM.qrTemp2.SQL.Add(‘INSERT INTO ‘+ADOTable1.TableName+’ VALUES (‘);
str := ”;
for i := 0 to ADOTable1.FieldCount – 1 do
if (ADOTable1.Fields[i].DataType = ftDate) OR (ADOTable1.Fields[i].DataType = ftDateTime) then
str := str + QuotedStr(FormatDateTime(‘yyyy’,ADOTable1.Fields[i].AsDateTime)+’-‘+FormatDateTime(‘mm’,ADOTable1.Fields[i].AsDateTime)+’-‘+FormatDateTime(‘dd’,ADOTable1.Fields[i].AsDateTime)) + ‘,’
else
str := str + QuotedStr(ADOTable1.Fields[i].AsString) + ‘,’;
Delete(str,length(str),1);
DM.qrTemp2.SQL.Add(str);
DM.qrTemp2.SQL.Add(‘)’);
DM.qrTemp2.ExecSQL;
end;
ADOTable1.Next;
end;
end;
end;
Nama_Tabel.Free;
end;
NOTE:
DM adalah DataModule yang berisi ADOConnection1, qrTemp, dan qrTemp2. ADOConnection1 melakukan koneksi ke database target.
Itulah kira-kira script saya. Mohon masukannya….
Jangan lupa libmysqlxx.dll disertakan … karena untuk versi sekarang 6.6.5-stable dan trunk 680 ( 7.x beta ) harus disertakan libmysql nya sesuaikan dengan versi.
Good simple Post
Salam,
Man’z
Saran yang bagus :).
Sorry all, saya lupa yang satu ini…. xixixixix..
Maha guru MySQL nih 🙂
Apakah ZEOS Stabil dan Cepat dibandingkan MySQL ODBC?
Tentu saja.
Cepat, mudah, stabil dan murah.
Anda bisa membandingkan:
1. Delphi->ADO->ODBC->ODBC MySQL Driver->MySQL Server.
dengan
2. Delphi->ZeosDBO->MySQL Server.
Mana mantap?
Sy br download versi 6.6.5-stable dr sourceforge, tp msh tetep ada eror
1. Range check error
2. Unknown mysql datatype
secara bergantian. Pd koneksi, sy set protocol k mysql dan port 80. Satu lg, klo sy mau buat app clien-server, apkh properti host yg diganti dg IP server? Ato gmn?
Sampai saat ini saya masih menggunakan versi 6.6.5-Stable (versi terakhir), dan saat developing Sistem Informasi Kepegawaian PDAM Kota Makassar, tidak ada error sama sekali pada Zeos DBO.
Saya menggunakan pada Delphi6, Delphi7 (yang saat ini saya gunakan buat developing) dan Turbo Delpgi Explorer Edition (BDS 2006). Malah, pada Turbo Delphi Explorer portable dari http://www.andyaska.com pun berjalan dengan baik.
Sebagai catatan, port 80 adalah port HTTP, sedangkan MySQL secara default menggunakan port 3306. Angka ini jarang diubah, dengan maksud menstandarkan interkoneksi berbagai tipe klien dan host MySQL.
Untuk klien server, memang benar, Anda harus mengganti nama host dengan IP/HostName komputer di mana MySQL server diinstal.
HTH 🙂
Untk koneksi brhasil connect. Sy gunakan ZTable, pd properti table name, smua nama tabel bs dilihat. Tp, sy di ‘Active’ ko eror? Sy blm coba pakai ZQuery. Any suggestion?
Saya juga sudah pakai ZQuery, dan masih mengalami hal yang sama ketika query di ‘open’….
Dalam form yang sama, saya coba menambahkan ADOConnection dan ADOQuery… Ngga ada masalah dengan Server MySQL-nya. Mohon pencerahannya….
Saya tidak menemukan libMySQLxx.dll di folder manapun dari hasil ekstraksi file Zeos? Dimana saya bisa menemukannya. Saya hanya menemukan libmysql.dll di %WINDIR%\System32.
Pesan errornya apa?
libmysql.dll terdapat dalam folder %MySQL%\bin, bukan bagian dari Zeos 🙂
Sm spt saat menggunakan ZTable: Range check error, atau Unknown MySQL Datatype.
Sy pengen merubah koneksi yg sy pake di aplikasi yg sdg sy buat (Sistem Automasi Perpustakaan), sementara ini sy pakai ADO. Brjalan dgn baik cuma aga lambat, trutama ktika menjalankan Query yg cukup banyak. Sy liat di thread ini Zeos cukup menarik untk dipelajari, sekaligus mengubah dominasi ADO pd program database yg pernah sy buat.
Pada query saya ada penggabungan text yang field nya berupa varchar, nah ketika program dijalankan kenapa hasilnya dalam DBGrid menjadi (memo). Mohon bantuannya biar gak jadi memo. atau gimana caranya melakukan trim ???
@KukhuRuyuK
Misal saya buat tabel dengan DDL sebagai berikut:
CREATE TABLE contoh (text1 varchar(30), text2 varchar(30)) TYPE = MyISAM;
Untuk menggabungkan 2 string atau lebih, gunakan perintah CONCAT:
SQL := ‘SELECT CONCAT(text1, ‘+QuotedStr(‘ ‘)+’, text2) as gabungan FROM contoh’;
Query1.Close;
Query1.SQL.Clear;
Query1.SQL.Add(SQL);
Query1.Open;
Query di atas menggabungkan text1 dan text2 dengan pemisah berupa spasi. Jadi, jika text1 bernilai ‘Hallo’ dan text2 bernilai ‘Apa kabar’, maka field gabungan akan bernilai ‘Hallo Apa kabar’. Anda bisa mengubah struktur ekspresi CONCAT sesuai kebutuhan Anda.
Setahu saya jika DBGrid menampilkan value (memo) pada salah satu field-nya, berarti hasil dari Query tersebut adalah EmptySet (atau kosong).
Demikian, semoga membantu…
Sory, ada yang kurang pada tulisan :
Setahu saya jika DBGrid menampilkan value (memo) pada salah satu field-nya, berarti hasil dari Query tersebut adalah EmptySet (atau kosong).
Dikoreksi menjadi:
Setahu saya jika DBGrid menampilkan value (memo) pada salah satu field-nya, berarti Data Set-nya adalah EmptySet (atau kosong). Jika Data Set berupa table, artinya EmptyTable (tabel kosong), jika berupa query artinya query return an empty set.. Bisa jadi diakibatkan oleh pernyataan querynya atau memang tabel yang di refer oleh query tersebut juga kosong..
Sebenarnya, kosong atau tidak bukan penyebabnya…
Jika @KukhuRuyuK menggabungkan dua field dengan CONCAT(), maka hasil query selalu berupa string, bukan memo. Anda dapat mengecek kembali property FieldDefs milik Query Dataset, dengan mengklik ganda dataset tersebut. Bila terdapat FieldDefs, cek apakah hasil Field hasil gabungan bertipa apa. Ubah ke string jika perlu.
Hal lainnya, perhatikan jenis encoding yang dipake oleh MySQL disupport oleh Delphi atau tidak.
Contoh sql yang ditulis mas Roni tentu saja sudah benar, dan sebagai pembanding, Anda dapat memposting sql Anda.
HTH 🙂
Makasih mas…..
bro / sis ….
mohon pencerahannya plissss ….
aq koneksi ke mysql pke DAC for mySQL, tp wkt akses databasenya, terutama proses table pake :
while not table.eof do
begin
……
proses
……
table.next;
end;
rasanya lambat, meskipun data tidak terlalu banyak. hal ini apa karena komponennya ato bgm ya bro / sis … ???
thx b4
prosesnya mengerjakan apa? Itu intinya. Bila dapat diperjelas, mungkin akan lebih mudah dibahas 🙂
proses report bro … tentunya ada beberapa kondisi field yg harus di cek & akan diambil tindakan sesuai kondisi. ato wkt create user rights, dimana setiap record baru ada sekitar 43 field yg harus diisi, rasanya lambat bro, karena jalannya progress bar pelan, padahal itu tanpa kondisi, hanya append record, isi field (43 field) & post.
tapi klo pke query memang cepat sih, cuma klo pke query bgm bro utk menampilkan progress bar setiap record di akses ??
btw … aq cb komponen zeos, tapi …. di tabel kok ga ada fundtion FINDKEY bro ???? trus bgm cek duplicate key ? klo pke query kan kebanyakan coding bro, klo setiap findkey harus coding :
query.close;
query.sql.clear;
query.sql.add (‘select * from TABEL where (FIELD1=cFIELD1) ….
query.execsql;
if query.isempty then
// duplicate key
else
// enry record
oh ya … di DAC for mySQL, sebelum query diexecusi kan bisa di PREPARE dulu, di zeos ga perlu ya ???
thx b4
1. Zeos DBO lebih lambat dari DAC for MySQL.
2. FindKey() spesifik dataset tertentu, misalnya TTable (BDE) dan ClientDataset. Anda bisa coba Locate(); untuk Zeos.
3. Hindari FieldByName(‘x’).AsInteger/asApaAja. Sebaiknya gunakan Fields[i].AsInteger.
4. Prepare hanya untuk query berparameter. Query tanpa parameter tidak perlu diprepare.
HTH 🙂
gimna ya caranya menggunakan ZQuery buat mengirim sql ke mysql..?? Mis. kl mau input data, update data, dan hapus data…
Wah sorry baru liat komennya Mas.
Zquery gak dukung DML (Data Menipulation Language) kayak query untuk delete, update & insert.
Saya pake ZConnection, malah, untuk DML execution:
HTH 🙂
Bisa kok mas dengan Zquery
contoh :
strSql := ‘INSERT INTO tablea(id,nama)VALUES(isi_id,isi_nama)’;
ZQuery1.Append(strSql);
ZQuery1.ExecSql;
Benar sekali Mas Andre 🙂
Saya nggak tau apakah bug Zeos ataukah masalah lain. Pada banyak kasus (insert yang kompleks) seperti jurnal-jurnal transaksi pada software akuntansi, ZQuery.ExecSQL() tidak berhasil, dengan error message bahwa Tabel dalam kondisi read-only. Namun dengan ZConnection.ExecuteDirect(), saya tidak pernah menemukan masalah.
Jadi setelah cukup banyak menemukan kasus ini, pertanyaan mas @Stefen di atas saya jawab dengan “cara yang aman…” 🙂
Btw, makasih koreksinya 🙂
Misi Mas, kalo mau input database secara otomatis gimana ya.., misal masuknya tiap 1 detik sekali dengan tabel mis: | id | Waktu | Suhu | mAKLUM pEMUla. MaKasih SEbelumnya
Pake TTimer mas.
TTimer terdapat di componen palette, page System. Tambahkan ke form dan atur intervalnya menjadi 1000 (1000 = 1000 miliseconds= 1 second = 1 detik). Trus klik ganda pada Timer1 tersebut, berikut contoh kodenya:
Saya berasumsi Mas menggunakan Zeos DBO (TZTable), melihat komentar Mas pada posting tentang Zeos 🙂
Saya pake TurboDelphi, Zeos 6.6.2-RC, FB 1.5.5.
Ketika mau coba akses FB dari komputer lain, database dapat terhubung, tapi ketika mau melakukan query, muncul error sbb:
SQL Error: Dynamic SQL Error SQL error code = -901 feature is not supported. Error Code: -901. Unsuccessful execution caused by system error that does not preclude successful execution of subsequent statements The SQL: SELECT * FROM LOGIN;
Di komputer pengakses, FB client sudah diinstall.
Kira2 apa yang jadi masalah ya?
Wah, belum pernah dapat kasus begini bos. 😦
Akhirnya, saya ganti pake MySQL kelihatannya gak ada masalah..
Misi Mas mau bertanya lagi, saya ngambil data dari mikro ke delphi, nah waktu buat grafik listingnya kayak gini
procedure TForm1.Timer2Timer(Sender: TObject);
var time:string;
suhu:double;
begin
suhu:=strtofloat(edit1.Text); –> disini untuk ngambil datanya kok gak mau ya?
time:=timetostr(now);
chart1.series[0].Add(suhu,time,clblue);
end;
apa ada cara lain untuk buat grafik di Delphi, Mohon bimbingannya Makasih?
Yang jadi pertanyaan adalah:
Ada pesan error gak? Kalo ada, apa pesan errornya??
errornya kayak gini mas “is not valid floating point value”
kalo delphi sama vb bedanya dimana mas dan kenapa mas lebih memilih delphi?
Misalkan kita ingin mampu berbahasa inggris, cara termudah pelajarilah bahasa Inggrisnya orang Amerika, karena banyak terdapat di filem dan internet. Tapi banyak kata kurang sopan, tidak beraturan bahkan salah. Demikian juga bila saya belajar VB, banyak aturan semantik bahasa, aturan penulisan dan OOP yang tidak sesuai bahkan tidak pada tempatnya.
Bila Anda cinta bahasa Inggris, belajarlah bahasa Inggrisnya orang Inggris. Memang lebih susah dan rumit, tapi lebih teratur, lebih enak didengar dan lebih sopan serta jauh dari misunderstanding.
Dengan analogi tersebut, Anda cukup paham kenapa saya memilih Delphi 🙂
Btw, yang terpenting, tentang yang mana yang Anda suka. Saya suka Delphi. Saya memujanya. Saya memilihnya. That’s All 🙂
Ya. Biasanya, angka dalam kotak teks adalah “2.566,35” padahal yang diinginkan untuk konversi ke float adalah “2566.35” sehingga mengakibatkan error. Perhatikan tanda titik pemisah ribuan dan koma pemisah desimal.
Anda dapat menggunakan fungsi berikut:
Penggunaanya cukup mudah:
HTH 🙂
mas, mau tanya lagi neh.. punya penjelasan mengenai fungsi pada masing-masing komponen zeos access pa ga?
atau link yang menjelaskan masing-masing komponene zeos access..
Gak ada Mas…
Dokumentasi Zeos sangat sedikit dan sulit dicari…
Namun keterangan singkat masing-masing komponen dapat dilihat di:
1. Dalam folder \ZEOS\Doc\Readme.html
2. Download dOxygen-generated documentation di sini.
st:=’DELETE FROM system_log WHERE log_id=42; INSERT INTO system_log( log_id) VALUES(41);’;
ZConnection1.ExecuteDirect(st);
Muncul error ‘SQL error : you have an error in your SQL syntax’
Gimana cara execute banyak command dalam sekali execute. ?
Thx
Jangan pake ZConnection atau ZQuery. Untuk rangkaian perintah SQL, gunakan ZSQLPeocessor.
mas ,saya mau tanya tentang zeos 6.6.6 + delphi 7 + Mysql 5.0….gini mas saya mencoba menampilkan data field Time ’00:00:00′ di dbGrid/dbText dan semacamnya tapi untuk data yang diatas tidak muncul ya, padahal di database mysqlnya data tersebut ada…tapi untuk data selain ’00:00:00′ semua muncul, sebenarnya masalahnya ada dimana ya? mohon pencerahannya…makasih…wassalam
mz, mo minta pendapat apakah cukup dimungkinkan membuat bank image di db mysql ver 5 menggunakan zeos disimpan di blob bagaimana penganturan biar aksesnya cepat terutama di baca di client .atau pendapat lain cara tekniknya..?
bagaimana juga mengsiasati pada saat queri dbnya itu ada semacam progres bar atau semacamnya agar user bisa tahu sedang menunggu proses baca data dari server. Ok sebelumnya Mz JOKO terimakasih
Mas Joko , saya mohon dibantu untuk mengambil peristiwa insert table di mysql sebagai sebuah event di form delphi , menggunakan zeos. Saya sudah coba pakai event afterinsert milik ztable kok tidak jalan ya?
Misal , mysql versi 5 milik saya ada 1 table berisi 2 kolom yang enum ( ‘merah’, ‘biru’ ) . jika client lain mengisi dengan merah , maka form merah saya akan close , jika client lain mengisnsert biru , maka form saya yang berwarna biru akan close..
Mohon berikan 2 contoh sederhana ..he.h.e..he…..Terimakasih sebelumnya
Salam kenal mas
saya juga pengguna Delphi dan Zeos
Saya lagi mau coba Zeos di Delphi 2010, kalau ada maslah bolenh dong tanya-tanya…
Thanks
sip Mas.
Good luck 🙂
bang, aku mw tanya…
kalo muncul pesan error “Acces violation at address 00000000. Read of address 00000000”
masalahnya apa ya?
mohon bantuannya… thx b4
Biasanya karena tidak kompatibelnya komponen dengan versi Delphi.
Apalagi Delphi 2006 ke atas.
Hal-hal umum seperti penggunaan PChar, penggunaan ShortString & AnsiString, dan array yang tidak sesuai aturan Delphi merupakan penyebab paling sering.
Contoh paling sederhana
Mas Joko thx infonya, aku mo nanya.. kalo aku pake Hostname: Localhost bisa konek.. tapi kalo aku pake Hostname: 192.168.xxx.xxx koq muncul pesan = SQL Error : Host …. is not allowed to connect to this MySQL server.
itu kenapa ya mas? mohon penjelasannya mas… thx..
Untuk tiap user, MySQL mengenal dua macam host yang terkoneksi ke server, yaitu localhost dan other host.
Localhost berarti koneksi user dari host yang sama di mana MySQL diinstall.
Otherhost berarti koneksi user tersebut dari host lain.
Kedua-duanya harus didaftarkan dalam Granted Access Table (GAT) atau tabel users di MySQL.
Anda harus membuat user baru dengan nama yang sama yang Anda gunakan saat ini, kecuali field “host” diisi dengan IP yang dijinkan untuk konek. Jadi bila Anda akan melakukan koneksi dari lima host/komputer berbeda, Anda harus mendaftarkan kelima host tersebut ke tabel users MySQL.
Ribet? Tentu saja. Jadi cukup dibuat 2 saja:
username/uid: tes
password: tesjuga
host: localhost –>> akses host lokal
username/uid: tes
password: tesjuga
host: % –>> akses dari semua host selain lokal.
Untuk membuat user seperti ini, dapat mengunakan PHPMyAdmin, Navicat For MySQL atau SQLFront For MySQL (aka. MySQLFront). Favorit saya adalah HeidiSQL yang opensource, download di sini.
HTH 🙂
Wwesyuh, cape deh.. terima kasih banyak mas bro saya udah pake cara itu hanya saya salah masukin hostnya
Salam kenal Mas Joko…
Saya cuman mo tanya sedikit, saya pakai Delphi 7 dan databesenya MSSQL server dengan ODBC untuk koneksi database. Ketika data tanggal di save ada message”[microsoft][ODBC SQL Server Driver] Optional feature not implemented” Pertanyaannya : Apakah ODBC tidak mendukung simpan data type date?, ada ngga solusinya untuk kasus seperti ini?. Terima Kasih
setau saya, baru sejak SQL 2008 yang mendukung field bertipe Date dan Time. Jadi, pada Delphi 7, fitur Date dan Time belum ada. Bila Anda menggunakan Delphi 7 Dengan SQL Server terbaru yang memiliki tipe field Date, maka umumnya akan error. Perlu penanangan khusus.
Delphi sendiri baru Delphi 2010 ke atas yang dapat mengatasi masalah ini.
Di Delphi 7, field Date di SQL Server versi-versi baru akan diubah ke TWideString, bukan TDate, sehingga akan membingungkan ADO.
Nah, saran saya, cobalah ubah tipe Date menjadi DateTime/TimeStamp di SQL Server, karena Delphi telah mendukungnya bahkan sejak Delphi 6.
Atau, coba gunakan komponen seperti UniDAC atau Zeos
Sudah saya coba ganti tipe data date menjadi DateTime/TimeStamp, tp masih eror juga. Sebenarnya kalo langsung konek ke MSSql server 2000 sih bisa untuk Save tipe data Date, tp karena konek dengan ODBC jadi eror. Saya konek data dg ODBC karena kadang coding prg delphi 7 di komp A kadang di komp B yg masing2 punya nama sql server yg berbeda, shg prg jadi eror. Terima kasih
Mas Mukti, coba samakan dulu versi SQL Servernya.
Kalau masih error, pastikan semua DLL yang dibutuhkan ADO untuk koneksi ke MS SQL Server sudah terinstal di %SYSTEM32%.
Bila masih juga error, gunakanlah ZEOS. Selain lebih cepat, juga lebih flexibel saat instalasi ke user.
mas saya mau tanya untuk koneksi pake zeos ada error pas connected tak ganti true, “Access violation blaa… blaaa… at address 0000000”, saya pake xampp dg mysql versi 5.1… terima kasih bantuannya.
Perhatikan protokol Zeos. Bila Anda menggunakan versi 5.1.x, coba property Protokol dari TZConnection diubah ke “mysqld-5”. Bila bingung, gunakan saja “mysql”.
Dan perlu saya tanya, versi Delphi berapa yang Anda gunakan. ZEOS yang tersedia di sini sangat cocok dengan Delphi 6 dan Delphi 7. Versi BDS 2006 sampai RAD Deplhi XE, tidak cocok. Ini karena Delphi 6 & Delphi 7 masih menggunakan string ANSI, sedangkan versi RAD sudah menggunakan default string WideChar/Unicode.
Bila Anda menggunakan versi BDS Delphi 2006 ke atas, gunakan ZEOS versi 7.0.0 (hasil oprekan Anak Bangsa).
Zeos versi 7.0.0 dapat didownload di sini: https://jokorb.wordpress.com/2010/11/05/download-zeos-dbo-for-delphi-200920010/
Komentar ini mungkin jadi informasi:
https://jokorb.wordpress.com/2008/09/14/koneksi-database-dengan-delphi-mysql-zeos/#comment-911
makasih mas joko, ternyata nginstallnya yg salah, hee3x
oiya mas, caranya insert data ke tabel, misal di grid tersebut ada data 5 baris, kemudian kita centang baris ke 2 dan 4. Kemudian hanya data yang dicentang tersebut yang akan di insert ke tabel. Saya menggunakan SMDBgrid. Tak cari di google pake TBookmarkstr, Mohon pencerahannya y mas…
Biasanya dengan looping pada tiap record yg ditandai pada SMDBgrid.
Makasih mas, ilmunya manfaat banget!!
yg tak tanyakan kemarin kan tentang insert mas ya, kalo kasusnya gini :
saya punya 2 form dg SMDBgrid yg datasourcenya dr 2 tabel, form 1 tabel A, form 2 tabel B, jika di form 1 data d pilih d Grid lalu button “Ambil” dklik maka terjadi proses insert ke tabel B(Clear).
Pertanyaanya kalo tabel A terdapat jumlah barang, ketika button “Ambil” dklik maka jumlah barang yg dplih tadi berkurang (default 1 buah), hasil klik button “Ambil” akan ditampilkan d form 2. Ma’f mas agak mbulet…
Berarti tabel A harus diedit, ya?
Setiap insert ke tabel B, tabel A diedit, misalnya:
Harus dipikirkan, jika jumlah di tabel 1 kosong, maka tidak bisa diinsert ke tabel 2. Btw, Point of Sale nih? 🙂
Iya mas betul3x….
Aq mau KKN mas, bingung mau buat apa… akhirnya buat SIM Perpustakaan sederhana, dpet materi delphi g full jd hrus cr referensi sndri….
Makasih yo mas, ma’f ngrepotin…. Newbie ne…
mas kodingq salahnya dmn? kok setiap lebih dr 1 row yg tak contreng lalu tak klik button “hapus” jumlah yg d tabel A bertambah sesuai yg tk contreng, tapi record yg berikutnya g bertambah..
misal :
* 5 ==> 5
* 5 ==> 7
harusnya :
* 5 ==> 6
* 5 ==> 6
ini codingnya :
procedure tkonfirmasi.tambah;
var
BM: TBookmark;
i:integer;
begin
if DBGrid.SelectedRows.Count = 0 then exit;
DBGrid.DataSource.DataSet.DisableControls;
Bm:=DBGrid.DataSource.DataSet.GetBookmark;
try
for i := 0 to DBGrid.SelectedRows.Count -1 do
begin
//Tandai record di dataset:
DBGrid.DataSource.DataSet.Bookmark := DBGrid.SelectedRows.Items[i];
dm.ZQuery.Edit;
dm.ZQuery.FieldByName(‘jml_buku’).AsInteger := dm.ZQuery.FieldByName(‘jml_buku’).AsInteger + 1;
dm.ZQuery.Post;
end;
finally
DBGrid.DataSource.DataSet.GotoBookmark(BM);
DBGrid.DataSource.DataSet.EnableControls;
end;
end;
Mungkin saya salah: Ini bug pada SMGDbrid. Bookmarknya gak karuan. Saya lagi kontak Mike Shkolnik (Michael Shkolnik), pembuat SMDBGrid. Semoga ada penjelasan dan perbaikan. Kita tunggu saja 🙂
Oh ya, bila Anda ingin alternatif, DBGridEh (dari EhLibrary) sangat bagus. Tidak sebagus SMDBGrid, tapi sangat stabil.
ok mas, tak coba dlu…
makasih infonya…
1. Zeos DBO lebih lambat dari DAC for MySQL.
2. FindKey() spesifik dataset tertentu, misalnya TTable (BDE) dan ClientDataset. Anda bisa coba Locate(); untuk Zeos.
3. Hindari FieldByName(‘x’).AsInteger/asApaAja. Sebaiknya gunakan Fields[i].AsInteger.
4. Prepare hanya untuk query berparameter. Query tanpa parameter tidak perlu diprepare.
kelemahan utk no 3 ap mas joko? aku pake fieldbyname, hasilnya field not found terus….
Databasenya apa?
Kalau MySQL, Anda harus menuliskan nama field persis seperti di tabel dalam database, termasuk huruf besar/kecilnya. Apit pula dengan tanda tilde [~], yang terdapat pada sebelah kiri tombol angka 1 pada keyboard Anda (QWERTY KEYBOARD).
Contoh:
NamaUser sama dengan namauser, sama juga dengan NAMAUSER,
tapi
`NamaUser` berbeda dari `namauser`, berbeda juga dari `NAMAUSER`.
Untuk nama field yang mengandung spasi, contoh Nomor Induk, tanda tilde ini fardhu/wajib digunakan.
Contoh :
`Nama Pegawai`, `nomor induk`, `Nilai Rerata`.
Moga membantu 🙂
Lazarus+Zeos+Linuxnya mana ya? Zeos 666 stble belum bisa dimasukin lazarus 9.3 niii
@guruler: Maaf. Karena kami tidak menggunakan Linux, pertanyaan Anda sulit kami jawab. Tapi yang kami tahu, Lazarus + Zeos (v.7.0.0) sangat OK (di Windows). Lazarus harus d-build ulang karena Lazarus hanya mendukung static package (terkompilasi ke IDE), tidak seperti Delphi yang mendukung dynamic package.
misis mbak numpang nanya
. . .
mbak lazarus +zeos(v.7.0.0) di windows udah saya tes dan instal, nah waktu mengaktfkn true pada zconnction n ztble/zquery udah OK, tapi wktu sy cba hubngkan ztbl/zquery tersebut ke datasource n dr datasource ke dbgrid, lazarusny compile ulang trus gx bisa debug,. . . jd gmn mbak solusinya agar brhasl wktu dhbngkan,.
oy stu lagi, android pada lazarus gmn tuh nyetingnya,, mhn bntu annya
Maaf Mas numpang tanya, saya masih pemula dalam dunia pemrograman dan Delphi. Saya punya kasus, saya pernah memprogram aplikasi database di Delphi dengan menggunakan database MySQL di komputer saya. Setelah dicompile dan dirun program tersebut saya copy ke komputer temen, nah ketika saya jalankan file exe-nya ternyata tidak bisa jalan. Kata temen saya, saya harus setting dan compile ulang di komputer teman saya itu dengan tool Delphi dan MySQL agar file exe-nya bisa jalan. Yang ingin saya tanyakan bagaimana caranya agar file exe yang saya buat bisa jalan di komputer lain yang tidak ada tool Delphi dan MySQL-nya (tanpa disetting dan dicompile ulang)?
Sebenarnya pada komen-komen di atas sudah ditanyakan dan sudah pula dijawab.
Aplikasi yang dibuat dengan Delphi & MySQL sebaiknya menyertakan setting koneksi secara portabel, agar di manapun dijalankan, bisa.
1. Aplikasi
Property HostName, User, Password dan Database disimpan di file eksternal, misalnya file SETTING-KONEKSI.INI dan dibaca saat aplikasi dijalankan. Saat kompilasi untuk di-deploy ke komputer lain, pastikan bahwa koneksi dalam keadaan tidak aktif. Jadi tidak akan muncul error karena setting koneksi default yang tidak ditemukan. Barulah kemudian aplikasi membaca file SETTING-KONEKSI.INI, memasukkannya ke property yang sesuai pada Zeos Connection, dan memanggil prosedur ZConnection1.Connect;
2. Depencies
File library MySQL yang dibutuhkan harus disertakan dalam satu folder dengan aplikasi. Yaitu file LibMYSQL.dll.
3. MySQL Server
Pastikan bahwa MySQL mengijinkan koneksi dari host luar. Misalkan Anda menggunakan user name “theadmin” dan password “thepassword” untuk koneksi MySQL saat mengembangkan aplikasi, user name ini harus dipastikan memiliki akses dari host selain localhost. Jadi buatlah dua user yang memiliki setting yang sama, kecuali pada field host. Yang satu berisi “localhost” dan satunya lagi berisi “%” (semua host). Dengan begini, user name “theadmin” dapat login dari komputer mana saja asalkan terhubung dengan komputer di mana MySQL Server berada.
Nah, tiga poin inilah yang perlu diperhatikan. Bila sudah diatur dengan benar, sangat mudah untuk memindahkan aplikasi antar PC. Bahkan Anda tidak perlu lagi mengedit file SETTING-KONEKSI.INI selama aplikasi Anda masih mengakses MySQL Server yang sama…
Semoga membantu, dan, sukses selalu buat Anda 🙂
dear mas joko dan team,
saya lagi belajar mysql, zeos delphi 6 nih mas, koneksi sudah berhasil tapi pas di run kok kenapa ada error dgn pesan “[fatal error]……..file not found ZAbstractRODataset.dcu. cara mengatasinya bagaimana ya mas. terus listing untuk simpan, tambah data, edit… sama dengan adoquery ngga, soalnya saya punya contohnya yg menggunakan adoquery. terima-kasih atas pencerahannya. sukses untuk anda dan team.
Coba lihat langkah-langkah instalasi Zeos di atas. Perhatikan nomor 4., yang menunjukkan penambahan file-file library Zeos ke Delphi Library (Win32). Bila Anda melakukan dengan benar, error tersebut tidak akan muncul.
Soal listing, sebenarnya sama saja
ZQuery1.Append;
ZQuery1.FieldByName(‘Nama’).AsString := ‘Nama Saya.’;
ZQuery1.Post;
Ada beberapa perbedaan, tapi secara umum sama saja.
makasih mas sekarang sudah bisa…. tapi ada yang lain nih mas, dalam penginputan data sebaiknya menggunakan dbEdit atau Edit ya mas… terus kalau saya memfilter data dengan perintah:
ZQuery1.Filtered:=False;
ZQuery1.Filter:=’tgl_layanan like’+QuotedStr(‘%’+Edit1.Text+’%’);
ZQuery1.Filtered:=True;
kok error ya mas… “…Access violation at address 005D6529…” padahal sebelum saya pindah menggunakan mysql lancar-lancar aja. sebelumnya saya pakai database access dan ado sebagai koneksinya, tapi sesuai panduan dan komentar dari blok anda saya sekarang coba dan bisa pakai zeos dan mysql server. tapi tetap saja banyak kendalanya… o’ya mas… ada ngga buku yang menjelaskan database mysql server dengan delphi.
makasih ya atas penjelasannya
Pastikan data tanggal dalam Edit1.Text berformat “yyyy-MM-dd”, misalnya “2011-06-29”..
makasih mas joko sekarang sudah bisa, makasih ya… sukses untuk anda dan team
makasih ya sekarang sudah bisa… sukses untuk anda dan team
Sukses juga untuk Anda. 🙂
maaf ya saya konsul terus….sekarang saya lagi coba buat program kecil klinik gigi saudara saya yang akan digunakan oleh 3 user sekaligus, tolong masukannya dong karena saya belum pernah membuat program multi user. yg jadi pertannyaan saya… koding multi user dengan koding single user apakah sama atau ada penambahan yang belum saya ketahui… sekali lagi saya mohon maaf karena konsul terus…. tolong pencerahannya ya… alat bantu yg akan saya gunakan delphi6-zeos6-mysql yg ada di xamp.
Sama saja sebenarnya 🙂
dear mas… mas posting di atas tanggal 30 May 2011 at 12:12 pm nerangin pembuatan file *.INI, lalu file tersebut dibaca pertama kali saat program runing, lalu membuat dua user, tolong lebih rinci neranginya dong…. saya menggunakan delphi dan xamp…. makasih ya atas penjelasannya….
Buat mas @Saiful Anwar, silahkan ikuti tentang file konfigurasi di sini:
https://jokorb.wordpress.com/2011/08/06/save-setting-koneksi-ke-file-ini
Semoga membantu 🙂
Maaf, numpang tanya Mas, gimana ya caranya saya mendeteksi adanya record baru di mysql (pakai timer atau ada event khusus?..) di delphi ?… , jadi ketika ada record baru program akan memberitahukan dalam bentuk ‘alert’ lalu langsung menampilkan record baru tersebut saat itu juga secara realtime. Terima kasih…
Tergantung tujuannya.
Tempo hari saya paka SQL Logger (Di Zeos ada namanya TZSQLMonitor, jangan lupa tambahkan unit ZSQLMonitor ke uses list…). Jadi tiap ada eksekusi perintah sql, SQLMonitor akan mentrace SQL. SQL ini diparse untuk memeriksa jenis SQL (apakah update, insert, delete atau select). Kemudian baru ditampilkan warningnya.
Sekarang, di MySQL versi baru, saya cenderung memilih trigger. Cara ini agak repot karena di semua tabel harus dipasang trigger, tapi akurasi lebih terjamin. Cara SQL Monitor akan keliru jika SQL sudah dieksekusi dan ditrace, tapi ternyata gagal di database (back-end).
Untuk memulai, cobalah pake TZSQLMonitor.
Set Active ke True. Trus event OnTrace:
procedure TForm3.ZSQLMonitor1Trace(Sender: TObject; Event: TZLoggingEvent;
var LogTrace: Boolean);
var
tmp:String;
begin
LogTrace := False;
tmp := uppercase(copy(Trim(Event.Message), 1, 6));
if (tmp = ‘INSERT’) then
ShowMessage(Event.Message);
end;
Semoga dapat membantu.. 🙂
Terima kasih pencerahannya Mas, terus setelah muncul alert juga menampilkan record baru tersebut (misal ditampilkan di Memo..) bagaimana caranya Mas ?.. maaf banyak tanya,maklum masih newbie..
bos mo nanya nih
gmana caranya ngebuat delphi bisa d akses melalui web
hhhe
saya bru nie d programing jdi mhon d bantu
thanks sebelumnya
Mamet udah nyoba ketik IP target server di properti HostName komponen ZConnection nya?
Pake WebApplication di Delphi.
Perlu diingat, cara ini rumit dan jarang dipakai untuk aplikasi biasa. Ada juga cara lain yaitu dengan framework javascript seperti Raudus dan ExtPascal.
Di sana ada juga demo untuk dipelajari 🙂
mas. mohon bantuan nya .. saya mau buat aplikasi yang database nya berisi gambar . untuk nampilin nya dan agar database juga isa update gimana ya .. mohon referensinya ..
Hallo mas joko.., bagaimana membuat progress bar pada saat loding data saat query di jalankan pada zeos….
mohon pencerahaanya
Pingback: Cenadep.org » Tutorial Koneksi Ke 3 Server Database Relasional: MySQL, PostgreSQL & MS. SQL Server
Bos nanya ni .. klo koneksi mysql5 ke aplikasi delphi di windows 7 64-bit gimana ya. aku coba trus koneksi failed. apa harus ada tambahan komponennya ya atau ada pengaturan configurasi lainnya ?? mohon pencerahannya
mas saya dah coba tapi kok pas tak klik cawang nya pada db navigator
muncul peringatan
project project1.exe raised exeption class EZdatabaseerror with message ‘field nama peserta’ is required but not supplied’
mohon bantuannya mas
bosss tolong krm ag program database mysql tentang absensi soalnya skripsi tentang sistem informasi absensi.
maaf kak. jika database menggunakan oracle 10g delphi 7 gmana? bales via e-mail ya. penting 😦
Pak saya pakai Zeos waktu mengetik angka tanpa koma bisa namun mengetik koma ngak bisa, bagaimana caranya agar bisa ngetik pakai koma Contohnya 0.2 ?
Makasih
slm hormat, ada aplikasi open source untuk sistem informasi produk melalui sms, sms ky 1.0, aplikasi menggunakan jaringan sms operator gsm, aplikasi di bawah lisensi GPL, dapat di download di http://www.ciauldownload.blogspot.com , terima kasih
kalu penjelasan tentang masing-masing fungsi komponen zeos ada yach….
gan mau nanya kalo pas zquery di aktifin knp ada tulisan (Unknown MySQL data type)
Mohon pencerahannya ^_^
salam hormat, mas joko, ada gak tutorial/contoh cara membuat koneksi mysql+VPN dengan delphi….
Salam Joint
Mas Joko saya newbi di delphi, ada kosep yang belum terpecahkan tehnisnya, saya sangat berterimakasih jika dibantu.
Saya bikin aplikasi dengan Java untuk android, database nya menggunakan SQlite database , konsep saya SQlite database dikonversi ke
Sql database melalui dump file. Mohon pencerahan konsep program menggunakan delphi XE3 untuk merangkum proses mulai access SQlite Database, make dump file dan export ke Sql (PhpMyadmin).
Terimakasih banget atas bantuannya.
Mohon pencerahannya…. saya sudah berhasil install dan running program….juga mengkoneksikan data dengan zeos….tetapi ketika saya tekan tombol simpan…..muncul pesan source file not found zdbcmysqlutils.pas…. kira2 apa ya masalahnya.
Apakah di coding di tombol simpan…ataukan instalasi zeos yg bermasalah….mhon pencerahannya…
sya menggunakan win7 64,delphi 7 dan zeoslib 6.6.6
mas maksudnya printer selected is not valid saat membuat laporan dengan qreport………. ?
gan
[ask]
mastah,, mo nanya kalo kaya gini masalahnya ap yak
ane pake komponen zconection, dipengaturan propertis ane pada bagian user ane isi sama kaya defoult yuser pc ane,, jdinya err gini ,
(SQL Error:acces denied for user ‘devuser’@localhost'(yusing pasword:yes)),
pake pengaturan user defoult dari mysql ane juga erornya sama,,, server pake usbwebserver v8.6, mohon pencerahan nuwun,,
Password salah
Pingback: Menyimpan Data Gambar dan Dokumen Di Database MySQL Menggunakan Delphi | KPPDI Group Archive