jump to navigation

Deklarasi variable dengan keyword STATIC VS keyword DIM. Apa bedanya? Sat - Nov 18, 2000

Posted by supriyatna in Programming, Windows.
Tags: , ,
add a comment

Keyword STATIC dan DIM sama-sama digunakan untuk mendeklarasikan variable, walaupun begitu ternyata memiliki perbedaan dari segi scope, atau ruang lingkup-nya.

Keyword DIM akan selalu me-reset ulang nilai dari suatu variable pada saat variable tersebut dideklarasikan. Sehingga nilai yang sudah diberikan sebelumnya akan selalu terhapus. Berbeda dengan STATIC, keyword ini hanya akan mendeklarasikan variable sekali saja, maka nilai yang ada pada variable tersebut tidak akan terhapus walaupun dideklarasikan berulang-ulang, perhatikan contoh dibawah:

Private Sub cmdStaticVsDim_Click()
Static sNamaStatic As String
Dim sNamaDim As String
  MsgBox "sNamaStatic = " & sNamaStatic & vbCrLf & _
    "sNamaDim = " & sNamaDim, vbInformation, & _
    "STATIC vs DIM"
  sNamaStatic = "STATIC:supriyatna@mailandnews.com"
  sNamaDim = "DIM: supriyatna@mailandnews.com"
End Sub

Pada procedure diatas terdapat dua variable dengan dua cara pendeklarasian, sNamaStatic dengan keyword STATIC dan sNamaDim dengan keyword DIM. Pada saat pertamakali cmdStaticVsDim_Click() dijalankan kedua variable tersebut masih kosong (ini dapat dilihat dengan menggunakan fungsi MsgBox). Kemudian masing-masing variable tersebut diberikan nilai untuk mengetahui perbedaan fungsi keduanya.

Pada saat cmdStaticVsDim_Click() kembali dijalankan untuk keduakalinya ataupun dijalankan seterusnya. Maka nilai dari sNamaDim akan kembali direset sehingga nilai sebelumnya yang bernilai
DIM: supriyatna@mailandnews.com” akan terhapus, berbeda dengan variable sNamaStatic dimana nilainya akan tetap dipertahankan sehingga pada MsgBox akan selalu bernilai “STATIC:supriyatna@mailandnews.com“.

Menyembunyikan Proses pada TASK Manager Sat - Sep 9, 2000

Posted by supriyatna in Programming, Windows.
Tags: , , ,
add a comment

Adakalanya kita menginginkan agar proses dari applikasi yang dibuat tidak terlihat/ditampilkan pada TASK Manager, atau dialog yang muncul pada saat CTRL+ALT+DEL ditekan. Tujuan pokok-nya adalah untuk menghindari agar applikasi kita yang sedang berjalan tidak sembarangan dapat di End-Task.

Fungsi API kali ini yang digunakan adalah GetCurrentProcessId() yang fungsi utamanya untuk mendapatkan Process ID dari aplikasi yang saat ini berjalan. Dan fungsi RegisterServiceProcess() untuk mendaftarkan proses servis. Berikut syntak dari fungsi RegisterServiceProcess():

DWORD RegisterServiceProcess( dwProcessID, dwType )

Yang mana:

  • dwProcessID adalah Identifier dari proses yang akan diregister kedalam proses service. Jika NULL maka proses yang akan diregister adalah yang saat itu sedang aktif.
  • dwType merupakan nilai penentu apakah proses akan diregister atau di unregister. Jika nilai dwType adalah 1 maka proses akan disembunyikan/unregister dari service proses/Task Manager, dan proses akan ditampilkan/di-register pada proses service apabila dwType diset menjadi 0.

Berikut listing lengkap:
NB: cbTampilkan merupakan CheckBox Control.

Option Explicit
' Dapatkan No Proses yang akan di Register/Un-register
Private Declare Function GetCurrentProcessId Lib "kernel32" () _
  As Long
Private Declare Function GetCurrentProcess Lib "kernel32" () _
  As Long
' Set register/un-register proses
Private Declare Function RegisterServiceProcess Lib "kernel32" _
  (ByVal dwProcessID As Long, ByVal dwType As Long) As Long

