30 Maret 2009

Asynchronous Proses pada Komponen ADO (Bagian 2)

Kita telah tahu bagaimana melakukan koneksi secara asynchronous. Bagaimana jika kita mempunyai data yang besar pada suatu tabel (10.000+ record) dan menampilkan progres berapa persen/record yang telah diproses? Dengan memakai ADO itu hal yang mudah, sama mudahnya seperti melakukan koneksi secara asynchronous seperti yang sudah dijelaskan sebelumnya. Disini yang dipakai sebagai contoh adalah komponen TADODataset. Untuk komponen lainnya, TADOTable, TADOQuery, sama saja. Supaya proses ambil data bisa dilakukan secara asynchronous, pada properti ExecuteOptions set pilihan eoAsyncFetchNonBlocking = True. Kemudian ada 2 event yang penting yaitu OnFetchProgress dan OnFetchComplete. Contoh berikut akan menggambarkan proses ambil data.
var
  RecCount: Integer;

procedure TForm1.OpenData;
begin
  ADODataSet1.CommandText := ‘SELECT COUNT(*) AS RecCount FROM tabelku’;
  ADODataSet1.Open;
  RecCount := ADODataSet1.Fields[0].AsInteger;
  ADODataSet1.Close;
  ADODataSet1.OnFetchProgress := ADODataSet1FetchProgress;
  ADODataSet1.OnFetchComplete := ADODataSet1FetchComplete;
  ADODataSet1.CommandText := ‘SELECT * FROM tabelku’;
  ADODataSet1.Open;
end;

procedure TForm1.ADODataSet1FetchProgress(DataSet: TCustomADODataSet;
  Progress, MaxProgress: Integer; var EventStatus: TEventStatus);
begin
  Label1.Caption := IntToStr(Progress) + ‘ of ‘ + IntToStr(RecCount);
end;

procedure TForm1.ADODataSet1FetchComplete(DataSet: TCustomADODataSet;
  const Error: Error; var EventStatus: TEventStatus);
begin
  ShowMessage(‘Proses selesai.’);
end;

Untuk proses INSERT, UPDATE, DELETE, pada properti ExecuteOptions set pilihan eoAsyncExecute = True dan event TADOConnection.OnExecuteComplete untuk mengetahui jika proses sudah selesai.

Baca selengkapnya...

28 Maret 2009

Asynchronous Proses pada Komponen ADO (Bagian 1)

Ini adalah salah satu fitur unik komponen ADO pada Delphi dimana proses koneksi ke SQL Server, melakukan operasi SELECT, INSERT, UPDATE, DELETE bisa dilakukan secara asynchronous. Pada proses asynchronous kita bisa melakukan proses lain pada saat operasi sedang berlangsung. Misalnya menampilkan suara/video pada saat melakukan koneksi atau menampilkan progres pada saat melakukan query data yang besar. Pada komponen ADO ada properti yang bisa diset untuk fitur ini, jadi tidak perlu repot harus pake thread yang rumit dan susah. Fitur ini bisa berjalan pada database SQL Server dan MySQL (sudah dites dan berjalan dengan baik) dan tidak menutup kemungkinan DBMS lainnya.
Untuk melakukan koneksi ke server, kita memerlukan komponen TADOConnection. Proses koneksi secara asynchronous bisa dilakukan dengan set properti ConnectOptions = coAsyncConnect (default = coConnectUnspecified). Misalkan kita ingin menampilkan video pada saat melakukan koneksi. File video berformat avi ini akan dijalankan dengan komponen TMediaPlayer “MediaPlayer1” pada panel “Panel1” selama proses koneksi berlangsung dan berhenti setelah koneksi berhasil.
procedure TForm1.ConnectToSQLServer;
begin
  ADOConnection1.OnConnectComplete := ADOConnection1ConnectComplete;
  ADOConnection1.Connected := True;
  MediaPlayer1.Filename := 'goyang_dombret.avi';
  MediaPlayer1.Display := Panel1;
  MediaPlayer1.Open;
  MediaPlayer1.Play;
end;

procedure TForm1.ADOConnection1ConnectComplete(Connection: TADOConnection; const Error: Error; var EventStatus: TEventStatus);
begin
  MediaPlayer1.Stop;
end;

Baca selengkapnya...

27 Maret 2009

Copy Data ke SQL Server Menggunakan bcp

Pak Bos baru buat logo buat perusahaannya yang nantinya mau ditampilkan di laporan yang dipilihnya. Setelah sudah payah membuat file image dengan format bmp, kemudian menyuruh aku untuk menampilkan logo tersebut di laporan. Untuk menampilkan logo tersebut pada laporan, aku memutuskan untuk menyimpan file image tersebut di database (SQL Server). Untuk urusan transfer file ke database ga perlu repot. Ada utility dari SQL Server yaitu bcp. Bcp ini adalah utility untuk copy data antara SQL Server dan file data. Dalam kasus ini aku menggunakannya untuk copy data dari file image format bmp ke database SQL Server.
Pertama sebelum melakukan proses copy diperlukan file format yang mendeskripsikan suatu tabel tujuan. Isi file ini merupakan struktur field-field yang ada pada suatu tabel. File ini bisa kita buat sendiri atau bisa dengan menggunakan utility bcp bagi yang tidak ingin repot. Misal nama file image “fotohot.bmp” mau di copy ke database “master” tabel “fotoku” dan tabel ini hanya punya satu field yang bernama “data”. Untuk membuat file formatnya kita menjalankan perintah ini di command prompt.
bcp master.dbo.fotoku format nul -T -n -f bcp.fmt
Output dari perintah ini adalah file format “bcp.fmt”. Dibawah ini adalah ilustrasi penjelasan dari format file yang dihasilkan.








Langkah terakhir adalah meng-copy file ke tabel tujuan dengan format file yang barusan dibuat. Proses ini dilakukan dengan menjalankan perintah berikut.
bcp master.dbo.fotoku in "fotohot.bmp" -f"bcp.fmt" -T

Baca selengkapnya...

25 Maret 2009

Menambah Fitur “Read More” pada Blogger

Yah ini adalah posting pertamaku tentang web, terasa bersemangat untuk memperdalam ilmu tentang web. Yang menjadi fokusku belakangan ini dan sering terjadi sejak aku memulai petualanganku di belantara web adalah sederhana saja. Gimana sih caranya supaya posting di blogger yang jadi tempat hosting selama ini, ditampilkan hanya sebagian saja, tidak semuanya ditampilkan. Sebabnya tidak lain adalah banyak dari postingku yang cukup panjang untuk dijadikan satu halaman, jadinya tidak enak dilihat dan mungkin terlihat amatiran. Mauku seperti yang juga banyak terlihat di website/blog lain yang menunjukkan sebagian posting, selain itu ada link yang menuju ke satu halaman yang menunjukkan posting secara keseluruhan.
Setelah mencari dan mencari, akhirnya ketemu juga. Caranya tidaklah sulit, tidak serumit yang kita bayangkan. Apalagi jika kita punya teknik/pengetahuan dasar tentang dunia web. Sesuai dengan judulnya, tips ini ditujukan untuk pemakai jasa blog dari blogger.com. PERHATIAN! Sebelum melakukan ini, sangat disarankan backup dulu template Anda buat jaga-jaga. Langkahnya adalah seperti ini.

