Home > Visual Basic > Mengeset properties MaxLength TextBox secara otomatis

Mengeset properties MaxLength TextBox secara otomatis

June 24, 2010

Salah satu cara untuk memvalidasi inputan berupa TextBox dari user adalah dengan membatasi jumlah input sesuai dengan lebar field/kolom yang kita definisikan pada saat pembuatan struktur tabel.

Tentunya akan sedikit membosankan dan melelahkan jika kita akan membuat tampilan seperti form-form berikut :

kemudian mengeset properties MaxLength secara manual tentu pekerjaan yang berisiko tinggi ha ha ha😀, belum lagi jika terjadi perubahan lebar field/kolom pada struktur tabel.

Untuk mengimplementasikan teori diatas, maka kita membutuhkan 2 buah kelas/class yang saya beri nama clsAttribut dan clsAutoMaxLength.

Saya juga pernah menulis artikel sederhana bagai mana membuat kelas/class di Visual Basic 6.

Berikut adalah kode lengkap untuk clsAttribut

Option Explicit

Private mFieldName  As String
Private mObjTextBox As TextBox

Public Property Let fieldName(ByVal vData As String)
    mFieldName = vData
End Property
Public Property Get fieldName() As String
    fieldName = mFieldName
End Property

Public Property Let objTextBox(ByVal vData As TextBox)
    Set mObjTextBox = vData
End Property
Public Property Get objTextBox() As TextBox
    Set objTextBox = mObjTextBox
End Property

dan dibawah ini adalah kode clsAutoMaxLength

Option Explicit

Private mFormName   As Form
Private mCol        As Collection
Private mTableName  As String

Public Property Let tableName(ByVal vData As String)
    mTableName = vData
End Property
Public Property Get tableName() As String
    tableName = mTableName
End Property

Public Property Let formName(ByVal vData As Form)
    Set mFormName = vData
End Property
Public Property Get formName() As Form
    Set formName = mFormName
End Property

Private Property Get getColumns(ByVal indexKey As Long) As clsAttribut
    Set getColumns = mCol(indexKey)
End Property

Private Function isFieldExists(ByVal fieldName As String, ByRef textBoxName As String) As Boolean
    Dim objAttributs    As clsAttribut
    Dim i               As Integer

    Set objAttributs = New clsAttribut
    For i = 1 To mCol.Count
        Set objAttributs = getColumns(i)
        If LCase(objAttributs.fieldName) = LCase(fieldName) Then
            textBoxName = objAttributs.objTextBox.Name
            isFieldExists = True

            Exit For
        End If
    Next i
    Set objAttributs = Nothing
End Function

Private Function isTableExists() As Boolean
    Dim rs      As ADODB.Recordset
    Dim strSql  As String

    On Error GoTo errHandle

    strSql = "SELECT * FROM " & tableName & ""
    Set rs = New ADODB.Recordset
    rs.Open strSql, conn, adOpenForwardOnly, adLockReadOnly
    rs.Close
    Set rs = Nothing

    isTableExists = True
    Exit Function
errHandle:
    isTableExists = False
End Function

Public Sub addAttributs(ByVal fieldName As String, ByVal objTextBox As TextBox)
    Dim objNewMember As clsAttribut

    Set objNewMember = New clsAttribut
    objNewMember.fieldName = fieldName
    objNewMember.objTextBox = objTextBox

    mCol.Add objNewMember
    Set objNewMember = Nothing
End Sub

Public Sub autoMaxLength()
    Dim rs              As ADODB.Recordset
    Dim ctl             As Object

    Dim strSql          As String
    Dim textBoxName     As String

    Dim i               As Integer

    If isTableExists Then
        strSql = "SELECT * FROM " & tableName & ""
        Set rs = New ADODB.Recordset
        rs.Open strSql, conn, adOpenForwardOnly, adLockReadOnly
        For i = 0 To rs.Fields.Count - 1 'perulangan sejumlah field
            'bandingkan field yg diinput manual dg yang di table
            If isFieldExists(rs.Fields(i).Name, textBoxName) Then
                'ulang sebanyak komponen yg ada di form
                For Each ctl In formName.Controls
                    'bandingkan textbox yg ada di form dg yg diinput manual
                    If TypeName(ctl) = "TextBox" And ctl.Name = textBoxName Then
                        ctl.MaxLength = rs.Fields(i).DefinedSize 'set MaxLength
                        Exit For
                    End If
                Next
            End If
        Next i
        rs.Close
        Set rs = Nothing

    Else
        MsgBox "Nama tabel salah", vbExclamation, "Peringatan"
    End If
End Sub

Private Sub Class_Initialize()
    Set mCol = New Collection
