Selasa, 20 Agustus 2013

DELPHI - Menulis text kedalam sebuah File text .txt

Selamat malam pemirsa :D

kali ini saya bagikan cara untuk menulis ke dalam sebuah file melalui DELPHI..
oke langsung aja lah yah, ini codingnya

procedure TForm1.tbSimpanClick(Sender: TObject);
var TFile : TextFile;
begin
  assignFile(TFile, 'C:\catatan.txt');
  if FileExists('catatan.txt') then
    Append(TFile)
  else
    ReWrite(TFile);
  writeln(TFile,'INI TULISAN PERTAMA SAYA');
  closeFile(TFile);
end;


Coding itu bebas anda letakkan di tempat yang dibutuhkan. silahkan mencoba.
Terimakasih telah berkunjung di giavano.blogspot.com ^_^

Minggu, 11 Agustus 2013

DELPHI - Mengurangi stok secara otomatis menggunakan Trigger MySQL

Selamat siang pemirsa, :D
berhubung kemaren ada yang request jadi saya tempel di blog ini
oke langsung aja,

jadi trigger itu fungsinya untuk jadi pemicu, misalnya :
pas kita jual barang, stok harus berkurang....
pas kita beli barang, stok harus bertambah...
pas kita update penjualan, stok harus dikurangi yang lama dan ditambah yang baru...

nah itu lah yang gunanya trigger, kalo ga pake trigger juga bisa, tapi lambat dan codingnya ribet.

misalnya saya punya tabel penjualan (master & detail) seperti ini
//Master
CREATE TABLE `mjual` (
  `NOMOR_JUAL` char(10) NOT NULL,
  `TANGGAL` date NOT NULL,
  `NOPLAT` varchar(10) default NULL,
  `MOTOR` varchar(20) default NULL,
  `BIAYA_PASANG` double default '0',
  `JENIS_BAYAR` varchar(20) default 'TUNAI',
  `STATUS` varchar(50) default 'LUNAS',
  PRIMARY KEY  (`NOMOR_JUAL`),
  UNIQUE KEY `IDJual` (`NOMOR_JUAL`)
)
//detail
CREATE TABLE `djual` (
  `NOMOR_JUAL` char(10) NOT NULL,
  `ID_BARANG` varchar(20) NOT NULL,
  `JUMLAH` int(11) default '0',
  `HARGA_JUAL` double default '0',
  `DISKON` double default '0',
  KEY `IDJual` (`NOMOR_JUAL`),
  KEY `IDBarang` (`ID_BARANG`),
  CONSTRAINT `djual_fk` FOREIGN KEY (`NOMOR_JUAL`) REFERENCES `mjual` (`NOMOR_JUAL`) ON UPDATE CASCADE,
  CONSTRAINT `djual_fk1` FOREIGN KEY (`ID_BARANG`) REFERENCES `barang` (`ID_BARANG`) ON UPDATE CASCADE
)

//tabel barang
CREATE TABLE `barang` (
  `ID_BARANG` varchar(20) NOT NULL,
  `NAMA_BARANG` varchar(75) default NULL,
  `SATUAN` varchar(10) default NULL,
  `HARGA_BELI` double default '0',
  `HARGA_BARANG` double default '0',
  `STOK` int(11) default '0',
  `NAMA_SUPPLIER` varchar(30) default NULL,
  PRIMARY KEY  (`ID_BARANG`),
  UNIQUE KEY `IDGuru` (`ID_BARANG`),
  KEY `IDSupplier` (`NAMA_SUPPLIER`),
  CONSTRAINT `barang_fk` FOREIGN KEY (`NAMA_SUPPLIER`) REFERENCES `supplier` (`NAMA_SUPPLIER`) ON UPDATE CASCADE
)

//tabel supplier
CREATE TABLE `supplier` (
  `NAMA_SUPPLIER` varchar(30) NOT NULL,
  `ALAMAT` varchar(100) default NULL,
  `TELEPON` varchar(30) default NULL,
  `EMAIL` varchar(50) default NULL,
  `NAMA_SALESMAN` varchar(30) default NULL,
  `TELEPON_SALESMAN` varchar(30) default NULL,
  `SISA_HUTANG` double default '0',
)

misalnya saya punya data tabel barang seperti ini
ID_BARANG | NAMA_BARANG | STOK | HARGA_BARANG
00000000001 | sabun colek             | 100      | 3000
00000000002 | sabun mandi            | 100      | 1500


nah nanti di tabel penjualan (detail) ketika kita masukin
kode 00000000001  
jumlah penjualan 15,
maka stok 00000000001 harus menjadi 85. (inilah yang dimaksud trigger AFTER INSERT)
stok hanya akan berkurang, JIKA barang terjual (sesuai kodebarang yang diinput)

CREATE TRIGGER `djual_after_ins_tr` AFTER INSERT ON `djual`
  FOR EACH ROW
BEGIN
     UPDATE barang SET stok = stok - NEW.jumlah
     WHERE ID_Barang = NEW.ID_Barang;
END;

nah gimana kalo ternyata salah input? trus jumlahnya bukan 15, tapi 20, kita tinggal update aja detail penjualannya, ganti si 15 jadi 20
kode 00000000001  
jumlah penjualan 20,
maka stok 00000000001 harus menjadi 80. (inilah yang dimaksud trigger AFTER UPDATE)

CREATE TRIGGER `djual_after_upd_tr` AFTER UPDATE ON `djual`
  FOR EACH ROW
BEGIN
     UPDATE barang SET stok = stok - NEW.jumlah + OLD.jumlah
     WHERE ID_Barang = OLD.ID_Barang;
END;

nah gimana kalo salah? dan datanya harus dihapus?
contoh kode 00000000001 uda dimasukkin jumlah jualnya 15, trus mau dihapus karena salah, tentu stoknya harus kembali lagi kan jadi 100,
(inilah yang dimaksud trigger BEFORE DELETE)
jadi sebelum datanya dihapus, sistem otomatis kembalikan stok yang lama.

CREATE TRIGGER `djual_before_del_tr` BEFORE DELETE ON `djual`
  FOR EACH ROW
BEGIN
     UPDATE barang SET stok = stok + OLD.jumlah
     WHERE ID_Barang = OLD.ID_Barang;
END;

yah silahkan anda coba di db engine masing2, sesuaikan sintaksnya dengan versi SQL yang dipakai :D
Semoga membantu, 
thanks.



Kamis, 08 Agustus 2013

C# - Membuat Koneksi Dan Melakukan Operasi Database (SQLite embedded database)

Selamat Sore pemirsa setia :D
kali ini saya akan bagikan source code c# untuk membuat koneksi dengan embedded database SQLite

Oke langsung saja

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Data.SQLite;

//.....//

 public frm_department()
        {
            InitializeComponent();
        }

//Tambahkan coding ini setelah constructor (constructor itu kira2 seperti diatas)

        private SQLiteConnection conn;
        private DataSet ds;
        private SQLiteCommand cmd;
        private SQLiteDataAdapter sda;
        private SQLiteCommandBuilder cmdBuilder;

