stmikbg-dot-com

Informasi Seputar IT

Archive for the ‘Programing’


membuat fungsi konversi tanggal sendiri (yyyy-mm-dd)

Terkadang menjengkelkan ketika kita menyimpan nilai date ke SQL Server 2008, sering sekali muncul error kesalahan konversi tanggal dari SQL Server.

Apalagi ketika kita lagi pusing-pusingnya codeing, error yang sebenarnya sederhana kelihatannya rumit sekali, ini pengalaman saya, saya membutuhkan beberapa hari untuk debuging untuk bisa mentrace letak kesalahan pada code saya.

Alaminya sebuah database server menyimpan format tanggal dalam format (yyyy-mm-dd), nah disini letak kekeliruan kita, biasanya kita langsung aja mengirim data dengan type date tanpa terlebih dahulu kita konversi keformat default database.

Biasanya kita sering menggunakan fungsi cdate() untuk merubah data type string ke data type date. Memang data itu lsg kebentuk date tp formatnya biasanya mengikuti format regional setting yang aktif saat itu dari komputer yang digunakan, namun ketika kita kirim dalam bentuk query sering sekali terjadinya Run Time Error. Ok, langsung saja kita intip fungsi sederhana yang saya bikin ini, logikanya sebelum sebuah karakter tanggal dimasukkan ke query kita terlebih dahulu melakukan konversi formatnya terlebih dahulu, hasil dari konversi format ini yang akan dimasukkan kequery. Untuk lebih jelasnya bisa dilihat dicode dibawah ini

Public Shared Function ConvertTanggal(ByVal dtTanggal As System.Windows.Forms.DateTimePicker) As String
        Dim cBulan As String = ""
        Dim cTanggal As String = ""
        Dim cTanggalMasuk As String = ""
        If Len(dtTanggal.Value.Month) = 1 Then
            cBulan = "0" & dtTanggal.Value.Month.ToString.Trim
        Else
            cBulan = dtTanggal.Value.Month.ToString.Trim
        End If

        If Len(dtTanggal.Value.Day) = 1 Then
            cTanggal = "0" & dtTanggal.Value.Day.ToString.Trim
        Else
            cTanggal = dtTanggal.Value.Day.ToString.Trim
        End If
        ConvertTanggal = dtTanggal.Value.Year & "-" & cBulan.Trim & "-" & cTanggal.Trim
    End Function

Incoming search terms:

  • cara menyimpan tipe data date di database sqlserver di vbnet
  • membuat konversi vb net
  • YYYY-MM-DD

atasi overload saat add control dipanel vb.net

Saat kita memanggil sebuah UserControl Class (System.Windows.Forms) pada sebuah panel control jika kita tidak mendeklarasikan user control diatas kelas, tetapi dideklarasi saat control tersebut dipanggil, pada .net user control tersebut akan dimuat berulang-ulang dalam memory. Bisa dilihat pada code dibawah ini

 Private Sub btnEntryPegawai_ItemClick()  Handles btnEntryPegawai.ItemClick
            Dim ctrlcHRD As New ctrlHRD
            Me.pnlUtama.Controls.Add(ctrlcHRD)
            ctrlcHRD.Visible = True
            ctrlcHRD.BringToFront()
 End Sub

Jika logic yg digunakan seperti diatas, control akan dimuat berulang-ulang saat btnEntryPegawai mendapatkan even click. Solusinya bisa kita mendeklarasikan control keseluruhan diatas kelas ( saat form diload) dengan konsekuensi load formnya agak lama. Lantas jika tidak ingin proses load form terganggu kita bisa bikin solusi seperti kode dibawah ini

Private Sub btnEntryPegawai_ItemClick() Handles btnEntryPegawai.ItemClick
        FindControl("ctrlHRD", pnlUtama)
        If Not lFound Then
            Dim ctrlcHRD As New ctrlHRD
            Me.pnlUtama.Controls.Add(ctrlcHRD)
            ctrlcHRD.Visible = True
            ctrlcHRD.BringToFront()
        Else
            Me.pnlUtama.Controls(nIndex).BringToFront()
        End If
    End Sub

Cari dulu nama control dimemory, jika belum ada bisa dipanggil untuk dimuat dimemory, tetapi jika sudah ada tinggal kita show kembali. Ini fungsi untuk mencari control yang telah dipanggil dimemory, silahkan dikembangkan lagi

Public lFound As Boolean
    Public nIndex As Integer
    Public Sub FindControl(ByVal sControlName As String, ByVal cPanel As Windows.PanelControl)
        lFound = False
        Dim nCount As Integer
        nCount = 0
        For Each Control In cPanel.Controls
            If sControlName.Trim = Control.Name.ToString.Trim Then
                lFound = True
                nIndex = nCount
            End If
            nCount = nCount + 1
        Next
    End Sub

Sending Key antara vb.6 dan vb.net

