10 January 2017

VB6: Temporary Recordset


Temporary recordset bisa digunakan sebagai tempat penyimpanan sementara sebelum data disimpan ke database. Dengan menggunakan recordset ini kita dapat mengolah, memfilter, dan menampilkan ke datagrid tanpa koneksi langsung dengan database.

Di awal kita perlu menambahkan reference ADO library.

Pilih salah satu versi, saya menggunakan versi 2.7. Centang kemudian klik OK.

Persiapkan UI sebagai berikut:
Code berikut untuk mengatur caption dan text UI yang ditempatkan pada event form_load:
'Setting UI Controls
Label1.Caption = "Kode"
Label2.Caption = "Nama"
Text1.Text = ""
Text2.Text = ""
Command1.Caption = "Add"


Pada even form_load juga dipanggil sub untuk setting awal recorset dan menampilkannya dalam grid, jangan lupa untuk mendeklarasikan recordset (rsTemp) di luar sub agar dapat dipanggil dari seluruh event/sub/function yang ada dalam form:
Dim rsTemp As ADODB.Recordset

Sub Data_Temp()

Set rsTemp = New ADODB.Recordset

rsTemp.Fields.Append "kode", adVarChar, 10, adFldIsNullable
rsTemp.Fields.Append "nama", adVarChar, 50, adFldIsNullable

rsTemp.Open
Set DataGrid1.DataSource = rsTemp

End Sub


Jadi code yang ada di event form_load adalah sebagai berikut:
Private Sub Form_Load()
'Setting UI Controls
Label1.Caption = "Kode"
Label2.Caption = "Nama"
Text1.Text = ""
Text2.Text = ""
Command1.Caption = "Add"

'panggil setting data temporary
Data_Temp
End Sub


Untuk menambahkan record/data pada temporary recordset menggunakan code sebagai berikut:
With rsTemp
    .AddNew
    !kode = Text1.Text
    !nama = Text2.Text
    .Update
End With


Proses menambahkan record ada di event Command1_Click, dimana setelah menambahkan record melalui input textbox maka kita perlu menambahkan code untuk membersihkan textbox-textbox tersebut.
Kita buat dalam sub tersendiri.
Sub Clear_Control()
Text1.Text = ""
Text2.Text = ""
End Sub


Jadi code yang ada di event command1_click yaitu:
Private Sub Command1_Click()
With rsTemp
    .AddNew
    !kode = Text1.Text
    !nama = Text2.Text
    .Update
End With

'mengapus kontrol input setelah penambahan data
Clear_Control
End Sub


Setelah selesai dengan UI dan code, kita coba run program yang baru saja kita buat.

Data yang ditambahkan akan ditampilkan di grid.


Kode selengkapnya:
Option Explicit
Dim rsTemp As ADODB.Recordset

Sub Data_Temp()

Set rsTemp = New ADODB.Recordset

rsTemp.Fields.Append "kode", adVarChar, 10, adFldIsNullable
rsTemp.Fields.Append "nama", adVarChar, 50, adFldIsNullable

rsTemp.Open
Set DataGrid1.DataSource = rsTemp

End Sub

Sub
Clear_Control()
Text1.Text = ""
Text2.Text = ""
End Sub

Private Sub
Form_Load()
'Setting UI Controls
Label1.Caption = "Kode"
Label2.Caption = "Nama"
Text1.Text = ""
Text2.Text = ""
Command1.Caption = "Add"

'panggil setting data temporary
Data_Temp
End Sub


Private Sub Command1_Click()
With rsTemp
    .AddNew
    !kode = Text1.Text
    !nama = Text2.Text
    .Update
End With

'mengapus kontrol input setelah penambahan data
Clear_Control
End Sub




Click here if you like this article.


20 December 2016


Query yang satu ini sebenernya rani ga paham-paham banget dan ga apal-apal banget juga. Tapi beberapa kali perlu untuk menampilkan beberapa baris menjadi 1 baris di kolom yang sama. Jadi buat catatan aja ^_^

Tabel contoh yang akan digunakan adalah table variable sebagai berikut:
DECLARE @Students TABLE (
    [StudentID] char(5) NOT NULL,
    [StudentName] nvarchar(15) NOT NULL
)

INSERT INTO @Students VALUES
    ('S0001', 'Rani'),
    ('S0001', 'Novi'),
    ('S0002', 'Via'),
    ('S0002', 'Ani'),
    ('S0003', 'Irsan')

SELECT * FROM @Students

Dan berikut ini contoh query untuk menyatukan beberapa baris ke dalam satu baris:
SELECT t.StudentID,
  STUFF(ISNULL((SELECT ', ' + x.StudentName
          FROM @Students x
          WHERE x.StudentID = t.StudentID
      GROUP BY x.StudentName
          FOR XML PATH (''), TYPE).value('.','VARCHAR(max)'), ''), 1, 2, '')
          AS [Tanpa Koma di Awal],
  ISNULL((SELECT ', ' + x.StudentName
          FROM @Students x
          WHERE x.StudentID = t.StudentID
      GROUP BY x.StudentName
          FOR XML PATH (''), TYPE).value('.','VARCHAR(max)'), '')
          AS [Dengan Koma di Awal Jika Ada Data]
FROM @Students t
GROUP BY t.StudentID

Semoga bisa bermanfaat juga buat readers..

Click here if you like this article.


28 October 2016

SQL Server: Filter Data Case Sensitive


Query SQL Server pada WHERE clause normalnya tidak case sensitive alias hurup besar atau kecil ga masalah sama aja. Tapi sewaktu-waktu kita bisa perlu memfilter data yang case sensitive dimana huruf kecil atau besar dianggap berbeda.

Caranya adalah dengan menambahkan COLLATE SQL_Latin1_General_CP1_CS_AS pada WHERE Clause. Untuk lebih jelasnya dapat dilihat pada contoh berikut.

Contoh data tabel (tblAnggota):

Query:
SELECT * FROM tblAnggota
WHERE Kota = 'Bandung'  

COLLATE SQL_Latin1_General_CP1_CS_AS

Hasil:







Click here if you like this article.


27 June 2016

VB.NET: Mengubah Ukuran Gambar (Resize Image)


Saat membangun sebuah aplikasi tidak jarang kita berurusan dengan penyimpanan gambar. Dan untuk menyimpan gambar secara efektif kadang kita perlu mengubah ukuran supaya lebih kecil. Nah kesempatan ini kita akan membuat contoh bagaimana sebuah file gambar diperkecil dengan menggunakan code VB.NET.

Proses pengubahan ukuran pada contoh kali ini, ukuran akan diubah dengan pilihan:
- Melalui Persentasi
- Melalui Width (lebar gambar) --> height otomatis menyesuaikan
- Melalui Height (tinggi gambar)--> width otomatis menyesuaikan

Mengapa Width dan Height tidak di set keduanya, supaya ratio gambar tetap terjaga, alias ga gepeng gituh...

UI:
Code:

Imports System.Drawing.Imaging

Public Class Form1

  Private Sub Form1_Load(ByVal sender As System.Object, _
                        
ByVal e As System.EventArgs) Handles MyBase.Load

      PictureBox1.SizeMode = PictureBoxSizeMode.StretchImage

      PictureBox1.BorderStyle = BorderStyle.FixedSingle
      Label1.Text = "Image Source"
      Label2.Text = "Resize Type"
      Label3.Text = "Size to"
      Button1.Text = "Browse..."
      Button2.Text = "Resize"
      With ComboBox1
          .Items.Add("Percentage")
          .Items.Add("Width Scale")
          .Items.Add("Height Scale")
          .SelectedIndex = 0
      End With
      'default value of scale
      TextBox2.Text = 50

  End Sub

  Private Sub
ComboBox1_SelectedIndexChanged(
ByVal sender As System.Object, _
         
ByVal e As System.EventArgs) Handles ComboBox1.SelectedIndexChanged

      If ComboBox1.SelectedIndex = 0 Then
          Label4.Text = "%"
      Else
          Label4.Text = "px"
      End If

  End Sub


  Public Sub ResizeImage(
ByVal ImageSource As String, _
                       
ByVal ResizeType As Integer, ByVal scale As Single, _
                       
ByVal ResultPath As String)

      'source bitmap.
      Dim imgSource As New Bitmap(ImageSource)

      'resize type
      Select Case ResizeType
          Case 0 'percentage
              scale = scale / 100
         
Case 1 'width px
              scale = scale / (imgSource.Width)
         
Case 2 'height px
              scale = scale / (imgSource.Height)
      End Select

      'scale factor
      Dim sclFactor As Single = Single.Parse(scale)

      'bitmap for result
      Dim imgResult As New Bitmap( _
          CInt(imgSource.Width * sclFactor), _
          CInt(imgSource.Height * sclFactor))

      'Graphics object for result
      Dim grResult As Graphics = Graphics.FromImage(imgResult)

      'source to result bitmap
      grResult.DrawImage(imgSource, 0, 0, _
          imgResult.Width + 1, _
          imgResult.Height + 1)

      'save result
      imgResult.Save(ResultPath, ImageFormat.Jpeg)

  End Sub


  Private Sub
Button1_Click(
ByVal sender As System.Object, _
             
ByVal e As System.EventArgs) Handles Button1.Click

      With OpenFileDialog1
          .FileName = String.Empty
          .InitialDirectory = "C:\"
          .Title = "Open Image File"
          'filter image file
          .Filter = "Image Files |*.jpg;*.jpeg;*.png;*.bmp"
      End With
      Dim
