Menyimpan Quick Report dengan Format PDF pada Delphi

Codegratis.wordpress.com. Mari belajar coding dengan mudah dan sederhana. Setelah sekian lama akhirnya codegratis kembali lagi aktiv, maaaaaaf yaa karena kesibukan admin dalam mencari nafkah akhirnya ada waktu dan ada ide lagi dalam mengisi blog yang sederhana  ini. Mohon maaaaaaf ya pemirsa, karena sudah sekian lama tidak ada posting. Ok baiklah  langsung aja kita membahas mengenai tutorial Delphi yang cukup jarang dan cukup sulit mencari versi Bahasa Indonesia dan tokcer jika dicoba langsung diaplikasikan. Kali ini kita akan membahas tentang “Menyimpan Quick Report dengan Format PDF pada Delphi”, bahan-bahan yang harus dipersiapkan……halah koyok Master Chef aja.

  1. Uses QRPDFFilt
  2. Variabel lokal (biasa ditempatkan di tombol cetak) dr : string; aPDF : TQRPDFDocumentfilter;

Script-nya so simple langsung aja ya :

Di awal procedure isi variabel dr dengan lokasi dan nama penyimpanan hasil export Quick Report ke PDF

dr:=ExtractFilePath(Application.ExeName)+'struk\'++'.pdf';

Script untuk mengekpor Quick Report ke PDF, sedikit sekali diletakkan setelah Quick Report dipersiapkan atau query untuk menampilkan data pada report sudah dijalankan, ini script nya :

QuickReport1.Prepare;
aPDF := TQRPDFDocumentfilter.Create(dr);
QuickReport1.ExportToFilter( aPDF);
aPDF.free;

Nah gampang bukan, PDF dari hasil export tadi langsung akan tersimpan pada direktori yang sudah diset diawal.

Langsung di coba ya, kalo ada yang kurang jelas atau masih bingung Mongooo langsung aja dikomen yaaaaaaa

Selamat Mencobaaaaa.
Iklan

Membuat Timer pada Delphi

Codegratis.wordpress.com. Mari belajar coding dengan mudah dan sederhana. Maaf lama gak ada postingan baru lagi di blog tercinta saya ini, maklum banyak kerjaan yang mesti saya selesaikan. Pada postingan saya kali ini saya akan berbagi tip mengenai membuat “Timer atau Penghitung Waktu Mundur pada Delphi”. Codingnya sangat sederhana sekali kok, hasil dari googling dan coba-coba sana-sini, dan kebetulan saya pas diminta mengerjakan projek untuk billing bilyar, yang disitu harus ada timer untuk mengitung waktu bermain bilyar.
Ok langsung saja kita siapkan bahan-bahanya, halah maksud saya komponen yang digunakan :
 photo timer1_zpsfhp9u9e2.jpg

Nama Object Nama Property Setting
TCombobox CharCase ecUpperCase
Item SIANG

25 SIANG

FREE 1 JAM

Name cpaket
TEdit Enabled False
Name Etimer
TButton1 Caption &Start
Name Bmulai
TButton2 Caption &Keluar
Name Bexit
Timer1 Enabled False
Interval 1000

Disitu saya menggunakan combobox karena pada pool bilyar sering ada paket-paket gitu kalo main bilyar. Baiklah langsung saja kita bedah codingnya…………………..pada gak sabar ya……….

  • Variabel global yang digunakan

Timeout:tdatetime;

  • Uses yang digunakan

Gunakan dateutils untuk fungsi tanggal dan waktu pada delphi

  • Function SecsToHmsStr(ASecs: integer):string;
function SecsToHmsStr(ASecs: integer):string;
begin
Result := Format('%2d:%2.2d:%2.2d',[ASecs div 3600, ASecs mod 3600 div 60, ASecs mod 3600 mod 60]);
end;
  • Procedure TForm1.bexitClick
procedure TForm1.bexitClick(Sender: TObject);
begin
if bexit.Caption='&Keluar' then
  close
