jump to navigation

VISUAL BASIC FAQ (Frequently asked questions) Mon - Jun 24, 2002

Posted by supriyatna in Programming, Windows.
Tags: , ,
trackback

Tanggal update : Jun/24/2002, Jkt

Pertanyaan berikut disusun berdasarkan pertanyaan-pertanyaan yang muncul pada milis vb-indo yang saya ikuti dan juga berdasarkan email-email berupa pertanyaan ataupun konsultasi yang saya terima di supriyatna@mailandnews.com. Jika anda berminat untuk bergabung dengan milis ini silahkan anda kirimkan email kosong ke vb-indo-subscribe@egroups.com (semoga banyak memberikan manfaat untuk anda).

I.N.D.E.X G.E.N.E.R.A.L

  • Highlight (Select All) suatu text pada TextBox?, supriyatna (24, June, 2002)
  • Bagaimana merubah icon standar dari Form?, supriyatna (07, June, 2002)
  • Merubah fungsi suatu tombol, supriyatna (07, June, 2002)
  • Kapan sebaiknya App.Path diggunakan?
  • Bagaimana mendeklarasikan Variable dalam satu Baris?
  • Kenapa .Caption pada Label tidak berubah pada saat proses Looping?
  • Mengapa Data pada Crystal Report selalu menampilkan data yang lama, sehingga tidak sesuai dengan data terbaru?
  • Bagaimana caranya me-Register component yang belum ter-registrasi?
  • Memecah baris kode yang panjang pada VB, agar dapat menjadi beberapa baris?
  • menampilkan pesan pada MsgBox dalam beberapa baris?
  • Apa yang dimaksud dengan Pass By Referance
  • Kapan Option Base digunakan?
  • Apa beda Operator + dan & (Ampersand)?
  • Merubah/replace string pada File Text?, (June 6, 2001)

I.N.D.E.X D.A.T.A.B.A.S.E

  • Bagaimana mengakses database dengan menggunakan DAO?
  • Bagaimana membaca nilai pada suatu Field database?
  • Apa itu “Null”?
  • Bagaimana menghindari error “Invalid use of Null” saat membaca nilai NULL dari database?

G.E.N.E.R.A.L
Highlight (Select All) suatu text pada TextBox?

Untuk meng-highligh atau Men-select all text pada suatu textbox, anda bisa menggunakan perintah berikut:

txtName.SelStart = 0
txtName.SelLength = Len( txtName.Text )
txtName.SetFocus

Bagaimana merubah icon standar dari Form?

Untuk mengganti icon standar/default dari Form, yaitu cukup dengan merubah propery .Icon pada Object Form, pada saat mengclick Property .Icon akan muncul dialog Open, yang fungsinya adalah untuk memilih icon yang anda inginkan.

Sedangkan untuk menentukan icon apa yg akan digunakan oleh project, dalam hal ini jika anda ingin merubah icon dari .exe file yg dihasilkan. Yaitu dengan langkap-langkah sebagai berikut:

Merubah fungsi suatu tombol?

Mungkin anda pernah menginginkan merubah fungsi sebuah tombol, misalkan pada saat anda selesai mengetik/mengisikan suatu nilai pada sebuah control Text Box, kemudian anda mengetik tombol ENTER anda ingin agar kursor (focus) pindah Text Box berikutnya. Pernakah bukan, atau malah sering?

pertanyaan seperti yg diajukan oleh saudara zanto , dapat dijawab dengan satu kata.

Mudah! itu jawabannya. Karena sebenarnya Visal Basic sudah menyiapkan fungsi ini. Untuk menghadle masalah ini ada dua cara yg dapat dipakai.

Private Sub Text1_KeyPress(KeyAscii As Integer)
  If KeyAscii = 13 Then
    SendKeys "{TAB}"
  End If
End Sub

Atau dapat juga dengan menggunakan method SetFocus, Namun saya sendiri menganjurkan untuk menggunakan Procedure SendKeys.

Private Sub Text1_KeyPress(KeyAscii As Integer)
If KeyAscii = 13 Then
  Text2.SetFocus
End If
End Sub

Kapan sebaiknya App.Path digunakan?

App.Path Merupakan property aplikasi yang berisi path dari suatu program yang sedang dibuat, Apabila pertama kali kita membuat Program VB dan Project yang kita buat tersebut belum disimpan. Maka nilai App.Path akan menunjuk pada Default Directory dari Program VB berada. Sedangkan apabila telah disimpan, maka App.Path akan merujuk pada path dimana file Project (.vbp) berada.

Namun apabila Project tersebut sudah dicompile menjadi executeable (.exe) kemudian kita jalankan, maka App.Path akan merujuk pada Path dimana file executable (.exe) tersebut berada.