Private Sub cbTampilkan_Click()
  TampilkanPadaTask cbTampilkan.Value
  If cbTampilkan.Value Then
    Me.Caption = "Ditampilkan pada Task Manager"
  Else
    Me.Caption = "Disembunyikan dari Task Manager"
  End If
End Sub

Private Sub Form_Load()
  ' TampilkanPadaTask False
  Call cbTampilkan_Click
End Sub

Public Sub TampilkanPadaTask(bShow As Boolean)

Dim lProcessID As Long, lRegProcess As Long
lProcessID = GetCurrentProcessId()
If bShow Then
  ' Tampilkan pada Task Manager
  lRegProcess = RegisterServiceProcess(lProcessID, 0)
Else
  ' Sembunyikan pada Task Manager
  lRegProcess = RegisterServiceProcess(lProcessID, 1)
End If
End Sub

Membuka database Access yang terproteksi oleh password (Set Database Password) Sat - Sep 2, 2000

Posted by supriyatna in Programming, Windows.
Tags: , , , , ,
add a comment

Sebagai salah satu cara untuk menjaga keamanan data pada Database Access yaitu dengan cara memberikan password terhadap database yang kita buat (Set database Password …). Berikut adalah contoh mengakses database yang sudah terproteksi oleh database password (password yang diberikan pada database adalah ‘sysadmin‘) dengan menggunakan ActiveX Data Access (ADO) dan menampilkannya pada Kontrol MSFlexGrid.

Berikut listing programmnya:

Option Explicit
Dim Conn As New ADODB.Connection
Dim rs As New ADODB.Recordset

Private Sub cmdOK_Click()
  Unload Me
End Sub

Private Sub Form_Load()
Dim i As Integer, nBaris As Integer
Dim LebarJudul
  ' Inisialisasi dari Variable yang akan digunakan

  LebarJudul = Array(400, 550 * 2, 500 * 4, 500 * 4)
  nBaris = 0
  Label1.Caption = "Menampilkan data kedalam MSFlexGrid " & _
    "dari database yang terproteksi oleh password " & _
    "(Set Database Password ...)"

  Set Conn = New ADODB.Connection
  Conn.ConnectionString = _
    "DRIVER={Microsoft Access Driver (*.mdb)}; " & _
    "DBQ=" & App.Path + "\DB_TEST.mdb" & "; pwd=sysadmin"
  Conn.Open
  Set rs = New ADODB.Recordset
  rs.Open "SELECT * FROM USERS", Conn, _
    adOpenDynamic, adLockOptimistic

  With MSFlexGrid1
    .BackColor = &H80000018
    .Cols = rs.Fields.Count + 1
    ' Tulis judul tiap-tiap kolom dari Grid
    For i = 0 To .Cols - 1
      .ColWidth(i) = LebarJudul(i)
    Next i

    For i = 0 To rs.Fields.Count - 1
      .TextMatrix(0, i + 1) = rs.Fields(i).Name
    Next i

    ' Tampilkan data kedalam MSFlexGrid
    Do While Not rs.EOF
      nBaris = nBaris + 1
      .TextMatrix(.Rows - 1, 0) = Format(nBaris, "#.")
      For i = 0 To rs.Fields.Count - 1
        .TextMatrix(.Rows - 1, i + 1) = rs.Fields(i).Value
      Next i
      rs.MoveNext
      .Rows = .Rows + 1
    Loop
  End With

  ' Tutup semua Object dan buang dari memory
  rs.Close
  Set rs = Nothing
  Conn.Close
  Set Conn = Nothing

End Sub

Mengurutkan Data Pada Crystal Report Secara Dinamis Wed - Jun 28, 2000

Posted by supriyatna in Programming, Windows.
Tags: , , ,
add a comment