Saat ini saya sudah mulai konsen untuk development software dilingkungan vb.net, dan sebelumnya saya masih menggunakan vb.6 environment, melihat perkembangan dunia komputer sekarang ini, dipicu sejak dirilisnya windows vista oleh microsoft kemudian microsoft merelease Os terbarunya yakni windows 7 jadi arah bisnis software kedepan akan mengalami perubahan base dan metode pemrograman.
Secara bisnis, aplikasi yg masih menggunakan core COM ataupun COM+ akan ketinggalan jauh, baik dari segi kompatibilitas dengan sistem operasi maupun dari segi teknologinya, yah mau tidak mau para pengembang software harus segera melakukan migrasi keframework yang lebih canggih, dan kebetulan framework yang saya pilih yakni .NET Framework, memang terhitung terlambat bagi saya untuk segera migrasi, tapi masih lebih baik daripada tidak sama sekali.

Saat melakukan migrasi code dari VB.6 ke VB.NET banyak sekali penyesuaian-penyesuaian yang harus saya lakukan, baik dari code maupun konsep dari pemerograman itu sendiri, contoh kecilnya seperti judul diatas, misalnya saat kita ingin memanfaatkan event keypress pada control textbox, jika key yang ditekan adalah tombol “ENTER” otomatis program akan mengirim key “TAB” untuk loncat kecontrol lainnya, tetapi jika selain dari itu aplikasi harus melakukan converting kehuruf besar (Misalnya ditekan huruf ‘a’ maka akan menjadi huruf ‘A’).

Dari permasalahan diatas, kita akan membandingkan codenya.

'VB.6 Code
Private Sub TxtKodeBarang_KeyPress(KeyAscii As Integer)
If KeyAscii = 13 Then
  SendKeys "{Tab}"
Else
  KeyAscii = Asc(UCase(Chr(KeyAscii)))
End If
End Sub

Bandingkan dengan kode VB.NET dibawah ini

Private Sub TxtKodeBarang_KeyPress(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles TxtKodeBarang.KeyPress
        If Asc(e.KeyChar.ToString) = 13 Then
            SendKeys.Send(vbTab)
        Else
            e.KeyChar = UCase(e.KeyChar)
        End If
 End Sub

Sama sekali berbeda dari segi kode maupun konsepnya, dan masih banyak lagi konversi kode yang harus saya lakukan, yah pelan-pelan tapi pasti lah. Yuk Majulah Dunia IT Indonesia.

Generate SN dgn trigger CPU ID

Ide ini tercipta saat ngobrol santai bareng broklyn aka Piter salah seorang programer dari miSolusi, kemarin tim development berhasil mendapatkan deal disebuah perusahaan retail komputer untuk develop POSnya, nah setelah proses instalasi, ternyata software yang dikembangkan ini bisa diduplikasi kekomputer lain menggunakan Norton-GHOST, wah kalo seperti ini bisa-bisa aplikasi yang kita jual didistribusikan tanpa sepengetahuan kita. Akhirnya kami mencoba menganalisa kemungkinan proteksi yang bisa diimplementasikan. Akhirnya kami mengambil keputusan untuk menggunakan CPU ID sebagai patokan Serial Number Softwarenya, dengan metode seperti ini software tidak akan bisa diduplikasi kekomputer lainnya.

Ok, sekarang kita akan membahas bagaimana cara mendapatkan sebuah CPU ID menggunakan kode visual basic, dulu saya pernah memposting tentang WMI (Windows Management Instrument) karena sekarang code yang kita bahas menggunakan WMI untuk mendapatkan nilai dari CPU ID, Yah tidak mau berkata panjang lebar, langsung aja kita mengintip code programnya. Codenya seperti Dibawah ini, agak panjang soalnya saya langsung COPAS dari formnya, dipilah sendiri ya lagi malas :)

Private asCpuPaths() As String
Private m_objCPUSet As SWbemObjectSet
Private m_objWMINameSpace As SWbemServices
Option Explicit

Private Sub cmdDone_Click()
Unload Me
End Sub

Private Sub Form_Load()
Dim oCpu As SWbemObject 'WMI Object, in this case, local CPUs
Dim sPath As String, sCaption As String

Dim lElement As Long
ReDim asCpuPaths(0) As String

On Error GoTo ErrorHandler

'Get Default NameSpace, which will be the one for the local machine
Me.Move (Screen.Width - Me.Width) / 2, (Screen.Height - Me.Height) / 2
Set m_objWMINameSpace = GetObject("winmgmts:")
lstCPU.Clear

'Get CPU set
Set m_objCPUSet = m_objWMINameSpace.InstancesOf("Win32_Processor")
sCaption = m_objCPUSet.Count & " processor"
If m_objCPUSet.Count <> 1 Then sCaption = sCaption & "s"
sCaption = sCaption & " detected on this machine"
lblTitle.Caption = sCaption
'Populate list box with CPU names

