stmikbg-dot-com

Informasi Seputar IT

Archive for November, 2008


sp for multirow with xml

kemarin saat ujicoba program SIMRS gw sempat pusing, bagaimana memasukkan banyak baris kedalam stored procedure, akhirnya saya mencoba terik penyatuan beberapa baris menjadi satu baris kemudian baru gw kirim dalam satu parameter kestored procedure. Logikanya seperti dibawah ini

 'Loop for data barang
  mDetailItemBarang = ""
  mItemBarang = ""
  If RsBarangUsg.RecordCount <> 0 Then
   RsBarangUsg.MoveFirst
   While Not RsBarangUsg.EOF
     LSet mItemBarang = Trim(RsBarangUsg.Fields("Kode Barang").Value)
     mDetailItemBarang = mDetailItemBarang & mItemBarang
     LSet mItemBarang = Trim(RsBarangUsg.Fields("Qty").Value)
     mDetailItemBarang = mDetailItemBarang & mItemBarang
     LSet mItemBarang = Trim(RsBarangUsg.Fields("Harga Satuan").Value)
     mDetailItemBarang = mDetailItemBarang & mItemBarang
     LSet mItemBarang = Trim(RsBarangUsg.Fields("Kode Dokter").Value)
     mDetailItemBarang = mDetailItemBarang & mItemBarang
     RsBarangUsg.MoveNext
   Wend
  End If

  If Len(mDetailItemBarang) <> 0 Then
    Set mParameter = mCOMM.CreateParameter
    mParameter.Name = "@mDetailItemBarang"
    mParameter.Type = adVarChar
    mParameter.Size = Len(mDetailItemBarang)
    mParameter.Direction = adParamInput
    mParameter.Value = mDetailItemBarang
    mCOMM.Parameters.Append mParameter
  Else
   'Untuk situasi dimana tidak ada data pemakaian barang
   mDetailItemBarang = " "
   Set mParameter = mCOMM.CreateParameter
   mParameter.Name = "@mDetailItemBarang"
   mParameter.Type = adVarChar
   mParameter.Size = Len(mDetailItemBarang)
   mParameter.Direction = adParamInput
   mParameter.Value = mDetailItemBarang
   mCOMM.Parameters.Append mParameter
  End If

Kode diatas untuk dalam aplikasi, kemudian untuk kode berikutnya kita buat dalam stored procedure seperti dibawah ini

 -- untuk data pemakaian barang
   if len(@mDetailItemBarang) > 1
     begin
      -- satu baris mengalokasi 30 karakter (3 * 10)
      -- data pemakaian barang
      set @mLOOP = 0
      set @mTOTAL_LOOP = ceiling(len(@mDetailItemBarang)/30)

      while @mLOOP <= @mTOTAL_LOOP
        begin
         set @Kode_Barang = substring(@mDetailItemBarang, @mLOOP * 30 + 1, 10)
         set @Qty = substring(@mDetailItemBarang, @mLOOP * 30 + 11,10)
         set @cHarga_Jual = substring(@mDetailItemBarang, @mLOOP * 30 + 21,10)
         set @Harga_Jual =  convert(money,@cHarga_Jual)
         set @mLOOP = @mLOOP + 1

         Insert Into Pemakaian_Barang ([Kode Data],[Register Kunjungan],
                     [Kode Barang],[Qty],[Harga Jual],[Kode Jenis],[Kode Unit])
         values (@Nomor_Urut_Usg, @Register_Kunjungan, @Kode_Barang,
                  @Qty, @Harga_Jual, @Kode_Jenis, @Kode_Unit)

         set @mERROR_NO = @@ERROR
         if @mERROR_NO <> 0
           begin
             Rollback transaction
             set @mERROR_MESSAGE = ' > SP 2 <  Error pada pengisian data Pemakaian Barang'
             return (2)
           End
        End
     End

Tapi logika seperti diatas memiliki kelemahan untuk baris yang banyak, karena keterbatasan panjang parameter yang hanya 5000 karakter, tentu akan mengakibatkan overflow. Lantas solusi yang terbaik apa? Kita akan menggunakan xml untuk menyimpan banyak baris dalam stored procedure. (more…)

kill process dgn vb dan wmi

gara-gara kemarin kena worm yg bikin sakit hati, mau kill prosesnya tp malah tools untuk pake kill kena kill duluan. Terus kenapa tidak kepikiran, kenapa tidak buat sendiri kode yang bisa ngekill proses. Kalo dipikir juga caranya bagaimana?. Setelah dipikir-pikir kemarin kan sempat bahas masalah WMI, kenapa tidak memanfaatkan WMI aja untuk melakukan kill proses.

Untuk kodenya bisa dilihat dibawah ini

Public Sub KillProcess(byval processName as string)
        On Error GoTo ErrHandler
         Dim oWMI
         Dim ret
         Dim sService
         Dim oWMIServices
         Dim oWMIService
         Dim oServices
         Dim oService
         Dim servicename
          Set oWMI = GetObject("winmgmts:")
          Set oServices = oWMI.InstancesOf("win32_process")
          For Each oService In oServices
                serviceame = LCase(Trim(CStr(oService.Name) & ""))
                 If InStr(1, servicename, LCase(processName), vbTextCompare) > 0 Then
                    ret = oService.Terminate
                 End If
          Next
          Set oServices = Nothing
          Set oWMI = Nothing
ErrHandler:
  Err.Clear
End Sub

Untuk menggunakannya cukup ketik command KillProcess “winamp”

Incoming search terms:

  • kill process vb6
  • kill proses
  • vb kill process
  • vb kill
  • kill process with wmi vb6
  • kill proses dengan vb
  • wmi terminate process vb6
  • proses VB
  • vb 6 killl proses
  • kill application from vb6