Showing posts with label Delphi Programming. Show all posts
Showing posts with label Delphi Programming. Show all posts

Menyisipkan Judul Report didalam Statement SQL

Wednesday, August 6, 2008
Inti dari tutorial ini adalah menunjukan bagaimana caranya menyisipkan string reguler didalam statement SQL. String reguler disini maksudnya adalah string yang bukan nilai dari sebuah table di dalam Database. Contoh :

SELECT 'Daftar Produk (Seluruh)' AS Judul, ProductID,ProductName
FROM Products

Judul ProductID ProductName
------------- ----------- ----------------------------------------
Daftar Produk 17 Alice Mutton
Daftar Produk 3 Aniseed Syrup
Daftar Produk 40 Boston Crab Meat
Daftar Produk 60 Camembert Pierrot
Daftar Produk 18 Carnarvon Tigers
Daftar Produk 1 Chai
. . . .
. . . .

77 rows selected

Statement SQL diatas akan menambahkan kolom JUDUL yang berisi nilai yang sama pada output query nya. nilai-nilai yang ada dibawah kolom JUDUL bukan merupakan nilai-nilai yang ada di table PRODUCTS, melainkan string biasa yang kita sertakan dalam Statement SQL nya. dibawah ini saya akan memperlihatkan contoh bagaimana metode ini dipakai untuk menyisipkan judul laporan yang berbeda kedalam SQL Statement menggunakan hanya satu komponen FastReport di Delphi.

Cara ini biasa saya gunakan untuk menghasilkan judul report berdasarkan parameter yang saya inputkan. misalnya saya akan menampilkan laporan daftar produk per supplier dan ingin agar judul report sesuai dengan nama supplier yang ingin saya cetak misalnya judul report nya ingin seperti ini : 'Daftar Produk Supplier : PT. ABC', 'Daftar Produk Supplier : PT. XYZ' dst dengan catatan struktur kolom dari report tersebut sama. Jadi parameternya saya sisipkan kedalam SQL Statement yang digunakan untuk pengambilan datanya. Sebagai contoh dibawah ini saya perlihatkan bagaimana caranya menyisipkan judul untuk report kedalam sebuah SQL statement menggunakan komponen FastReport dan ADOQuery di Delphi.

