Menyimpan SMS ke Database MySQL dengan Delphi (bagian 2)

Untuk dapat menyimpan SMS ke dalam database MySQL -seperti halnya gammu- ada beberapa persiapan yang harus dilakukan, yakni menginstal komponen ZEOS dan database MySQL itu sendiri. Untuk lebih jelasnya bisa Anda baca di artikel saya sebelumnya.

Berikut ini adalah program sederhana yang berfungsi untuk menyimpan data SMS begitu ada SMS masuk. Data yang disimpan meliputi status SMS (dibaca/belum), nomor pengirim, tanggal dan waktu diterimanya SMS, dan isi SMS. Semuanya akan disimpan dalam tabel ‘inbox’ di database MySQL dengan nama ‘contohsms’.

Sebelum memulai programming dengan Delphi, Anda harus meng-create sebuah database dan tabel terlebih dahulu. Caranya : buka XAMPP Control Panel, dan aktifkan Apache dan MySql-nya. Setelah itu, buka web browser dan ketikkan alamat localhost/phpmyadmin. Setelah itu akan muncul web admin pengelolaan database MySQL.  Kemudian create sebuah database baru dengan nama ‘contohsms’ dan tekan tombol ‘Create’

create database mysql

Dalam database ‘contohsms’ inilah kita akan meletakkan sebuah tabel yang berisi data-data SMS yang masuk. Untuk itu, buatlah sebuah tabel dengan nama ‘inbox’ dengan cara seperti gambar di bawah

create tabel

Isikan  ‘Number of fields’ dengan angka ‘5’. Angka ini menunjukkan kolom (field) dari tabel ‘inbox’. Kemudian tekan tombol ‘Save’ yang ada di bawah, untuk menciptakan sebuah tabel baru. Langkah berikutnya adalah men-define masing-masing field dengan settingan sebgai berikut :

define field

Jadi inti dari settingan di atas adalah akan tercipta sebuah tabel ‘inbox’ yang memiliki 5 kolom/field yang nantinya akan berisi data status SMS, nomor pengirim SMS, tanggal dan waktu diterimanya SMS dan isi SMS itu sendiri.

Setelah selesai menciptakan database dan tabel untuk menyimpan data SMS, barulah dilanjutkan dengan programming Delphi. Untuk itu buatlah sebuah form baru dan atur komponen-komponen yang diperlukan sebagai berikut:

design form

Komponen-komponen yang dibutuhkan adalah memo, button (3 buah), dbnavigator, dbgrid (ada di tab Data Controls), ComPort, ZConnection, ZQuery (tab Zeos Access) dan DataSource (tab Data Access). Berikut adalah property masing-masing komponen yang harus diset di awal agar program berjalan dengan baik

Komponen Tab Comp Pallete Properties Nilai
Button1 Standard caption Setting
Buton2 Standard caption Open COM
Button3 Standard caption Open db
ZConnection1 Zeos Access Database contohsms
HostName localhost
Protocol Mysql-5
User root
Connected true
ZQuery1 Zeos Access Connection ZConnection1
SQL Select * from inbox
DataSource1 Data Access Dataset ZQuery1
dbGrid1 Data Controls DataSource DataSource1
dbNavigator1 Data Controls DataSource DataSource1

Jadi untuk melakukan koneksi dengan database MySQL setidaknya dibutuhkan tiga komponen utama yakni ZConnection, ZQuery dan DataSource. ZConnection berfungsi untuk menghubungkan Delphi dengan database ‘luar’ yakni MySQL, ZQuery berfungsi untuk melakukan pengolah data tabel melalui perintah query SQL setelah database terhubung, dan DataSource merupakan penghubung interface database Delphi seperti dbGrid/dBNavigator.

Setelah Anda atur tata letak dan property komponen seperti pada gambar di atas, programming Delphi sudah dapat dilakukan. Seperti biasa, isikan baris program berikut untuk handling SMS yang masuk di event OnRxChar milik komponen ComPort1.

procedure TForm1.ComPort1RxChar(Sender: TObject; Count: Integer); 

var

Str: String;

begin

memo1.clear;

ComPort1.ReadStr(Str, Count);

Memo1.Text := Memo1.Text + Str;

end;

Dan isikan baris program berikut di tombol dengan tulisan ‘Setting’ dan ‘Open COM’

procedure TForm1.Button1Click(Sender: TObject); 

begin

comport1.ShowSetupDialog;

end;

 

