Sabtu, 20 November 2010
Cursor for SQL Server
Sebagaimana layaknya bahasa pemrograman seperti C#, Delphi, Visual Basic atau lainnya tentunya tidak lepas dari proses perulangan, entah itu dengan menggunakan for, while atau apalah yang tujuan utamanya adalah untuk melakukan suatu proses perulangan dalam aplikasi yang kita buat.
tidak terlepas pula dengan Sql Server juga memiliki fasilitas ini yang salah satunya bisa pula diterapkan dalam storeprocedure yang biasa penulis lakukan tentunya hehehe.
untuk contoh sederhana mungkin akan penulis buatkan contoh sebagai berikut:
kita memiliki 2 buah tabel yaitu tabel master dan tabel detail, yang didalam tabel detail memiliki file perhitungan yang jumlah perhitungan dalam masing-masing recordnya akan diakumulasikan dan diupdate kedalam tabel master .
Sebelumnya kita coba untuk membuat 2 buah tabel sederhana berikut:
CREATE TABLE [dbo].[tbmaster](
[NOBUKTI] [char](20) NOT NULL,
[JUMLAH] [numeric](18, 2) NULL DEFAULT (0))
CONSTRAINT [PK_tbmaster] PRIMARY KEY CLUSTERED
([NOBUKTI] ASC)ON [PRIMARY])
CREATE TABLE [dbo].[tbdetail](
[ID] [numeric](18, 0) IDENTITY(1,1) NOT NULL, [kdbarang] [char](20) NOT DEFAULT(''),
[QTY] [uang] [numeric](18, 2) NULL DEFAULT (0),
[HARGA] [uang] [numeric](18, 2) NULL DEFAULT (0))
CONSTRAINT [PK_tbdetail] PRIMARY KEY CLUSTERED
([ID] ASC)ON [PRIMARY])
Untuk mempermudah pemrosesan data silahkan isikan terlebih dahulu data-data untuk kedua buah tabel tersebut sebanyak-banyaknya, akan tetapi saya anjurkan agar membuat data-data didalam 2 buah tabel ini saling berhubungan dengan dihubungkan dari NoBukti.
Selanjutnya sesuai dengan topik bahasan diatas yaitu cursor, penulis ingin mencoba memberikan contoh sederhana , mengikuti tabel diatas penulis menginginkan bahwa field jumlah di tabel tbMaster akan terupdate dari nilai perkalian dari field Qty dan field Harga yang ada ditabel tbdetail. untuk itu kita coba membuat store procedure sederhana berikut :
create procedure [dbo].[spUpdateJumlah]
as
begin tran
declare @nobuk varchar(20),@J numeric(18,0)
declare CurHitung cursor for select nobukti from tbmaster order
by nobukti
open CurHitung
fetch next from CurHitung into @nobuk
while @@fetch_status = 0
begin
select @J = sum(qty*harga) from tbdetai where
nobukti=@nobuk
update tbmaster set jumlah=isNull(@J,0)
where nobukti=@nobuk
fetch next from CurHitung into @nobuk
end
close CurHitung
Deallocate CurHitung
if @@error<>0 goto salah
commit tran
return
Salah:
rollback tran
raiserror('Ada Kesalahan ',16,1)
return
Untuk menjalankannya kita cukup ketikkan spUpdateJumlah dan silahkan dieksekusi
dan untuk melihat hasil dr proses store procedure ini kita cukup ketikkan:
select * from tbmaster order by nobukti
Namun penulis anjurkan apabila tidak sangat diperlukan hasil perhitungan disimpan sebaiknya kita tidak menambahkan field didalam tabel karena akan membuat kinerja database kita menjadi tidak efektif, bandingkan apabila kita hanya memerlukan nilai jumlah hanya untuk ditampilkan saja dan bukan untuk proses lebih lanjut maka kita tidak memerlukan media simpan/field tambahan seperti diatas, coba kita bandingkan dengan hasil berikut (dalam kasus bahwa data penjumlahan hanya untuk ditampilkan):
select a.nobukti,sum(b.qty * b.harga) as jumlah from tbmaster a, tbdetail b where a.nobukti=b.nobukti group by nobukti
hasilnya sama bukan?, kiranya ini yang dapat penulis contohkan melalui contoh sederhana ini untuk penggunaan "Cursor", dan penulis mohon maaf apabila tulisan ini masih jauh dari sempurna,
Salam..
Selasa, 16 November 2010
Insert and display the icon into the Delphi Grid
dengan judul diatas sebelumnya penulis pernah mengalami kesulitan dalam menampilkan icon kedalam grid yang kebetulan penulis menggunakan database mysql, dari beberapa kali experimen (caile... kayak prof aja padahal kebetulan aja bisa) akhirnya penulis dapat menyelesaikan masalah tersebut seperti tampilan berikut :kita langsung aja ya,
yang kita butuhkan tentunya VCL yang mendukung koneksi kedatabase, dalam hal ini penulis menggunakan komponennya Zeos yang bisa didownload dibeberapa situs internet, kemudian setelah koneksikan database melalui komponen zeos, tambahkan komponen ZQuery untuk memfilter data yang akan kita butuhkan untuk ditampilkan kedalam grid.
selanjutnya tambahkan komponen ImageList, komponen Image serta komponen DataGrid.
Field : kdNgr char(3) Primari key
Rupiah numeric(18,2)
Dolar numeric(18,2)
nah untuk kebutuhan linknya nama file icon penulis samakan dengan nama isi dari field KdNgr.
selanjutnya kita buat procedure untuk mengenali dan menempatkan icon kedalam colom di grid
procedure TForm5.cekbendera;
var nm:string;
begin
with qKurs do
begin
first;
while not Eof do
begin
nm:=trim(Fields[0].Value);
Try
image1.Picture.LoadFromFile('D:\delphi\Delphi\Kurs Mandiri\bendera\ICON\'+nm+'.ICO');
ImageList1.AddIcon(Image1.Picture.icon);
except
End;
next;
end;
end;
end;
selanjutnya letakkan even DrawColumnCell kedalam Grid dengan kode berikut:
procedure TForm5.Grid1DrawColumnCell(Sender: TObject; const Rect: TRect;
begin
s:=0;
with BGrid1 do
begin
if DataCol=0 then
begin
ImageList1.Draw(Canvas,rect.Left+30, Rect.Top+1,qKurs.Fields[3].value);
end;
end;
end;
Jadi deh... tinggal selanjutnya tinggal kita tentukan kapan nih procedure kita panggil;
bisa pula pada saat even form on Create dengan mengetikkan perintah berikut:
Procedure Form5.FormCreate(Sender: TObject);
begin
ZQuery.active:=true;
cekbendera;
end;