procedure TForm1.Button1Click(Sender: TObject);
begin
adoquery1.Close;
adoquery1.SQL.Clear;
adoquery1.SQL.Add('SELECT ');
adoquery1.SQL.Add('''Daftar Produk Supplier : ''+a.CompanyName as Judul,');
adoquery1.SQL.Add('B.ProductID,A.CompanyName,b.ProductName,');
adoquery1.SQL.Add('b.QuantityPerUnit,b.UnitPrice,b.UnitsInStock ');
adoquery1.SQL.Add('FROM suppliers a, Products b ');
adoquery1.SQL.Add('where a.SupplierID=b.SupplierID ');
adoquery1.SQL.Add('AND a.CompanyName = :CN');
adoquery1.Parameters[0].Value := combobox1.Text;
adoquery1.Prepared := true;
adoquery1.Open;

//kalau data ada
if adoquery1.RecordCount > 0 then
frxReport1.ShowReport();

end;


kamu bisa lihat didalam Statement SQL diatas saya sisipkan string 'Daftar Produk Supplier :' yang digabung dengan nilai CompanyName dari table Suppliers yang kemudian dialiaskan sebagai kolom/field Judul yang nantinya field/kolom Judul ini akan saya tempatkan di report sebagai judul report. agar lebih jelas kamu bisa lihat gambar dibawah ini :

Report Design
Report Design

Application Runtime
Application Runtime


Report Runtime
Report Runtime

Dengan metode ini kamu bisa memberikan judul report yang lebih detail tanpa harus memboroskan pemakaian komponen untuk mencetak berbagai report yang mempunyai struktur kolom yang sama.

Download Source Code Aplikasi ini disini.

Combobox dengan Dua Kolom (Field)

Friday, July 25, 2008

Menampilkan nilai dari dua field atau lebih dalam satu combobox.


di dalam artikel ini saya akan sharing tips ringan pemrograman Delphi untuk menampilkan nilai dari dua kolom/field dari sebuah table di database menggunakan komponen DBLookupComboBox. disini saya akan menggunakan sebuah database yang dibuat dengan Microsoft Access.



Buat Project baru dan tambahkan sebuah komponen ADOConnection, ADOTable, dan sebuah DataSource ke dalam form. Hubungkan komponen ADOConnection di atas dengan table di database yang kamu pilih. Setelah koneksi dengan Database Microsoft Access sukses, langkah selanjutnya adalah menghubungkan komponen ADOTable ke komponen ADOConnection dan hubungkan juga komponen DataSource ke ADOTable.



Tambahkan komponen DBLookupComboBox (Tab DataControls) ke dalam form. set properties ListSource ke komponen DataSource dan KeyField ke salah satu field dari table yang kamu pakai. Untuk menampilkan dua field atau lebih dalam DBLookupComboBox kamu ketik manual nama-nama field yang ingin kamu tampilkan dalam komponen DBLookupComboBox - setiap field dipisahkan dengan titik koma (;) misalnya : productid;descriptions.




Application Design Time






DBLookupComboBox Properties








Application Run Time


Delphi Tips : Displaying Image in DBGrid Columns

Sunday, July 13, 2008

In this tutorial I will share tips about how to displaying image in the DBGrid columns. You can use this method to mark rows that meet certain conditions matching with the conditions you specified. The components which I use is a TDBGrid, a TDatasource, and it is of course a TADOTable which is connected to a table in a Microsoft Access database. Set each of the component properties so that the components is connected to each other.





The following example show how images is used to mark the records base on value on the UnitsInStock column.


condition :

the product which its UnitsInStock value greater or equal to 10 is marked with a checklist image (checklist.bmp) and product which its UnitsInStock less than 10 is marked with a warning image (warning.bmp).



The Code


procedure TForm1.DBGrid1DrawColumnCell
(Sender: TObject; const Rect: TRect;
DataCol: Integer; Column: TColumn;
State: TGridDrawState);

var
Image : TBitMap;
begin
Image := TBitmap.Create;

try
with Image do begin
Transparent := True;
TransParentColor := Image.Canvas.Brush.Color;
TransparentMode := tmAuto;
end;

{ Image will only displayed if the table is not empty }
if DataSource1.DataSet.RecNo > 0 then
begin
if Column.Title.Caption = 'Stock OK' then
begin
{ if the quantity > 10 }
if (ADOTable1.FieldValues['unitsinstock'] > 10) then
begin
Image.LoadFromFile
(ExtractFilePath(Application.ExeName)+'\good.bmp');
DBGrid1.Canvas.Draw(rect.Left + 2,Rect.Top,Image);
end;

{ if the quantity > 0 and <= 10 }
if (ADOTable1.FieldValues['unitsinstock'] > 0)
and (ADOTable1.FieldValues['unitsinstock'] <= 10) then
begin
Image.LoadFromFile
(ExtractFilePath(Application.ExeName)+'\warning.bmp');
DBGrid1.Canvas.Draw(rect.Left + 2,Rect.Top,Image);
end;

end;
end;

finally
Image.Free;
end;

end;






You can download the source code here

Delphi How To: Creating Calculation Field

Wednesday, June 11, 2008

In this Delphi Tutorial i will explain how to create a calculation field on Delphi DBAware component and show it on the DBGrid. Calculation Field is an additional field that we can create to do automatic calculation at OnCalcFields event.



For example you have a table called SalesDetail that have the following structure :


Table Structure

if you want your Application to do automatic calculation for the total price (UnitPrice * Quantity) as you insert or edit Data, you can follow this steps :




1. Creating Calculation Field On TADOTable Component



  • Add TADOTable Component to a Form

  • Set its ConnectionString and TableName properties so its connected to your Database

  • Right click on the TADOTable component and choose Fields Editor... the Fields Editor will appear

  • Right click on the Fields Editor and choose Add All Fields to include all field in the Table

  • Right Click on Fields Editor and choose New Field... the New Field Dialog will appear

  • Enter a name for this new field in the Name textbox for example CTotal

  • Choose Number Data Type (Integer, Float, Largeint, etc depend on posible value range you will need) on Type combobox

  • Choose Calculated in the Field Type Section and then click the OK button






  • Now you have created a calculation Field called CTotal








2. Adding Code to your Application to do Automatic Calculation



  • Add a DataSource component to the form and connect it to your TTable or TADOTable Component.

  • Add a DBGrid component to the form and connect it to your DataSource Component

  • set the AutoCalcFields Properties of TADOTable Component to True.

  • To do automatic calculation as you insert or edit Data, add this code on OnCalcFields event of TADOTable component

  • AdoTable1.FieldValues['CTotal'] :=

    AdoTable1.FieldValues['UnitPrice'] * AdoTable1.FieldValues['Qty'];




Designtime


Application Designtime


Runtime


Application Runtime



Download Sourcode here

Delphi Programming: Restricting User's Input Characters

Friday, May 30, 2008

For Client-Server Application or Application that Access sensitive Data it is commonly use an Authentication through a login form. you can enhance the security by restricting user to input certain characters in the login form. for example you can restrict user to input only Alphanumeric characters (A-Z,a-z,0-9) for both Username and Password Text. The advantage of this method is to minimize security hole that your application has or minimize the risk of SQL Injection. But the consequences of this method is all registered User must have their Username and Password in Alphanumeric value.



In this Tutorial i will share Delphi Script to restrict certain input characters in a Edit textbox. you must add this code on OnKeyPress Event of an Edit Component. for this tutorial you can add a TEdit(Edit1) and a label (label1).




Code for Restricting character other than Alphanumeric (A-Z,a-z,0-9) :





procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);

var

  SelSt: Integer;

  TmpStr: string;



begin

if not (key in ['a'..'z','A'..'Z','0'..'9',Chr(vk_Back)]) then

  with (Sender as TEdit) do

  begin

    SelSt := SelStart;

    if (Key = Chr(vk_Back)) and (SelLength <> 0) then

    begin

      TmpStr := Copy(Text,1,SelStart)+Copy(Text,SelLength+SelStart+1,255);

      label1.Caption := 'You try to Input : '+tmpstr;

      end

    else if Key = Chr(vk_Back) then

    begin

      TmpStr := Copy(Text,1,SelStart-1)+Copy(Text,SelStart+1,255);

      label1.Caption := 'You try to Input : '+tmpstr;

    end

    else

    begin

      TmpStr := Copy(Text,1,SelStart)+Key+Copy(Text,SelLength+SelStart+1,255);

      label1.Caption := 'You try to Input : '+tmpstr;

    end;



    if TmpStr = '' then Exit;



    if (Key = Chr(vk_Back)) and (SelSt > 0) then Dec(SelSt)

    else if Key <> Chr(vk_Back) then Inc(SelSt);

    Key := #0;

    if SelSt = 0 then

    begin

      Text:= '';

      Exit;

    end;

  end;

end;



Designtime




Runtime


Membuat Aplikasi Database Berbasis Table XML Dengan Delphi 2007

Tuesday, May 20, 2008

Umumnya setiap Aplikasi Database menggunakan File Database dengan format umum seperti Microsoft Access, Paradox, DBase atau jika Aplikasi Database Client-Server akan menggunakan Database Software seperti SQL Server, Oracle dan lain sebagainya. nah Pada tutorial pemrograman Delphi kali ini saya akan sharing cara membuat aplikasi Database dengan Table berbasis file XML. Aplikasi ini cocok untuk Aplikasi Database Desktop single user misalnya seperti aplikasi untuk me-manage daftar situs web penting/favorit kamu atau bisa juga untuk me-manage koleksi film DVD yang kamu punya, dan lain2. ini adalah contoh Aplikasi Database berbasis XML sederhana, namun tujuannya dari artikel ini adalah sharing pengetahuan kepada kamu yang mungkin belum mengetahui cara melakukan manipulasi data ke dalam file format XML yang mencakup Retrieve/Find (Select), Append (Insert), Edit (Update), dan Delete Data.



Disini kita akan membuat aplikasi dengan Delphi 2007 untuk me-manage koleksi website favorit kita misalnya. Field-field Data yang kita butuhkan adalah SiteID, SiteURL, dan SiteDesc. Field SiteID adalah ID unik untuk setiap situs, SiteURL adalah alamat URL website dan terakhir SiteDesc adalah deskripsi dari situs ini bisa kita tambahkan sebagai informasi tambahan isi/tema sebuah website.



Dibawah ini adalah table komponen-komponen yang kita butuhkan berserta nilai beberapa propertiesnya:















































































































































































































































Komponen



Properties



Value



Form1



Name



Fmain




Caption



Katalog Web



ClientDataSet



Name



CDS




FieldDefs



0 - SiteID, DataType: ftInteger, Size: 0

1 - SiteURL, DataType: ftString, Size: 50

2 - SiteDesc, DataType: ftString, Size: 255


Setelah itu klik kanan CDS, kemudian pilih Create Dataset. untuk membentuk struktur dataset diatas




FileName



KatalogWeb.xml



DataSource1



Name



DS




DataSet



CDS



GroupBox1



Name



GBsiteList




Caption



Website List



Edit1



Name



ECari



ListBox1



Name



LBSiteList



GroupBox2



Name



GBNew




Caption



Data Baru



Edit2



Name



ESiteID



Edit3



Name



ESiteURL



Memo1



Name



MSiteDesc



Button1



Name



BtnOK




Caption



OK



Button2



Name



BtnCancel




Caption



Cancel



GroupBox3



Name



GBDetail




Caption



Website Details



DBEdit1



Name



DBESiteID




DataSource



DS




DataField



SiteID



DBEdit2



Name



DBESiteURL




DataSource



DS




DataField



SiteURL



DBMemo1



Name



DBMSiteDesc




DataSource



DS




DataField



SiteDesc



BitBtn1



Name



BtnDel



BitBtn



Name



BtnEdit



Form2



Name



FEdit




Caption



Edit Website



Edit4



Name



ESiteID



GroupBox4



Name



GBEdit




Caption



Detail Website




Enable



False



Edit5



Name



ESiteURL



Memo2



Name



MSiteDesc



Button3



Name



BtnOK




Caption



OK



Button4



Name



BtnCancel




Caption



Cancel




ModalResult



mrCancel




Application Interface


Tambahkan beberapa label kemudian Atur komponen-komponen diatas sehingga Interface nya menjadi seperti gambar di bawah ini :


Application Interface Design


Coding


File KatalogWeb.xml akan kita tempatkan satu folder dengan file exe aplikasi ini. Kita akan menambahkan kode Program untuk membuat file KatalogWeb.xml pada saat aplikasi pertama dijalankan untuk itu kita perlu menambahkan kode Program pada event OnCreate Form1 caranya dobel klik Form1 kemudian tambahkan kode Program dibawah ini :




procedure TFMain.FormCreate(Sender: TObject);

var namafile : string;

begin

  CDS.Close;

  //mendapatkan path absolute file KatalogWeb.xml

  namafile := extractfilepath(application.ExeName)+cds.filename;



  if not FileExists(namafile) then CDS.CreateDataSet;

  CDS.Open;



  //mengosongkan item pada SiteList

  LBSiteList.Clear;

  LBSiteList.Items.BeginUpdate;



  //membuka dan menampilkan recordset

  CDS.First;

  while not CDS.Eof do

  begin

    LBSiteList.Items.Add(CDS.FieldByName('SiteURL').AsString);

    CDS.Next;

  end;



  LBSiteList.Items.EndUpdate;

  ESiteID.Text := IntToStr(Succ(LBSiteList.Items.Count));

end;



Variabel NamaFile digunakan untuk menampung path lengkap (absolute path) nama file dari file XML yang akan kita gunakan sebagai tempat penyimpanan data aplikasi ini. function ExtractFilePath(application.ExeName) akan mendapatkan path lengkap dimana file .exe aplikasi ini berada. jadi jika kamu menempatkan aplikasi ini pada folder C:\Programming\Delphi\Database\Katalog Web\WebCatalog.exe misalnya, maka function ini akan menghasilkan string C:\Programming\Delphi\Database\Katalog Web\. Sehingga kode program extractfilepath(application.ExeName)+CDS.filename akan menghasilkan string path lengkap ke file KatalogWeb.xml dalam contoh saya adalah C:\Programming\Delphi\Database\Katalog Web\KatalogWeb.xml.



Menambahkan Data


Dobel klik BtnOK pada form FMain kemudian tambahkan kode Program berikut





procedure TFMain.BtnOKClick(Sender: TObject);

begin

  CDS.AppendRecord([StrToInt(ESiteID.Text), ESiteURL.Text, MSiteDesc.Text]);

  ECari.Clear;



  // refresh listbox daftar web

  LBSiteList.Clear;

  LBSiteList.Items.BeginUpdate;



  //membuka dan menampilkan recordset pada LBSiteList

  CDS.First;

  while not CDS.Eof do

  begin

    LBSiteList.Items.Add(CDS.FieldByName('SiteURL').AsString);

    CDS.Next;

  end;

  LBSiteList.Items.EndUpdate;

  ESiteID.Text := IntToStr(Succ(LBSiteList.Items.Count));



  ESiteURL.Clear;

  msitedesc.clear;

  ESiteURL.SetFocus;

end;



Mencari Data


masukan kode Program berikut pada event OnChange komponen ECari





procedure TFMain.ECariChange(Sender: TObject);

const

  SUBSTRING = 'Substring(SiteURL, 1, %d) = ''%s''';

var

  URLPilih: string;

begin

  CDS.Filter := Format(SUBSTRING, [Length(ECari.Text), ECari.Text]);

  //mem-filter dataset jika teks ECari tidak kosong

  CDS.Filtered := ECari.Text <> '';



  LBSiteList.Clear;

  LBSiteList.Items.BeginUpdate;



  //membuka dan menampilkan recordset

  CDS.First;

  while not CDS.Eof do

  begin

    LBSiteList.Items.Add(CDS.FieldByName('SiteURL').AsString);

    CDS.Next;

  end;

  LBSiteList.Items.EndUpdate;



  //mendapatkan nilai SiteID selanjutnya (Successor)

  //berdasarkan jumlah item yg ada di LBSiteList

  ESiteID.Text := IntToStr(Succ(LBSiteList.Items.Count));



  URLPilih := CDS.FieldByName('SiteURL').AsString;

  LBSiteList.ItemIndex := LBSiteList.Items.IndexOf(URLPilih);

end;


Incremental Search


Menampilkan Detail Data Website ketika item di LBSiteList diklik


Dobel klik LBSiteList, masukan kode Program berikut




if LBSiteList.ItemIndex <> -1 then

  CDS.Locate('SiteURL', LBSiteList.Items[LBSiteList.ItemIndex], []);


Application Interface - Runtime

Mengedit Data


Karena Aplikasi ini akan memanggil Form FEdit dari FMain, maka terlebih dahulu deklarasikan unit UEdit di Unit Umain. caranya ketikan Uses UEdit; di bawah implementation pada unit Umain. Setelah itu dobel klik BtnEdit kemudian masukan kode Program berikut pada Unit UMain.pas (Fmain)




with TFEdit.Create(Self) do

begin

  ESiteID.Text := cds.FieldByName('SiteID').AsString;

  ESiteURL.Text := cds.FieldByName('SiteURL').AsString;

  MSiteDesc.Text := cds.FieldByName('SiteDesc').AsString;

  ShowModal;



  if ModalResult = mrOK then

  begin

    CDS.Edit;

    cds.Fields[1].Value := ESiteURL.Text;

    cds.Fields[2].Value := MSiteDesc.Text;

    cds.Post;

    ECari.Clear;



    LBSiteList.Clear;

    LBSiteList.Items.BeginUpdate;

    CDS.First;

    LBSiteList.Clear;

    while not CDS.Eof do

    begin

    LBSiteList.Items.Add(CDS.FieldByName('SiteURL').AsString);

    CDS.Next;

    end;



  LBSiteList.Items.EndUpdate;

  end;

  Free;

end;



dan kode Program berikut pada unit UEdit.pas (FEdit)




procedure TFEdit.BtnOKClick(Sender: TObject);

const

  valid: array[Boolean] of TModalResult = (mrNone, mrOK);

begin

  //modalResult = mrOK jika ESiteURL dan MSiteDesc diisi

  //selain dari itu modalResult = mrNone

  ModalResult := valid[(ESiteURL.Text <> '') and (MSiteDesc.Text <> '')];

  if ModalResult = mrNone then

  MessageDlg('URL dan deskripsi situs harus diisi',

    mtInformation, [mbOK], 0);

end;


Edit Data

Menghapus Data


Dobel klik button btnDel kemudian tambahkan kode Program berikut





const

  konfirmasi = 'Anda akan menghapus alamat URL :'#13;

begin

  //konfirmasi hapus Record

  if MessageDlg(konfirmasi +

    LBSiteList.Items[LBSiteList.ItemIndex] + #13'Lanjutkan?',

    mtConfirmation, mbYesNo, 0) = mrYes then

  begin

    CDS.Delete;

    LBSiteList.Clear;

  LBSiteList.Items.BeginUpdate;



  //membuka dan menampilkan recordset

  CDS.First;

  while not CDS.Eof do

  begin

    LBSiteList.Items.Add(CDS.FieldByName('SiteURL').AsString);

    CDS.Next;

  end;

  LBSiteList.Items.EndUpdate;

  ESiteID.Text := IntToStr(Succ(LBSiteList.Items.Count));

  end;

end;





selengkapnya kamu bisa download Source Code Aplikasi ini disini.

Tips Pemrograman Delphi: Pengaturan Layout Control Dengan Anchors

Monday, May 5, 2008

Mungkin ini adalah tips Delphi sederhana, tetapi banyak para Delphiers pemula belum mengetahui fungsi dari properties Anchors ini. Properties Anchors ini dimiliki oleh hampir semua komponen yang bisa dilihat pada saat Runtime di Delphi seperti komponen Edit, DBGrid, Combobox, Listbox, Memo dan lain-lain.


Fungsi dari Properties Anchors ini adalah untuk menjaga posisi ujung (edge) sebuah Control terhadap sebuah ujung parent nya. dengan begitu sebuah control/komponen akan mempunyai posisi yang relative terhadap parent nya meskipun Window parent nya di Resize atau di Maximize. Sebagai contoh jika Sebuah control di set properties Anchors left dan Right nya, maka lebar control tersebut akan mengikuti ukuran parent nya ketika parent tersebut di-Resize atau di-Maximize, begitu pula jika diset properties Anchors Top dan Bottom nya maka, sebuah komponen Control akan mengikuti ukuran tinggi dari parent nya.



Agar lebih jelas kamu bisa ikuti langkah-langkah berikut ini :



  • Buat sebuah Project Baru tambahkan sebuah Memo dan Button sehingga Interface nya seperti gambar dibawah ini



  • Delphi Anchors Properties
  • Set Properties Anchors Left dan Right komponen Memo menjadi True dan Set Propeties Anchors Right dan Buttom komponen Button menjadi True



  • Delphi Anchors Properties
  • Run Program

  • Sekarang coba kamu resize window Form1


Delphi Anchors Properties

Kamu bisa lihat lebar komponen Memo1 mengikuti parent nya yaitu Form1 ketika di resize atau di maximize dan sisi kiri dan kanan komponen Memo1 mempunyai jarak yang tetap dengan sisi kiri dan kanan Form1 seperti pada saat Design. sedangkan ujung atas dan bawah komponen Memo1 tidak. Sedangkan komponen Button1 hanya menjaga jarak sisi kanan dan bawahnya saja karena kita tadi hanya men-set properties Anchors Right dan Bottom saja, sehingga Button1 tidak ikut Stretch ketika Form1 di Resize atau di Maximize.



Kamu bisa set Properties Anchors Top dan Bottom komponen Memo1 menjadi True agar semua sisinya mengikuti Parent nya sehingga posisinya relative terhadap parent nya.


Delphi Component anchors Properties

Tutorial Pemrograman Delphi : Membuat Menu ber-Icon

Thursday, April 17, 2008

Ini adalah tutorial singkat pemrograman Delphi untuk membuat menu dengan icon disampingnya. Sebagai contoh saya akan membuat menu dengan struktur menu seperti ini :


application menu structure

untuk membuat menu ber-Icon seperti diatas, inilah langkah-langkahnya :




  • Buat Project Baru di Delphi

  • Tambahkan komponen ActionManager Delphi ActionManager Component Icon, ActionMainMenuBar Delphi ActionMainMenuBar component yang ada di tab Additional

  • Tambahkan komponen ImageList delphi imagelist component icon yang ada di tab win32

  • Dobel klik komponen ActionManager, akan muncul Form Editing ActionManager

  • editing Actionmanager
  • klik pada icon New Icon NewAction Icon atau tekan tombol Insert pada keyboard untuk menambahkan sebuah Action

  • Untuk merubah judul menu, klik sebuah Action kemudian rubah properties Caption pada Object Inspector.

  • Untuk mengelompokan sebuah Action atau beberapa Action sekaligus kedalam sebuah menu : Klik Action tersebut, atau beberapa Action sekaligus kemudian rubah properties Category nya menjadi nama menu misalnya dalam contoh ini adalah "Master Data".

  • Masukkan Icon yang akan digunakan kedalam komponen ImageList caranya : dobel klik komponen ImageList, pada dialog yang muncul klik tombol add. pilih file icon (*.ico) atau file bitmap image (*.bmp) yang akan kamu pergunakan sebagai icon disamping menu tersebut kemudian klik ok.

  • Set properties Image komponen ActionManager menjadi ImageList1 untuk "memberitahu" komponen ActionManager bahwa kita akan menggunakan image yang ada padi komponen ImageList.

  • Assign Icon untuk setiap menu caranya : dobel klik komponen ActionManager1, dibawah Listbox Categories pilih category yang telah kita buat tadi yaitu "Master Data" kemudian di Listbox sebelah kanan (Actions) klik sebuah Action, pada object inspector set properties ImageIndex menjadi index image yang ada di ImageList misalnya 0 (index dimulai dari 0).

  • untuk menampilkan menu kedalam form caranya : dobel klik ActionManager1, drag and drop category "Master Data" kedalam komponen ActionMainMenuBar1.

  • Run Aplikasi, disana terlihat bahwa menu belum aktif, untuk mengaktifkan menu kamu harus tambahkan kode program ke masing menu-menu tersebut. sebagai contoh kamu bisa tambahkan kode program berikut ke masing-masing menu tersebut :



messagedlg('Test Iconic Menu With ActionManager Component',mtinformation,[mbok],0);


Itulah tutorial dan Tips pemrogramman Delphi untuk membuat menu ber-icon, mudah-mudahan bisa bermanfaat.

Membuat Aplikasi FastReport Stand Alone dengan Delphi dan FastReport Component

Tuesday, April 8, 2008

sebagai Delphi Developer atau Delphi Programmer anda pasti tahu dengan FastReport. FastReport adalah sebuah komponen atau reporting tool untuk mencetak laporan-laporan. Sebenarnya FastReport ini ada dua versi (koreksi kalau saya salah) yaitu FastReport Studio yang bisa Stand Alone (Stand Alone Application) atau bisa berdiri sendiri (seperti Crystal Report), dan FastReport Component For Delphi. FastReport Component for Delphi ini hanya bisa diinstall di Compiler Delphi IDE, sedangkan FastReport Studio Stand Alone bisa diakses oleh Compiler lain seperti Visual Basic melalui ActiveX Object.



Kebetulan di tempat kerja sering diminta laporan yang ga ada di aplikasi perusahaan, jadi saya buat deh aplikasi FastReport Studio versi saya ini dan saya sebut "My Report Studio" : ). pada tutorial Delphi kali ini saya akan memandu kamu untuk membuat aplikasi FastReport Stand Alone agar bisa dijalankan tanpa menggunakan Delphi IDE namun aplikasi ini tidak dapat di akses dari visual basic seperti versi FastReport Studio dari FastReport Inc. Aplikasi ini memanfaatkan fasilitas dan fungsi yang disediakan oleh FastReport Component for Delphi, jadi aplikasi ini mutlak membutuhkan FastReport Component for Delphi. saya anggap kamu sudah mempunyai FastReport Component for Delphi kalau belum cari sendiri di google dan telah di install di Delphi IDE. saya menggunakan FastReport Component versi 3.0