else
begin
  bmulai.Caption:='&Start';
  bexit.Caption:='&Keluar';
  cpaket.Text:='';
  etimer.Clear;
end;
end;
  • Procedure TForm1.bmulaiClick
procedure TForm1.bmulaiClick(Sender: TObject);
begin
if bmulai.Caption='&Start' then
begin
  if trystrtotime(etimer.Text, timeout) then
  begin
    timeout:=now+timeout;
    timer1.Enabled:=true;
    bmulai.Caption:='&Pause';
    bexit.Caption:='&Reset';
    etimer.Text:= SecsToHmsStr(SecondsBetween(Now, TimeOut));
  end
  else
    ShowMessage('Error in time format');
end
else
begin
  bmulai.Caption:='&Start';
  bexit.Caption:='&Keluar';
  timer1.Enabled:=false;
end;
end;
  • Procedure TForm1.cpaketChange
procedure TForm1.cpaketChange(Sender: TObject);
begin
if cpaket.Text='SIANG' then
  etimer.Text:='01:00:00'
else
if cpaket.Text='25 SIANG' then
  etimer.Text:='02:00:00'
else
if cpaket.Text='FREE 1 JAM' then
  etimer.Text:='03:00:00'
else
  etimer.Text:='';
end;
  • Procedure TForm1.FormShow
procedure TForm1.FormShow(Sender: TObject);
begin
cpaket.Text:='';
etimer.Clear;
end;
  • Procedure TForm1.Timer1Timer
procedure TForm1.Timer1Timer(Sender: TObject);
begin
etimer.Text:= SecsToHmsStr(SecondsBetween(Now, TimeOut));
if Now > Timeout then Timer1.Enabled := False;
end;

Nah sedikit dan simple kan codingnya, monggo dicoba. Is everything ok maka akan running weel seperti dibawah ini :

timer2 photo timer2_zpsrubruxoo.jpg

Jika ada yang kurang pas atau mau ditambahkan monggo komen. Selamat mencoba.

Cara Backup Data MYSQL Saat Windows Error

phpmyadmin photo phpmyadmin_zpssdpf9exc.jpg

Codegratis.wordpress.com. Mari belajar coding dengan mudah dan sederhana. Backup data pada MYSQL memang mudah, tingal masuk ke phpmyadmin kalo yang pakai XAMPP terus pilih databasenya terus eksport udah beres, itu kalo Windows-nya dalam keadaan normal, tapi gimana kalo dalam keadaan Windows-nya error………….wah bisa jadi mimpi buruk tu kalo yang belum pernah ngalamin kasus kaya gini, bisa hilang semua database yang telah kita buat dengan susah payah. Seperti kasus yang saya alami kemarin, cukup puyeng sich mengatasinya, soalnya problemnya complicated banget sich n baru pertama. Nah saya uraikan dulu problem yang saya alamin kemaren tentang backup database MYSQL, barangkali Anda juga pernah dan sedang mengalaminya.

Problem pertama, OS sudah beda, OS yang saya gunakan Win 7 sementara OS klient saya Win XP, sebenarnya dulu klient saya sudah saya suruh ganti ke Win 7, tapi gak diganti-ganti mungkin dengan kejadian ini komputernya dapat diganti ke Win 7.

Problem ke dua, versi MYSQL dan XAMPP pada PC klient saya dan Laptop saya beda, kilent saya menggunakan MYSQL versi 5.5.25a maklum kan Win XP, saya instal XAMPP versi terbaru gak support, ya udah saya instalkan XAMPP versi 1.8.0 VC9 di PC klien saya, sementara saya sudah menggunakan XAMPP versi terbaru……………… Nah mari kita pecahkan satu persatu problem tersebut.

Solusi problem pertama, gunakan Hirens Boot agar kita dapat mengakses komputer yang Windows-nya sedang error, untuk yang mau belajar menggunakan Hirens Boot totorialnya ada disini. Mudah kan solusi pertama tinggal booting Hirens Boot ke Windows yang sedang error lalu ambil data MYSQL nya, na ambil datanya untuk kita gunakan pada solusi yang kedua.

