Aplikasi Pencatat “User Online” menggunakan Firebird
June 21, 2006 at 2:21 pm | In Code Samples, Database, Tutorials | 7 Commentsby: Muhammad Lulud K.
Artikel ini terinspirasi dari aplikasi pencatat jumlah user yang sedang online yang ada pada aplikasi cms php-mysql. Manfaat dari aplikasi ini diantarnya untuk melihat dan membatasi jumlah user yang sedang online. Aplikasi ini menggunakan database firebird dan client pada Delphi. Fungsi UDF datetodouble yang digunakan dalam script SP berasal dari rfunc.
Algoritma script SP firebird adalah sbb:
1. Tentukan limit waktu client terhitung online.
2. Daftarkan alamat IP (dan modul) beserta waktu terakhir aktif ke tabel.
3. Hapus dalam tabel record2 yang waktu terakhir koneksi lebih dari limit waktu yang ditentukan.
4. Hitung jumlah user client yang aktif.
Algoritma client adalah sbb:
1. Buat koneksi database ke server.
2. Eksekusi store procedure.
3. Dapatkan jumlah user online
4. dst..
Langsung aja yach. Ikuti langkah berikut:
1. Buat tabel
CREATE TABLE SYS_USER_ONLINE ( TIME_STAMP TIMESTAMP DEFAULT current_timestamp NOT NULL, IP_ADDRESS VARCHAR(15) NOT NULL, FILE_SCRIPT VARCHAR(100) ); ALTER TABLE SYS_USER_ONLINE ADD CONSTRAINT PK_SYS_USER_ONLINE PRIMARY KEY (TIME_STAMP, IP_ADDRESS); CREATE INDEX SYS_USER_ONLINE_IDX1 ON SYS_USER_ONLINE (IP_ADDRESS); CREATE INDEX SYS_USER_ONLINE_IDX2 ON SYS_USER_ONLINE (FILE_SCRIPT);
2. Buat stored procedure
CREATE PROCEDURE SP_SYS_USER_ONLINE_COUNT ( IP_ADDRESS VARCHAR(15), FILE_SCRIPT VARCHAR(100)) RETURNS (VAR_COUNT INTEGER) AS DECLARE VARIABLE TIME_OUT_SECONDS NUMERIC(15,4); DECLARE VARIABLE TIME_OUT NUMERIC(15,4); DECLARE VARIABLE CT TIMESTAMP; begin time_out_seconds = 0.004; time_out = datetodouble(current_timestamp) - time_out_seconds; delete from sys_user_online a where a.ip_address =:ip_address and a.file_script =:file_script; insert into sys_user_online (time_stamp, ip_address, file_script) values (current_timestamp, :ip_address, :file_script); delete from sys_user_online a where datetodouble(a.time_stamp) <:time_out; select count(distinct a.ip_address) from sys_user_online a into :var_count; /* alternatif lain bila ingin mengecek jumlah user aktif per modul select count(distinct a.ip_address) from sys_user_online a where a.file_script = :file_script into :var_count; */ suspend; end
OK… anda siap menggunakan SP ini:
function TForm1.GetIPAddress: string; begin Result := IdIPWatch.LocalIP; { Drop komponen IdIPWatch dari Indy ke form atau Anda gunakan fungsi lain untuk mendapatkan IP Address, atau gunakan unit winhwid.pas pada artikel sebelumnya } end; procedure TForm1.Timer1Timer(Sender: TObject); begin with spUserOnlineCount do begin ParamByName('IP_ADDRESS').AsString := GetIPAddress; ParamByName('FILE_SCRIPT').AsString := Self.ClassName; // Self.ClassName adalah nama form yang aktif ExecProc; StatusBar1.Panels[0].Text := ParamByName('VAR_COUNT').AsString; end; end;
Semoga bermanfaat.
7 Comments »
RSS feed for comments on this post. TrackBack URI
Leave a comment
Blog at WordPress.com. | Theme: Pool by Borja Fernandez.
Entries and comments feeds.
Mas ada gak VCL buat Firebird 2 ? paling males kalau pake DLL yang diambl dari FB neeh >.
Comment by Yanuar — June 21, 2006 #
@Yuniar:
dbExpress? ODBC? Zeos? FIB? masih kurang? googling ajah. Perasaan VCL buat Firebird banyak deh.
Comment by bee — June 22, 2006 #
Tambahan, pakai Mercury persis seperti component Interbase bawaan Delphi
Comment by Muhammad Lulud K — July 13, 2006 #
wew, screenshut hasilnya donk bos,
Comment by tarigan — July 16, 2006 #
Mas, kalo pembahasan di atas khan untuk firebird…! Gimana kalo tentang interbase?
Saya udah coba konek ke komputer lain dengan cara
lewat Delphi, tapi ga konek?
Saya konek pake…
SERVER NAME=192.1.1.192/share/employee.GDB
USER NAME=SYSDBA
PASSWORD=masterkey
Muncul warning:
“Unknown database…Unable to complete network request to host “192.1.1.192″….
…
…
the target machine actively refuse it”
Gimana dong?
Mohon penjelasan dari Mbah..eh mass?
Thanks ya
Comment by josh — October 2, 2006 #
untuk mas josh
ganti
SERVER NAME=192.1.1.192/share/employee.GDB
menjadi
SERVER NAME=192.1.1.192:c:\share\employee.GDB
c:\share\employee.GDB –> tempat menyimpan file anda
Comment by M Lulud — November 13, 2006 #
kalo kita gunain database kyak oracle ato mysql bisa ga clientnya dibeda komputer mas?? misal.. oracle di komptr A,sedangkankan kita menjalankan aplikasi delphi dari komptr B melalui jaringan LAN dan terkoneksi ke database di komputer A.. mohon dibahas dunk mas:D
Comment by andi — May 20, 2008 #