Fitur Aplikasi My Report Studio ini (promosi dikit) :



  • Bisa mengakses Database seperti Paradox, MS Access, MS SQL Server, MySQL, Oracle, dan semua jenis Database yang bisa diakses via ODBC

  • Eksport laporan ke jenis file : .pdf, .xls, .doc, .xml, .html, .rtf, .bmp, .jpg, .txt, dan .csv




Kita akan membuat splash screen untuk mempercantik aplikasi ini. form yang akan dijadikan splash screen adalah Form1. jadi idenya adalah ketika aplikasi ini di jalankan, Form1 yang jadi Splash Screen, akan ditampilkan dahulu selama 5 detik, setelah itu baru masuk ke workspace My Report Studio ini. Untuk itu diperlukan sebuah komponen Timer untuk melakukan hal tersebut.



inilah langkah-langkahnya :



  • Buat sebuah project baru di Delphi

  • tambahkan sebuah komponen Timer (ada di Tab System), set properties Interval menjadi 5000 agar splash screen ditampilkan selama 5 detik.

  • tambahkan komponen-komponen berikut :


    • frxReport1, frxDesigner1, frxADOComponents1, frxBDEComponents1, frxDBXComponents1, frxDBXComponents, frxIBXComponents1 (ada di tab FastReport 3.0).

    • frxPDFExport1, frxHTMLExport1, frxXLSExport1, frxXMLExport1, frxRTFExport1, frxBMPExport1, TfrxBMPExport, frxJPEGExport1, frxSimpleTextExport1, frxCSVExport1, frxTXTExport1 (ada di tab FastReport 3 Exports).