Ok pada gak sabar ya sama solusi kedua, yuk mari……… Untuk XAMPP versi 1.8.0 VC9 tidak semudah dan segampang XAMPP versi terbaru dalam penanganan backup data saat Windows error.

  • Langkah pertama, copy folder XAMPP beserta seluruh isinya dari drive C komputer yang Windows-nya error dengan Hirens Boot. Amankan folder XAMPP yang telah kita copy tadi, ingat jangan di otak-atik ya, cukup copy dan amankan…………SIAP 86 ! hahahahahaha
  • Langkah ke dua, karena versi XAMPP saya dengan klien berbeda maka saya downgrade dech XAMPP nya, jadinya sekarang sementara menggunakan XAMPP versi 1.8.0 VC9.
  • Langkah ke tiga, na ini yang saya bilang seorang programer sejati harus siap sejak jauh-jauh hari……..halah sok bijak. Untungnya saya sudah instal dual boot OS di laptop tercinta saya, alias laptop saya udah terinstal Ubuntu versi 12.04 LTS. Jadi kalo ada apa-apa dengan Windows 7, Ubuntu sudah siap membackup…….hahahahahahaha. Oke lah kalo begitu, folder XAMPP yang telah kita copy dan amankan tadi kita paste ke drive C XAMPP komputer kita dengan bantuan OS Ubuntu, kenapa harus pake Ubuntu, karena di Ubuntu copy paste di drive C gak banyak dialog yang membingungkan yang bisa membuat hasil paste kita tidak maksimal alias tidak dapat di paste semua, kalo yang belum pake Ubuntu giman dong ? instal dong atau gunakan saja Ubuntu Live USB, banyak kok tutorialnya di warnet…………..eh salah internet………..:)

Ingat ya pastikan sebelumnya versi XAMPP sudah sama, sebelum paste folder XAMPP di drive C.

Jika saja klient saya menggunakan versi XAMPP terbaru, pasti gampang penanganannya, tinggal copy C:/xampp/mysql/data/nama_database, terus paste pada C:/xampp/mysql/data komputer kita, aman sudah datanya bisa langsung di cek di phpmyadmin pasti sudah langsung masuk database beserta isinya.

  • Langkah ke empat, saya restart laptop saya untuk pindah ke Windows 7. Lalu saya cek di localhost/phpmyadmin…………..walaaaaaaa akhirnya database yang saya backup dan amankan tadi sudah ada berserta semua isinya. Alhamdulihah, gak jadi hilang 713 record item barang yang sangat berharga input datanya aja sampai tiga minggu, kalo sampai hilang dan tak terselamtkan bisa nangin tiga minggu…….hahahahahaha
  • Langkah ke empat ekspor database yang sudah kita amankan, buat jaga-jaga kalo ada apa-apa lagi.
  • Langkah ke lima finish……………….hahahahaha ngaso dulu………….

Nah berdasarkan pengalaman yang tidak mengenakan tersebut sebainya kita harus memindahkan lokasi penyimpanan database MYSQL secara defaut, bukan lagi di C:/xampp/mysql/data/ sehingga kalo terjadi error pada Windows, database tetap aman dan tidak membuat kita was-was. Misalkan kita pindahkan saja ke drive D:/database, berikut step-stepnya :

  • Copy semua isi dari folder C:/xampp/mysql/data, ingat jangan sampai ada ketinggalan dalam mengcopy, lalu paste ke D:/database.
  • Lalu edit my.ini yang berada pada C:/xampp/mysql/bin ganti :

datadir = “D:/database”

innodb_data_home_dir = “D:/database”

innodb_log_group_home_dir = “D:/database”

  • Restart MYSQL pada XAMPP Control Panel.
  • Buka lacalhost/phpmyadmin di browser Anda
  • InsyaAllah pasti mau………….
  • Coba buat database atau tabel baru, dan cek di D:/database pasti sudah ada database atau tabel baru Anda disitu. Kalo database baru pasti ada foldernya didalam D:/database sesuai dengan nama database