Pernah kerepotan untuk mengurutkan data pada Crystal Report?, mudah sekali bukan?, Tapi bagaimana jika mengurutkan data secara dinamis? yaitu data diurutkan sesuai dengan pilihan yang ada pada form VB. Contoh: misalkan data diurutkan berdasarkan pilihan SESSION_ID, NAMA atau EMAIL. Biasanya setiap programmer akan selalu membuat beberapa report yang sama namun memiliki kriteria penyortiran yang berbeda. Sekarang silahkan anda gunakan metoda yang lebih baik, yaitu hanya menggunakan satu buah report untuk sortir dengan kriteria yang berbeda.

Pada Crystal Report fasilitas untuk mengurutkan data yaitu dengan menggunakan Group. Jika ingin mengurutkan data berdasarkan SESSION_ID maka harus dibuat Group Session_ID, sedangkan jika ingin diurutkan berdasarkan NAMA maka Group Nama harus dibuat. Lalu bagaimana jika ingin menampilkan data yang sama namun memiliki kriteria pengurutan yang berbeda-beda. Apakah jika ada SEPULUH buah kriteria maka harus dibuat SEPULUH buah report?. Wow! Kalau begitu caranya, membuat Report ternyata benar-benar REPOT.

Sorting data crystal report

Sebetulnya dengan sedikit akal-akalan masalah ini dapat dengan mudah diatasi. Mungkin boleh juga cara ini disebut dengan cara CURANG. Caranya? Betul!… yaitu dengan menggunakan formula agar parameternya dapat dikirim melalui Applikasi VB. Buatlah sebuah group dengan menggunakan FORMULA, misalkan formula SORTING. Agar nilai dari formula SORTING dapat diubah-ubah, secara otomatis FORMULA ini harus merupakan Blank Formula -(Formula yang kosong). Kendalanya yang muncul kemudian adalah, pada Crystal Report GROUP yang berasal dari FORMULA tidak dapat dibuat apabila FORMULA tersebut kosong (Blank Formula). Cara mengatasi masalah ini adalah dengan mengisi Formula SORTING dengan Field sesuka anda, tujuannya hanyalah untuk memancing agar GROUP dapat dibuat berdasarkan Formula.

Setelah GROUP selesai dibuat dengan menggunakan Formula SORTING, hapuslah isi dari formula SORTING atau remark statment yang ada didalam formula tersebut, sehingga formula SORTING menjadi Blank Formula.
NB: Untuk meremak baris pada Crystal Report digunakan tanda Double Slash atau ‘//’

Selanjutnya adalah mengirim parameter ke Crystal Report via Applikasi, yaitu dengan men-setting properti .Formulas( nIndex ). Untuk lebih lengkapnya, perhatikan potongan program dibawah.

Private Sub Form_Load()
  lblKeterangan.Caption = "Program ini digunakan menyortir " & _
   vbCrLf & "data secara dinamis pada Crystal Report " & _
   vbCrLf & "supriyatna@mailandnews.com"
End Sub

Private Sub cmdKeluar_Click()
  Unload Me
End Sub

Private Sub cmdCetak_Click()
Dim strSort As String
Dim strJudul As String

  If opSessionID.Value Or opNama.Value Or _
   opEmail.Value Then

   CrystalReport1.ReportFileName=App.Path + _
     "\sortrptdinamic.rpt"
   CrystalReport1.DataFiles(0) = App.Path + "\DB_TEST.mdb"
   CrystalReport1.DiscardSavedData = True
   CrystalReport1.WindowTitle="Sorting data " & _
     Report secara dinamis"
   CrystalReport1.WindowState = crptMaximized

   If opSessionID.Value = True Then
     strSort = "ToNumber( {USERS.SESSION_ID} )"
     strJudul = "'SORTING DATA BERDASARKAN SESSION_ID'"
   ElseIf opNama.Value = True Then
     strSort = "{USERS.NAMA}"
     strJudul = "'SORTING DATA BERDASARKAN NAMA'"
   ElseIf opEmail.Value = True Then
     strSort = "{USERS.EMAIL}"
     strJudul = "'SORTING DATA BERDASARKAN EMAIL ADDRESS'"
   End If
   CrystalReport1.Formulas(0) = "SORTING=" & strSort
   CrystalReport1.Formulas(1) = "JUDUL=" & strJudul

   CrystalReport1.Action = 2
  Else
   MsgBox "Silahkan anda pilih terlebih dahulu kriteria" & _
     vbCrLf & "pengurutan data", vbExclamation, _
     "supriyatna@mailandnews.com"
  End If