Sehingga tampilan saat design nya seperti :


Application Design






Dobel klik komponen timer kemudian tambahkan kode perintah berikut ini :



form1.Hide;

timer1.Enabled := false;

frxReport1.DesignReport;

application.Terminate;


Run Program dengan menekan tombol F9, maka akan ditampilkan splash screen seperti ini, sebelum masuk ke My Report Studio :



Application Splash Screen



dan ini adalah screenshot workspace My Report Studio :





Itulah tutorial delphi untuk membuat aplikasi My Report Studio ini. Sangat sederhana bukan.
Kamu bisa download Source Code dan aplikasinya disini. Mudah-mudahan bisa bermanfaat.

Membuat Aplikasi Grafik Penjualan dengan Delphi dan Database SQL Server - Part 1

Sunday, April 6, 2008


Tutorial Delphi ini berisi panduan untuk membuat aplikasi sederhana untuk menampilkan grafik penjualan sebuah produk per periode tertentu menggunakan Delphi. Tujuan tutorial Delphi ini adalah untuk memberikan panduan atau gambaran tentang bagaimana cara menggunakan komponen DBChart di Delphi. karena tulisan artikel ini cukup panjang dan mengandung banyak screenshoot, maka saya membaginya menjadi 3 bagian yaitu Persiapan, Koneksi DBChart ke Database SQL Server, dan Coding supaya tidak membingungkan dan loading halaman tidak terlalu lama.



