Yang pada mau bikin software autoreply SMS dengan Delphi, yuk kita belajar bareng. Kegunaan sistem autoreply ini ada banyak sekali tergantung implementasinya, tapi intinya adalah untuk memberikan respon secepat mungkin kepada pengirim SMS sesuai dengan keyword SMS yang diberikan. Pada artikel kali ini saya ingin member contoh, bagaimana membuat software autoreply SMS, yang fungsinya memudahkan pemilik kendaraan bermotor yang ingin mengetahui kapan masa berlaku STNK-nya habis. Cukup dengan mengirimkan keyword nomor polisi STNK Anda ke nomor hotline SMS, maka Anda akan langsung mendapat reply masa berlaku STNK Anda.
Siapkan database MySQL dengan nama ‘dbnopol’ dan tabel dengan nama ‘tabnopol’. Define tabel ‘tabnopol’ dengan dua field, yakni ‘nopol’ dan ‘deadline’. Field ‘nopol’ nanti akan kita isi dengan nomor-nomor STNK dan field ‘deadline’ akan berisi data masa berlakunya. Intinya, tabel ‘tabnopol’ akan menyimpan seluruh data nomor polisi/STNK beserta masa berlakunya. Bagaimana cara instalasi database MySQL dan koneksinya dengan Delphi, dapat Anda baca disini.
Sebelum kita membuat sebuah program, alangkah baiknya jika mendefinisikan fungsi/tujuan dibuatnya program ini. Kira-kira program yang nanti kita buat, fungsinya adalah “Jika ada SMS masuk dengan keyword tertentu, ceklah di database ‘dbnopol’. Jika ada data yang dimaksud, reply data tersebut kepada pengirim SMS’. Kalau statement ini kita buat flowchart-nya, kurang lebih seperti pada gambar di bawah.
Mari kita coba implementasikan flowchart di atas dalam program Delphi. Buat form baru, dan siapkan komponen beserta properties-nya sebagai berikut :
Component | Properties | Value |
Button1 | Caption | Setting |
Button2 | Caption | Open COM |
Button3 | Caption | Open db |
Memo1 | ||
Comport1 | ||
DBGrid1 | DataSource | DataSource1 |
DBNavigator1 | DataSource | DataSource1 |
ZConnection1 | Database | dbnopol |
Protocol | Mysql-5 | |
Hostname | localhost | |
User | root | |
ZQuery1 | Connection | ZConnection1 |
SQL | Select * from tabnopol | |
DataSource1 | DataSet | DataSource1 |
Atur tata letak komponen seperti pada gambar di bawah:
Kemudian masukkan source code berikut, berturut-turut untuk button1, button2 dan button3
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); ComPort1.WriteStr('at+cnmi=1,1,2,1,0'+#13); end; end; procedure TForm1.Button3Click(Sender: TObject); begin zquery1.Open; end;
Button1 berfungsi untuk pengaturan parameter serial (COM) port, Button2 berguna untuk inisialisasi koneksi dengan modem/handphone melalui virtual serial port dan Button3 adalah untuk membuka koneksi dengan database MySQL.
Kemudian masukkan source code berikut di event OnRxChar milik komponen ComPort1. Source code ini berfungsi untuk handling event SMS masuk dan keluar.
procedureTForm1.ComPort1RxChar(Sender: TObject; Count: Integer);
varStr: String;
begin
memo1.clear;ComPort1.ReadStr(Str, Count);
Memo1.Text := Memo1.Text + Str;
end;
Dan terakhir, masukkan source code berikut ke dalam event OnChange milik komponen Memo1. Source code inilah yang sebenarnya berfungsi sebagai program utama dalam program autoreply SMS ini.
procedure TForm1.Memo1Change(Sender: TObject); var a,b,c,d:integer;kar_awal,kar_akhir:integer; s,status,pengirim,tanggal,waktu,isi: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 kar_awal:=pos ('"',memo1.Text); kar_akhir:=posex ('"',memo1.Text,kar_awal+1); 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); pengirim:=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); tanggal:=copy(memo1.Text,kar_awal+1,kar_akhir-kar_awal-1); kar_awal:=kar_akhir; kar_akhir:=posex ('"',memo1.Text,kar_awal+1); 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); isi:=copy(memo1.Text,kar_awal+2,kar_akhir-kar_awal-2); zquery1.SQL.Text:='select deadline from tabnopol where nopol="'+isi+'"'; zquery1.ExecSQL; zquery1.Open; zquery1.Refresh; try ComPort1.WriteStr('at+cmgs="'+pengirim+'"'+#13#10); ComPort1.WriteStr(zquery1.FieldValues['deadline']); ComPort1.WriteStr(#26); except on E: Evarianttypecasterror do begin ComPort1.WriteStr('at+cmgs="'+pengirim+'"'+#13#10); ComPort1.WriteStr('Maaf nopol Anda tidak terdaftar'); ComPort1.WriteStr(#26); end; end; end; end;
Penjelasan source code di atas :
Potongan kode di bawah dimaksudkan untuk mengetahui jika ada SMS masuk yang diindikasikan dengan munculnya karakter ‘+CMTI’
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;
Potongan kode di bawah dimaksudkan untuk me-‘render’ informasi yang ada dalam SMS yang masuk ke modem/handphone. Informasi yang bisa didapatkan antara lain : status SMS, nomor pengirim, tanggal dan waktu diterima SMS, dan yang terakhir adalah isi SMS itu sendiri.
d:=pos ('+CMGR',memo1.Text);if d <> 0 then begin kar_awal:=pos ('"',memo1.Text); kar_akhir:=posex ('"',memo1.Text,kar_awal+1); 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); pengirim:=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); tanggal:=copy(memo1.Text,kar_awal+1,kar_akhir-kar_awal-1); kar_awal:=kar_akhir; kar_akhir:=posex ('"',memo1.Text,kar_awal+1); 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); isi:=copy(memo1.Text,kar_awal+2,kar_akhir-kar_awal-2);
Kalau yang ini, Anda tentunya sudah bisa menduganya sendiri, kan? Potongan source kode di bawah dimaksudkan untuk mengecek apakah keyword SMS sesuai dengan data di database atau tidak. Jika ada data yang dimaksud akan di-reply data masa berlaku nopol STNK, sedang jika tidak ada data yang dimaksud akan di-reply ‘Maaf nopol Anda tidak terdaftar’.
zquery1.SQL.Text:='select deadline from tabnopol where nopol="'+isi+'"'; zquery1.ExecSQL;zquery1.Open; zquery1.Refresh; try ComPort1.WriteStr('at+cmgs="'+pengirim+'"'+#13#10); ComPort1.WriteStr(zquery1.FieldValues['deadline']); ComPort1.WriteStr(#26); except on E: Evarianttypecasterror do begin ComPort1.WriteStr('at+cmgs="'+pengirim+'"'+#13#10); ComPort1.WriteStr('Maaf nopol Anda tidak terdaftar'); ComPort1.WriteStr(#26); end; end;
Running-lah program yang telah Anda buat tadi, dan coba koneksikan dengan modem yang terhubung ke computer dengan menekan tombol ‘Setting’ dan ‘Open COM’. Jangan lupa tekan tombol ‘Open db’ untuk membuka koneksi dengan database MySQL. Jika program Anda benar, seharusnya akan muncul tampilan sebagai berikut.
Keterangan : untuk data tabel di atas diisi secara manual, untuk percobaan (misal: nopol K7777JB, deadline 7/30/2011).
Sekarang coba Anda SMS dengan isi SMS ‘K7777JB’ ke nomor ‘hotline’ (nomor di dalam modem yang terhubung computer), dan perhatikan apakah Anda sudah mendapat reply dari nomor hotline. Coba variasikan isi SMS dengan keyword lain, untuk menguji program ini.
Jika ada yang ingin didiskusikan, bisa mengisi komentar di bawah. Kalo ada yang mau pesan program sama saya juga boleh 🙂 Happy programming 🙂
a Technopreneur – writer – Enthusiastic about learning AI, IoT, Robotics, Raspberry Pi, Arduino, ESP8266, Delphi, Python, Javascript, PHP, etc. Founder of startup Indomaker.com
Mas Ajie kalau saya mo minta source prog nya geimana atau prog nya sudah di buat buku ?
mas.. sy udah buat seperti dscript di atas. tapi ndak isa reply. setiap abis terima sms. bisa kebaca tapi pas ngirim balik tidak ada pesen error atau apa. trims.
coba kl bikin script kirim sms scr terpisah dan taruh di tombol tersendiri bisa ga?
kalau bikin script kirim smsnya terpisah dengan menaruhnya di tombol tersendiri bukannya sama saja dong mas proses kirim dengan cara manual? bukan secara autoreply. jelasin dong mas maksudnya gimana.
mas, pada command ‘at+cpms=”SM”‘+#13#10 dan ‘at+cscs=”GSM”‘+#13#10 terjadi error. apakah penulisan saya salah? terimakasih.
sepertinya sdh benar, mungkin modemnya yg ga support command tsb. Jk mmg tdk support bisa dihilangkan command tsb
slamat mlem mas. .
mas,sya udah coba program di atas, tapi ketika ada sms masuk bkannya langsung di reply tapi malah kluar pesan source file not found:ZsqlStrings.pas. .
slahnya di mana mas ya,mohon bantuannya. .
terima kasih. .
pgi mas,klo mslah yg d atas udh bsa d atasi tp skrg mslahnya, ktika sms masuk mlah ada tulisan error d memonya,,knp mas ya?
mhon bntuannya. .
terima kasih. .
coba cek port COM-nya sdh benar? atau coba matikan software lain yg sedang mengakses com port (misal software bawaan modem)
sore mas. .
sebelumnya,saya minta maaf ya kalo banyak bertanya. .
yang mau sya tanyain,ketika ada pesan masuk tetapi isi pesannya tidak sesuai yg ditentukan, kan harusnya mengirim pesan kalo data yg diminta tidak ada ke pengirim, tapi di program yang sya buat mlah muncul pesan kesalahan seperti ini :
project project1.exe raised exception class EvariantTypeCasterror with message ‘could not convert variant of type (null) into type (string)’.
padahal klo sms yg msuk sesuai dan data yang diminta ada d database,langsung mengirim data yang diminta. .
mohon pencerahannya. .
terima kasih. .
krn datanya tidak ada (null) makanya gagal di-convert ke tipe string. Utk error dg tipe seperti harus ‘dijebak’ (trap) dg exception (try … except). Sudah ada contohnya di artikel saya (Autoreply SMS)
slmat sore mas, , ,
udah pke exception kyk di contoh artikel yang mas bkin tp tetp aj seperti itu salahnya mas. .
kira2 knp ya mas?
coba dicek lagi script-nya….disamain spt punya sy
program ini pake Delphi versi brp.?
Delphi 7
Maaf Mas aji, saya mau nanya…
Field nopol dan deadline apa type nya?
varchar mas
mas, ijin tanya ni, saya coba buat scriptnya, tpi pas di run ada errornya. keterangan errornya [Error] USMS.pas(91): Undeclared identifier: ‘posex’
itu kenapa ya mas…mohon petunjuknya, thanks!
tambahkan unit ‘StrUtils’ di bawah deklarasi ‘uses’
Ok, sudah bisa mas…!
mantap, thanks ilmunya ni mas. insya Allah berkah…he..he..he.
mas aji, saya sudah coba membuat programnya berdasarkan source code yg mas tuliskan dan sudah berhasil jalan programnya. tapi ketika saya coba mengirimkan sms, program hanya bisa membaca smsnya saja tapi saya tidak mendapatkan balasan smsnya. kira-kira kenapa ya mas?
mas posex yang ditulis discript itu fungsinya untuk apa ya?
fungsinya untuk mencari karakter/string dimulai dari indeks tertentu (offset). Contohnya gini: variabel string s berisi data ‘abcdefgci’. Perhatikan ada dua karakter ‘c’ di variabel s. kalo menggunakan a:=Pos (‘c’,s); maka variabel ‘a’ akan berisi nilai integer 3 (menunjukkan posisi karakter ‘c’), tapi kalo menggunakan a:=PosEx (‘c’,s,5);, maka variabel a akan bernilai 8, karena pencarian karakter ‘c’ dimulai dari indeks 5 bukan dari awal. Semoga membantu….
Mas…apa modem Wavecom bisa?
bisa mas
Ok, segera saya coba, nanti klo ada kendala mohon dibantu ya bang…
mas ajie, saya mw bertanya, ad sedikit masalah ketika auto replynya,
ketika pesan sudah dibaca dan dipisah2 kan, kemudian proses mengirimnya gagal, padahal saya yakin program untuk mengirimnya nya dah jlan, ap ad masalah dengan modem yang tidak bisa mengirim langsung setelah menerima, tq
Asslmlkum mas aji,,
ini karakter yang dibaca hape saya untuk variabel isi . . .
Ä%Ífƒ
kenapa bisa begitu ya mas . .??
adakah cara menanggulanginya???
trims
waalaikumsalam wr wb.
kemungkinan salah capture data
kalo ndak keberatan , kasi tau cara capture nya dong mas . . .biar karakter nya bisa normal lagi . . .
terima kasih sebelumnya mas
bang ane mw tx pass ane jln kn program d tkn tmbol opencom qo ad error y…??’unable to open com port (win error code:2)’…
ada 2 kemungkinan mas :
1. modemnya ngga support
2. modemnya support, tp port com-nya sedang dipakai program lain (misalnya program bawaan modem). Coba matiin dulu semua program yg sedang mengakses modem
mas mw share ne kenapa pas saya kirim sms ad error ‘tabel unknown’ pada sql-nya??
cek lagi nama tabelnya mas. kayaknya mismatch
mas ajie…mhon bntuannya……….untuk sms auto forward….source codenya gmn………
jawabannya ditunggu segera…….
terimakasih sblumnya
prinsipnya sama dg kirim sms biasa, hanya nomor tujuannya disiapkan dari program. Ada contohnya di buku saya. http://saptaji.com/shop
sy udah punya bukunya….tapi sy seidkit bingung,,,krn saat running…proogram tidak meneruskan sms ke nomor yg sudah ditentukan……
gmn ya???
errornya apa mas?
mas ajie.,….sy udah temuin kesalahan saya….programnya udah running……
Nah..sy maw nanya…bisa gak, kalau auto reply dan auto forward…disatukan dalam satu source code…jadi…logika nya//
program …akan menforward sms jika benar…tpi salah akan merply kenomor user…
tolong bantuinnya ya,,,massssss…Urgentt..
terimakasih seblumnya atas bantuannya..>
bisa aja sih
misi mas,saya ingin menanyakan,saya udah ikutin tutorialnya tapi ada kendala pas di compile, malah muncul notif Error : Undeclared identifier : “posex” padahal udah di pasang di interfacenya StrUtils, saya menggunakan Delphi 6 mas, mohon bantuannya?
delphi6 ga punya unit StrUtils mas, harus delphi 7 ke atas
Mas saya udah install delphi 7 nya nih, dan sudah bisa.
tapi bagaimana ya untuk ngebaca pas di bales autoreply ada notifikasi sms terkirim ?
Saya dapat caranya kaya gini
AT+CSMP = 49,167,0,242
AT+CNMI = 1,0,0,1,0
terus pas di coba hasilnya kaya gini mas :
+CMGS: 54
+CDSI: “SR”,53
Mohon bantuannya ya
mas setelah saya coba run terjadi error unable to open com port (error 5) solusinya bagaimana…
makasih sebelumnya
biasanya krn conflict dg software bawaan modem. Coba di-close dulu
Kasus yang sama, cuma saya lebih beruntung, karena kadang mau konek tapi kadang tidak konek padahal tidak ada software yang memakai port modem, sepertinya tidak ada conflik. Emmm ndak tahu juga kalau ada software yang tidak dapat saya deteksi, caranya bagaimana bang untuk mendeteksi software tersembunyi tersebut?
kalo pernah konek berarti tdk ada softwr yg sedang mengakses port tsb
sama nih mentog disini,,,project1.exe raised exception class EvariantTypeCasterror with message ‘could not convert variant of type (null) into type (string)’.
udah plototin script dr mas ajie berjam-jam gak ada yg beda alias disamain sepersisnya,masih kendalanya sama huftt,,,mohon pencerahaannya mas ajie,,
apakah script diatas husus utk sql,saya pake access databse nya dan koneksinya mnggunakan adoconnection dan adoquery,berjalan normal kalo cek yg ada di database,tp kl yg tdk ada mncul error ky diatas,,bingung
Mas kalau sms yang masuk tidak muncul di TMemo kenapa ya tp malah masuk di inbox modem? Padahal semua koneksi sudah OK (baik modem dan database), saya coba tambahkan fitur kirim sms manual dari PC ke ponsel tujuan sudah berfungsi dengan baik.
pd dasarnya semua sms akan masuk ke inbox. Yg dilakukan programnya adala meng-copy dari inbox ke memo. Cb dicek lg scriptnya terutama pada event onRxChar
mas, ini pake gammu jg ga mas?trus kalo pake modem smartfren bs juga kah?
makasih sebelumnya mas
ngga pake gammu, tp lgsg pake at command.
Pake modem smartfren jg bisa asal tau at command-nya
langsung aja nih ga bisa banyak basa basi pengen iku gabung untuk belajar apa bisa di terima …terima kasih
silahkan mas
mas.. koq setelah saya kirim pesan,, malah mncul
error data kosong di bagian untuk mengirim pesan..
pada data tersebut sudah saya isi di database..
sama percis seperti yang di atas..
zquery1.SQL.Text:=’select * from lampu where kode_lampu=”’+isi+””;
zquery1.ExecSQL;
zquery1.Open;
zquery1.Refresh;
try
ComPort1.WriteStr(‘at+cmgs=”‘+pengirim+'”‘+#13#10);
ComPort1.WriteStr(zquery1.FieldValues[‘pesan’]);
ComPort1.WriteStr(#26);
nah di fieldValues[pesan] nya itu selalu muncul pesan error kalau data nya ksosong.
coba tambahkan kode ComPort1.WriteStr(‘at+cnmi=1,2,2,1,0’+#13); pada tombol ‘open COM’ di atas
untuk masalah di atas sudah selesai,.
kalau boleh tau saya run aplikasi ini,, bleh gx saya run juga modem nya ? karena kalau tidak seperti tidak ada respon dari modem.
ga bisa mas, harus salah satu
mas mau tanya,kalau membuat autoreply menggunakan accsess bagaimana merubah listingnya..
yg pertama install komponen yg bs mengakses MS access spt UniDAC atau ADO
yg kedua yg ‘berbau’ komponen zeos seperti :
– zquery1.SQL.Text:=’select deadline from tabnopol where nopol=”‘+isi+’”‘;
– zquery1.ExecSQL;
– zquery1.Open;
– zquery1.Refresh;
– zquery1.FieldValues[‘deadline’]
disesuaikan dengan komponen tersebut
setiap pesan masuk, sistem akan muncul error invalid column name ‘K7770JB”
saya mengunakan adoquery dan adoconnection
masalah invalid column name sudah di atasi,
pak,saya ingin bereksperimen, jika dia buat reg (spasi) nopol, bagaimana caranya ?
terima kasih,
tinggal dimainkan Pos dan Posex-nya aja mas
could not convert variant of type(null) into type (string) , ini kenapa ya mas ? kok pada saat saya mencoba mengirim format ya salah maka akan muncul error ini.
itu kayaknya krn baris ini mas
ComPort1.WriteStr(zquery1.FieldValues[‘deadline’]);
–> ketika kolom ‘deadline’ ga ada isinya/ga nemu (null) akan gagal di convert ke string (comport.writestr membutuhkan parameter variabel bertipe string)
coba running program exe-nya mas, masih ada error lg kyk gitu ga?
sudah saya coba dan mengunakan function if, tetap tidak bisa.
kalau logika program jika format pesan = salah maka sistem akan mengirim sms yang berisi bahwa format salah.
setiap error itu terjadi, malah modem tidak ke detect, gmana solusinya tanpa harus menrestart sistem operasi agar modem bs di deteksi kembali ? terima kasih, maaf kalau banyak bertanya.
coba tambahi ini mas
if (zquery1.FieldValues[‘deadline’]) <> ” then
begin
ComPort1.WriteStr(‘at+cmgs=”‘+pengirim+'”‘+#13#10);
ComPort1.WriteStr(zquery1.FieldValues[‘deadline’]);
ComPort1.WriteStr(#26);
end;
mas.. sy udah buat seperti dscript di atas. tapi ndak isa reply. setiap habis terima sms. bisa kebaca tapi pas ngirim balik tidak ada pesen error atau apa. kesalahannya dimana ya mas. terima kasih
coba dicek dulu status cnmi modem mas. Caranya bisa pake hyperterminal/putty trs masukkan command at+cnmi=? ntar perhatikan parameter kedua, harusnya benilai 1 (contoh at+cnmi : 1,1,2,1,0). Hyperterminal bs didownload di sini http://saptaji.com/2015/07/02/hyper-terminal-portabel-untuk-windows-7/
selamat pagi mas. gini mas sy mau bertanya di buku “membuat sms gateway dengan delphi 7” ada dibahas tentang sms autoreply cek nomor STNK. dalam materi tersebut dibahas hanya untuk satu eksekusi dengan mengirim format no STNK. nah jika sy menambahkan format registrasi pelanggan. nah di bagian memochange di sisipkan koding untuk format No STNK. untuk format Reg pelanggan disisipkan dimana mas? karna klo untuk format No STNK hanya 1 kali eksekusi. sy sdh buatkan koding untuk regis pelanggannya. mohon pencerahannya mas. Terima Kasih.
di bawah kode STNK juga bisa mas
mas tanya, saya kan membuat sms autoreplay dan sms kurangi stok dalam satu form gimana caranya agar saya bisa mengakses dua-duanya soalnya bisanya cuma 1 proses.
contoh : saya kirim SMS ke modem format (Jual#KD001#10) terus aku parse ke edit dan terus simpan untuk update stok. terus saya kirim SMS lagi dengan format (KD001) baut ngecek stok. biar semuanya jalan source code nya gimana mas. apa dikasih kondisi IF then else.?
yg bener itu autoreply mas, bukan autoreplay. Kalo autoreplay atau kayak video aja di-play ulang he he he.
menjawab pertanyaannya, kalo pake source code kayak sy di artikel di atas, caranya sebenarnya sangat mudah. Source code parsing taruh aja di onMemoChange, trs tinggal dites command sms-nya. If pos (“Jual”,memo1.text)<>0 then apa_gitu, trus bawahnya if pos(“KD001”,memo1.text)<>0 then actionnya_apa, dst. ga perlu pake else, tp kalo mau pake juga gpp
kalau if pos(“KD001”,memo1.text)0 untuk “KD001” itu kan beda-beda mas sesuai dengan kode barang yang akan di lihat jumlah stoknya. . gimana caranya mas agar “KD001” sesuai dengan yang di smsin ke sistem.?
tinggal di-look up aja ke database mas. Saran sy kode utk lihat dikasih pengenal lain, misalnya stok#kode_barang, jangan hanya kode_barang aja (walaupun bisa juga sih, tergantung kreativitas aja)
mas, maaf mau tanya lagi. setiap mau ngirim mbalik ke pengirim kenapa selalu eror di FormUtama.ComPort1.WriteStr(dm.mySQLbarang.FieldValues[‘stok’]);. kenapa ya mas. .
contoh : Stok.KD001 kemudian aku parse ke edit. edit1.text: stok, edit2.text:KD001.
if pos(‘Stok’,memo1.Text)0 then
begin
dm.mySQLbarang.SQL.Text:=’select stok from tb_barang where kode_barang=”‘+QuotedStr(sEdit2.Text)+'”‘;
dm.mySQLbarang.ExecSQL;
dm.mySQLbarang.Open;
dm.mySQLbarang.Refresh;
try
FormUtama.ComPort1.WriteStr(‘at+cmgs=”‘+pengirim+'”‘+#13#10);
FormUtama.ComPort1.WriteStr(dm.mySQLbarang.FieldValues[‘stok’]);
FormUtama.ComPort1.WriteStr(#26);
syntax di atas mana yang salah ya mas, tipa kali mau ngirim ulang masti error. . mohon pencerahan.
errornya apa?
could not convert variant of type(null) into type (string) . .
tipe data stok double mas.
itu sama dengan pertanyaan sebelumnya di atas…bs dicek buat solusinya
kurang lebih di baris ini
FormUtama.ComPort1.WriteStr(dm.mySQLbarang.FieldValues[‘stok’]);
–> gagal ambil data di field ‘stok’, bisa jadi kosong datanya. Coba di-trace dulu
mohon maaf mas, mau tanya lagi
1. 1 comport digunakan untuk beberapa proses dan berbeda form bisa enggax mas?
2. maksud dari ComPort1.WriteStr(‘at+cnmi=1,1,2,1,0’+#13) ; ComPort1.WriteStr(‘at+cnmi=1,1,0,0,0’+#13#10); mas.?
1. bisa
2. perintah at+cnmi memiliki 5 parameter, katakanlah at+cnmi=a,b,c,d,e. Arti parameter tsb :
a = mode indikator, nilainya 0 – 3
b = format indikator sms, nilainya 0 – 2
c = pengaturan cell broadcast, nilainya 0 atau 2
d = status report, nilainya 0 atau 1
e = buffer, nilainya 0 atau 1
penjelasan masing-masing nilai parameter bisa sangat panjang mas, mungkin nanti akan saya buatkan artikel terpisah, atau kalo udah beli buku saya sebenarnya udah ada penjelasan detailnya
perintah ini (if FormUtama.ComPort1.Connected then dst ) kan saya taruh di form show mas, saat saya akan masuk form tersebut di memo nya kok kadang muncul tulisan ini > at+cmgf=1at+cpms=”SM”at+cscs=”GSM”at+cnmi=1,1,2,1,0at+cnmi=1,1,0,0,0 (tidak bisa menerima sms) dan kadang muncul at+cmgf=1 OK (dapat menerima sms). itu yang salah dimana ya mas.?
jangan ditaruh di form.show mas. Event form.show itu untuk sesuatu aksi yang sifatnya cepat, sedangkan kode2 yg mas tulis di atas adalah untuk menginisialisasi modem yang membutuhkan eaktu lama karena harus menunggu respon modem. Kalo modem ngga merespon akibatnya (salah satunya) tidak bisa menerima sms.
mas, kenapa ya kok kadang2 bisa di parse smsnya dan kadang2 enggax bisa di parse sms nya.? kesalahan nya dimana ya mas. .
coba dicek lg antara keyword sms sama event handler-nya (kode parsing) di memo onChange
padahal di dalam database ada datanya mas, tapi pas mau ngirim auto reply eror di bagian itu terus. . solusinya apa ya mas.?
tapi pas WHERE `tb_barang`.`kode_barang`=’+QuotedStr(sEdit1.Text); diganti WHERE `tb_barang`.`kode_barang`=”‘+isi+'”‘; bisa autoreply mas. . gimana ya mas solusinya.? tinggal ini aja mas yang belum bisa-bisa. .
intinya saat melakukan query hrs ada isinya. Coba dicek di lg script-nya satu2. Jd gini kalo mau troubleshoot, coba script-nya dipecah jadi 2 bagian : 1. Bagian terima sms+parsing sampai masuk ke database –> cek database, udah bener datanya blm? 2. bagian autoreply –> ambil data dari database+ambil nomor pengirim+script kirim sms saat troubleshoot bagian 1, yg no 2 di-disable dulu, sampai yakin script no 1 udah bener. Kalo udah yakin baru lanjut no 2, tapi bag. 1 di disable dulu, dan script autoreply ambil data dari database, jgn langsung berdasarkan isi sms. Kalo udah yakin no 1 dan 2… Read more »
mas itu kok nmr hp nya nggak berubah jadi nama pengirim cara ngubahnya gimana itu mas?
kalo nama pengirim sudah disimpan di hp tujuan, pasti otomatis akan berubah (sesuai nama yg disimpan tadi)