For Each oCpu In m_objCPUSet
     With oCpu
        sPath = .Path_ & ""
            If sPath <> "" Then
                lstCPU.AddItem .Name
                'save path to array, so on machines with multiple CPUs,
                'each can be identified and their info loaded into text box

                lElement = IIf(asCpuPaths(0) = "", 0, UBound(asCpuPaths) + 1)
                ReDim Preserve asCpuPaths(lElement) As String
                asCpuPaths(lElement) = sPath
            End If
     End With
Next
If lstCPU.ListCount <> 0 Then lstCPU.ListIndex = 0
CleanUp:
 Set oCpu = Nothing
 Exit Sub
ErrorHandler:
 MsgBox "CPU Information could not be displayed due to the following error: " & Err.Description, , "WMI  Demo  Failed"
GoTo CleanUp
End Sub

Private Sub Form_Unload(Cancel As Integer)
Set m_objCPUSet = Nothing
Set m_objWMINameSpace = Nothing
End Sub

Private Sub lstCPU_Click()
Dim oCpu As SWbemObject
'Refer to SDK documentation for more detail about each of these properties
Dim sInfoString As String
On Error Resume Next
Set oCpu = m_objCPUSet(asCpuPaths(lstCPU.ListIndex))
With oCpu
    sInfoString = "Description: " & .Description & vbCrLf
    sInfoString = sInfoString & "Processor ID: " & .ProcessorID & vbCrLf
    sInfoString = sInfoString & "Status: " & .Status & vbCrLf
    sInfoString = sInfoString & "Manufacturer: " & .Manufacturer & vbCrLf
    sInfoString = sInfoString & "Availability: " & AvailabilityToString(.Availability) & vbCrLf
    sInfoString = sInfoString & "Load Percentage: " & .LoadPercentage & vbCrLf
    sInfoString = sInfoString & "Current Clock Speed: " & .CurrentClockSpeed & " MHz" & vbCrLf
    sInfoString = sInfoString & "Maximum Clock Speed: " & .MaxClockSpeed & vbCrLf
    sInfoString = sInfoString & "Level 2 Cache Size: " & .L2CacheSize & vbCrLf
    sInfoString = sInfoString & "Level 2 Cache Speed: " & .L2CacheSpeed & vbCrLf
    sInfoString = sInfoString & "Power Management Supported: " & .PowerManagementSupported
End With
txtCpu.Text = sInfoString
End Sub

'Conversions from code to string were developed
'based on information in WMI SDK documentation
Private Function AvailabilityToString(Code As Integer) As String
Dim sAns As String

Select Case Code
    Case 1, 2
        sAns = "Unknown"
    Case 3
        sAns = "Running/Full Power"
    Case 4
        sAns = "Warning"
    Case 5
        sAns = "In Test"
    Case 6
        sAns = "Not Applicable"
    Case 7
        sAns = "Power Off"
    Case 8
        sAns = "Off Line"
    Case 9
        sAns = "Off Duty"
    Case 10
        sAns = "Degraded"
    Case 11
        sAns = "Not Installed"
    Case 12
        sAns = "Install Error"
    Case 13
        sAns = "Power Save - Unknown"
    Case 14
        sAns = "Power Save - Low Power Mode"
    Case 15
        sAns = "Power Save - Standby"
    Case 16
        sAns = "Power Cycle"
    Case 17
        sAns = "Power Save - Warning"
    Case Else
        sAns = "Unknown"
End Select
AvailabilityToString = sAns
End Function

Incoming search terms:

  • proteksi aplikasi visual basic processorid
  • sn cpu

Transformasi data dari MySQL ke MSSQL

Berhari-hari saya coba browsing diinternet untuk mencari software yang bisa melakukan transformasi data dari MySQL Ke MSSQL tapi tetap saja tidak ketemu, saya mencoba langsung dari enterprise managernya MSSQL sapa tau ada option IMPORT dari Enggine MySQL tetap saja nihil.. Benar-benar Microsoft anti Open Source ya, sampai masalah kompatibilitas hal sekecil ini tidak diincludekan. Sebenarnya banyak terdapat software-software untuk melakukan transformasi ini, tapi terkadang transformasi yang dilakukan ini sering terjadi antar table dengan field yang berbeda. Misalnya seperti kasus yang saya alami ini. Seminggu ini saya mencoba melakukan transformasi tabel ICD ( International Code Of Disease), Berhubung struktur tabel yang ada dari Tabel Sumber ( MySQL) berbeda dengan Struktur Tabel Tujuan ( MSSQL) maka saya terpaksa membuat sendiri tools kecil untuk melakukan proses transformasi ini.
data_transform

Model tools yang saya buat bisa dilihat pada screenshot diatas, sekarang kita akan membahas panjang lebar mulai dari proses transformasi, source code, sampai keverifikasi data transformnya, apakah ada data yang lost saat transformasi atau tidak.