Aplikasi ini akan menampilkan grafik penjualan sebuah produk tertentu dan per periode tanggal tertentu berdasarkan inputan dari user yang berupa nama produk dan periode penjualan. Agar lebih mudah maka untuk tutorial Delphi kali ini saya menggunakan tiga buah table di MS SQL Server 2000 yaitu table Orders, Order Details, dan table Products. Untuk koneksi ke database SQL Server saya menggunakan koneksi dengan ADO (Active Data Object). semua operasi DML (Data Manipulation Language) menggunakan SQL Statement jadi diperlukan pengetahuan dasar tentang SQL Statement.



Persiapan


Inilah langkah-langkahnya :





  • Masuk ke Delphi, tambahkan sebuah komponen ADOConnection yang ada di tab ADO, agar lebih deskriptif ubah property Name ADOConnection1 menjadi SQLServerConn

  • Dobel klik SQLServerConn, pada dialog yang muncul klik tombol Build kemudian akan muncul window dialog Data Link Properties, pilih Microsoft OLE DB Provider for SQL Server, kemudian klik tombol Next

  • Isi dengan nama server MS SQL Server kamu pada textbox "Select or enter a server name" (nama server adalah nama komputer kamu)

  • pada textbox username dan password isi dengan username dan password yang terdaftar di Database SQL Server kamu, pada contoh ini saya menggunakan username 'yanadoe' dengan password 'bebas'. kemudian centang Checkbox "Allow saving password".

  • Pilih database Northwind pada textbox "Select the database on the server". klik tombol Test Connection untuk mengetahui apakah koneksi sudah berhasil atau tidak jika sukses klik tombol OK untuk menutup window dialog Data Link Properties