Ok lah semua pengalaman dan tips saya mengenai backup database MYSQL saat Windows error sudah saya kupas tuntas dan lugas, semoga pengalaman saya ini dapat menjadi ilmu dan bahan belajar bagi para rekan-rekan programer pemula seperti saya ini, agar selalu siap menghadapai berbagai kemungkinan terburuk dalam dunia pemrograman…………………halah sok bijak. Kalo ada yang salah, kurang, atau mau kasih kritik, saran, dan ide langsung komen ya. Ojo lali rek………………tak enteni yoooooo……………. 🙂

Pencarian Data Sederhana pada Delphi

desain form barang photo barang_zpsxars3vgr.jpg Codegratis.wordpress.com. Mari belajar coding dengan mudah dan sederhana. Pada postingan saya sebelumnya kita telah membahas mengenai membuat aplikasi sederhana dengan delphi. Sebenarnya dalam aplikasi  tersebut terdapat beberapa fungsi penting yang dapat kita uraikan lagi secara lebih detail, salah satunya adalah fungsi pencarian. Nah mari kita bahas fungsi pencarian, fungsi tersebut terdapat pada form barang. Untuk dapat melakukan pencarian pada delphi membutuhkan beberapa buah procedure atau blok coding yang saya ciptakan sendiri atau memang procedure bawaan delphi berikut ini fungsi yang saya gunakan untuk pencarian data pada delphi.
procedure Tf_barang.FormShow;

procedure Tf_barang.FormShow(Sender: TObject);
begin
with dm.ZQuery1 do
begin
sql.Clear;
sql.Add('select * from t_barang');
open;
gbarang.DataSource:=dm.DataSource1;
end;
end;

Procedure ini digunakan pada saat form pertama kali muncul atau tampil. Disitu saya menuliskan SQL yang digunakan untuk menampilkan data pada grid barang, sehingga user dapat melihat isi data barang, dan mengetahui bahwa form ini digunakan untuk menginput data barang.
procedure Tf_barang.rgcariClick;

procedure Tf_barang.rgcariClick(Sender: TObject);
begin
ecari.SetFocus;
end;

Procedure hanya untuk men-setfocus atau mengarahkan langsung inputan ke edit text pencarian, saat salah satu dari radio group di klik.
procedure Tf_barang.bcariClick;

procedure Tf_barang.bcariClick(Sender: TObject);
begin
with dm.ZQuery1 do
begin
if rgcari.ItemIndex=-1 then
begin
MessageDlg('Kategori Pencarian Belum Dipilih',mtInformation,[mbOK],0);
exit;
end
else
if rgcari.ItemIndex=0 then
begin
sql.Clear;
sql.Add('select * from t_barang where kd_barang like "%'+ecari.Text+'%"');
open;
if (RecordCount=0) then
begin
MessageDlg('Kode Barang '+ecari.text+' Tidak Ditemukan',mtInformation,[mbOK],1);
formshow(sender);
ecari.Clear;
rgcari.ItemIndex:=-1;
exit;
end
else
gbarang.SetFocus;
end
else
begin
sql.Clear;
sql.Add('select * from t_barang where nm_barang like "%'+ecari.Text+'%"');
open;
if (RecordCount=0) then
begin
MessageDlg('Nama Barang '+ecari.text+' Tidak Ditemukan',mtInformation,[mbOK],1);
formshow(sender);
ecari.Clear;
rgcari.ItemIndex:=-1;
exit;
end
else
gbarang.SetFocus;
end;
end;
end;

