Home > Component, Database, Delphi, Tips & Tricks > Koneksi Database Dengan Delphi, MySQL & ZEOS

Koneksi Database Dengan Delphi, MySQL & ZEOS

Setelah 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.

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 Settingsuser>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 Settingsuser>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

Contoh Aplikasi Menggunakan Zeos Database Object

Tentu saja bagian ini ga’ boleh lewat. Langsung saja.


Download

Download Zeos DBO 6.6.3-stable-packed-down
Download Source code tutorialLink 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:

Selamat Mencoba. Untuk Mba’ Euis Marlina, thanks berat atas postingnya.



Related Posts Plugin for WordPress, Blogger...

 

  1. August 2nd, 2009 at 02:56 | #1

    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?

  2. August 2nd, 2009 at 05:18 | #2

    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.

  3. August 2nd, 2009 at 07:38 | #3

    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

  4. August 2nd, 2009 at 07:40 | #4

    Ntar dech aq kirimin script lengkapnya. Maklum, lg pake HP.

  5. August 2nd, 2009 at 08:00 | #5

    iya dong, pake drop table lebih ok :)

  6. August 3rd, 2009 at 02:51 | #6

    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)+’binscript.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)+’binscript.sql’) then
    DeleteFile(ExtractFilePath(Application.Exename)+’binscript.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…

  7. indri
    August 5th, 2009 at 02:28 | #7

    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

    • August 14th, 2009 at 09:25 | #8

      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 :)

  8. August 6th, 2009 at 04:12 | #9

    @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)+’binscript.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….

  9. August 11th, 2009 at 09:38 | #10

    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, :mrgreen:
    Man’z

  10. August 14th, 2009 at 03:00 | #13

    Apakah ZEOS Stabil dan Cepat dibandingkan MySQL ODBC?

    • August 14th, 2009 at 09:22 | #14

      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?

  11. August 15th, 2009 at 04:04 | #15

    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?

    • August 15th, 2009 at 11:56 | #16

      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 :)

  12. August 17th, 2009 at 02:13 | #17

    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?

  13. August 18th, 2009 at 02:25 | #18

    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.

    • August 18th, 2009 at 06:45 | #19

      Pesan errornya apa?
      libmysql.dll terdapat dalam folder %MySQL%bin, bukan bagian dari Zeos :)

  14. August 18th, 2009 at 15:38 | #20

    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.

  15. September 3rd, 2009 at 01:54 | #21

    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 ???

  16. September 3rd, 2009 at 03:20 | #22

    @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…

  17. September 3rd, 2009 at 03:30 | #23

    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..

    • September 3rd, 2009 at 14:57 | #24

      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 :)

  18. Toni Cahyadi
    November 4th, 2009 at 06:25 | #25

    Makasih mas…..

  19. delphier
    November 30th, 2009 at 13:50 | #26

    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

    • November 30th, 2009 at 14:44 | #27

      prosesnya mengerjakan apa? Itu intinya. Bila dapat diperjelas, mungkin akan lebih mudah dibahas :)

      • delphier
        November 30th, 2009 at 16:03 | #28

        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

  20. December 2nd, 2009 at 14:04 | #29

    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 :)

  21. stefen
    March 5th, 2010 at 14:26 | #30

    gimna ya caranya menggunakan ZQuery buat mengirim sql ke mysql..?? Mis. kl mau input data, update data, dan hapus data…

    • April 4th, 2010 at 15:15 | #31

      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:

      ZConnection1.ExecuteDirect('delete from user wehere id = 1');
      

      HTH :)

      • May 20th, 2010 at 16:55 | #32

        Bisa kok mas dengan Zquery
        contoh :
        strSql := ‘INSERT INTO tablea(id,nama)VALUES(isi_id,isi_nama)’;
        ZQuery1.Append(strSql);
        ZQuery1.ExecSql;

      • May 20th, 2010 at 19:46 | #33

        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 :)

  22. Bliss
    April 3rd, 2010 at 18:51 | #34

    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

  23. April 4th, 2010 at 15:21 | #35

    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:

    procedure TForm1.Timer1Timer(Sender: TObject);
    begin
      Ztable1.Append;
      //ZTable1['id']:=0; --> bisa dipastikan id ini adalah aouto increment :)
      Ztable1['waktu']:= Time();
      ZTable1['suhu']:=35.63;
      ZTable1.Post;
    end;
    

    Saya berasumsi Mas menggunakan Zeos DBO (TZTable), melihat komentar Mas pada posting tentang Zeos :)

  24. May 5th, 2010 at 08:57 | #36

    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?

    • May 5th, 2010 at 18:34 | #37

      Wah, belum pernah dapat kasus begini bos. :(

      • albertpratama
        May 6th, 2010 at 02:00 | #38

        Akhirnya, saya ganti pake MySQL kelihatannya gak ada masalah..

  25. May 15th, 2010 at 19:29 | #39

    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?

  26. May 17th, 2010 at 11:58 | #40

    Yang jadi pertanyaan adalah:
    Ada pesan error gak? Kalo ada, apa pesan errornya??

  27. May 21st, 2010 at 18:58 | #41

    errornya kayak gini mas “is not valid floating point value”
    kalo delphi sama vb bedanya dimana mas dan kenapa mas lebih memilih delphi?

    • May 22nd, 2010 at 11:34 | #42

      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 :)

  28. May 22nd, 2010 at 11:29 | #43

    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:

    function UbahKeFloat(AString: String): Double;
    var
      AngkaTerformat: String;
      Ubah:String;
      f: Double;
    begin
      Ubah:='';
      AngkaTerformat:=AString;
      if Pos('(', AngkaTerformat) > 0 then
      begin
        Ubah:='-';
        Delete(AngkaTerformat,1,1);
        Delete(AngkaTerformat,length(AngkaTerformat),1);
      end;
      AngkaTerformat:=StringReplace(AngkaTerformat, '.','',[]);
      AngkaTerformat:=StringReplace(AngkaTerformat, ',','.',[]);
      Ubah:=Ubah+ AngkaTerformat;
      Result:=StrToFloat(Ubah);
    end;
    

    Penggunaanya cukup mudah:

    Suhu := UbahKeFloat(Edit1.Text);
    

    HTH :)

  29. June 20th, 2010 at 12:00 | #44

    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..

  30. June 24th, 2010 at 06:14 | #46

    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

    • August 14th, 2010 at 19:59 | #47

      Jangan pake ZConnection atau ZQuery. Untuk rangkaian perintah SQL, gunakan ZSQLPeocessor.

      ZSQLProcessor1.Script.Clear;
        ZSQLProcessor1.Script.Add('drop table if exists tes;');
        ZSQLProcessor1.Script.Add('create table tes ( nomor int(8) );');
        ZSQLProcessor1.Script.Add('insert into tes values (1);');
        ZSQLProcessor1.Script.Add('insert into tes values (2);');
        ZSQLProcessor1.Script.Add('insert into tes values (3);');
        ZSQLProcessor1.Script.Add('insert into tes values (4);');
        ZSQLProcessor1.Execute;
      
  31. July 12th, 2010 at 05:33 | #48

    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

  32. August 13th, 2010 at 11:22 | #49

    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

  33. August 14th, 2010 at 23:33 | #50

    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

  34. November 20th, 2010 at 01:46 | #51

    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

  35. niki
    November 21st, 2010 at 13:23 | #53

    bang, aku mw tanya…

    kalo muncul pesan error “Acces violation at address 00000000. Read of address 00000000″
    masalahnya apa ya?

    mohon bantuannya… thx b4

    • November 27th, 2010 at 09:10 | #54

      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

      procedure TForm1.Button1Click(Sender: TObject);
      begin
        Form2.Show;   { sementara Form 2 belum dicreate, alias Form2 menunjuk ke memory 00000000 }
      end;
      
  36. Harry
    December 22nd, 2010 at 12:04 | #55

    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..

  37. December 23rd, 2010 at 09:35 | #56

    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 :)

    • papih
      October 24th, 2011 at 12:20 | #57

      Wwesyuh, cape deh.. terima kasih banyak mas bro saya udah pake cara itu hanya saya salah masukin hostnya

  38. mukti
    December 28th, 2010 at 07:22 | #58

    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

    • December 29th, 2010 at 23:37 | #59

      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

      • mukti
        December 30th, 2010 at 10:01 | #60

        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

      • December 31st, 2010 at 10:12 | #61

        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.

  39. riagil
    December 31st, 2010 at 01:06 | #62

    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.

  40. riagil
    January 6th, 2011 at 13:00 | #64

    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…

    • January 9th, 2011 at 15:53 | #65

      Biasanya dengan looping pada tiap record yg ditandai pada SMDBgrid.

      procedure TForm2.Button1Click(Sender: TObject);
      var
        BM: TBookmark;
        i:integer;
      begin
        if SMDBGrid1.SelectedRows.Count = 0 then exit;
        SMDBGrid1.DataSource.DataSet.DisableControls;
        Bm:=SMDBGrid1.DataSource.DataSet.GetBookmark;
        try
          for i := 0 to SMDBGrid1.SelectedRows.Count -1 do
          begin
            //Tandai record di dataset:
            SMDBGrid1.DataSource.DataSet.Bookmark := SMDBGrid1.SelectedRows.Items[i];
            //insert data:
            ADOTable1.Append;
            Adotable1.Fields[0].AsString := SMDBGrid1.DataSource.DataSet.Fields[0];
            // lanjutkan.... dengan field2 yg. lainnya.
            ADOTable1.Post;
          end;
        finally
          SMDBGrid1.DataSource.DataSet.GotoBookmark(BM);
          SMDBGrid1.DataSource.DataSet.EnableControls;
        end;
      end;
      
  41. riagil
    January 12th, 2011 at 00:07 | #66

    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…

    • January 13th, 2011 at 14:16 | #67

      Berarti tabel A harus diedit, ya?
      Setiap insert ke tabel B, tabel A diedit, misalnya:

      Tabel1.Edit;
      Tabel1.FieldByName('Jumlah').AsInteger := Table1.FieldByName('Jumlah').AsInteger - 1;
      Tabe1l.Post;
      

      Harus dipikirkan, jika jumlah di tabel 1 kosong, maka tidak bisa diinsert ke tabel 2. Btw, Point of Sale nih? :)

  42. Riagil
    January 14th, 2011 at 02:48 | #68

    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…

  43. riagil
    January 14th, 2011 at 12:14 | #69

    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;

  44. January 15th, 2011 at 19:38 | #70

    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.

  45. Riagil
    January 18th, 2011 at 03:15 | #71

    ok mas, tak coba dlu…
    makasih infonya…

  46. Riagl
    February 20th, 2011 at 10:59 | #72

    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….

    • February 21st, 2011 at 07:25 | #73

      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 :)

  47. May 9th, 2011 at 17:52 | #74

    Lazarus+Zeos+Linuxnya mana ya? Zeos 666 stble belum bisa dimasukin lazarus 9.3 niii

    • Rivalina
      May 10th, 2011 at 14:56 | #75

      @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.

      • sandi
        November 7th, 2011 at 19:42 | #76

        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

  48. Indra
    May 30th, 2011 at 08:35 | #77

    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)?

  49. Rivalina
    May 30th, 2011 at 12:12 | #78

    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 :)

  50. saiful anwar
    June 22nd, 2011 at 11:57 | #79

    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.

Comment pages