App.Path sering digunakan untuk menentukan Path dari suatu file database, sehingga Program yang dibuat dapat Fleksibel, yaitu dengan mengacu kepada letak dari file executeable. Contoh penggunaannya:

Dim db as Database
Dim strPathDB As String
strPathDB = IIf( Right$(App.Path,1)<>"\", App.Path + "\", App.Path )
Set db = DBEngine.OpenDatabase(strPathDB + "Test.MDB")

Bagaimana mendeklarasikan Variable dalam satu Baris?

Salah satu cara pendeklarasian suatu variable adalah dengan keyword Dim, namum terdapat suatu kesalahan fatal yang dilakukan oleh programmer pada saat pendeklarasian variable. Terjadi yaitu pada kondisi dimana pendeklarasian suatu variable dilakukan pada satu baris, perhatikan contoh dibawah!

Dim var1, var2, var 3 As String

Para programmer biasanya terpengaruh oleh gaya dari bahasa pemrogramman lainnya, seperti Pascal ataupun C. Sehingga akan berfikir bahwa pada baris diatas telah disiapkan tiga buah varibale dengan tipe String. ternyata… SALAH!!!, kenyataan yang sebenarnya adalah tersedia 2 buah variable bertipe Variant (var1 dan var2), dan satu buah variable bertipe String (var3). Jika yang diinginkan adalah 3 buah variable bertipe string, maka pendeklarasian yang bernar terlihat dibawah ini:

Dim var1 As String, var2 As String, var3 As String

Kenapa .Caption pada Label tidak berubah pada saat proses Looping?

Pada beberapa property (Khususnya property yang berhubungan dengan tampil an pada screen, misalkan .Caption pada Label, ProgressBar dll), jika operasi assignment dilakukan pada saat Looping maka proses Refresh akan dilakukan pada saat proses Looping selesai. Untuk mengatasi hal ini, yaitu dengan memaksa Object untuk mengirimkan message Refresh atau memaksa Sistem Operasi Windows untuk menjalankan message yang lain, yaitu dengan Statement DoEvents. Contoh terlampir pada potongan program:

Private Sub Command1_Click()
Dim a As String
For i = 1 To 1000
  a = Str(i)
  Text1.Text = a : Text1.Refresh
  Label1.Caption = a '  : Label1. Refresh
  Form1.Caption = a '
  ' Atau gunakan DoEvents pada baris ini.
Next i
End Sub

Mengapa Data pada Crystal Report selalu menampilkan data yang lama, sehingga tidak sesuai dengan data terbaru?

Default dari Crystal Report adalah mencentang pilihan “Save data with Report” —Data disimpan dengan Report–, sehingga data yang ditampilkan adalah data yang disimpan bersama dengan report, pilihan ini juga menyebabkan file report (.rpt) menjadi membengkak. Agar data yang ditampilkan selalu uptodate anda harus menghilangkan pilihan “Save Data with Report” yang ada pada menu “File”, atau jika ingin melakukan secara programming, set property .DiscardSavedData menjadi True (defaultnya bernilai False, sehingga jika pada Report Data ikut tersimpan, maka data yang ditampilkan bukanlah data terbaru).

Berikut listing programnya:

With CrystalReport1
  .ReportFileName = App.Path & "\StatementOfAccounts.rpt"
  .WindowState = crptMaximized
  .WindowTitle = "Pengadaan Report"
  .DiscardSavedData = True ' Gunakan data yang terbaru!!!
  .Action = 1 ' Preview Report to Screen
End With

Bagaimana caranya me-Register component yang belum ter-registrasi?

Pada saat installasi terkadang proses registrasi suatu komponen mengalami kegagalan, atau setelah anda membuat suatu komponen kemudian ingin menggunakannya tapi bingung dengan caranya. Lalu bagaimana mengatasinya?

Gunakan file REGSVR32.EXE (biasanya terletak di folder WINDOWS). Contoh, jika ingin me-register komponen MYOCX.OCX gunakan command berikut:

c:\windows\regsvr32.exe c:\myfolder\MYOCX.OCX

Memecah baris kode yang panjang pada VB, agar dapat menjadi beberapa baris?

Gunakan spasi dengan di ikuti underscore (_), seperti contoh dibawah:

strKalimat = "FAQ ini dibuat untuk membantu " & _
   "para programmer pemula " & _
   "atau untuk yang sedang mengalami beberapa masalah" & _
   "Semoga ada manfaatnya, supriyatna@mailandnews.com"

Menampilkan pesan pada MsgBox dalam beberapa baris?

Yaitu dengan menggunakan Carriage return ( chr$(13)), atau LineFeed (CHR$(10)), dapat juga dengan menggunakan kombinasi keduanya yaitu Carriage Return dan LineFeed, untuk lebih mudah lagi dengan memanfaatkan konstanta vbCRLF (atau ekivalen dengan CHR$(13)+CHR$(10)).

MessageBox "Gunakan vbCRLF untuk membuat" + vbCRLF + _
  "Pesan pada fungsi MsgBox" + vbCRLF + _
  "menjadi beberapa baris", vbExclamation + vbOkOnly, "Informasi"

Apa yang dimaksud dengan Pass By Referance

Yaitu mengirimkan nilai suatu variable dengan berupa alamat memori, sehingga apabila terjadi perubahan nilai didalam sub/fungsi maka pada saat keluar varibale tersebut nilainya telah berubah, defaultnya adalah Pass by Reference.

Sedangkan jika dengan menggunakan Pass By Value, maka nilai yang dikirim akan di copy kan, sehingga apabila dilakukan operasi terhadap variable tersebut, maka setelah keluar dari sub/fungsi, variable pengirimnya tidak terpengaruh (nilainya tetap).

Kapan Option Base digunakan?

Yaitu apabila menginginkan awal index dari suatu array dimulai dari 1, secara default setiap array yang dibuat akan dimulai dari index 0. Untuk merubah ketentuan ini atau dengan kata lain ingin agar index pertama dari array diawali dari 1, maka tambahkan baris:

Option Base 1

Apa beda Operator + dan & (Ampersand)?

Perhatikan contoh dibawah:
a.) strVar1 = “Rp ” + 2000
b.) strVar2 = “Rp ” & 2000