result
As DialogResult = OpenFileDialog1.ShowDialog()
      If result = Windows.Forms.DialogResult.OK Then
          Try
              TextBox1.Text = OpenFileDialog1.FileName
              PictureBox1.ImageLocation = OpenFileDialog1.FileName
          Catch ex As Exception
              MsgBox("Error : " & ex.Message)
          End Try
      End If
  End Sub


  Private Sub Button2_Click(
ByVal sender As System.Object, _
             
ByVal e As System.EventArgs) Handles Button2.Click

      SaveFileDialog1.Filter = "Image Files |*.jpg;*.jpeg;*.png;*.bmp"
      If SaveFileDialog1.ShowDialog = Windows.Forms.DialogResult.OK Then

          ResizeImage(TextBox1.Text, ComboBox1.SelectedIndex, _
                      TextBox2.Text, SaveFileDialog1.FileName)

          MsgBox("Image resized.")

      End If

  End Sub

End Class


Runtime:
Saat aplikasi pertama berjalan, tekan tombol Browse... untuk memilih file gambar.
 Pilih file gambar.
 Pilih tipe resize.
 Kemudian klik tombol Resize, dan tentukan tempat penyimpanan hasil perubahan ukuran.
 Jika berhasil akan muncul message berikut.
 Hasil ukuran dan dimensi file.




Click here if you like this article.


13 June 2016

VB.NET: Mengatur Default Printer


Klo kita membuat aplikasi transaksi yang langsung mengirim data ke printer (print slip) seperti pada aplikasi kasir (POS), aplikasi akan langsung melakukan perintah print/cetak ke default printer sehingga tidak perlu memilih printer lagi saat mencetak slip.

Sebenarnya setting default printer mudah saja dengan masu ke control panel, Device and Printer seperti contoh gambar di bawah ini (window 8). Kita tinggal pilih printer mana yang ingin menjadi default, klik kanan kemudian pilih Set as default printer. Tetapi aplikasi akan lebih user friendly jika default printer dapat langsung di setting dalam aplikasi tersebut.

Karenanya dalam kesempatan kali ini Rani mau buat sebuah contoh code untuk setting printer default dengan code VB.NET.

UI

Code:
Imports System.Drawing.Printing

Public Class Form1

    Private Sub Form1_Load(ByVal sender As System.Object, _
                ByVal e As System.EventArgs) Handles MyBase.Load

        Dim strInstalledPrinters As String
        Dim prntDoc As New PrintDocument

        'cek apakah ada printer terinstall
        If PrinterSettings.InstalledPrinters.Count = 0 Then
            MsgBox("No printer installed")
            Exit Sub
        End If


        'tampilkan printer terinstall di list combobox
        For Each strInstalledPrinters In PrinterSettings.InstalledPrinters
            ComboBox1.Items.Add(strInstalledPrinters)
        Next strInstalledPrinters

        'tampilkan default printer saat ini di text combobox
        ComboBox1.Text = prntDoc.PrinterSettings.PrinterName

        Button1.Text = "Set Default Printer"


    End Sub

    'Fungsi untuk mengatur printer sebagai default
    Function SetDefaulPrinter(ByVal strPrinterName As String) As Boolean
        Dim strCurrPrinter As String
       
Dim WsNetwork As Object
       
Dim prntDoc As New PrintDocument

        strCurrPrinter = prntDoc.PrinterSettings.PrinterName
        WsNetwork = Microsoft.VisualBasic.CreateObject("WScript.Network")

        Try
            WsNetwork.SetDefaultPrinter(strPrinterName)
            prntDoc.PrinterSettings.PrinterName = strPrinterName

            'set default jika nama printer valid (terinstall)
            If prntDoc.PrinterSettings.IsValid Then
                Return True
            Else
                WsNetwork.SetDefaultPrinter(strCurrPrinter)
                Return False
            End If

        Catch ex As Exception
            WsNetwork.SetDefaultPrinter(strCurrPrinter)
            Return False
        Finally
            WsNetwork = Nothing
            prntDoc = Nothing
        End Try
    End Function

    Private Sub Button1_Click(ByVal sender As System.Object, _
                ByVal e As System.EventArgs) Handles Button1.Click
        If SetDefaulPrinter(ComboBox1.Text) = True Then
            MsgBox("Printer default menjadi " & ComboBox1.Text)
        Else
            MsgBox("Nama Printer " & ComboBox1.Text & " tidak valid!")
        End If
    End Sub

End Class


Runtime:
List printeryang tersedia (terinstall) akan tampil di list combobox.
Pilih salah satu item list kemudian klik tombo "Set Default Printer"
Kita lihat hasil nya di device and printer, default printer akan berubah sesuai pilihan.


Click here if you like this article.