End Sub

Membuat MSFlexGrid agar dapat diedit (Editable) Sun - Jun 25, 2000

Posted by supriyatna in Programming, Windows.
Tags: , , ,
add a comment

Komponen MsFlexGrid memiliki lebih banyak feature dibandingkan dengan Grid / DBGrid standard yang berasal dari Visual Basic. Kelebihan tersebut diantaranya adalah dapat menggabungkan beberapa kolom atau baris (merge cell), dapat menentukan setting yang berbeda untuk setiap sel (cell-nya) dan masih banyak lagi feature yang lainnya. Namun sayang, dari kelebihan yang ada ternyata kemampuan untuk mengedit nilai yang berada pada sel di MsFlexGrid tidak disertakan didalamnya.

Sifatnya yang tidak dapat diedit inilah, yang kadang membuat jengkel dan para programmer, sehingga tidak sedikit programmer berusaha untuk mencara cara lain agar kekurangan ini dapat ditutupi —seperti: mencari komponen baru misalnya— ;-(. Namun dengan sedikit akal-akalan, sepertinya kekesalan anda tidak akan terus berlarut-larut dan andapun akan kembali menyukai VB.

Untuk mengatasi ini, idenya adalah dengan menambahkan komponen lain, yaitu menambahkan Kontrol TextBox yang fungsinya sebagi dump/buffer/tempat penyimpanan sementara yang pada kondisi normal Kontrol TextBox ini tidak terlihat (Properti .visible diset False), dan akan ditampilkan apa bila modusnya “Edit” (Ditandai dengan Even Double Click pada Kontrol MsFlexGrid) dengan mengambil nilai yang ada pada MsFlexGrid kedalam Kontrol TextBox. Nilai yang dikembalikan kedalam MsFlexGrid tergantung dari even KeyPressed pada Kontrol TextBox. ENTER maka nilainya akan dipindahkan kedalam MsFlexGrid, dan ESC jika ingin membatalkan pengeditan. Cukup sederhana bukan?.

Upss…satu masalah lagi sudah teratasi. 😉
Untuk lebih jelasnya, perhatikan potongan dari listing program dibawah ini.

' Grid1     : Kontrol MsFlexGrid
' Text1     : Kontrol TextBox
' Keterangan: Pada contoh, kolom yang dapat diedit hanya kolom
'             ketiga yaitu kolom email, dimana index pada
'             MsFlexGrid bernilai 2.
Option Explicit

Private Sub cmdClose_Click()
  Unload Me
End Sub

Private Sub Form_Load()
  Dim i As Integer
  Grid1.Cols = 3
  Grid1.ColWidth(0) = 400
  Grid1.ColWidth(1) = 2200
  Grid1.ColWidth(2) = 2200
  Label1.Caption = "Form ini digunakan untuk " & _
    "membuat MsFlexGrid agar dapat diedit " & _
    "nilainya. Pada contoh hanya kolom email " & _
    "saja yang dapat diedit." & vbCrLf & _
    "emailto:supriyatna@mailandnews.com"
End Sub

Private Sub Grid1_DblClick()
  If Grid1.Col = 2 Then
    Text1.Top = Grid1.CellTop + Grid1.Top
    Text1.Left = Grid1.CellLeft + Grid1.Left

    Text1.Text = Grid1.Text
    Text1.SelStart = 0
    Text1.SelLength = Len(Text1.Text)

    Text1.Visible = True
    Text1.Height = Grid1.CellHeight
    Text1.Width = Grid1.CellWidth
    Text1.SetFocus
  End If
End Sub

Private Sub Text1_KeyPress(KeyAscii As Integer)
  If KeyAscii = 13 Then
    Grid1.Text = Text1.Text
    Text1.Visible = False
  ElseIf KeyAscii = 27 Then
    Text1.Visible = False
  End If
End Sub

Private Sub Text1_LostFocus()
  Text1.Visible = False
End Sub