Apa yang terjadi?, ya! pada contoh (a) akan terjadi error, ini disebabkan karena Operasi (+) dilakukan pada tipe data yang berlainan. Yang pertama beripe string dan yang satunya lagi bertipa numerik. Operator (+) tidak dapat berjalan pada tipe data yang berlainan.

Sedangkan pada contoh (b) tidak terjadi error. Karena walaupun operasi dilakukan pada tipe data yang berbeda namun Operator & (ampersand) akan melakukan konversi terlebih dahulu, yaitu merubah nilai 2000 kedalam string “2000”. Sehingga variable strVar2 akan bernilai “Rp 2000”.

TIPS:
Karena Operator (&) akan melakukan konversi terlebih dahulu sebelum dilakukannya operasi, maka operator (&) membutuhkan waktu yang lebih lama dibandingkan dengan operator (+). Kesimpulannya, gunakan (+) jika akan nilai yang akan dioperasikan bertipe data sama.

Merubah/replace string pada File Text?

Jika pada suatu file text terdapat file sebagai berikut:

01 DEDE
02 SUPRIYATNA
03 VISUAL BASIC

Kemudian kita ingin merubah data SUPRIYATNA menjadi SYANDY, maka langkah yang dapat kita lakukan adalah;

' 01 DEDE
' 02 SUPRIYATNA
' 03 VISUAL BASIC

Dim sBaris As String
Dim sNoBaris As String

Open "c:\vbasic\text1.txt" For Input As #1
Open "c:\vbasic\text2.txt" For Output As #2

Do While Not EOF(1)
  ' Baca dari File TEXT1.TXT
  Input #1, sBaris
  sNoBaris = Left$(sBaris, 2)
  If sBaris= "02" Then
    sBaris = Replace( sBaris, "SUPRIYATNA", "SYANDY" )
  End If
  ' Tulis hasil-ny ke file TEXT2.TXT
  Print #2, sBaris
Loop

' Jangan lupa untuk menutup File yang sudah dibuka
Close #1
Close #2

Ok! Gitu aja kok repot……, Selamat mencoba dan salam

D.A.T.A.B.A.S.E
Bagaimana mengakses database dengan menggunakan DAO?

Untuk mengakses database dengan DAO, yang pertama kali adalah siapkan Object Database dan Recordset-nya, kemudian referensikan masing-masing Object tersebut. Perhatikan potongan program berikut:

Option Explicit
Dim db As Database
Dim rs As Recordset

Private Sub Form_Load()
Dim strPathDB As String

  If Right(App.Path, 1) <> "\" Then
    trPathDB = App.Path & "\" & "datatamu.mdb"
  Else
    trPathDB = App.Path & "datatamu.mdb"
  End If

  Set db = DBEngine.OpenDatabase(strPathDB)
  Set rs = db.OpenRecordset("GUESTBOOK", dbOpenDynaset)
End Sub

*Berikut penjelasan singkat dari listing diatas;
Database dibuka dengan menggunakan method .OpenDatabase dari Object Bulid-in DBEngine, sedangkan Recordset dengan memanfaatkan method .OpenRecordset. Yang harus anda INGAT adalah db dan rs merupakan variable Object sehingga untuk me-referensikan suatu object harus didahului dengan statement Set, berbeda dengan operasi assignment terhadap suatu variable, yang mana cukup hanya dengan varX = nilai_X.