//Bagian Merah dibawah boleh diganti dengan nama database yang anda inginkan.. directorynya pun bebas terserah anda

        private void exec(String query)
        {
            conn = new SQLiteConnection(@"Data Source=D:\School.sdb;
                                          PRAGMA journal_mode = OFF;
                                          PRAGMA synchronous = OFF;
                                          PRAGMA locking_mode = EXCLUSIVE;
                                          PRAGMA temp_store = MEMORY;
                                          PRAGMA page_size = 4096;
                                          PRAGMA cache_size = 10000;");
            conn.Open();
            ds = new DataSet();
            cmd = conn.CreateCommand();
            string sql = query;
            sda = new SQLiteDataAdapter(sql, conn);
            cmdBuilder = new SQLiteCommandBuilder(sda);
            sda.Fill(ds);
        }

Nah coding diatas untuk Procedure, sedangkan untuk mengisi Query seperti ini :

//Pembuatan Embedded database
 exec("CREATE TABLE [Departments] ( " +
                    "[Department_ID] INTEGER  NOT NULL PRIMARY KEY AUTOINCREMENT, " +
                    "[Faculty_ID] INTEGER  NOT NULL," +
                    "[Employee_ID] INTEGER  NOT NULL," +
                    "[Title] TEXT  NOT NULL," +
                    "[Description] TEXT  NOT NULL," +
                    "[Address] TEXT  NOT NULL," +
                    "[Phone] TEXT  NOT NULL," +
                    "[Date_Register] datetime  NOT NULL" +
                    ");");
//Operasi Input Data
                    exec("insert into departments(faculty_id,employee_id, title, description, address, phone, date_register)"+
                        "values ("+
                        "'" +  g_faculty_ID.SelectedItem + "',"+
                        "'" + g_Personnel_Id.SelectedItem + "'," +
                        "'" + txt_Title.Text + "'," +
                        "'" + txt_Description.Text + "'," +
                        "'" + txt_Address.Text + "'," +
                        "'" + txt_Phone.Text + "'," +
                        "datetime('now','localtime') );");
                     
                    MessageBox.Show("Done!");

Jangan lupa di bagian Reference tambahkan SQLite.dll (seperti menambahkan reference Mysqlconnector pada Database server)

Oke sekian dan terimakasih

Bila ada yang ingin ditanyakan silahkan Comment disini :


Sabtu, 03 Agustus 2013

DELPHI - Backup Restore MySQL di delphi dengan komponen Open dan Save Dialog

Malam Pemirsa setia :D
Good night...!

Here Coding to BackUp and Restore your Database with Delphi

for example :

Database : Bengkel ( colored Red, according to your own database - tergantung anda )
Password : 1234 ( colored Red, same, it totally based on your own password - tergantung anda )
Folder MySQL : C:\Program Files (x86)\MySQL\MySQL Server 5.0\bin\
(folder MySQL it depends on your directory - tergantung tempat anda install mysql)

add component SaveDialog and OpenDialog on your form

BackUp

  SaveDialog1.Execute;
if SaveDIalog1.FileName<>'' then
  begin
  ShellExecute(self.Handle, PCHAR('open'),
  PCHAR('C:\Program Files (x86)\MySQL\MySQL Server 5.0\bin\mysqldump.exe'),
  PCHAR('-uroot -p1234 -hlocalhost -R -r "'+ SaveDialog1.FileName+'.sql" bengkel'),
  PCHAR('C:\Program Files (x86)\MySQL\MySQL Server 5.0\bin'),SW_SHOW);

  MessageDlg('Data Berhasil di Backup !!', mtInformation, [mbOK], 0);
  end
else
  MessageDlg('GAGAL. Harap Pilih Lokasi!!', mtInformation, [mbOK], 0);


Restore
   OpenDialog1.Execute;
if OpenDialog1.FileName<>'' then
  begin
  ShellExecute(self.Handle,pchar('open'),
  PCHAR('C:\Program Files (x86)\MySQL\MySQL Server 5.0\bin\mysql.exe'),
  PCHAR('-uroot -p1234 -hlocalhost -e "drop database if exists bengkel; '+
  'create database bengkel; use bengkel;\. '+OpenDialog1.FileName+'"'),nil,SW_HIDE);
  MessageDlg('Data Berhasil di Restore !!', mtInformation, [mbOK], 0);
  end
else
  MessageDlg('GAGAL. Harap Pilih Lokasi !!!', mtInformation, [mbOK], 0);
end;


OK easy right?
thanks 4 ur attention and see the next Update at giavano.blogspot.com

Thank you