Nah pada procedure inilah proses pencarian data dijalankan, procedure ini dijalankan pada saat tombol pencarian di klik. Procedure ini yang paling penting, mari kita uraikan penjelasannya satu persatu.

  • Baris 3 : pada prosedure menggunakan Zquery atau Zeos Query untuk menampung dan mengeksekusi perintah SQL.
  • Baris 5 s/d 9 : validasi jika radio group tidak ada yang dipilih atau diklik maka muncul dialog untuk memilih salah satu pilihan pencarian.
  • Baris 11 s/d 26 : merupakan pencarian berdasarkan pilihan radio group pertama yaitu Kode Barang, jadi yang dicari kode barang pada tabel barang. Pencarian ini menggunakan LIKE, supaya hasil pencariannya lebih luas dan dapat mencari kode barang yang memiliki kemiripan sesuai dengan key pencarian atau text yang diketikkan pada edit text pencarian.
  • Baris 13 s/d 15 : perintah SQL pencarian berdasarkan kode barang.
  • Baris 16 s/d 23 : dialog jika pencarian tidak menemukan data barang yang dicari, atau data barang yang dicari tidak ada.
  • Baris 25 : jika data barang yang dicari dapat ditemukan maka setfocus akan langsung mengarah ke grid barang yang menampilkan data barang yang dicari.
  • Baris 28 s/d 42 : pencarian berdasarkan pilihan radio group kedua yaitu Nama Barang.
  • Baris 29 s/d 31 : perintah SQL pencarian berdasarkan nama barang.
  • Baris 32 s/d 39 : dialog jika nama barang yang dicari tidak ditemukan.
  • Baris 41 : setfocus pada grid barang jika nama barang yang dicari telah ditemukan.

procedure tf_barang.tampil;

procedure tf_barang.tampil;
var s:string;
begin
with dm.ZQuery1 do
begin
if RecordCount=0 then
begin
  MessageDlg('Data Mobil Belum Ada',mtInformation,[mbOK],0);
  btambah.SetFocus;
  exit;
end
else
begin
  kb:=FieldByName('kd_barang').AsString;
  nb:=FieldByName('nm_barang').AsString;
  ekd.Text:=FieldByName('kd_barang').AsString;
  enama.Text:=FieldByName('nm_barang').AsString;
  ejml.Text:=inttostr(FieldByName('qty').AsInteger);
  csatuan.Text:=FieldByName('satuan').AsString;
  dttgl.Date:=FieldByName('tgl_beli').AsDateTime;
  eharga.Text:=inttostr(FieldByName('harga').AsInteger);
  s:=ExtractFilePath(Application.ExeName)+'\img\'+FieldByName('foto').AsString;
  if FileExists(s) then
  begin
    blek:=false;
    foto.Picture.LoadFromFile(s);
  end
  else
  begin
    blek:=true;
    foto.Picture.LoadFromFile(pchar(ExtractFilePath(Application.ExeName)+'book.jpg'))
  end;
  sket:=FieldByName('foto').AsString;
end;
end;
end;

Procedure ini digunakan untuk menampilkan data barang pada grid barang ke inputan form barang, namun inputan tetap tidak aktif sebelum tombol ubah di klik, untuk mengubah data barang. Procedure tampil ini dijalankan saat grid barang di klik atau ditekan tombol Enter.

  • Baris 7 s/d 10 : validasi atau dialog muncul jika data barang tidak atau belum ada namun grid barang sudah di klik. Dialog ini juga berfungi sebagai error handling, karena jika data barang kosong maka script dibawahnya dapat menjadi error karena isi dalam field kosong.
  • Baris 13 s/d 34 : menampilkan data barang pada inputan yang tersedia, termasuk foto barang.

procedure Tf_barang.gbarangCellClick;

procedure Tf_barang.gbarangCellClick(Column: TColumn);
begin
tampil;
end;

ketika cell pada grid barang di klik maka langsung akan menjalankan procedure tampil.

Naah sudah komplit fungsi pencarian pada delphi mudah bukan, sekarang tinggal Anda coba dan kembangkan sesuai dengan kebutuhan dan tuntutan. Jika ada salah dan kurangnya atau ada pertanyaan silahkan langsung saja di komen, saya senang sekali kalo ada yang mau komen di blog sederhana saya. So selamat mencoba. 🙂

Sorcecode lengkapnya ada disini