Bagaimana membaca nilai pada suatu Field database?

Untuk membaca nilai suatu Field pada table dari Database, VB memiliki banyak cara. Diantaranya adalah dengan memanfaatkan Object Collection Fields, atau dengan memanfaatkan properti .Fields pada Object Recordset, dan bisa juga secara langsung dengan menggunakan Object Recordset. Untuk jelasnya perhatikan contoh dibawah, Anggap pada database PERUSAHAAN.MDB didalamnya terdapat tabel KARYAWAN dengan struktur sebagi berikut:

KARYAWAN
1. KARYAWAN_ID (Text, 10)
2. NAMA KARYAWAN (Text, 50)
3. ALAMAT KARYAWAN (Text, 256)

Berikut langkah untuk mengambil nilai dari suatu field;

Set db = DBEngine.OpenDatabase( "PERUSAHAAN.MDB" )
Set rs = db.OpenRecordset("KARYAWAN", dbOpenDynaset)

txtKaryawan_Id.Text = rs.Fields(0)
txtKaryawan_Id.Text = rs.Fields("KARYAWAN_ID")
txtKaryawan_Id.Text = rs(0)
txtKaryawan_Id.Text = rs("KARYAWAN_ID")
txtKaryawan_Id.Text = rs!KARYAWAN_ID

' Untuk nama Field yang mengandung SPASI, Contoh
' pada Field NAMA KARYAWAN
txtKaryawan_Id.Text = rs![NAMA KARYAWAN]

Pada Database Ms. Access penamaan suatu field diperbolehkan menggunakan karakter SPASI, hal ini menyebabkan dibutuhkannya penulisan khusus jika ingin menggunakan notasi “!” (Collection), yaitu dengan menggunakan “[” dan “]”.

Apa itu “Null”?

Null merupakan tipe data yang hanya memiliki satu nilai, yaitu Null itu sendiri, sama halnya dengan tipe data Boolean yang hanya memiliki nilai True atau False. Null digunakan untuk menyatakan bahwa suatu variable tidak memiliki nilai , dimana Null TIDAK sama dengan string kosong (empty-string) dan TIDAK sama dengan 0, serta Null TIDAK dapat dibandingkan. Ini kesalahan fatal dari pengertian Null yang diakibatkan kurangnya membaca dokumentasi VB.

CATAT:
Apabila hendak mengetahui suatu variable bernilai Null atau tidak, Operasi “sama dengan” tidak dapat dipakai, Lalu,… bagaimana caranya?. Disini VB menyediakan sebuah fungsi IsNull() yang akan mengembalikan nilai True jika berisi Null dan sebaliknya False jika bukan Null. Perhatikan Contoh;

If VariableIni = NULL Then KerjakanIni

Cara diatas akan selalu bernilai False, sehingga fungsi prosedur KerjakanIni tidak akan pernah dikerjakan. INGAT Null tidak apat dibandingkan, untuk mengatasi masalah diatas perhatikan potongan program dibawah;

If IsNull( VariableIni ) Then KerjakanIni

Bagaimana menghindari error “Invalid use of Null” saat membaca nilai NULL dari database?

“Invalid use of Null” atau error dengan kode Run-time error ’94’ adalah error yang terjadi apabila kontrol diberi nilai NULL. Salah satu contohnya yaitu apabila hendak memberikan nilai pada kontrol TextBox/ComboBox dari suatu Field pada database, namun Field tersebut bernilai NULL. Yang harus dilakukan untuk mengatasi hal ini yaitu dengan mengecek terlebih dahulu nilai dari Field tersebut, Null atau tidak?. Perhatikan kode dibawah;

txtTgl_Lahir.Text = IIf( rs("TGL_LAHIR") = Null , "", _
  rs("TGL_LAHIR")) ! SALAH karena Null tidak dapat dibandingkan
txtTgl_Lahir.Text = IIf(IsNull(rs("TGL_LAHIR")), "", _
  rs("TGL_LAHIR")) ! BENAR

*TGL_LAHIR merupakan Field dengan tipe Date
Yang perlu anda catat dari contoh diatas adalah Nilai Null tidak dapat dibandingan dengan menggunakan operasi ‘=’, sehingga untuk mengetahui suatu variable bernilai Null atau tidak yaitu dengan menggunakan Fungsi IsNull(). Yang kemudian jadi pertanyaan adalah, Adakah cara lain selain cara diatas?.

Ada! yaitu dengan mengkonversi nilai Null menjadi string Kosong (Empty String), perhatikan contoh dibawah:

txtTgl_Lahir.Text = rs("TGL_LAHIR") & ""

Comments»

No comments yet — be the first.

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s

%d bloggers like this: