Implementasi Query Saldo Berjalan di Delphi

Melanjutkan postingan mengenai saldo berjalan di MySQL dan Firebird, konsep yang sudah dijabarkan dalam artikel tersebut sekarang kita implementasikan di Delphi Zeos DBO.

Design Time

Secara design time query yang “aneh-aneh” ini memang susah diterapkan tapi bukan berarti tidak bisa karena asalkan tipe data yang dihasilkan sama maka ketika query dirubah saat runtime tidak akan menyebabkan error.

MySQL

Taruh komponen TZquery di form lalu setting property “delimiterchar” dari “:” ke “!”.  Setelah itu isi property SQL sebagai berikut:


select idtransaksi,debet,kredit,@saldo =@saldo+debet-kredit as saldo from transaksi;

Opsional membuat persistent fields.

  • Klik kanan di komponen TzQuery tersebut lalu klik add All Fields lalu tekan tombol OK.

Penjelasan:

  • Field saldo sebagaimana tercantum di query di atas adalah sebagai query “pancingan” agar data yang ada di Fields Editor menjadi TlargeIntField, dan nantinya saat runtime, query di atas tidak berpengaruh lagi.
  • Secara default property delimiterchar adalah tanda titik dua “:”.  Karena tanda tersebut jika di TZquery dianggap sebagai parameter, sedangkan di MySQL tanda tersebut bisa digunakan untuk query maka anda harus merubah delimiterchar dari “:” ke tanda lain selain titik dua misal tanda seru “!”.  Selain itu anda bisa juga merubah property ParamCheck=false agar query yang ada tanda titik dua tersebut tidak di anggap sebagai parameter di Delphi.

Firebird

Adapun langkah untuk Firebird hampir sama dengan MySQL hanya di property SQL diisi sebagai berikut:


EXECUTE BLOCK(saldo_mulai int=!saldo_awal)
RETURNS ( idtransaksi int,debet int,kredit int,saldo int)
AS
declare msaldo_awal integer;
declare mdebet integer;
declare mkredit integer;
BEGIN
msaldo_awal=saldo_mulai;
for select idtransaksi,debet,kredit from transaksi into :idtransaksi,:mdebet,:mkredit
do 
begin
msaldo_awal=msaldo_awal+mdebet-mkredit;
debet=mdebet;
kredit=mkredit;
saldo=msaldo_awal;
suspend;

end
end

Run Time

MySQL


conmysql.ExecuteDirect('set @saldo='+edt1.Text);
with zqrytransaksimysql do
begin
Close;
SQL.Text:='select idtransaksi,debet,kredit,@saldo:=@saldo+debet-kredit as saldo from transaksi';
Open;
end;

 

Firebird

Untuk firebird anda hanya cukup memanggil parameternya saja.


with zqrytransaksifirebird do
begin
Close;
ParamByName('saldo_awal').AsInteger:=StrToInt(edt1.Text);
Open;
end;

Untuk script lebih lengkap anda bisa pelajari attachment yang saya sertakan di bawah. Anda cukup mengganti user, password, driver dan database menyesuaikan dengan setting database anda.

Dan berikut hasil dari query tersebut di atas.

Delphi Query Saldo Berjalan

FAQ:

Mengapa query design time dan runtime berbeda?

Semata-mata untuk menghindari error.

Apakah bisa query hanya runtime saja?

Bisa, query dibuat saat design time semata-mata untuk memudahkan penyusunan kolom di DBGrid dan juga membuat persisten fields sehingga data mudah untuk diformat.

Attachments

anasmbahdien

Seorang programmer yang menguasai bahasa pemograman Delphi, VB.NET, PHP dan Android. Untuk hasil karya kunjungi mogotekno.com

Tinggalkan Balasan

Alamat email Anda tidak akan dipublikasikan. Ruas yang wajib ditandai *