![]() |
![]() |
Saya
adalah pemula, dapatkah anda memberikan informasi tentang edisi Visual Basic ?
Microsoft membagi Visual Basic menjadi
tiga edisi, yaitu Learning, Professional dan Enterprised, dimana memiliki harga
sesuai dengan feature masing-masing, berikut ini penjelasan dari Microsoft :
Visual
Basic tersedia dalam tiga versi, yang masing-masing sesuai dengan kebutuhan
pengembangan.
Visual Basic Learning edition memungkinkan para programmer membuat aplikasi yang
powerful untuk Microsoft Windows dan Windows NTŪ. Menyediakan semua kontrol
intrinsic, ditambah grid, tab, dan kontrol data-bound. Dokumentasi yang
tersedia pada edisi ini meliputi CD Learn VB Now ditambah dengan CD Microsoft
Developer Network (MSDNT) Library yang mengandung dokumentasi lengkap online.
Professional edition menyediakan bagi professional komputer sejumlah feature
lengkap dan tool-tool untuk solusi pengembangan bagi pihak ketiga. Meliputi
semua feature pada Learning edition, ditambah dengan kontrol ActiveX,
Internet Information Server Application Designer, integrated Visual Database
Tools dan Data Environment, Active Data Objects, serta Dynamic HTML Page
Designer. Dokumentasi yang tersedia pada edisi ini meliputi buku Visual
Studio Professional Features ditambah CD Microsoft Developer Network yang
mengandung dokumentasi lengkap online.
Enterprise edition memungkinkan para professional untuk membuat aplikasi
tersebar, meliputi semua features pada Professional edition, ditambah Back
Office tools sperti SQL Server, Microsoft Transaction Server, Internet
Information Server, Visual SourceSafe, SNA Server, dan lain-lain. Dokumentasi
cetak yang terdapat pada Enterprise edition meliputi buku Visual Studio
Enterprise Features ditambah CD Microsoft Developer Network yang
mengandung dokumentasi lengkap online.
Bagaimana
menampilkan tanda ampersand (&) pada menu atau label?
Tanda ampersand adalah simbol khusus untuk windows
untuk menandai shortcut key (ALT <key>) untuk mengakses melalui keyboard.
Untuk menanmpilkan tanda ampersand anda dapat mengetikkan dua kali &&,
misalnya Tutorial && programming.
Bagaimana
cara termudah menomori ulang urutan tab index kontrol?
Cara yang termudah menomori tab index kontrol
adalah, klik pada kontrol yang ingin anda buat sebagai tabstop terakhir, nomori
tab indexnya ke 0, kemudian klik kontrol terakhir berikutnya dan nomori tab
indexnya ke 0, dan seterusnya sampai kontrol yang pertama, sehingga semua kontrol ternomori dengan benar.
Bagaimana
saya membuat accelerator pada label, sehingga textbox disampingnya mendapatkan
fokus, kalau dilakukan Alt <key> ?
Pada Label kontrol buat tanda ampersand pada huruf
yang mau dijadikan accelerator, kemudian berikan tab index textbox disampingnya
sebagai nomor berikutnya.
Bagaimana
saya membuat penekanan Enter pada suatu textbox dapat memindahkan fokus ke
kontrol berikutnya ?
Untuk membuat penekanan Enter pada Textbox memiliki
efek pemindahan fokus ke kontrol berikutnya, anda dapat memanipulasi KeyAscii
yang terdapat pada Event KeyPress pada Textbox tersebut, contoh :
Private Sub
Text1_KeyPress(KeyAscii As Integer)
If KeyAscii = 13 Then
SendKeys "{Tab}"
KeyAscii = 0
End If
End Sub
Bagaimana
saya memeriksa apakah picturebox atau image dalam keadaan kosong ?
Untuk memeriksa apakah suatu picturebox atau image kosong, anda dapat
membandingkannya dengan fungsi LoadPicture tanpa argumen, contoh :
Private Sub Command1_Click()
If Image1.Picture = LoadPicture Then
MsgBox "Image1 kosong"
End If
End Sub
Bagaimana
saya menyimpan isi Picturebox ke file ?
Untuk menyimpan isi dari suatu Picturebox ke file, anda dapat menggunakan
perintah SavePicture terhadap properti Image dari Picturebox tersebut, contoh :
Private Sub Command1_Click()
SavePicture PicGambar.Image, "MyPicture.bmp"
End Sub
Bagaimana
saya memindahkan isi Clipboard ke suatu Picturebox ?
Untuk memindahkan isi Clipboard ke suatu Picturebox, anda dapat
menggunakan metoda GetData yang terdapat pada objek Clipboard, contoh :
Private Sub Command1_Click()
PicGambar.Picture = Clipboard.GetData
End Sub
Bagaimana
mendeklarasikan variabel yang dapat digunakan pada semua procedure dan forms ?
Deklarasikan variabel tersebut pada suatu modul dengan menempatkan kata
Public didepannya.
Public cFolder As String
Bagaimana
saya menggambil command-line parameters?
Anda dapat menggambilnya dengan fungsi bantu
Command$.
Bagaimana
membuat looping 1 kali satu detik pada perintah for...next ?
Anda dapat mengkonbinasikannya dengan fungsi Timer,
perhatikan koding berikut :
For
i = 1 To 100
Debug.Print "Hello"
sekarang = Timer
Do While Timer < sekarang + 1
x = DoEvents()
Loop
Next i
Bagaimana
menjalankan perintah DOS dari program?
Anda dapat menggunakan perintah Shell dengan contoh
sebagai berikut :
Private Sub Command1_Click()
x = Shell("c:\windows\command.com /c dir", vbNormalFocus)
End Sub
Bagaimana pindah keaktifan ke aplikasi yang sedang berjalan, atau menjalankannya ?
Deklarasikan FindWindow dan BringWindowToTop APIs pada modul, dan menggunakannya :
Public Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
Public Declare Function BringWindowToTop Lib "user32" Alias "BringWindowToTop" (ByVal hwnd As Long) As Long
Private Sub cmdBuka_Click()
Dim hCalcWnd As Long
Dim x As Long
hCalcWnd = FindWindow("SciCalc", "Calculator")
If hCalcWnd = 0 Then
x = Shell("CALC.EXE", vbNormalFocus)
Else
BringWindowToTop (hCalcWnd)
End If
End Sub
Bagaimana
cara termudah mendapatkan jumlah form yang terbuka pada aplikasi saya?
Anda dapat menggunakan properti Count pada Forms, atau nilai yang dikembalikan
oleh DoEvents
JlhFormTerbuka = Forms.Count
atau
JlhFormTerbuka = DoEvents
Bagimana
saya dapat mengetahui jumlah MDI child form yang terbuka dalam suatu MDI form?
Anda dapat menggunakan properti Count dari koleksi Forms yang akan
mengembalikan jumlah form yang telah di load dalam project. Untuk mengetahui
jumlah jendela MDI child, anda dapat menggunakan :
Public Function GetMDIChildCount() As Integer
Dim frm As Form
Dim cnt As Integer
For Each frm In Forms
If (frm.MDIChild And frm.Visible) Then cnt = cnt + 1
Next frm
GetMDIChildCount = cnt
End Function
Gunakan rutin diatas dengan:
NumberOfOpenForms = GetMDIChildCount()
Bagaimana
cara menghindarkan pemakai menjalankan aplikasi lebih dari 1 kali pada komputer
yang sama?
Pada aplikasi tertentu kita membutuhkan aplikasi hanya
dijalankan satu kali setiap saat pada komputer yang sama. Untuk melakukan hal
tersebut kita dapat menggunakan metoda app.previnstance apakah instance dari
aplikasi telah pernah dijalankan sebelumnya, contoh :
Sub Main()
If App.PrevInstance Then
MsgBox "aplikasi telah berjalan"
End
Else
MainForm.Show
End If
End Sub
atau
Private Sub Form_Load()
If App.PrevInstance Then
MsgBox "aplikasi telah berjalan"
Unload Me
End If
End Sub
Bagaimana
mendapatkan folder dimana program aktif
?
Untuk
mendapatkan folder dimana aplikasi anda aktif, dapat digunakan properti App.Path,
contoh :
cfolder
= App.Path
Open cfolder & "\peserta.dat" For random As #1 Len=Len(DatPeserta)
Bagaimana
saya membuat aplikasi saya berhenti sesaat ?
Untuk membuat
aplikasi anda dapat berhenti sejumlah waktu tertentu, anda perlu membuat
deklarasi fungsi API sebagai berikut dan memanfaatkannya dalam koding anda,
contoh :
Declare
Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As
Long)
'Untuk berhenti selama 5 detik, anda dapat melakukan call dengan
sleep(5000)
Bagaimana
saya mengirim email lewat aplikasi ?
Anda perlu memasukkan komponen MAPI kedalam project anda, kemudian
tanamkan MAPI.Session dan MAPI.Messages kedalam form, dan lakukan koding seperti
contoh berikut :
Private Sub Command1_Click()
' Pemakaian username dan password sangat tergantung pada setting klien mail
anda
With MAPISession1
.UserName = "noname"
.Password = "password"
.SignOn
End With
' Kirim sebuah surat
With MAPIMessages1
.SessionID = MAPISession1.SessionID
.Compose
.RecipAddress = "hendra@indoprog.com"
.AddressResolveUI = False
.ResolveName
.MsgSubject = "Subject anda"
.MsgNoteText = "Pesan Anda"
.Send False
End With
End Sub
Dapatkah
saya mendapatkan username login windows?
Untuk mendapatkan username, anda perlu mendeklarasikan fungsi
API GetUserName sebagai berikut :
Private Declare Function GetUserName Lib "advapi32.dll" _
Alias "GetUserNameA" (ByVal lpBuffer As String, nSize _
As Long) As Long
Kemudian anda
dapat mebuat fungsi RetrieveUserName sebagai berikut :
Public Function RetrieveUserName() As String
' Deklarasi konstanta untuk maksimal panjang username
Const MaxLen = 50
' Deklarasi variabel untuk menampung username
Dim strName As String
' Digunakan untuk mendapatkan panjang username
Dim lngRetVal As Long
' Isi strName dengan spasi
strName = Space$(MaxLen)
'Ambil username
lngRetVal = GetUserName(strName, MaxLen)
' Buang spasi kanan
strName = Trim$(strName)
' Karena GetUserName mengembalikan suatu karakter null pada bagian akhir
' sehingga perlu dihilangkan.
strName = Left$(strName, Len(strName) - 1)
RetrieveUserName = strName
End Function
Dan akhirnya anda dapat memanggil fungsi RetrieveUsername dari program anda.
Bagaimana
jangkauan variabel yang dipesan dengan perintah DIM?
Suatu variabel yang di DIM dalam sub maupun function adalah lokal
terhadap rutin tersebut, dan akan dimusnahkan setelah rutin selesai dieksekusi.
Variabel yang di DIM sebagai Private pada bagian general declarations dari suatu Form adalah tersedia bagi seluruh rutin pada form tersebut, dan tetap tersedia selama form dalam keadaan ter Load.
Variabel yang di DIM sebagai Public pada bagian general declarations dari suatu Form tersedia bagi seluruh rutin pada form dengan nama variabel tersebut, misalnya Nama, dan tersedia bagi form atau modul diluar form tersebut dengan nama namaform.namavariabel, misalnya MyForm.Nama selama form tersebut dalam keadaan ter Load.
Variabel yang di DIM sebagai Private pada bagian general declarations dari suatu Module adalah tersedia bagi seluruh rutin dalam module tersebut.
Variabel yang di DIM sebagai Public pada bagian general declarations dari suatu Module adalah tersedia bagi seluruh module dan form dalam project tersebut.
Mengapa saya mengalami Overflow Error dalam perkalian:
Dim
x as Long
x = 33 * 1000 'menyebabkan overflow
error
VB, dalam melakukan perhitungan hasilnya disimpan ke x, menggunakan suatu
variabel sementara yang memiliki type yang sama dengan type data dalam ekspresi
yang dihitung. Pada kasus diatas kedua nilai adalah dalam batasan integer +/-
32767, sedangkan hasil perkalian adalah > 32767, sehingga menyebabkan
overflow, solusinya adalah membuat salah satu nilainya menjadi long dengan sufix
&, contoh ...
x = 33 * 1000&
Dapatkah anda memberi contoh membuat database dengan koding ?
Anda dapat membentuk database secara koding dengan menggunakan DAO, contoh berikut saya menggunakan References DAO 3.51 Object Library:
Dim MyWs As Workspace
Dim MyDb As Database
Dim MyTb As TableDef
Dim Myfl As Field
Dim MyId As Index
Set MyWs = DBEngine.Workspaces(0)
Set MyDb = MyWs.CreateDatabase("C:\Data.mdb", dbLangGeneral)
Set MyTb = MyDb.CreateTableDef("pegawai")
Set Myfl = MyTb.CreateField("nip", dbText, 6)
MyTb.Fields.Append Myfl
Set Myfl = MyTb.CreateField("nama", dbText, 30)
Myfl.AllowZeroLength = False
MyTb.Fields.Append Myfl
Set Myfl = MyTb.CreateField("alamat", dbText, 50)
MyTb.Fields.Append Myfl
Set Myfl = MyTb.CreateField("pria", dbBoolean, 30)
MyTb.Fields.Append Myfl
Set Myfl = MyTb.CreateField("tglLahir", dbDate, 30)
MyTb.Fields.Append Myfl
Set Myfl = MyTb.CreateField("berat", dbSingle, 30)
MyTb.Fields.Append Myfl
Set Myfl = MyTb.CreateField("gaji", dbCurrency)
MyTb.Fields.Append Myfl
Set Myfl = MyTb.CreateField("foto", dbLongBinary)
MyTb.Fields.Append Myfl
Set Myfl = MyTb.CreateField("id", dbLong)
Myfl.Attributes = dbAutoIncrField
'Membuat Field autoincrement
MyTb.Fields.Append Myfl
'Membuat Index
Set MyId = MyTb.CreateIndex("P_Key")
MyId.Primary = True
Set Myfl = MyId.CreateField("nip")
MyId.Fields.Append Myfl
MyTb.Indexes.Append MyId
MyDb.TableDefs.Append MyTb
MyDb.Close
Anda dapat membentuk database secara koding dengan menggunakan ADO, contoh berikut saya menggunakan References Microsoft ADO Ext. 2.1 for DDL and Security :
Dim cat As New ADOX.Catalog
Dim tbl As New ADOX.Table
Dim idx As New ADOX.Index
cat.Create "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=c:\Data.mdb"
tbl.Name = "MyTable"
Set tbl.ParentCatalog = cat
tbl.Columns.Append "nip", adVarWChar, 6
tbl.Columns.Append "nama", adVarWChar, 30
tbl.Columns("nama").Properties("Jet OLEDB:Allow Zero Length") =
False
tbl.Columns.Append "alamat", adVarWChar, 50
tbl.Columns.Append "pria", adBoolean
tbl.Columns.Append "tgllahir", adDate
tbl.Columns.Append "gaji", adCurrency
tbl.Columns.Append "berat", adSingle
tbl.Columns.Append "foto", adLongVarBinary
tbl.Columns.Append "id", adInteger
tbl.Columns("id").Properties("AutoIncrement") = True
idx.Name = "P_Key"
idx.Columns.Append "nip"
'Append the index to the table
tbl.Indexes.Append idx
cat.Tables.Append tbl
Set cat = Nothing
Anda dapat membuat tabel dengan SQL Statement yang dijalankan dengan metode execute pada Object Database dengan DAO. Saya menggunakan References DAO 3.51 Object Library untuk contoh berikut :
Dim MyWs As Workspace
Dim MyDb As Database
Dim sSQL As String
Set MyWs = DBEngine.Workspaces(0)
Set MyDb = MyWs.CreateDatabase("C:\Data.mdb", dbLangGeneral)
sSQL = "CREATE TABLE pegawai (nip char(6), nama char(30) not null, alamat char(50), pria logical," & _
"tglLahir datetime, berat single, gaji currency, foto longbinary," & _
"id autoincrement, constraint P_KEY PRIMARY KEY (nip));"
MyDb.Execute sSQL
MyDb.Close
Bagaimana saya membuat database yang diproteksi dengan password ?
Dengan
DAO
Anda dapat menggunakan ";pwd=password" pada waktu Create database
Set MyDb = MyWs.CreateDatabase("C:\Data.mdb1", dbLangGeneral + ";pwd=indoprog")
Dengan
ADO
Anda dapat menggunakan Jet OLEDB:Database Password=password; pada connection
string waktu create catalog
cat.Create "Provider=Microsoft.Jet.OLEDB.4.0;Jet OLEDB:Database Password=password;Data Source=c:\Data1.mdb"
Bagaimana membuka database yang diproteksi dengan menggunakan password ?
Dengan
DAO
Anda dapat menggunakan ";pwd=password" pada waktu OpenDatabase
Set MyDb = MyWs.OpenDatabase("C:\Data1.mdb", False, False, "; pwd=password")
Dengan
ADO
Anda dapat menggunakan Jet OLEDB:Database Password=password; pada connection
string waktu open connection
MyConn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Jet OLEDB:Database Password=password;Data Source=c:\Data1.mdb"
Saya telah memiliki database dan tabel pegawai, bagaimana saya menambahkan suatu index yang baru kedalamnya ?
Anda dapat membuka kembali database tersebut, dan menambahkan index pada table tersebut :
Dengan DAO :
Dim MyWs As Workspace
Dim MyDb As Database
Dim MyTb As TableDef
Dim Myfl As Field
Dim MyId As Index
Dim lAda As Boolean
Set MyWs = DBEngine.Workspaces(0)
Set MyDb = MyWs.OpenDatabase("C:\Data.mdb")
Set MyTb = MyDb.TableDefs("pegawai")
lAda = False
For Each idx In MyTb.Indexes
If idx.Name = "S_Key" Then
lAda = True
MsgBox "Index telah ada !"
End If
Next idx
If Not lAda Then
Set MyId = MyTb.CreateIndex("S_Key")
Set Myfl = MyId.CreateField("nama")
MyId.Fields.Append Myfl
MyTb.Indexes.Append MyId
End If
MyDb.Close
Dengan ADO :
Dim MyConn As New ADODB.Connection
Dim cat As New ADOX.Catalog
Dim tbl As New ADOX.Table
Dim idx As New ADOX.Index
Dim lada As Boolean
MyConn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=c:\Data.mdb"
Set cat.ActiveConnection = MyConn
Set tbl = cat.Tables("MyTable")
lada = False
For Each idx In tbl.Indexes
If idx.Name = "S_Key" Then
MsgBox "Index telah ada !"
lada = True
End If
Next idx
If Not lada Then
idx.Name = "S_Key"
idx.Columns.Append "nama"
'Append the index to the table
tbl.Indexes.Append idx
End If
Set cat = Nothing
Set MyConn = Nothing
Dengan SQL :
Dim MyWs As Workspace
Dim MyDb As Database
Dim sSQL As String
Set MyWs = DBEngine.Workspaces(0)
Set MyDb = MyWs.OpenDatabase("C:\Data.mdb")
sSQL = "CREATE INDEX S_Key ON pegawai (nama);"
MyDb.Execute sSQL
MyDb.Close
Saya ingin memeriksa apakah didalam database MDB saya telah memiliki tabel yang bernama "MyTable" atau tidak?
Anda dapat memeriksa keberadaan tabel dalam suatu database dengan melakukan For Each ... Next untuk menelusuri semua objek TableDef yang terdapat pada koleksi TableDefs dari database yang bersangkutan, sambil melakukan pemeriksaan terhadap properti Name dari masing-masing TableDef yang didapatkan.
Contoh :
Dengan DAO :
Dim MyWs As Workspace
Dim MyDb As Database
Dim MyTb As TableDef
Dim lAda As Boolean
Set MyWs = DBEngine.Workspaces(0)
Set MyDb = MyWs.OpenDatabase("C:\Data.mdb")
lAda = False
For Each MyTb In MyDb.TableDefs
If MyTb.Name = "MyTable" Then
MsgBox "Tabel telah ada !"
lAda = True
End If
Next MyTb
Dengan ADO :
Dim MyConn As New ADODB.Connection
Dim cat As New ADOX.Catalog
Dim tbl As New ADOX.Table
Dim lada As Boolean
MyConn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=c:\Data.mdb"
Set cat.ActiveConnection = MyConn
lAda = False
For Each tbl In cat.Tables
If tbl.Name = "MyTable" Then
MsgBox "Tabel telah ada"
lada = True
End If
Next tbl