Program atau aplikasi yang berjalan di jaringan ternyata memiliki kompleksitas yang jauh lebih tinggi ketimbang program standalone. Anda dapat berharap jaringan Anda tidak bermasalah, tetapi begitu Anda harus menjalankan program dalam jaringan yang terputus-putus, tentu saja ada penanganan khusus terhadap connection lost ini.
Yang akan saya bahas di sini menggunakan IDE Delphi dan database Firebird, dan koneksi menggunakan komponen Interbase bawaan Delphi.
Kita akan sedikit membahas teori tentang tipe koneksi. Pada dasarnya ada 2 tipe koneksi, yaitu connection-oriented dan connectionless. Connection-oriented artinya koneksi (dengan server) akan tetap dipertahankan selama program berjalan, sedangkan connectionless artinya koneksi antara program dengan server hanya akan dibuat ketika program membutuhkan data.
Contoh aplikasi connection-oriented adalah ketika Anda login, Anda akan menjalankan perintah ini:
IBDatabase1.Connected := true;
dan koneksi ini akan diputus ketika seorang pengguna logout atau menutup aplikasi.
Nah, masalahnya, ketika terjadi connection lost, maka ada beberapa perintah yang akan mengeluarkan error ketika dieksekusi, oleh karena itu, kita harus memberinya exception dan menjalankan perintah yang tetap bisa dijalankan sekalipun koneksi jaringan terputus.
Anda dapat membaca artikel dari mc-computing yang membahas tentang bagaimana menangani connection lost.
Beberapa baris perintah yang error adalah:
– IBDatabase1.Connected := false;
Anda dapat menambahkan baris perintah IBDatabase1.ForceClose; yang tetap berjalan meski koneksi terputus.
contoh :
try
IBDatabase1.Connected := false;
IBDatabase1.ForceClose;
except
end;
Jangan lupa juga memeriksa apakah transaksi sedang InTransaction atau tidak, dan me-rollback atau commit.
if IBTransaction1.InTransaction then
begin
IBTransaction1.Rollback;
IBTransaction1.Active := False;
end;
–IBQuery1.Open;
Perhatikan, dataset akan selalu menimbulkan exception “Invalid transaction handle” ketika dia diberi perintah open, apabila ketika terjadi connection lost dataset tersebut sedang dalam keadaan open dan belum ditutup. Oleh karena itu, mungkin Anda harus sedikit “membersihkan” kode-kode Anda dengan menambahkan baris perintah:
IBQuery1.Close;
IBQuery1.Active := false;
di setiap akhir query yang Anda lakukan. Tentu saja saya tidak bisa menjelaskan di mana saja baris perintah ini harus diletakkan, karena tergantung pada algoritma dan alur program yang Anda pakai.
Penggunaan tambahan 2 baris di atas juga dapat menghilangkan munculnya exception “Dataset open” ketika sebuah form ditutup atau dibuka yang mana dalam form tersebut terdapat dataset yang masih terbuka.
Be First to Comment