Database Connection Setting


  • Ubah properties Login Prompt SQLServerConn menjadi False agar tidak ditampilkan login prompt ketika kita akan menjalankan aplikasi.

  • Tambahkan dua buah komponen ADODataset masing-masing beri nama ADSPenjualan dan ADSProduk. ADSProduk digunakan untuk mendapatkan semua nama produk dari table Products di database Northwind

  • Tambahkan sebuah komponen DBChart yang ada pada tab Data Controls, sebuah ComboBox, dua buah DateTimePicker (ada di tab Win32), sebuah Button beri nama BGenerate dan beberapa Label sehingga tampilannya seperti ini :


Application Interface Design

Part 2 - Koneksi DBChart ke Database SQL Server >>

Membuat Aplikasi Grafik Penjualan dengan Delphi dan Database SQL Server - Part 2

Setelah tahap persiapan sudah selesai, tahap selanjutnya adalah menghubungkan ADSPenjualan, ADSProduk ke Database SQL Server melalul komponen ADOConnection dan kemudian menghubungkan DBChart1 ke ADSPenjualan.



  • Ubah properties Connection ADSPenjualan dan ADSProduk menjadi SQLServerConn agar kedua komponen ini bisa terhubung dengan Database SQL Server. sebagai tambahan kamu juga bisa menggunakan properties Connection String masing-masing komponen ADSPenjualan dan ADSProduk untuk koneksi ke Database, tetapi untuk menghemat koneksi ke-server maka saya menggunakan sebuah komponen ADOConnection sehingga jika ada komponen DBAware yang lain yang akan menggunakan koneksi yang sama, cukup kita hubungkan dengan komponen ADOConnection ini.

  • masukan sql statement berikut pada properties CommandText ADSPenjualan :




select b.orderdate,sum(a.quantity) jml

from [order details] a, orders b, products c

where a.orderid=b.orderid

and a.productid=c.productid

and c.productname=:pn

and b.orderdate between :tglawal and :tglakhir

group by b.orderdate

order by b.orderdate



pada sql statement diatas terdapat 3 parameter yaitu pn, tglawal, dan tglakhir ketiga parameter tesebut digunakan untuk menampung inputan dari user yaitu nama produk, tanggal awal dan tanggal akhir.




  • Dobel klik DBChart1, pada window dialog Editing DBChart1, tekan tombol Add kemudian pilih tipe chart yang kamu inginkan, disini saya menggunakan chart tipe Batang (Bar). kalau sudah, tekan tombol OK





  • Masih di window dialog Editing DBChart1, klik tab Series disebelah kanan tab Chart disana terdapat 4 tab lainnya, klik tab Data Souce, pada combobox dibawahnya pilih Dataset karena kita akan menampilkan Grafik berdasarkan nilai yang diterima dari sebuah Dataset.

  • Pilih ADSPenjualan pada combobox Dataset.

  • Pilih Orderdate pada combobox Labels dan pilih JML pada combobox Bar


dataset


  • Masih di window dialog Editing DBChart1 | tab Series, klik tab Marks pada pilihan Style disebelah kanan pilih Value.

  • Supaya masing-masing grafik batang tidak terlalu berdekatan maka kita harus membatasi jumlah grafik batang perhalamannya dengan cara : klik Tab Chart, klik tab Paging, disana kamu bisa spesifikasikan jumlah batang per halamannya. Saya isi dengan angka 5. jika sudah klik tombol Close.

  • Untuk menampilkan deskipsi/judul tiap sumbu : masih pada tab Chart, klik tab Axis | tab Title, pada Textbox Title isi dengan Quantity. tadi adalah judul untuk sumbu Y, untuk memberikan judul pada sumbu X, klik tab Titles (disebelah kanan tab Axis), pada combobox pilih Foot, kemudian isikan judul untuk sumbu X pada textbox yang ada dibawahnya






<< Part 1 - Persiapan    Part 3 - Coding >>

Membuat Aplikasi Grafik Penjualan dengan Delphi dan Database SQL Server - Part 3

Coding


Setelah Tahap persiapan dan menghubungkan DBChart ke komponen ADODataset dan Database SQL Server selesai, sekarang kita akan menuju tahap penulisan kode Program (Coding).



Kita akan mengambil data nama produk dari table Products, kemudian akan kita masukkan ke komponen Combobox1 ketika aplikasi pertama kali dijalankan. Untuk itu kita perlu menambahkan beberapa baris perintah pada event OnCreate Form1. Caranya dobel klik Form1 kemudian tambahkan kode perintah berikut ini kedalam Code Editor :




if not sqlserverconn.Connected then

sqlserverconn.Open;

ADSProduk.Close;

ADSProduk.CommandText := 'select productname from products group by productname';

ADSProduk.Open;



while not ADSProduk.Eof do

begin

combobox1.Items.Add(ADSProduk.FieldValues['productname']);

ADSProduk.Next;

end;

ADSProduk.Close;







Proses Generate Grafik akan dihandle oleh button BGenerate, Dobel klik Button BGenerate kemudian tambahkan baris perintah berikut pada Code Editor :




ADSpenjualan.Close;

ADSPenjualan.Prepared := true;

ADSPenjualan.Parameters[0].Value := Combobox1.Text;

ADSPenjualan.Parameters[1].Value := DateTimePicker1.Date;

ADSPenjualan.Parameters[2].Value := DateTimePicker2.Date;

ADSPenjualan.Open;



if ADSPenjualan.RecordCount < 1 then

Showmessage('Data Tidak Ada');



Untuk menampilkan judul dibagian atas grafik berdasarkan nama produk yang dipilih, tambahkan kode perintah berikut ini :


dbchart1.Title.Text.Clear;

dbchart1.Title.Text.Add('Grafik Penjualan: '+ combobox1.text);


karena kita tadi membatasi jumlah grafik batang menjadi 5 buah perhalamannya, maka dibutuhkan sebuah kode program untuk menampilkan halaman berikutnya jika jumlah record lebih dari 5. caranya tambahkan dua buah Button masing-masing dengan Caption "<< Sebelumnya" dan "Selanjutnya >>", dobel klik Button dengan Caption ""<< Sebelumnya", kemudian tambahkan kode perintah berikut ini :



dbchart1.PreviousPage;

dan untuk Button "Selanjutnya >>", tambahkan kode perintah berikut ini :


dbchart1.NextPage;

untuk mengetahui halaman saat ini dan jumlah total halaman, pertama kamu tambahkan dulu sebuah label beri nama LHalaman, kemudian gunakan kode perintah berikut ini pada masing masing button BGenerate, Button "<< Sebelumnya", dan button "Selanjutnya >>" :




lhalaman.Caption := 'Halaman : '+inttostr(dbchart1.Page)+'/'+inttostr(dbchart1.NumPages);


Final Screenshot :





Itulah tutorial Delphi tentang dasar cara penggunaan komponen DBChart di Delphi, kamu bisa menambahkan fitur yang lainnya sesuai kebutuhan kamu seperti untuk mencetak grafiknya, menambahkan jenis grafiknya, atau kamu bisa menambahkan grafik penjualan berdasarkan rupiahnya dan lain-lain. Semoga bermanfaat.

Delphi: Data Manipulation Using SQL Statement

Tuesday, March 11, 2008

Scroll to English Version


Manipulasi Data Menggunakan SQL Statement di Delphi


Aku menggunakan sebuah table di Microsoft Access dengan nama poducts pada database tutorial.mdb dan disimpan di C:\DelphiTutorial\sqldml. tutorial ini menjelaskan bagaimana cara melakukan manipulasi data menggunakan sql statement dengan komponen ADOCommand di delphi 7. hal ini mencakup statement sql select,sql insert, sql update dan sql delete. berikut ini struktur dari table products :




productid
text(10),
description text(50),
price number(long integer)




  • Masuk ke Delphi 7.
  • Buat sebuah project baru, simpan di C:\DelphiTutorial\sqldml dengan nama
    sqldml.dpr.
  • tambahkan sebuah komponen ADOConnection (ada di tab ADO) set property
    ConnectionStringnya menjadi :




Provider=Microsoft.Jet.OLEDB.4.0;Data
Source=tutorial.mdb;Persist Security Info=False





  • tambahkan sebuah komponen ADOCommand (ada di tab ADO) set property Connectionnya menjadi ADOConnection1.



SQL Insert statement



Pertama-tama saya akan mengisi table products dengan beberapa record agar perubahan data didalam table karena manipulasi data dapat terlihat.




  • tambahkan tiga buah komponen Edit masing-masing beri nama eproductid, edescription, dan eprice dan sebuah komponen Button biarkan komponen button dengan nama defaultnya.

  • set property Caption Button1 menjadi 'Save'.

  • dobel klik button1, kemudian tambahkan kode perintah berikut pada code editor delphi :






with ADOCommand1 do begin

CommandText := 'insert into products values(:a,:b,:c)';

Parameters[0].Value := eproductid.Text;

Parameters[1].Value := edescription.Text;

Parameters[2].Value := eprice.Text;

Execute;

end;


application.messagebox('Data berhasil disimpan','Informasi',mb_ok);




  • run applikasi dengan menekan F9, kemudian isikan beberapa record ke dalam table.




SQL Select Statement


Sebenarnya fungsi utama ADOCommand ini adalah untuk mengeksekusi statement sql yang tidak mengembalikan hasil (result sets) seperti statement SQL insert,SQL update, SQL delete dan statement DDL (Data Definition language) misalnya statement Create Table, Create Procedure, dll. sedangkan contoh statement sql yang mengembalikan hasil (result sets) adalah statement sql select.



kita akan melakukan pencarian record pada table products berdasarkan field description. Untuk menerima hasil kembalian (result sets) dari statement sql ini kita akan menggunakan komponen ADODataSet.




  • tambahkan sebuah komponen edit, beri nama esearch dan sebuah komponen button dan beri nama bsearch.

  • Ubah property caption dari button bsearch menjadi 'Search'.

  • dobel klik tombol bsearch, kemudian tambahkan kode perintah berikut pada code editor delphi :





with ADOCommand1 do begin

CommandText := 'select * from products where description = :desc';

Parameters[0].Value := ecari.Text;

ADODataset1.Recordset := execute;

end;

MessageDlg('Ditemukan '+ inttostr(ADODataset1.recordcount) + ' Record(s)', mtInformation, [mbOk], 0);



Coba lakukan pencarian data barang yang telah dientri sebelumnya dengan cara menginputkan deskripsi barang tersebut pada kotak edit esearch dan tekan tombol Search.



SQL Update Statement


Idenya begini : saya akan menambahkan fitur pencarian sebelum input data dan menambahkan fitur update pada tombol button1.




  • klik edit eproductid, pada object inspector klik tab Events, cari event OnKeyDown, dobel klik, kemudian tambahkan kode perintah berikut ini :






if key = vk_return then

begin

with ADOCommand1 do begin

CommandText := 'select * from products where productid = :pid';

Parameters[0].Value := eproductid.Text;

ADODataset1.Recordset := execute;

end;



if ADODataset1.RecordCount > 0 then


