Sunday, August 12 2007 @ 11:30 AM UTCContributed by: ekoindriyawan
Sekarang ini saya akan kembali memberikan tips yang mungkin sangat berguna buat temen-temen
terutama yang sedang belajar pemrograman Database MS SQL Server dengan Delphi.
Tips kali ini mencoba akan membuka wawasan kepada anda tentang bagaimana cara memanfaatkan
sebuah stored procedure itu bisa menghasilkan hasil yang maksimal dan tepat. Ibarat orang sih,
orang yang smart..... ci ile....... koyok uwong ae
btw ingin lihat detailnya silahkan baca lebih lanjut artikel ini
Pada kesempatan kali ini saya hanya menekankan pada konsep pembuatan stored prosedur dan gimana cara
mengaksesnya dari Delphi. Sebagai kisi-kisi diawal, untuk koneksinya saya menggunakan ADO.
Langsung saja kita ke pokok permasalahan.
Sebelum anda membuat Stored Procedure, pastikan anda aktifkan dulu database Northwind. Hal ini saya tunjukan biar temen-temen ketika mempelajari ini nggak ribet bikin database dan tabel
Sekarang silahkan buat Stored Procedure dengan query seperti terlihat berikut :
CREATE PROCEDURE [Latihan Pemrograman Database MS SQL Server dengan Delphi by Eko Indriyawan]
@TotalProduct int OUTPUT,
@TotalJenisSatuan int OUTPUT,
@TotalBarangDiscontinued int OUTPUT,
@TotalBarangContinued int OUTPUT
AS
SELECT @TotalProduct = COUNT(ProductName)
FROM Products
SELECT @TotalJenisSatuan = COUNT(QuantityPerUnit)
FROM Products
SELECT @TotalBarangDiscontinued = COUNT(Discontinued)
FROM Products
WHERE Discontinued = 1
SELECT @TotalBarangContinued = COUNT(Discontinued)
FROM Products
WHERE Discontinued = 0
SELECT ProductName,
QuantityPerUnit,
UnitPrice,
UnitsInStock,
UnitsOnOrder,
ReorderLevel,
Discontinued
FROM Products
GO
Sekarang apa yang anda pikirkan tentang query yang ada didalam stored procedure diatas? Kalau anda
tidak jeli melihat query ini mungkin anda akan tertipu, namun apabila anda jeli anda akan melihat ada
keanehan yang mana keanehan itulah yang membuat stored procedure ini menjadi lebih bermakna
dan berguna.
Apabila pada umumnya kita membuat stored procedure hanya untuk melakukan proses eksekusi query
saja tanpa menghasilkan record atau proses select data dalam tabel yang menghasilkan satu atau beberapa
record data.
Berdasarkan pada query yang dicontohkan diatas terlihat bahwa stored procedure ini selain melakukan proses
eksukusi terhadap sebuah query-query yang menghasilkan informasi yang kemudian disimpan dalam parameter-
parameter juga melakukan proses select data yang mengembalikan sebuah record-record.
Dengan kata lain, stored prosedur diatas setiap kali dieksekusi selalu melakukan proses two in one, dimana
mengembalikan informasi dalam bentuk parameter Out Put juga mengembalikan informasi dalam bentuk record.
Mungkin beberapa temen yang lain yang belum tahu cara ini pasti melakukan semua proses diatas dalam beberapa
stored procedure yang mana hal tersebut bisa mengurangi performance dari kerja aplikasi yang kita buat. Apalagi
kalau aplikasi yang kita buat itu sangat kompleks dan integrated, so you must smart to face it.
Apabila sudah selesai membuat stored prosedur seperti ditunjukkan pada query diatas, sekarang
saatnya kita bermain-main dengan Delphi.
1. Silahkan anda buka program Delphi anda
2. Untuk langkah awal jangan menambahkan object apapun kedalam Form1
3. Silahkan anda klik kanan Form dari aplikasi yang baru saja anda buat
4. Pilih item View As Text
5. Ubah kode-nya menjadi seperti berikut ini
object Form1: TForm1
Left = 194
Top = 144
Width = 744
Height = 452
Caption = 'Latihan'
Color = 16632033
Font.Charset = DEFAULT_CHARSET
Font.Color = clWindowText
Font.Height = -11
Font.Name = 'MS Sans Serif'
Font.Style = []
OldCreateOrder = False
PixelsPerInch = 96
TextHeight = 13
object RzLabel1: TRzLabel
Left = 8
Top = 8
Width = 69
Height = 13
Caption = 'Daftar Product'
end
object DBGrid1: TDBGrid
Left = 8
Top = 24
Width = 720
Height = 220
DataSource = DataSource1
Options = [dgTitles, dgIndicator, dgColumnResize, dgColLines, dgRowLines, dgTabs, dgRowSelect, dgAlwaysShowSelection, dgConfirmDelete, dgCancelOnExit]
TabOrder = 0
TitleFont.Charset = DEFAULT_CHARSET
TitleFont.Color = clWindowText
TitleFont.Height = -11
TitleFont.Name = 'MS Sans Serif'
TitleFont.Style = []
Columns = < expanded =" False" fieldname =" 'ProductName'" width =" 145" visible =" True" expanded =" False" fieldname =" 'QuantityPerUnit'" width =" 108" visible =" True" expanded =" False" fieldname =" 'UnitPrice'" visible =" True" expanded =" False" fieldname =" 'UnitsInStock'" width =" 77" visible =" True" expanded =" False" fieldname =" 'UnitsOnOrder'" width =" 74" visible =" True" expanded =" False" fieldname =" 'ReorderLevel'" width =" 82" visible =" True" expanded =" False" fieldname =" 'Discontinued'" width =" 70" visible =" True">
end
object Panel1: TPanel
Left = 8
Top = 274
Width = 721
Height = 135
BevelOuter = bvLowered
TabOrder = 1
object Label1: TLabel
Left = 16
Top = 12
Width = 100
Height = 13
Caption = 'Total Jumlah Product'
end
object Label2: TLabel
Left = 16
Top = 36
Width = 97
Height = 13
Caption = 'Total Jumlah Satuan'
end
object Label3: TLabel
Left = 16
Top = 60
Width = 119
Height = 13
Caption = 'Total Jumlah Discontiued'
end
object Label4: TLabel
Left = 16
Top = 84
Width = 111
Height = 13
Caption = 'Total Jumlah Continued'
end
object Bevel1: TBevel
Left = 16
Top = 105
Width = 697
Height = 42
Shape = bsTopLine
end
object Label5: TLabel
Left = 16
Top = 107
Width = 383
Height = 14
Caption =
'Belajar yang rajin itu bisa menghantarkan anda ke tujuan yang an' +
'da cita-citakan'
Font.Charset = DEFAULT_CHARSET
Font.Color = 7368816
Font.Height = -11
Font.Name = 'Times New Roman'
Font.Style = [fsItalic]
ParentFont = False
end
object Edit1: TEdit
Left = 144
Top = 8
Width = 30
Height = 21
TabOrder = 0
end
object Edit2: TEdit
Left = 144
Top = 32
Width = 30
Height = 21
TabOrder = 1
end
object Edit3: TEdit
Left = 144
Top = 56
Width = 30
Height = 21
TabOrder = 2
end
object Edit4: TEdit
Left = 144
Top = 80
Width = 30
Height = 21
TabOrder = 3
end
end
object Button1: TButton
Left = 8
Top = 247
Width = 75
Height = 25
Caption = 'Load Data'
TabOrder = 2
end
object ADOStoredProc1: TADOStoredProc
Connection = ADOConnection1
CursorType = ctStatic
ProcedureName =
'Latihan Pemrograman Database MS SQL Server dengan Delphi by Eko ' +
'Indriyawan;1'
Parameters = < name =" '@RETURN_VALUE'" datatype =" ftInteger" direction =" pdReturnValue" precision =" 10" value =" 0" name =" '@TotalProduct'" attributes =" [paNullable]" datatype =" ftInteger" direction =" pdInputOutput" precision =" 10" value =" 77" name =" '@TotalJenisSatuan'" attributes =" [paNullable]" datatype =" ftInteger" direction =" pdInputOutput" precision =" 10" value =" 77" name =" '@TotalBarangDiscontinued'" attributes =" [paNullable]" datatype =" ftInteger" direction =" pdInputOutput" precision =" 10" value =" 8" name =" '@TotalBarangContinued'" attributes =" [paNullable]" datatype =" ftInteger" direction =" pdInputOutput" precision =" 10" value =" 69">
Left = 144
Top = 56
object ADOStoredProc1ProductName: TWideStringField
FieldName = 'ProductName'
Size = 40
end
object ADOStoredProc1QuantityPerUnit: TWideStringField
FieldName = 'QuantityPerUnit'
end
object ADOStoredProc1UnitPrice: TBCDField
FieldName = 'UnitPrice'
Precision = 19
end
object ADOStoredProc1UnitsInStock: TSmallintField
FieldName = 'UnitsInStock'
end
object ADOStoredProc1UnitsOnOrder: TSmallintField
FieldName = 'UnitsOnOrder'
end
object ADOStoredProc1ReorderLevel: TSmallintField
FieldName = 'ReorderLevel'
end
object ADOStoredProc1Discontinued: TBooleanField
FieldName = 'Discontinued'
end
end
object ADOConnection1: TADOConnection
Connected = True
ConnectionString =
'Provider=SQLOLEDB.1;Integrated Security=SSPI;Persist Security In' +
'fo=False;Initial Catalog=Northwind;Data Source=(local)'
LoginPrompt = False
Provider = 'SQLOLEDB.1'
Left = 112
Top = 56
end
object DataSource1: TDataSource
DataSet = ADOStoredProc1
Left = 144
Top = 88
end
end
6. Setelah itu silahkan anda klik kanan lagi
7. Kemudian pilih item View as Form
8. Pilih semua object dengan menekan tombol Ctrl + A
9. Cut semua object dengan menekan tombol Ctrl + X
10. Paste semua object dengan menekan tombol Ctrl + V
11. Tujuan proses diatas adalah untuk melakukan proses pendeklarasian object secara otomatis dengan
Form1 sebagai parentnya.
12. Proses diatas secara otomatis juga sudah membuat connectionstring, sehingga anda tinggal pakai aja
13. Agar lebih sempurnanya pada bagian connectionstring, silahkan anda ganti AURECO dengan nama
Komputer sesuai dengan nama komputer yang anda gunakan sekarang.
14. Tahap selanjutnya adalah silahkan anda lanjutkan dengan mengklik 2x tombol Button1 dan isikan kode
Program didalamnya seperti terlihat pada potongan kode program berikut dibawah ini:
....
....
procedure TForm1.Button1Click(Sender: TObject);
begin
with ADOStoredProc1 do
begin
Close;
Open;
Edit1.Text := IntToStr(Parameters[1].Value);
Edit2.Text := IntToStr(Parameters[2].Value);
Edit3.Text := IntToStr(Parameters[3].Value);
Edit4.Text := IntToStr(Parameters[4].Value);
end;
end;
....
....
15. Kemudian secara lengkap kode program dari aplikasi ini adalah seperti terlihat berikut dibawah ini.
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, ExtCtrls, RzLabel, DB, Grids, DBGrids, ADODB, XPMan;
type
TForm1 = class(TForm)
ADOStoredProc1: TADOStoredProc;
ADOConnection1: TADOConnection;
DataSource1: TDataSource;
DBGrid1: TDBGrid;
ADOStoredProc1ProductName: TWideStringField;
ADOStoredProc1QuantityPerUnit: TWideStringField;
ADOStoredProc1UnitPrice: TBCDField;
ADOStoredProc1UnitsInStock: TSmallintField;
ADOStoredProc1UnitsOnOrder: TSmallintField;
ADOStoredProc1ReorderLevel: TSmallintField;
ADOStoredProc1Discontinued: TBooleanField;
RzLabel1: TRzLabel;
Panel1: TPanel;
Label1: TLabel;
Edit1: TEdit;
Edit2: TEdit;
Label2: TLabel;
Edit3: TEdit;
Label3: TLabel;
Edit4: TEdit;
Label4: TLabel;
Bevel1: TBevel;
Label5: TLabel;
Button1: TButton;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject);
begin
with ADOStoredProc1 do
begin
Close;
Open;
Edit1.Text := IntToStr(Parameters[1].Value);
Edit2.Text := IntToStr(Parameters[2].Value);
Edit3.Text := IntToStr(Parameters[3].Value);
Edit4.Text := IntToStr(Parameters[4].Value);
end;
end;
end.
16. Sekarang silahkan anda compile dan jalankan aplikasnya
17. Tekan tombol "Load Data"
18. Lihat apa yang terjadi...
19. Proses 2 in 1 benar-benar bisa dilakuka.....
20. Gunakan contoh kasus ini dan kembangkan dengan variasi anda sendiri.
21. Semoga artikel ini benar-benar bisa berguna buat temen-temen semua.
Benpinter.Net
http://www.benpinter.net/article.php?story=20070812233008116
Rabu, 28 November 2007
Langganan:
Posting Komentar (Atom)
Tidak ada komentar:
Posting Komentar