procedure TForm1.Button2Click(Sender: TObject); 

begin

if ComPort1.Connected then

begin

ComPort1.Close;

button2.Caption:=’Open’;

end

else

begin

ComPort1.Open;

button2.Caption:=’Close’;

ComPort1.WriteStr(‘at+cmgf=1’+#13#10);

ComPort1.WriteStr(‘at+cpms=”SM”‘+#13#10);

ComPort1.WriteStr(‘at+cscs=”GSM”‘+#13#10);

end;

end;

Untuk membuka koneksi dengan database Anda harus menuliskan baris program berikut di tombol ‘Open db’

procedure TForm1.Button3Click(Sender: TObject); 

begin

zquery1.Open;

end;

Sampai dengan langkah di atas Anda sudah berhasil membuat program yang mampu melakukan handling SMS masuk dan melakukan koneksi dengan database MySQL. Agar SMS masuk langsung mengisi tabel ‘inbox’ sesuai kolom masing-masing, maka Anda perlu mengisikan baris program berikut di event OnChange milik komponen Memo1.

procedure TForm1.Memo1Change(Sender: TObject); 

var a,b,c,d:integer;

kar_awal,kar_akhir:integer;

s:string;

begin

a:=pos (‘+CMTI’,memo1.Text);

if  a <> 0 then

begin

b:=posex (‘,’,memo1.Text,a+1);

c:=posex (#13#10,memo1.Text,b+1);

s:=copy (memo1.Text,b+1,c-b-1);

ComPort1.WriteStr(‘at+cmgr=’+s+#13#10);

end;

 

d:=pos (‘+CMGR’,memo1.Text);

if  d <> 0 then

begin

zquery1.insert;

kar_awal:=pos (‘”‘,memo1.Text);

kar_akhir:=posex (‘”‘,memo1.Text,kar_awal+1);

zquery1.FieldValues[‘status’]:=copy(memo1.Text,kar_awal+1,kar_akhir-kar_awal-1);

 

kar_awal:=posex (‘”‘,memo1.Text,kar_akhir+1);

kar_akhir:=posex (‘”‘,memo1.Text,kar_awal+1);

zquery1.FieldValues[‘sender’]:=copy(memo1.Text,kar_awal+1,kar_akhir-kar_awal-1);

 

kar_awal:=posex (‘”‘,memo1.Text,kar_akhir+1);

kar_akhir:=posex (‘,’,memo1.Text,kar_awal+1);

zquery1.FieldValues[‘tanggal’]:=copy(memo1.Text,kar_awal+1,kar_akhir-kar_awal-1);

 

kar_awal:=kar_akhir;

kar_akhir:=posex (‘”‘,memo1.Text,kar_awal+1);

zquery1.FieldValues[‘waktu’]:=copy(memo1.Text,kar_awal+1,kar_akhir-kar_awal-1);

 

kar_awal:=posex (#13#10,memo1.Text,kar_akhir+1);

kar_akhir:=posex (#13#10,memo1.Text,kar_awal+1);

zquery1.FieldValues[‘isi’]:=copy(memo1.Text,kar_awal+1,kar_akhir-kar_awal-1);

 

zquery1.Post;

end;

end;

 

Baris program dalam event OnChange Memo inilah sebenarnya program utama dari program menyimpan SMS ke MySQL ini. Jadi inti dari baris program di atas adalah melakukan pembacaan SMS begitu ada indikasi SMS masuk (mendeteksi karakter +CMTI sebagai indikator SMS masuk) dan memasukkan data-data SMS (status SMS, nomor pengirim, tanggal, waktu dan isi SMS) ke dalam database MySQL. Oh ya, Anda harus menambahkan unit StrUtils, karena function ‘posex’ berada di unit ini. Selamat mencoba ya, semoga bermanfaat bagi Anda. Jika ada pertanyaan bisa ditujukan email atau YM saya. Happy programming…..

Hasil program

bersambung

0 0 votes
Article Rating

Leave a Reply

74 Comments
Oldest
Newest Most Voted
Inline Feedbacks
View all comments
grome

mas kan kemaren ada buat tutor ttg mengirim sms dengan AT command, kalo misalnya saya kirim ke banyak itu prosedurnya gimana mas??? apa tinggal tambah aja tanda koma di samping nomornya terus tambahin nomornya gitu ya???

amat

mantap tutorialnya

sahrul

matur suwun mas. great job.

ari

sangat detil dan berurutan. terima kasih tutorialnya mas. sukses selalu, terimakasih telah berbagi ilmu.

eeng

Hehe,. Terimakasih banyak gan,…

Luthfi

mas maaf mau tanya, sy pake kabel data buetech dan hp siemens c55, setelah sy jalankan program diatas, saat blom ada sms di memo keluar ‘ok’, tpi klo ada sms kok gak bisa baca ya? mohon bantuannya
Terimakasi sebelumnya.

yawan

–cut–
zquery1.insert;
kar_awal:=pos(‘”‘,memo1.text);
kar_akhir:=posex(‘”‘,memo1.text,kar_awal+1);
zquery1.FieldValues[‘status’]:=copy(memo1.text,kar_awal+1,kar_akhir-kar_awal-1);
——-

tolong dijelaskan maksud dari pos, posex, copy dan kar_awal, Kar_akhir yang ditambah 1 dan kikurangi 1 itu ?

trimakasih…

FIRDAUS

om.. boleh minta tolong kirim ke email saya ga om artikel dalm bentuk PDF atau document tentang proses pembuatan program sms gateway dari A-Z..

t4nu

Trims untuk artikelnya mas.
Ada pertanyaan nih, kalau dapat sms yang panjang (lebih dari 160) handlingnya gimana supaya messagenya dapat lengkap?
Trims.

kojo

Trimakasih untuk artikelnya sangat membantu mas.
aku juga ada pertanyaan, kalau terima/kirim SMS lebih dari 160 karakter gmana ya mas. mohon pencerahanya lg.
Terimakasih.

rifki dwi

Mohon maaf mas..
maksudnya dua kali pengiriman gmn mas??

listing bagian mana yang harus diulang prosesnya..??
Terima kasih sebelumnya..

rifki dwi

Wahh..
Berarti harus beli bukunya bang ajie donk..?? hehe

Kalo bagi tutorialnya disini gak bisa mas?? lagi butuh ini soale..hehe
Mohon bantuannya bag ajie [terdesak skripsi]..hehe
Terimakasih sebelumnya..

djoko balikpapan

Mas aq pakai HP motorola L6 tapi kok pas aq running aplikasix kalo ada sms kok gak masuk di memo ama databasex ya.mohon pencerahan NEWBei delphi ni mas

jho

tutorialnya sangat berurutan,,,,mudah di mengerti…trimakasih banyak ya mas…..

Yunus

mas kenapa ouput yang tampil di field [isi] pada project saya terbaca karakter (|).misalkan pada contoh diatas, kalo pada project saya keluar
kaya gini |Tes simpan sms di mysql
seharusnya kan gini “Tes simpan sms di mysql”
saya coba hapus #13#10 pada coding program di bagian [isi] tapi error mas gimana tuh..?

Nico Pachelbel

omm
saya eror di sini …

Dialogs, DB, ZAbstractRODataset, ZAbstractDataset, ZDataset, CPort,

kenapa ya…???

septi maulana

mas aji mau tanya nih ,,
di CD buku mas aji yang tentang sms gateway kan ada source contoh program2nya ,,,
nah, saya coba jalankan program yang “menyimpan sms ke mysql” ko ga jalan ya ,,
waktu di klik tombol “open Com” memang muncul tulisan ‘OK’,, tapi ketika saya coba( ‘testing terima sms’ ),ko seperti engga ada di respon apa2 ya ,,, ?kenapa ya ?
modem saya pake huawei e173 (GSM),,,
terima kasih

septi maulana

mas aji punya YM atau Line ?

tens

mas saya mencoba dan srip sama persis tp data yg masuk ke database cuma statusnya saja,yg lain tidak masuk ke database,gmn mas solusinya?

wayan ardika

om muncul error +CMS ERROR: 321, dimana y salahnya om, darurat ni om

rifki dwi

Mas Aji saya mau tanya..

Saya coba listing mas aji untuk mengirim dan menerima sms menggunakan perangkat modem huawei..
Pada waktu mengirim SMS bisa mas tapi pada waktu menerima SMS, isi SMS tidak muncul di memo (program tidak bisa mendeteksi SMS yang masuk)..
Itu gimana mas..?? Padahal Listing untuk AT+CMGR nya udah saya masukkan..
mohon pencerahan..Terimakasih

Noval

Mas Aji saya mau tanya..

Saya coba listing mas aji untuk mengirim dan menerima sms menggunakan perangkat modem smartfren. pada saat openport hasil di memo

+CPMS: 0,30,8,99,8,99
OK
tetapi pada saat terima sms hasil dari memo

COMMAND NOT SUPPORT

mohon pencerahan mas ..Terimakasih..

Rizal

Mas Aji,klo mau nyimpan pesan keluarnya bagaiamana ya?
mohon bantuannya. .
terima kasih

Rizal

Mas ajie sya mhon bimbingannya.
terima kasih sebelumnya

Wayan ardika

Om lok nyimpan sms yg formatny #nama#alamat#nope# gimana cranya om jd yg kita simpan nama,almat,nope ny aja. Mohon bantuany om

indra

mas ajie, kalau modem dalam kondisi connect sms bisa langsung masuk ke database mySql, akan tetapi ketika modem dalam kondisi disconnect atau offline ada sms masuk lebih dari 1 (katakan ada 3 sms). saat modem di connect-kan SMS yang ketarik cuma 1 SMS aja, ada solusi ga mas? agar ketika modem offline sms tetap bisa masuk kedatabase, trimakasih

oh ya terimakasih kiriman emailnya kemarin mas 🙂

anto

mas ajie, bagaimana coding delphi “pesan diterima” saat sms berhasil sampe no. tujuan

anto

setelah at command diaktifkan untuk menampilkan pesan sms terkirim lewat messagebox caranya gimana bang? atw sudah otomatis keluar messageboxnya?

heru

mas kalau saya buat variable baru type string misal : Vinbox

nah di ComPort1RxChar saya tambahin Vinbox :=str;

tapi ada masalah kalau sms banyak karakter selalu kepotong.
atasinnya gmn ya ?

heru

gak sampai 160 sudah kepotong

heru

oh ya ini kepotongnya kalau saya jadin variabel.
kalau di memo gak kepotong sampai 160 karakter

heru

sudah coba itu malah error baca cmgr nya .
dan akhirnya balik lagi ke memo aja dah sambil cari atasin masalah di variabel :D.

makasi mas bantuannya

tanya

mas kalau metode polling gak bisa ambil jam + tgl ya ?
kan hasil CMGL gak ada jam nya.

tanya

bisa di jelaskan lebih detail mas parsing gmn ?

tanya

maaf mas masih kurang paham nih 😀
kalau saya sementara cuma ambil index terus saya CMGR.

tapi cara ini menurut saya lambat 😀

Budi

Mas, kok di Zeos saya ga ada ComPort y?
jadi ga bisa buat.
saya pakai windows xp

supriono

mas saya memakai modem movi max, untuk ngirim sms bisa tetapi untuk menerima tidak bisa, gmana solusinya mas

Ariansyah

mana lanjutannya ni mas tutornya….

jangan lupa di sambung y trimakasih

aziz

kang…. mohon bantuan… gmna cara nampilin form 5 duluan waktu program dieksekusi… make Delphi 7…. mohon banruannya kang….

zundadi

makasih bos atas listingnya. oh ya bos bantu dong tampilkan contoh sederhana untuk multi user atau server dan clien.

UDE

Assalamu’alaikum, Wr, Wb, Mas 3G saya sudah mencoba mengirim Long SMS dan berhasil karena pakai fungsi GetPDU, tetapi saya mempunyai masalah bagaimana cara mengubah dari PDU ke text soalnya begitu long sms masuk, sms pertama berupa file PDU sedangkan sms ke dua normal karena di bawah 153 karakter mohon pencerahan nya bagaimana membuat fungsi GetSMS nya (merubah mode PDU ke Mode SMS). Terima kasih. Wassalam

Yoez

Terima kasih, tutorialnya sangat bermanfaat. Mas ajie punya list AT Command buat CDMA ? jika berkenan mohon kirim ke email saya. Terima kasih, salam.

holis

mas,saya tes pake delphi xe4 kok error di bagian comport.readstr(Str,Count);
knapa yah..padahal variabel Str sudah di deklarasikan tapi error

sembiring kembaren

klo mau nanya mas
klo mau simpan ke access dengan dehpi melalui comport bagaimana skripnya ya mas

tias syawala putra

gan izin tanya udah ngikutin tahapan diatas, hasil nya ada 2 error yang pertama 1) undeclared identifier: ‘posex’ dan yang ke 2) could not compile used unit menu.pas.. mohon bantuannya gan.. ane pake delphi 7

74
0
Would love your thoughts, please comment.x
()
x