if messagedlg('Data produk dengan id '''+eproductid.Text

+''' sudah ada'+chr(10)

+'apakah anda akan merubah data
tersebut',mtconfirmation,[mbok,mbcancel],1) = mrok then

begin

edescription.Text :=
ADODataset1.FieldValues['description'];

eprice.Text := ADODataset1.FieldValues['price'];

edescription.SetFocus;


button1.Caption := 'Update';

{ bdelete.Enabled := true; }

end

else

begin

{ button1.Caption := 'Save'; }

eproductid.SelectAll;

exit;

end



else if ADODataset1.RecordCount < 1 then

begin

{ bdelete.Enabled := false; }

button1.Caption := 'Save';

edescription.clear;

eprice.clear;

end;



edescription.SetFocus;


end;



Pada listing kode diatas ada perintah untuk merubah caption dari tombol button1 yaitu kode perintah dengan teks yang saya tebalkan. caption tersebut akan menetukan mode manipulasi data yang akan dilakukan. biar lebih jelas ubah dulu listing kode perintah pada button1 menjadi seperti dibawah ini :





if button1.Caption='Save' then

begin

with ADOCommand1 do begin

CommandText := 'insert into products values(:a,:b,:c)';


Parameters[0].Value := eproductid.Text;

Parameters[1].Value := edescription.Text;

Parameters[2].Value := eprice.Text;

Execute;

end;

application.messagebox('Data berhasil disimpan','informasi',mb_ok);


end

else if button1.Caption='Update' then

with ADOCommand1 do begin

CommandText := 'update products set description = :a, price = :b where productid = :c';

Parameters[0].Value := edescription.Text;

Parameters[1].Value := eprice.Text;

Parameters[2].Value := eproductid.Text;


execute;

application.messagebox('Perubahan berhasil disimpan','informasi',mb_ok);

end;



eproductid.Clear;

edescription.Clear;

eprice.Clear;


eproductid.SetFocus;




run aplikasi, coba masukkan kode produk yang telah disimpan sebelumnya, maka akan ditampilkan messagebox yang berisi konfirmasi untuk update record atau tidak.



SQL Delete Statement



  • tambahkan sebuah komponen button, beri nama bdelete dan ubah Captionnya menjadi 'Delete'.


  • ubah property Enable button bdelete menjadi False

  • dobel klik tombol bdelete, kemudian tambahkan kode perintah berikut pada code editor delphi :






if messagedlg('Hapus data barang '''+eproductid.Text

+'''',mtconfirmation,[mbok,mbcancel],1) = mrok then


begin

with ADOCommand1 do begin

CommandText := 'delete from products '+

'where productid = :pid';

Parameters[0].Value := eproductid.Text;

execute;

end;

eproductid.Clear;

edescription.Clear;


eprice.Clear;

button1.Caption := 'Save';

bdelete.Enabled := false;

eproductid.SetFocus;

end;



setelah anda menginputkan kode ini pada code editor delphi, selanjutnya anda hilangkan semua tanda '{' dan '}' (blok komentar) pada listing kode program Event OnKeyDown edit eproductid agar tombol bdelete bisa aktif pada saat mode update record dan non aktif pada saat mode insert record. Semoga bermanfaat.












Scroll to Indonesian Version

I use a table in Microsoft Access called products in a file called tutorial.mdb and saved in c:\DelphiTutorial\sqldml. this tutorial is about how to manipulate data using sql statement with ADOCommand component in Delphi 7. this is included sql select statement, sql insert statement, sql update statement and sql delete statement. lets get started.



the following is data structure from products table :




productid
text(10),
description text(50),
price number(long integer)




  • Run Delphi.
  • Create new project then save as sqldmp.dpr in c:\DelphiTutorial\sqldml.
  • Add an ADOConnection component, set its ConnectionString Property to :






Provider=Microsoft.Jet.OLEDB.4.0;Data
Source=tutorial.mdb;Persist Security Info=False





  • Add an ADOCommand component, set its Connection property to ADOConnection1.


SQL Insert statement



First of all i will fill the table with some data so we can see the changes that sql statement do to the table's data.




  • Add three Edit component eproductid, edescription, and eprice and a Button component, Button1.


  • Change Button1 Caption property to 'Save'.

  • double klick Button1, then add the following code to the Delphi's code editor :





with ADOCommand1 do begin

CommandText := 'insert into products values(:a,:b,:c)';

Parameters[0].Value := eproductid.Text;

Parameters[1].Value := edescription.Text;

Parameters[2].Value := eprice.Text;


Execute;

end;

application.messagebox('Data saved successfully','Information',mb_ok);



  • Run application, fill the table with some data by pressing Button1.



SQL Select Statement


Actually the main purpose of ADOCommand component is to execute sql statements that don't return a result sets including SQL Insert statement, SQL Update statement, SQL delete statement and DDL statement (Data Definition Language) like Create Table, Create Procedure, etc.



To retrieve data using sql select statement i use an ADODataSet component along with ADOCommand component.




  • Add an Edit Component, esearch and a Button component, bsearch.

  • Change the Caption of bsearch button to 'Search'.

  • Double click bsearch, then add the following code to the Delphi's code editor :




with ADOCommand1 do begin

CommandText := 'select * from products where description = :desc';

Parameters[0].Value := ecari.Text;

ADODataset1.Recordset := execute;

end;

MessageDlg('Found '+ inttostr(ADODataset1.recordcount) + ' Record(s)', mtInformation, [mbOk], 0);



After writing the code above, run application then try searching specific record in the Products table by entering product description in the Edit text box esearch then press 'Search' button.




SQL Update Statement


the idea is : i will add searching record feature before entering the data and add updating feature on button1(Save button) button.




  • klick eproductid, in the object inspector klick Events tab, look for OnKeyDown event, double klick, then add the following code :





if key = vk_return then

begin

with ADOCommand1 do begin

CommandText := 'select * from products where productid = :pid';

Parameters[0].Value := eproductid.Text;

ADODataset1.Recordset := execute;

end;



if ADODataset1.RecordCount > 0 then

if messagedlg('Product with id '''+eproductid.Text

+''' already exist'+chr(10)

+'do you want to change the data
',mtconfirmation,[mbok,mbcancel],1) = mrok then

begin

edescription.Text :=
ADODataset1.FieldValues['description'];


eprice.Text := ADODataset1.FieldValues['price'];

edescription.SetFocus;

button1.Caption := 'Update';

{ bdelete.Enabled := true; }

end

else

begin

{ button1.Caption := 'Save'; }

eproductid.SelectAll;


exit;

end


else if ADODataset1.RecordCount < 1 then

begin

{ bdelete.Enabled := false; }

button1.Caption := 'Save';

edescription.clear;

eprice.clear;


end;



edescription.SetFocus;

end;



in the code listing above there are a command (the bold one) to change the caption of button1. that caption will determine manipulation mode to the data that will be perform. for more clearly, change the code listing in the button1 as follow :





if button1.Caption='Save' then

begin


with ADOCommand1 do begin

CommandText := 'insert into products values(:a,:b,:c)';

Parameters[0].Value := eproductid.Text;

Parameters[1].Value := edescription.Text;

Parameters[2].Value := eprice.Text;

Execute;


end;

application.messagebox('Data saved successfully','informasi',mb_ok);

end

else if button1.Caption='Update' then

with ADOCommand1 do begin

CommandText := 'update products set description = :a, price = :b where productid = :c';

Parameters[0].Value := edescription.Text;


Parameters[1].Value := eprice.Text;

Parameters[2].Value := eproductid.Text;

execute;

application.messagebox('Changes saved successfully','informasi',mb_ok);

end;



eproductid.Clear;


edescription.Clear;

eprice.Clear;

eproductid.SetFocus;




run application, try to input product id that have entered earlier, then a message box will appear displaying confirmation to update the record or no.



SQL Delete Statement




  • Add a button, bdelete and change the Caption to 'Delete'.

  • change Enable to False

  • double klick bdelete button, then add the following code to the Delphi's code editor :






if messagedlg('Delete products '''+eproductid.Text

+''' data',mtconfirmation,[mbok,mbcancel],1) = mrok then

begin

with ADOCommand1 do begin

CommandText := 'delete from products '+

'where productid = :pid';

Parameters[0].Value := eproductid.Text;

execute;


end;

eproductid.Clear;

edescription.Clear;

eprice.Clear;

button1.Caption := 'Save';

bdelete.Enabled := false;

eproductid.SetFocus;

end;



After writing that code above in delphi's code editor, next, remove
the '{' and '}' sign (comment block)
in OnKeyDown event eproductid code listing in order to activate bdelete button on update record mode and deactivate it on insert record mode.


Recent Comments

Tags Cloud

Blogumulus by Roy Tanck and Amanda Fazani