Langkah 1 - Edit kode template.

Untuk bisa melakukan ini, kita harus login dulu ke account blogger kita. Setelah berhasil login, biasanya akan ditampilkan halaman dasbor. Pilih blog yang diinginkan jika lebih dari satu dan klik “Tata Letak”. Selanjutnya pilih “Edit HTML” dan pilih pilihan (di centang) “Expand Template Widget”. Dari sini kita dapat melihat kode HTML dari template blog kita, yang perlu dilakukan adalah cari string (dengan menekan Ctrl+F) “<data:post.body/>”. Jika ketemu, akan terlihat baris kode seperti ini:
<p><data:post.body/></p>
Yang perlu kita lakukan adalah menambahkan beberapa baris kode sebelum dan sesudah baris kode diatas. Untuk baris sebelumnya copy + paste kode berikut.
<b:if cond='data:blog.pageType == "item"'>
<style>.fullpost{display:inline;}</style>
<p><data:post.body/></p>
<b:else/>
<style>.fullpost{display:none;}</style>
Dan untuk yang sesudahnya copy + paste kode berikut.
<b:if cond='data:blog.pageType != "item"'><br />
<a expr:href='data:post.url'>Read more...</a>
</b:if>
</b:if>
Setelah penambahan kode-kode diatas hasil akhirnya kira-kira akan menjadi seperti ini.











Dengan bagian yang berwarna kuning adalah kode-kode yang kita tambahkan. Pada tiap posting kita akan terdapat link “Read more…” pada bagian terakhir, jika mau ganti tulisan lain tinggal ubah saja tulisan tersebut sesuai dengan selera.

Langkah 2 – Menambahkan class tag pada template posting default.

Kembali lagi ke halaman dasbor, pilih blog yang diinginkan kemudian klik pada “Pengaturan” dan pilih “Format”. Pada bagian paling bawah ada pilihan “Template Posting” yang kita isi kode-kode dibawah ini. Dan setelah selesai simpan perubahannya.
<span class="fullpost">

</span>

Langkah 3 – Tambahkan posting baru.

Kita sudah melakukan segala sesuatu yang diperlukan. Selanjutnya kita coba dengan posting baru. Ketika kita klik “Posting baru”, maka pada kotak posting akan terdapat tag-tag seperti pada langkah 2 secara otomatis, jika tidak ada berarti kita salah melakukannya, mungkin ada yang kurang atau salah tempat, lihat lagi langkah-langkah sebelumnya. Kata-kata yang kita ketikkan sebelum tag <span class="fullpost"> akan terlihat pada halaman utama, Kita bisa mengetikkan kata-kata selanjutnya diantara tag <span class="fullpost"> dan </span>. Untuk ilustrasinya lihat contoh gambar dibawah ini.









Catatan: Jika ada posting lama sebelum fitur ini ditambahkan, mungkin kita ingin mengganti tiap posting dengan tampilan yang sesuai dengan fitur ini. Untuk itu kita mesti melakukannya secara manual pada tiap posting dengan menambahkan tag <span class="fullpost"> dan </span> pada tempat yang diinginkan.

Baca selengkapnya...

24 Maret 2009

Pemrograman Web dengan PHP

Banyak waktuku dihabiskan untuk buat program desktop yang berkutat dengan Delphi, Windows API, Client-Server, berbagai macam DBMS seperti SQL Server atau MySQL atau pernah juga mencoba hal-hal lain seperti VB, C#, Linux/Unix dan Informix. Jarang waktuku digunakan untuk mempelajari atau mengembangkan aplikasi berbasis web. Hal inilah yang jadi ketertarikanku baru-baru ini. Mempelajari hal-hal dalam pengembangan aplikasi web didasari fakta bahwa pada masa kini segala sesuatu yang berhubungan dengan IT menunjukkan tren yang semakin bergeser ke web/jaringan. Dan tentu saja internet adalah biang kerok semua ini.
Untuk memenuhi kebutuhan ini, yang harus aku lakukan pertama kali adalah, sederhana saja, pakai apa bahasanya? Tidak perlu waktu lama untuk menentukan bahwa PHP adalah alat utama bagiku untuk mendalami pemrograman berbasis web. Tentu saja ada alasan yang melatarbelakangi keputusan ini. Selain karena bisa digunakan di berbagai platform dan free, yang terpenting adalah kedekatannya dengan bahasa C dan variannya. Itu juga yang jadi alasan pemilihan PHP jadi pilihanku bersama C++ pada waktu aku menyelesaikan tugas akhir masa perkuliahan dulu. Jadi ada semacam nostalgia, apalagi database yang sering digunakan adalah MySQL jadi klop deh.
Tidak perlu diragukan, PHP sudah banyak digunakan di jagad internet dan banyak sekali tutorial, contoh atau segala yang berkaitan. Dimasa yang akan datang mungkin akan muncul posting-posting dariku yang bernuansa web walaupun mungkin bukan tingkat lanjut karena memang aku jarang berhubungan dan juga posting-posting tersebut tidak melulu tentang pemrograman. Kemungkinan porsi untuk web akan semakin bertambah di masa yang akan datang, meski kemungkinan aku juga tidak akan meninggalkan bidang yang sudah lama aku tekuni sebelumnya.

Baca selengkapnya...

23 Maret 2009

Pembuatan Aplikasi Menggunakan SQL Server Management Objects (SMO)

Penggunaan SMO seperti layaknya melakukan pemrograman pada Delphi atau bahasa lainnya, tapi yang mendukung .Net Framework, seperti C#, VB.Net. Delphi pun ada yang mendukung pemrograman pada lingkungan .Net. Seperti contoh program yang aku buat untuk melakukan tes koneksi dibuat dengan menggunakan bahasa C#. Aku pilih bahasa ini karena sudah didukung secara default waktu menginstall SQL Server 2008. Program ini berjalan di lingkungan console, melakukan tes koneksi ke komputer lokal, dan jika berhasil akan mencetak output bahwa koneksi berhasil. Karena program ini dibuat dengan bahasa C#, maka penulisan huruf besar dan huruf kecil dibedakan (case-sensitive).
using System;
using Microsoft.SqlServer.Management.Common;
using Microsoft.SqlServer.Management.Smo;

class teskoneksi
{
  public static void Main(string[] args)
  {
    string s, ver;
    Server srv;
    ServerConnection conn;

    conn = new ServerConnection();
    conn.LoginSecure = true;
    srv = new Server(conn);
    try
    {
      s = srv.Name;
      ver = srv.Information.VersionString;
      Console.WriteLine("Tes koneksi berhasil BOS…");
    }
    catch (Exception excep)
    {
      s = excep.Message;
      Console.WriteLine(s);
    }
  }
}

Untuk compile program, misalkan script program diatas disimpan dengan nama file “teskoneksi.cs”, maka ketikkan perintah berikut di command prompt.
"C:\WINDOWS\Microsoft.NET\Framework\v3.5\csc.exe" /r:"C:\Program Files\Microsoft SQL Server\100\SDK\Assemblies\Microsoft.SqlServer.ConnectionInfo.dll","C:\Program Files\Microsoft SQL Server\100\SDK\Assemblies\Microsoft.SqlServer.Smo.dll","C:\Program Files\Microsoft SQL Server\100\SDK\Assemblies\Microsoft.SqlServer.Management.Sdk.Sfc.dll" /out:"C:\teskoneksi.exe" /t:exe teskoneksi.cs
Dengan asumsi direktori Windows di “C:\Windows” dan direktori install SQL Server di “C:\Program Files”. Hasil dari perintah tersebut adalah file "C:\teskoneksi.exe". Meskipun file ini berekstensi .exe, tapi tidak bisa dijalankan pada komputer yang tidak terinstall .Net Framework.

Baca selengkapnya...

22 Maret 2009

Berakhirnya Era SQL-DMO (RIP)

SQL-Distributed Management Objects (SQL-DMO) yang digunakan dalam manajemen database/replikasi SQL Server sering digunakan sebelum teknologi .Net Framerwork muncul. Pada waktu SQL Server 2000 (dan sebelumnya) masih berkuasa, SQL-DMO yang merupakan object COM, sering digunakan dalam pengembangan aplikasi database SQL Server. Kemudian ketika SQL Server 2005 muncul, SQL-DMO masih bisa digunakan walaupun tidak secara native. Dan pada akhirnya SQL Server 2008 yang merupakan versi terbaru, seperti pernyataan Microsoft yang akan menghilangkan dukungannya terhadap SQL-DMO.
Sebagai pengganti SQL-DMO, munculah SQL Server Management Objects (SMO) dan SQL Server Replication Management Objects (RMO). Teknologi terbaru ini terintegrasi dengan .Net Framework. Bagi yang memakai SQL Server versi sebelum 2008, mungkin tidak ada masalah pake SQL-DMO, tapi untuk yang versi 2008, mau tidak mau harus memakai SMO untuk pengembangan aplikasinya. Meski begitu SMO kompatibel dengan SQL Server 7.0, 2000 dan 2005. Yang patut diperhatikan adalah SMO terintegrasi dengan .Net Framework, karena itu .Net Framework harus sudah terinstall di komputer. Pada salah satu aplikasi yang aku kembangkan, yang memakai database SQL Server 2008, menggunakan SMO sebagai salah satu bagiannya, khususnya pada installer programnya. Installer akan memeriksa apakah bisa terkoneksi dengan instance SQL Server 2008 komputer lokal. Aku memakai SMO pada aplikasi ini untuk koneksi SQL Server, attach database, insert data ke tabel dan detach database. Selain fungsi-fungsi ini, terdapat banyak fungsi lain untuk administrasi dan replikasi database. Untuk referensi lebih lanjut tentang SMO, kita bisa melihatnya di website Microsoft, http://msdn.microsoft.com, dengan kata kunci “SMO”.

Baca selengkapnya...

21 Maret 2009

Mendapatkan Nomor Baris pada SQL Server dengan ROW_NUMBER

Jamannya SQL Server 2000 atau sebelumnya, kalo mau buat nomor urut untuk hasil dari operasi SELECT, mesti dilakukan manual. Buat suatu stored procedure atau semacamnya, data dimasukkan ke suatu tabel, baru tabel tersebut diupdate nomor urutnya, gitu cara gampangnya. Mulai versi 2005, SQL Server menyediakan fungsi ROW_NUMBER, sintaxnya sebagai berikut:
ROW_NUMBER () OVER ([] )
Dengan cara ini, hasil dari query akan otomatis mempunyai nomor urut per baris mulai dari nomor 1. membagi hasil query yang
dihasilkan. merupakan urutan berdasarkan field yang ditentukan untuk penomoran baris. Untuk lebih jelasnya misalkan ada tabel “Mahasiswa” yang punya field Kode, Nama dan Kelamin. Misalkan isinya sebagai berikut:








Kemudian diinginkan kolom nomor urut berdarsarkan field Kode, maka jika dijalankan perintah SQL “SELECT ROW_NUMBER() OVER (ORDER BY Kode) AS Nomor,
* FROM Mahasiswa” hasilnya akan seperti dibawah ini.








Kemudian jika diinginkan membagi hasil query berdasarkan field Kelamin, maka jika dijalankan perintah SQL “SELECT ROW_NUMBER() OVER (PARTITION BY Kelamin ORDER BY Kode) AS Nomor, * FROM Mahasiswa” hasilnya akan seperti dibawah ini.


Baca selengkapnya...

20 Maret 2009

Membatasi Koneksi Masuk untuk MySQL

Inilah salah satu yang aku suka dari MySQL. Kita bisa membatasi komputer mana saja yang bisa masuk/membuat koneksi. Jika kita install MySQL (aku pake versi 5.1) dengan setting default, maka akan tercipta user “root”, yang berarti user ini bisa melakukan koneksi. Tapi user ini hanya bisa melakukan koneksi dari komputer lokal saja. Jika ada koneksi dengan user ini dari komputer lain akan ditolak.
MySQL menyimpan user yang ada pada database mysql, tabel user. Jika kita lihat pada tabel ini, ada user “root” disitu. Yang perlu diperhatikan adalah adanya kolom “host” pada tabel tersebut, dan ini yang mengontrol komputer mana saja yang bisa melakukan koneksi.






Secara default user “root” bisa melakukan koneksi dari komputer lokal yang berarti kolom “host” berisi “localhost”. Jika ingin user “root” bisa melakukan koneksi dari komputer A, maka tinggal tambahkan user dengan host “A” dan seterusnya. Atau ingin user tersebut bisa melakukan koneksi dari mana saja, tambahkan user dengan host “%”. Mungkin terlihat merepotkan bagi sebagian orang, tapi bagiku ini adalah satu fitur keamanan yang unik dari MySQL.

Baca selengkapnya...

19 Maret 2009

Mengatasi Masalah "NTLDR is missing"

Waktu beberapa saat yang lalu aku dipanggil saudaraku buat betulin masalah dengan komputernya yg ngadat. Persoalannya komputernya ga bisa di booting, ada pesan error “NTLDR is missing” bla bla bla. Sebenarnya ini adalah persoalan klasik, dulu aku juga pernah ngalami. Mungkin saja hal ini dikarenakan virus, terjadi kesalahan saat shutdown, instalasi program lain, dan lain-lain. Karena error ini, maka ga bisa masuk sistem operasi Windows. Jika menggunakan Windows XP, maka langkah-langkah penyelamatan sebagai berikut:
  1. Masukkan CD booting Windows XP.
  2. Ketika ada pesan “Press any key to boot from CD…”, tekan sembarang tombol.
  3. Pada menu setup Windows, tekan tombol “R” untuk repair Windows.
  4. Masuk ke lokasi instalasi Windows dengan memilih/menekan angka yang bersangkutan (biasanya 1) kemudian tekan tombol Enter.
  5. Masukkan password untuk administrator, tekan Enter.
  6. Ketikkan perintah berikut (x adalah drive CD-ROM):
    copy x:\i386\ntldr c:\
    copy x:\i386\ntdetect.com c:\
  7. Selesai, keluarkan CD dan booting ulang.

Baca selengkapnya...

Sembunyikan Tombol Start Windows

Ini trik jaman dulu waktu aku kuliah yang tidak lama ini aku pake lagi buat fitur pada programku. Setelah nyari sudah payah (mesti nyari diantara puluhan CD, ribuan file, wuik…) akhirnya ketemu juga. Dulu buat mainan, sekarang buat hal yang serius. Caranya simpel aja, cuma hati-hati, nanti bisa nyembunyikan tapi ga bisa balikin, repot ntar musti restart lagi.
procedure SimSalabimStartMenu(aKeliatan: Boolean);
var
  h, TaskWindow: HWND;
begin
  if aKeliatan then // show
  begin
    h := FindWindowEx(GetDesktopWindow, 0, 'Button', nil);
    TaskWindow := FindWindow('Shell_TrayWnd', nil);
    ShowWindow(h, 1);
    Windows.SetParent(h, TaskWindow);
  end
  else // hide
  begin
    h := FindWindowEx(FindWindow('Shell_TrayWnd', nil), 0, 'Button', nil);
    ShowWindow(h, 0);
Windows.SetParent(h, 0);
  end;
end;

Tombol Start hilang tapi taskbarnya tetap kelihatan, kok jelek ya, bolong gitu. Mau nyembunyikan taskbar sekalian bisa. Untuk menyembunyikan dan menampilkan lagi:
ShowWindow(FindWindow('Shell_TrayWnd', nil), SW_HIDE); // hide
ShowWindow(FindWindow('Shell_TrayWnd', nil), SW_SHOWNA); // show

Baca selengkapnya...

18 Maret 2009

Non Aktifkan Ctrl+Alt+Del

Dari dulu Ctrl+Alt+Del selalu jadi tombol sakti untuk menyelesaikan masalah. Contohnya jaman Windows 9x, kadang bisa jadi solusi keluar dari blue screen yang sangat mematikan waktu itu, atau jaman sekarang yang bisa mematikan aplikasi/proses yang tidak merespon. Namun ada kalanya kita tidak ingin tombol ini bisa diakses untuk keperluan tersebut (menampilkan task manager). Caranya adalah dengan mengedit registry HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Policies\System\DisableTaskMgr, set nilainya dengan 1 (non aktifkan task manager) atau 0 (aktifkan).
with TRegistry.Create do
try
  RootKey := HKEY_CURRENT_USER;
  if OpenKey(‘\Software\Microsoft\Windows\CurrentVersion\Policies\System', True) then
  begin
    WriteInteger('DisableTaskMgr', 1); // 1: disable, 0: enable
  end;
  CloseKey;
finally
  Free;
end;

Baca selengkapnya...

17 Maret 2009

Extended Stored Procedure Buatan Sendiri dengan Delphi

Sebelumnya kita tahu dan mengenal extended stored procedure yang sudah ada di SQL Server. Bagaimana jika kita ingin membuat sendiri, apa harus pake bahasa C untuk membuatnya? Ternyata pake Delphi juga bisa. Yang kita butuhkan adalah unit MsOdsApi.pas yang merupakan translasi dari C-header dari Microsoft Open Data Services API (opends60.dll). File ini bisa didapatkan dari internet (cari di google dengan kata kunci “MsOdsApi”) atau bisa minta saya kok, nanti saya kasih, gratis tis tis.
Selanjutnya tinggal masukkan unit ini ke project dll yang dibuat. Misalnya kita ingin membuat procedure sendiri dengan 2 parameter (integer dan varchar) dengan output 2 kolom (integer dan varchar). Procedure ini akan mencetak nomor baris dan sebanyak . Nih dia source-nya…
procedure xp_print(aSrvProc: SRV_PROC); cdecl;
var
  i, count: Integer;
  tipe: Byte;
  fnull: Bool;
  buf: array [1..255] of Char;
  maxlen, actlen: ULONG;
  s: PChar;
  st: string;
begin
  count := 0;
  st := '';
  FillChar(buf, SizeOf(buf), #0);
  if srv_rpcparams(aSrvProc) = 2 then // jumlah parameter yg kita berikan harus 2
  begin
    srv_paraminfo(aSrvProc, 1, @tipe, // input parameter pertama
      @maxlen, @actlen,
      @count, @fnull); // dengan tipe int
    srv_paraminfo(aSrvProc, 2, @tipe, // input parameter kedua
      @maxlen, @actlen,
      @buf, @fnull); // dengan tipe varchar
    st := buf;
  end;
  // 2 kolom tipe int dan varchar
  srv_describe(aSrvProc, 1, 'No.', SRV_NULLTERM, SRVINTN, SizeOf(Integer), SRVINTN, SizeOf(Integer), nil);
  srv_describe(aSrvProc, 2, 'Print', SRV_NULLTERM, SRVVARCHAR, 100, SRVVARCHAR, 100, nil);

  s := PChar(st);
  for i := 1 to count do
  begin
    srv_setcoldata(aSrvProc, 1, @i); // simpan data pertama
    srv_setcoldata(aSrvProc, 2, s); // simpan data kedua
    srv_sendrow(aSrvProc); // kirim baris ini ke client
  end;
  // kirim pesan selesai ke client
  srv_senddone(aSrvProc, (SRV_DONE_COUNT or SRV_DONE_MORE), 0, count);
end;

Selanjutnya register procedure dan dll yang dibuat dan jalankan procedure ini. Untuk keterangan lebih lanjut fungsi-fungsi yang dipakai (srv_rpcparams, srv_paraminfo, dan lainnya) bisa baca Books Online SQL Server. Jika kita menjalankan procedure ini: xp_print 5, ‘Tes 123’, maka hasilnya adalah sebagai berikut.


Baca selengkapnya...

16 Maret 2009

Implementasi Extended Stored Procedure

Melanjutkan bahasan sebelumnya tentang extended stored procedure pada SQL Server, sekarang akan dijelaskan lebih jauh tentang implementasinya. Seperti yang dijelaskan sebelumnya, extended stored procedure sama dengan procedure biasa. Extended stored procedure ini ada pada database masing-masing dan bisa kita lihat melalui Enterprise Manager/Management Studio. Beberapa sudah diberikan oleh SQL Server yang ada pada database master seperti xp_cmdshell, xp_grantlogin, xp_revokelogin dan lainnya yang memiliki prefix xp_. Extended stored procedure ini disediakan banyak oleh SQL Server, tapi banyak juga yang tidak didokumentasikan, jadi ngilu juga.
Salah satu extended stored procedure yang sering aku gunakan adalah xp_cmdshell. Mengeksekusi xp_cmdshell sama halnya dengan mengeksekusi perintah shell misalnya dir C:\. Procedure ini akan mengembalikan output berupa teks hasil dari perintah shell yang diberikan. Sintaxnya adalah sebagai berikut:
xp_cmdshell {‘command_string’'} [, no_output]
Dengan command_string adalah perintah shell dan parameter no_output (opsional) jika dipakai tidak akan mengembalikan output hasil eksekusi. Misal kita ingin melihat isi drive C:\, maka perintahnya xp_cmdshell ‘dir C:\’, dan akan mengembalikan output seperti jika kita menjalankannya pada command prompt.
Kita juga bisa menambahkan extended stored procedure dari dll yang ada. Sebelum kita panggil procedurenya, kita perlu registrasikan dulu dengan sp_addextendedproc. Misal nama kita membuat dll dengan nama file “C:\tesdll.dll” dan didalam dll tersebut ada fungsi yang di ekspor bernama xp_Halo, maka kita bisa registrasikan dengan cara sebagai berikut:
sp_addextendedproc 'xp_Halo', 'C:\tesdll.dll'
Selanjutnya kita bisa memanggil procedure xp_Halo layaknya stored procedure biasa. Jika ingin menghapus exenteded stored procedure ini:
sp_dropextendedproc 'xp_Halo'

Baca selengkapnya...

15 Maret 2009

Extended Stored Procedure pada MS SQL Server

Di SQL Server, kita mengenal ada yang namanya stored procedure, sama halnya di Delphi seperti procedure biasa. Tinggal buat stored procedure-nya, compile kemudian jalankan dengan perintah exec/execute. Mungkin kita sudah cukup puas dengan adanya stored procedure. Tapi stored procedure punya batasannya sendiri. Semua fungsi yang ada di dalam stored procedure adalah yang berhubungan dengan data, jadi tidak dimungkinkan jika misalnya kita ingin mendapatkan isi direktori di drive C:\.
Di SQL Server (SQL Server 2000 yang biasanya aku pake, untuk versi lain, terutama versi sesudahnya juga dimungkinkan), solusi untuk masalah tersebut adalah extended stored procedure. Dengan memanfaatkan fitur dari SQL Server ini, kita bisa memperluas fungsi-fungsi yang kita ingini seperti yang dipaparkan sebelumnya, mendapatkan isi drive C:\. Extended stored procedure, seperti halnya stored procedure biasa, dipanggil/dieksekusi dengan perintah exec/execute.
Extended stored procedure sebenarnya adalah sebuah program terpisah dalam bentuk DLL (Dynamic Link Library) yang biasanya dibuat dengan bahasa C. Pada waktu memanggil extended stored procedure, SQL Sever secara dinamik me-load dan mengeksekusi dll yang bersangkutan. Passing paramater juga dimungkinkan seperti layaknya stored procedure biasa. Pada kesempatan selanjutnya akan dijelaskan lebih rinci pemakaian dan implementasi extended stored procedure.

Baca selengkapnya...

14 Maret 2009

Enkripsi dengan Delphi

Pada suatu waktu mungkin kita perlu melakukan enkripsi pada suatu string supaya data kita tidak bisa dibaca orang lain. Kita bisa membuat teknik enkripsi yang sederhana dengan membuat sendiri fungsi enkripsi yang kita inginkan misal dengan mengganti karakter satu dengan yang lain atau dengan teknik XOR. Daripada susah mikirin teknik dan membuat fungsinya, ada komponen yang bisa kita pakai buat ekripsi yang kita ingini. Salah satunya adalah dengan TurboPower LockBox (http://sourceforge.net/projects/tplockbox/) yang bisa dipakai pada lingkungan Delphi, C++Builder, dan Kylix.
Keuntungannya adalah selain free, ada pula source code. Algoritma yang didukung adalah Blowfish, RSA, MD5, SHA-1, DES, Triple-DES, Rijndael. Selain itu juga bisa dipakai untuk fungsi hashing. Cukup memadai untuk proses enkripsi data, atau jika tidak cukup bisa mengedit source-nya bagi yang mampu.
Instalasinya mudah, hanya compile dan tinggal pakai pada unit yang diinginkan. Kita bisa melakukan enkripsi terhadap string atau file. Misalkan kita ingin mengenkripsi string “Ini Ibu Budi, Budi lagi mandi.” dengan kata kunci “12345” dan algoritma Blowfish, caranya mudah saja:
uses LbCipher, LbString;
var
  Key128: TKey128;
  Hasil: string;
begin
  GenerateLMDKey(Key128, SizeOf(Key128), ‘12345’);
  Hasil := BFEncryptStringEx(‘Ini Ibu Budi, Budi lagi mandi.’, Key128, True);
end.
Semudah itu untuk enkripsi, untuk dekripsi tinggal ganti parameter ketiga dari True jadi False. Disediakan beberapa contoh program bawaan, bagi yang ingin tahu lebih lanjut.

Baca selengkapnya...

13 Maret 2009

Copy File dengan Progress Dialog

Bagi yang sering mengcopy file pada Windows terutama pada Explorer, pasti pernah melihat progress dialog yang ditampilkan selama proses copy file berlangsung. Pada Delphi ada procedure untuk copy file yaitu Windows.CopyFile(), tapi procedure ini tidak menampilkan progress dialog. Berikut ini contoh untuk copy beberapa file dengan menampilkan progress dialog selama proses copy berlangsung.
uses ShellAPI;

procedure Copy_File;
var
  Struct: TSHFileOpStruct;
  Buf: array [0..4096] of Char;
  p: PChar;
  DestFile: string;
begin
  FillChar(Buf, SizeOf(Buf), #0);
  p := @Buf;
  p := StrECopy(p, 'C:\File1.txt') + 1;
  p := StrECopy(p, 'C:\File2.txt') + 1;
  StrECopy(p, 'C:\File3.txt') ;
  DestFile := 'D:\';
  Struct.Wnd := 0;
  Struct.wFunc := FO_COPY;
  Struct.pFrom := @Buf;
  Struct.pTo := PChar(DestFile);
  Struct.fFlags:= 0;
  if ((SHFileOperation(Struct) <> 0) or (Struct.fAnyOperationsAborted <> False)) then
    ShowMessage('Proses dibatalkan');
end;
Procedure diatas akan mengcopy 3 file (file1.txt, file2.txt, file3.txt) dari “C:\” ke “D:\”. Yang perlu diperhatikan disini adalah buffer yang berisi nama file yang akan dicopy harus diakhiri dengan 2 karakter #0. Tidak hanya untuk copy file, tetapi bisa juga hapus/memindahkan/rename file dengan mengganti flag dari FO_COPY ke FO_DELETE / FO_MOVE / FO_RENAME.

Baca selengkapnya...

12 Maret 2009

Susahnya Cari Akses Internet yang Bisa Diandalkan

Ini adalah salah satu pengalaman pahitku terhadap akses internet di negara ini. Mahal dan tidak bisa diandalkan, kadang drop, kadang putus, bla bla bla. Pasti yang sering pake internet pernah mengalami kejadian seperti aku. Mungkin memang dibuat gitu kali ya, biar ga rugi penyedia jasa internet. Ambil contoh aja yang sering aku pake untuk akses internet, Starone. Aku akses internet dengan Starone lewat handphone CDMA. Susah banget koneknya. Dari dulu (sejak 2 tahun lebih) aku tinggal dirumah baru sinyalnya tetap aja minim ga ada perbaikan blas pada kualitas sinyal dan internetnya, yang ada malah lebih buruk. Tidak itu aja masalahnya, setelah konek pun kualitas internetnya juga buruk, kecepatannya naik turun (sering turunnya), sering drop, sangat buruk. Kadang bikin murka aja. Kalo bukan karna telpon murahnya (Rp. 25,- per menit sesama operator Starone), udah aku buang dari dulu itu kartu. Beda lagi dengan Telkom Flexi, meski telpon sering drop, kualitas internetnya lebih stabil dari Starone, meski lambat (dan relatif mahal). Ya ini yang aku pake sekarang, udah ga ada pilihan lain. Aku ga banyak pilihan, maklum anggaran tipis. Ini yang kita harapkan bersama, akses internet yang lebih baik dan murah untuk semua rakyat. Semoga pemimpin kita yang baru nanti benar-benar peduli dengan hal yang kurang diperhatikan seperti ini, tetapi dapat memajukan dan mencerdaskan rakyatnya. Tidak ada maksud berpolitik ria, tapi selamat memilih di Pemilu nanti…
Baca selengkapnya...

11 Maret 2009

Tes Prosesor Intel Core i7

Wow Intel mengeluarkan prosesor terbarunya, Intel Core i7. Setelah sebelumnya hanya jadi penonton dan ngiler doank atas teknologi-teknologi terbaru hardware komputer (soalnya cepet banget ganti-ganti dengan yang lebih baru, selain faktor ekonomi tentunya), kini aku punya kesempatan untuk mencicipi teknologi terbaru Intel ini. Prosesor ini tergabung bersama komponen lainnya menjadi satu set komputer lengkap yang dibeli bosku. Sebelumnya sudah tahu beberapa hari sebelum komputer datang bahwa bosku mau beli komputer dengan Intel Core i7 sebagai prosesornya. Tapi mesti nunggu dulu, motherboard-nya mesti pesan dulu. Satu set komputer dengan monitor LCD 19” widescreen tersebut dibanderol Rp. 10 juta plus. Well, cara yang tepat untuk menghamburkan duit. Andai punya kantong tebal seperti si bos…
Komputer terbaru ini datang dengan sistem operasi Windows Vista 64 bit. Berarti sesuatu yang baru lagi untuk dicoba. Apakah programku bisa jalan pada Windows 64 bit? Katanya sih prosesor 64 bit (x64) bisa kompatibel dengan program yang dibuat pada platform 32 bit. Tapi apa benar begitu, aku coba saja. Ya memang instalasi program bisa jalan semua dan lancar. Memang ada sesuatu hal yang mengganjal, pada Windows 64 bit ini, Program Files dan mungkin direktori sistem yang lain, ada 2, satu untuk program 64 bit pada direktori Program Files, dan satunya lagi untuk yang 32 bit pada direktori Program Files (x86). Semoga tidak berpengaruh pada programku. Memang disengaja install Windows 64 bit, soalnya si bos rencana menambah memori hingga 6GB. Windows yang 32 bit maksimal bisa pakai 4GB (teori), prakteknya hanya 3,5GB yang dibaca.
Kesanku tentang komputer baru ini baguslah, ga isa ngomong lebih. Windowsnya sudah diinstall dari tokonya. Aku juga tidak melakukan benchmark atau perbandingan atau semacamnya disebabkan masalah waktu. Mungkin memang lebih bertenaga, cuma aku memang tidak terlalu merasakannya. Coba aja kalo ditambahi VGA sekelas AMD Radeon HD 4870 yang harganya US$400 keatas mungkin yahud kali ya. Bisa betah didepan komputer dan ga pengen pulang kantor nih…

Baca selengkapnya...

10 Maret 2009

Lokalisasi Message Dialog pada Delphi (Alternatif)

Pada bagian sebelumnya sudah dijelaskan cara untuk lokalisasi Delphi dialog dengan mengedit file “Consts.pas” bawaan dari Delphi. Cara tersebut sebetulnya kurang dianjurkan, dan ada cara lain yang lebih elegan. Misalkan kita ingin mengganti kata-kata pada dialog yang pakai bahasa Inggris tersebut dengan bahasa Jawa seperti yang diingini bos pemilik warung Jawa. Cara ini tidak mengedit file “Consts.pas”, tapi kita membuat unit sendiri dan menerjemahkan kata-kata yang diinginkan. Skrip contoh dibawah ini bisa digunakan.
unit BosoJowo;

interface

implementation

uses Windows, Consts;

procedure HookResourceString(aResStringRec: PResStringRec; aNewStr: PChar);
var
  OldProtect: DWORD;
begin
  VirtualProtect(aResStringRec, SizeOf(aResStringRec^), PAGE_EXECUTE_READWRITE, @OldProtect);
  aResStringRec^.Identifier := Integer(aNewStr);
  VirtualProtect(aResStringRec, SizeOf(aResStringRec^), OldProtect, @OldProtect);
end;

initialization
  HookResourceString(@SMsgDlgConfirm, 'Takon');
  HookResourceS
tring(@SMsgDlgYes, 'Iyo');
  HookResourceString(@SMsgDlgNo, 'Ora');
  HookResourceString(@SMsgDlgCancel, 'Gak Sido');

end.
Unit diatas bisa ditambahkan pada project yang kita buat. Unit tersebut cukup ditambahkan di file .dpr, tidak perlu ditambahkan di tiap form atau unit. Dengan kode diatas jika dari Delphi kita memberikan perintah:
MessageDlg('Simpen setelane?', mtConfirmation, [mbYes, mbNo, mbCancel], 0);
Maka outputnya akan seperti dibawah ini.








Dengan begini bos Suparno pun tidak perlu pusing belajar bahasa asing lagi untuk memakai program komputer yang diinginkannya.

Baca selengkapnya...

06 Maret 2009

Lokalisasi Message Dialog pada Delphi

Suatu saat Suparno, bos warung Jawa terkemuka ingin mengkomputerisasi segala keperluan bisnisnya dengan program komputer, seiring dengan usahanya yang maju pesat dan beberapa cabang yang akan dibuka. Setelah menyeleksi beberapa program (seperti tender instilah kerennya) yang ditawarkan, agaknya kurang cocok. Walaupun ada yang sudah pakai bahasa Indonesia, tapi tidak disemua bagian pakai bahasa Indonesia. Lebih baik lagi kalo ada yang pakai bahasa lokalnya, bahasa Jawa.
Kisah diatas berdasarkan kenyataan, bukan cuma karangan doang, meski nama fiktif belaka. Semakin banyaknya kebutuhan dalam negeri akan program komputer, berarti semakin dibutuhkan pula program yang pakai bahasa lokal. Pada kasus pengembangan program pada Delphi, hal seperti input dialog, message dialog atau yang lainnya mungkin sangat sering dipakai dalam program. Didalam Delphi sendiri sudah disediakan fungsi untuk itu, tapi dengan bahasa Inggris. Kata-kata seperti Yes, No, Cancel dan semacamnya mungkin sudah sering kita lihat.
Bagaimana bila ingin pakai bahasa lainnya? Mungkin ada yang bilang, ya bikin dialog sendiri, gitu aja kok repot! Tapi sebenarnya itu bisa dilakukan tanpa perlu repot bikin dialog baru lagi. Cara yang paling cepat adalah ganti kata-kata tersebut. Pada direktori $(DELPHI)\Source\VCL ($DELPHI adalah direktori instalasi Delphi) terdapat file “Consts.pas”. Dalam file ini terdapat resource string yang dipakai untuk kata-kata pada dialog yang biasanya dipakai pada saat memanggil procedure/fungsi ShowMessage() atau MessageDlg(). Misalnya kita ingin mengganti kata “Yes” dengan “Ya”, maka ganti baris “SMsgDlgYes = '&Yes';” dengan “SMsgDlgYes = '&Ya';”, kemudian compile program.

Baca selengkapnya...

05 Maret 2009

Tes Windows Terbaru, Windows 7 Beta

Windows terbaru tiba, meski masih beta. Microsoft mengeluarkan Windows terbarunya yaitu Windows 7 yang digembar gemborkan itu. Pada saat aku beli majalah PC Media 03/2009, bonusnya Windows 7 beta (ada pada bonus DVD). Instalasinya biasa aja, mungkin lebih cepat dibanding install Windows Vista. Dibanding Windows Vista, tidak ada perbedaan yang signifikan dalam soal user interface, bahkan bisa dibilang sama. Yang aku dengar juga Windows ini bukan Windows yang benar-benar baru, tapi dibangun dari core Windows Vista. Keunggulannya bla bla bla..., bisa baca sendiri di majalah atau dari berbagai sumber.
Yang bikin aku tertarik dengan Windows ini adalah tentu saja berhubungan dengan kompatibilitas program yang aku buat. Apa bisa jalan lancar atau gimana (jangan-jangan error lagi seperti waktu kejadian sebelumnya). Dimulai dengan proses instalasi SQL Server 2008 Express. Aku coba install tanpa komponen pendukung (Windows Installer 4.5, .Net Framework, Windows PowerShell) seperti pada Windows XP atau Windows Vista, ternyata bisa! Ini mungkin satu keunggulan dari Windows 7, ga perlu repot nginstall macem-macem, meski memang ini adalah hal yang tergolong lumrah, makin baru produk, berarti harusnya juga makin mendukung hal-hal yang baru. Instalasi SQL Server 2008 Express dengan setting default relatif lancar (HORE).
Kemudian beralih ke instalasi program sendiri, setelah instalasi database dan komponen buat server selesai, giliran yang porsi client. Setelah selesai, dicoba, ternyata jalan bos. OK juga nih Windows 7. Kemungkinan nantinya untuk migrasi dari Windows XP ke Windows yang lebih baru, mungkin aku pilih Windows 7 ketimbang Windows Vista. Bukannya bermaksud promosi tapi memang lebih simpel dan mendukung teknologi yang lebih baru.

Baca selengkapnya...

04 Maret 2009

Error Program Pada SQL Server 2008 Express + Vista (Solusi)

Beberapa saat yang lalu program yang aku buat di lingkungan Windows XP (jalan, ok) dicoba dijalankan di komputer client yang pake Windows Vista. Hasilnya error (ga tau detailnya soalnya bukan aku yang install). Seletah aku coba di Windows Vista, mulai dari install SQL Server 2008 Express, OK, kemudian install programku beserta databasenya juga tidak ada masalah. Masalah muncul setelah program dijalankan, error kadang-kadang muncul pada saat proses string/yang berhubungan dengan karakter. Errornya kira-kira seperti ini: “Cannot resolve the collation conflict between "Latin1_General_CI_AI" and "SQL_Latin1_General_CP1_CI_AS" in the equal to operation.”.
Pada komputer yang aku gunakan untuk bikin program (Windows XP) collation default untuk sistemnya adalah “SQL_Latin1_General_CP1_CI_AS”, sedangkan pada Windows Vista yang aku pake buat coba-coba collation-nya adalah “Latin1_General_CI_AI”. Ya jadinya gitu, sql servernya ngomel-ngomel $&@#*^... Setelah nyari kesana kemari, akhirnya ada cara buat solusi masalahnya, caranya adalah dengan menambahkan klausa COLLATE pada query. Misalnya: select id, name COLLATE Latin1_General_CI_AI from tbl1. Waduh, berarti musti ngubah semua querynya dong, aaaarrghh!
Aku cari aja jalan lain, soalnya lama banget ngubah querynya. Aku coba liat books online sql server ada dijelaskan tentang collation. Disitu dijelaskan bahwa collation merupakan “bit pattern” (sudah ngartikan ke Indonesia, artikan sendiri yach…) yang mewakili tiap karakter dan merupakan aturan-aturan bagaimana karakter tersebut diurutkan dan dibandingkan. Jadi kira-kira begini, ada satu collation yang menganggap sama huruf besar dan kecil, sedangkan ada collation lain yang membedakannya, selain itu juga ada collation yang melambangkan karakter kanji, arab, dan lain sebagainya. Wah sebelumnya ga pernah peduli, berhubung ada error yang musti diperbaiki, jadi peduli.
Setelah nyari lagi di books online ada perintah sql yang bisa mengganti collation dari suatu database yaitu ALTER DATABASE. Dengan perintah ini kita bisa mengganti collation dari database: ALTER DATABASE COLLATE . Pake ALTER TABLE juga bisa, tapi cuma per tabel saja, kalo ALTER DATABASE satu database. Tapi cara seperti ini sempat bikin ragu, setelah ganti collation ada masalah pada program ga ya?
Kemudian setelah berbagai cara diatas aku tempuh cara terakhir. Pada waktu install SQL Server 2008, ada pilihan untuk setting collationnya. Ini yang aku ubah sesuai dengan collation databaseku, jadi collation sistem mengikuti collation databaseku. Pada Windows Vista, collation defaultnya adalah Windows Collation (Latin1_General_CI_AI) sedangkan pada Windows XP defaultnya adalah SQL Collation (SQL_Latin1_General_CP1_CI_AS). Selesai masalahnya.

Baca selengkapnya...

03 Maret 2009

Menambahkan MySQL pada Installer Program dengan Inno Setup

Setelah sebelumnya program dan MySQL diinstall terpisah oleh user, aku jadi berpikir bisa ga installernya dijadikan satu biar user ga usah repot nginstall MySQL dengan berbagai settingnya. Ternyata bisa tuh. Berikut ini akan dijelaskan bagaimana caranya dengan menggunakan program installer yang aku pake: Inno Setup 5.2.3. Sebelumnya sudah dijelaskan bagaimana cara silent install MySQL, dan itu juga diperlukan disini nantinya.
Ada beberapa section pada script Inno Setup diantaranya adalah Setup, Tasks, Files, Registry, Run dan masih ada beberapa yang lain. Ada cara yang mudah untuk menjalankan installer MySQL, yaitu lewat section [Run]. Pada section ini, terdapat file-file yang dijalankan setelah instalasi program sukses. Misalkan kita menyertakan file mysql.msi kedalam installer program kita dengan kode seperti ini:
[Files]
Source: "mysql.msi"; DestDir: "{tmp}"
Dengan kode diatas akan mengcopy file mysql.msi yang disertakan program ke temporary direktory. Jika ingin menjalankan file tersebut setelah instalasi program, maka bisa menambahkan kode seperti ini:
[Run]
Filename: "msiexec.exe"; Parameters: "/i ""{tmp}\mysql.msi"" /qn INSTALLDIR=""{app}"" DATADIR=""{app}"""
Kode diatas akan menjalankan silent install MySQL dengan direktori install tujuan dan direktori data ke direktori yang dipilih. Setelah instalasi selesai, MySQL semestinya juga sudah terinstall.

Baca selengkapnya...

02 Maret 2009

Silent Install MySQL 5

MySQL tidak hanya bisa diinstall dengan interaksi user, tetapi bisa dilakukan tanpa campur tangan user. User tidak perlu klik next, next, next (padahal ga liat/baca apa yang yang dipilih, asal klik aja pokok beres) sampe selesai. Ada cara biar proses instalasi MySQL ga perlu interaksi user. Cara ini bisa digunakan bagi yang ingin membuat installer program jadi satu dengan instalasi MySQL.
Pertama adalah mendapatkan installer MySQL (bisa didapat dari websitenya http://www.mysql.com) yang ekstensinya .msi bukan yang .exe. Dari file ini kita bisa silent install (install secara diam-diam?) MySQL. Yang dimaksud silent install adalah install tanpa ada campur tangan dari user, jadi user ga perlu klik sana klik sini atau input apa, jadi tinggal jalankan programnya akan install sampai selesai. Untuk bisa begini dibutuhkan program yang namanya “msiexec.exe” (di Windows XP sudah ada secara default). Bisa dicek caranya ketik msiexec di command prompt atau dari Start->Run, kira-kira akan muncul dialog seperti dibawah ini.



















Dari gambar diatas bisa dilihat ada beberapa pilihan parameter yang bisa digunakan untuk installasi. Misal /i untuk install program atau /x untuk uninstall program. Yang perlu diperhatikan disini adalah parameter /qn yang akan menginstall program tanpa ada user interface dan campur tangan user. Jadi untuk silent install MySQL (misal nama file: “mysql51.msi”) kira-kira perintahnya seperti ini: msiexec.exe /i “\mysql51.msi” /qn. Untuk uninstall tinggal ganti parameter /i dengan /x.
Dengan perintah seperti diatas, instalasi MySQL akan diinstall pada direktori defaultnya di “\MySQL\MySQL Server 5.1” dan direktori penyimpanan data di “\Documents and Settings\All Users\Application Data\MySQL\MySQL Server 5.1” pada MySQL 5.1. Kalo mau install ditempat lain bisa dengan menambahkan parameter “INSTALLDIR=” untuk menentukan direktori instalasi MySQL dan “DATADIR=” untuk direktori data.

Baca selengkapnya...

01 Maret 2009

Mencari Program Installer yang Cocok

Selama ini aku buat program tanpa adanya installer, jadi ya tinggal copy & paste saja beres. Pada awalnya sih ok aja. Masalah timbul setelah makin banyak file yang ditambahkan, juga untuk edit registry Windows. Jadi susah ngurusnya, maka dari itu aku putuskan buat installer buat programku. Selain itu juga agar tampak lebih profesional (ga nyombong ya...).
Sebenarnya, hal seperti ini bukan yang pertama bagiku. Pada jaman dulu kala juga pernah nyoba bikin installer dari beberapa program yang ada seperti InstallShield Express bawaannya Delphi, InstallShield 7 Professional atau Wise Installer adalah beberapa yang sudah aku coba. Meskipun begitu jarang aku bikin installer, alasannya kadang ruwet bahasanya ada yang pake C jadi susah, kemudian bagi aku juga ga penting-penting amat selain ga ada waktu karna dihabisin buat program dan segala tetek bengeknya.
Kemudian setelah beberapa lama, aku pertimbangkan lagi untuk buat installer. Sebelumnya juga aku survei dan coba-coba dulu apa program installer yang paling cocok. Seletah nyari sana sini, akhirnya aku dapet program namanya Inno Setup versi 5.2.3. Ada beberapa pertimbangan yang buat aku untuk kemudian pake program ini, selain free, mudah dan simpel juga bahasa/skrip yang digunakan adalah Pascal jadi ga usah repot-repot belajar bahasa lain. Beberapa fitur lain yang ada antara lain:
  • Bisa digunakan di semua versi Windows mulai NT 4.0 atau 9x sampai Vista (tanpa service pack).
  • Support aplikasi 64bit (x64 atau Itanium).
  • Dapat dibuat jadi satu file exe atau dipecah jadi beberapa file.
  • Mendukung kompresi file, jadi file output bisa lebih kecil ukurannya.
  • Shortcut ke Start Menu atau Desktop.
  • Pembuatan registry.
  • Instalasi multi bahasa.
  • Source code tersedia (Delphi).
Yah keunggulan lainnya adalah bebas biaya alias free of charge meski digunakan untuk membuat aplikasi komersial. Bagi yang mau coba bisa didownload secara gratis di websitenya http://www.jrsoftware.org.

Baca selengkapnya...