End Sub

Private Sub Class_Terminate()
    Set mCol = Nothing
End Sub

Contoh penggunaan ke dua kelas diatas sangatlah gampang cukup kita tambahkan 1 Form dan beberapa komponen TextBox, selanjutnya pada event Form_Load ketikkan kode berikut :

Private Sub Form_Load()
    Dim obj As clsAutoMaxLength

    Set obj = New clsAutoMaxLength
    With obj
        .formName = Me
        .tableName = "siswa"

        .addAttributs "nis", txtNIS
        .addAttributs "nama", txtNama
        .addAttributs "alamat", txtAlamat
        .addAttributs "telepon", txtTelepon

        Call .autoMaxLength
    End With
    Set obj = Nothing
End Sub

Jalankan program dan properties MaxLength objek TextBox otomatis menyesuaikan dengan lebar field pada tabel.

Dan jangan lupa untuk mencoba source diatas program kita harus sudah terhubung ke database.

Selamat MENCOBA🙂

  1. June 24, 2010 at 2:25 pm

    Tambah referensi coding,,,,,, nuhun pisan om

  2. June 24, 2010 at 3:55 pm

    Tutorial yang sangat bermanfaat. Terimakasih sudah berbagi…

  3. June 25, 2010 at 12:58 am

    ekaperintis :

    Tambah referensi coding,,,,,, nuhun pisan om

    Novian Agung :

    Tutorial yang sangat bermanfaat. Terimakasih sudah berbagi…

    Sama-sama om🙂

  4. July 26, 2010 at 6:55 am

    mantap tutorialnya om…🙂

    • July 26, 2010 at 7:30 am

      Tq om, kok telat mampirnya😀

  5. pegasus_6200
    July 28, 2010 at 2:22 am

    website yg mantab!!!
    keren om website lo!!!!

    • July 28, 2010 at 2:45 am

      He3x biasa aja om🙂

  6. August 7, 2011 at 2:07 pm

    oom, ane koq error di class ini clsAutoMaxLength oom,
    metode buka database saya model kek gini oom

    Option Explicit
    
    Private cn As ADODB.Connection
    Private rs As ADODB.recordset
    Dim itmX As ListItem
    
    Private Sub Form_Load()
        Set cn = New ADODB.Connection
        cn.Provider = "Microsoft.Jet.OLEDB.4.0"
        cn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Persist Security Info=False;Data Source= " & App.Path & "\db_gerbang.mdb"
        Set rs = New ADODB.recordset
    end sub

    terus metode pemanggilan table ane model gini oom,

    rs.Open "SELECT * FROM Qtb_gbintara ", cn, adOpenStatic, adLockOptimistic, adCmdText

    kira” klo disesuaikan ke model pnya saya gmn oom?

    • August 8, 2011 at 2:15 am

      Qtb_gbintara itu view ya om ? klo view memang belum sy coba sih😀

      • August 8, 2011 at 10:54 am

        maksud nya view gmn om? ntu jadi coding tsb yg p’tama ane taro disetiap form utk buka dabes nya, trus yg rs.open nya buat buka table nya om..

        jd error nya di clsAutoMaxLength pas di bagian strSql nya om, kek nya g cocok sama model pnya ane om,

        jd kira” ngerubah nya biar cocok ama pnya codingan ane gmn om, maklum ane udah biasa pake jenis codingan itu klo ketemu jenis lain jd bingung.😀

        • August 9, 2011 at 1:20 am

          Di class clsAutoMaxLength untuk variabel koneksinya kan sy menggunakan variabel conn, sedangkan punya om menggunkan cn, mungkin itu penyebabnya om

  7. August 9, 2011 at 5:47 pm

    udah bisa oom, cma masalahnya, klo ada 2 database berbeda yg di perlukan dalam 1 aplikasi dabes pertama db_admin , yg kedua db_pusat nah itu gmna oom, sedangkan modul nya hanya bsa untuk buka 1 database …

    • August 10, 2011 at 4:57 am

      Ya buat dua koneksi om

  8. December 24, 2011 at 1:37 am

    Ini listing untuk VB 6.0 yah ??
    Untuk VB.NET ad gak, mas ??

    Aku kebingungan …..😦

    • December 26, 2011 at 8:39 am

      Tinggal dibuka aja om project VB 6nya pake VB .NET kan otomatis diupgrade😀

  9. June 11, 2012 at 12:35 pm

    om kok “Microsoft.Jet.OLEDB.4.0;” nya gk ada ya. udah ane cari2 di component tapi gk ada. mau test program vb ke database nya om.😀

  1. April 16, 2014 at 9:13 am
Comments are closed.
%d bloggers like this: