Contoh pemanggilan store procedure dan view firebird dari aplikasi

Posted by Kamarudin • 2 minute read • Comments

Ini merupakan artikel puncax :grin: dari pengenalan firebird yang dilanjutkan dengan pembuatan store procedure (SP), trigger dan view dan kini saat kita membahas penggunaan SP dan view.

Untuk mengakses firebird dari aplikasi kita membutuhkan Firebird ODBC yang bisa didownload disini

1. Store Procedure

Disini kita akan mengakses SP proc_add_supplier yang mempunyai tiga parameter yaitu : nama, alamat dan telepon

Ada 2 cara untuk mengakses SP :

Private Sub cmdAksesSP_Click()
    Dim strSql  As String

    strSql = "EXECUTE PROCEDURE proc_add_supplier('KoKom Armagedon', 'Yogyakarta', '0813 8176 xxxx')"
    conn.Execute strSql 'conn -> variabel dengan tipe ADODB.Connection
End Sub

EXECUTE PROCEDURE merupakan perintah bawaan firebird untuk mengakses store procedure jadi tidak semua database server mempunyai perintah ini.

Cara yang ke dua dengan menggunakan kombinasi objek ADODB.Command, ADODB.Parameter dan ADODB.Connection.

Private Function addSupplier(ByVal nama As String, ByVal alamat As String, ByVal telepon As String) As Boolean
    Dim cmd     As ADODB.Command
    Dim param   As ADODB.Parameter
    Dim i       As Long

    On Error GoTo errHandle

    Set cmd = New ADODB.Command
    cmd.ActiveConnection = Conn

    Set param = cmd.CreateParameter("nama", adVarChar, adParamInput, 30, nama)
    cmd.Parameters.Append param

    Set param = cmd.CreateParameter("alamat", adVarChar, adParamInput, 50, alamat)
    cmd.Parameters.Append param

    Set param = cmd.CreateParameter("telepon", adVarChar, adParamInput, 20, telepon)
    cmd.Parameters.Append param

    cmd.CommandText = "proc_add_supplier"
    cmd.CommandType = adCmdStoredProc
    cmd.Execute

    addSupplier = True

    For i = 0 To cmd.Parameters.Count - 1
        cmd.Parameters.Delete (0)
    Next

    Set cmd = Nothing
    Set param = Nothing

    Exit Function
errHandle:
    addSupplier = False
End Function

kemudian tinggal panggil seperti ini

Private Sub cmdAksesSP_Click()
    Dim result  As Boolean

    result = addSupplier("KoKom Armagedon", "Yogykarta", "0813 8176 xxxx")
End Sub

2. Store Procedure yang dijadikan fungsi

Store procedure yang kita akses adalah func_get_stok yang mempunyai parameter kode barang. Caranya mirip dengan cara ke dua untuk mengakses store procedure biasa.

Private Function getStokBarang(ByVal kodeBarang As String) As Long
    Dim cmd     As ADODB.Command
    Dim param   As ADODB.Parameter
    Dim i       As Long

    On Error GoTo errHandle

    Set cmd = New ADODB.Command
    cmd.ActiveConnection = conn

    Set param = cmd.CreateParameter("kode_barang", adVarChar, adParamInput, 20, kodeBarang)
    cmd.Parameters.Append param

    Set param = cmd.CreateParameter("stok", adNumeric, adParamOutput)  'ini tambahan parameter yg harus didaftarkan untuk menampung return value
    param.Precision = 5
    param.NumericScale = 2
    cmd.Parameters.Append param

    cmd.CommandText = "func_get_stok"
    cmd.CommandType = adCmdStoredProc
    cmd.Execute

    getStokBarang = cmd.Parameters("stok").Value 'membaca nilai kembalian fungsi (return value)

    For i = 0 To cmd.Parameters.Count - 1
        cmd.Parameters.Delete (0)
    Next

    Set cmd = Nothing
    Set param = Nothing

    Exit Function
errHandle:
    getStokBarang = 1
End Function

kemudian tinggal panggil seperti ini

Private Sub cmdAksesSP_Click()
    Debug.Print "jumlah stok : " & getStokBarang("12345")
End Sub

Variabel cmd, param dan i sebaiknya dideklarasikan di bagian [general declaration] jika akan digunakan lebih dari 1 kali.

3. View

Untuk mengakses view sama seperti memanggil query biasa, oleh karena itu kita membutuhkan variabel dengan tipe recordset untuk menampung hasil view/query.

Private Sub cmdAksesView_Click()
    Dim rs      As ADODB.Recordset
    Dim strSql  As String
    Dim i       As Long

    strSql = "SELECT * FROM v_info_pembelian" 'v_info_pembelian -> nama view
    Set rs = openRecordset(strSql)
    If Not rs.EOF Then
        For i = 1 To getRecordCount(rs)
            Debug.Print "Supplier : " & rs("nama").Value & vbCrLf & _
                        "Alamat : " & rs("alamat").Value & vbCrLf & _
                        "Nota : " & rs("nota").Value & vbCrLf & _
                        "Tanggal " & Format(rs("tanggal").Value, "dd/MM/yyyy")
            rs.MoveNext
        Next i
    End If
    Call closeRecordset(rs)
End Sub

Sample program bisa didownload disini.

Selamat mencoba :blush:

Comments