Umumnya, rangkaian koneksi atau dalam bahasa pemrograman disebut connection string dibuat dengan menuliskan kode secara berurutan. Dalam Access, rangkaian koneksi itu ditulis secara berurutan di modul atau melalui VBA, sehingga cenderung statis, tidak bisa kita uji sesuai dengan keinginan. Untuk menguji rangkaian koneksi, kita harus memanggil fungsi atau prosedur di Imediate Window dan memastikan, apakah rangkaian koneksi sudah berjalan dengan sempurna.
Walaupun demikian, kita bisa saja membuat alat uji untuk memastikan bahwa rangkaian koneksi telah berjalan dengan sempurna. Caranya sederhana saja, yaitu dengan membuat perangkat berupa form pengujian. Berikut ini adalah cara untuk membuat form perangkat pengujian connection string dari client ke server database SQL Server. Untuk membuat perangkat itu, ikuti langkah-langkah berikut ini:
Buatlah sebuah tabel dengan nama tblKoneksi. Untuk membuat field dalam tabel ini, ubahlah Views-nya ke Design View. Selanjutnya, isikan properti field sebagai berikut:
- Field Name : prefsName
- Data Type : Short Text
- Field Size : 100
- Caption : Nama Preferensi
- Indexed : Yes (No Duplicates)
- Atur field ini sebagai Primary Key
- Field Name : prefsDescription
- Data Type : Short Text
- Field Size : 200
- Caption : Deskripsi
- Field Name : prefsCaption
- Data Type : Short Text
- Field Size : 100
- Caption : Judul
- Field Name : prefsValue
- Data Type : Short Text
- Field Size : 200
- Caption : Nilai
- Field Name : prefsDataType
- Data Type : Short Text
- Field Size : 60
- Caption : Tipe Data
Selanjutnya, ubahlah Views-nya ke Datasheet View untuk mengisikan data/record pada masing-masing field. Berikut ini adalah datasheet view dari tabel tblKoneksi
Nama Preferensi | Deskripsi | Judul | Nilai | Tipe Data |
---|---|---|---|---|
connAppProvider | Application Provider (e.g: SQLOLEDB, SQLNCLI11, etc.) | Application Provider | 10 | |
connDatabaseConnectionTest | Database Connection Tes Result | Result Test Database Connection | 1 | |
connDataSource | Data Source or Server Name include TCP/IP Port (e.g: Server1, 1433) | Data Source | 10 | |
connDriver | Driver for SQL Server, must be installed first | SQL Server Driver | SQL Server | 10 |
connInitialCatalog | Initial Catalog/Database Name | Database Name | 10 | |
connIntegratedSecurity | Integrated Security (e.g: SSPI) | Integrated Security | 10 | |
connNetworkLibrary | Network Library (e.g: DBMSSOCN) | Network Library (optional) | 10 | |
connPassword | Password (password to access into the server) | Password | 10 | |
connPort | Port number to connect to the Server | Port Number | 1433 | char |
connServerConnectionTest | Server Connection Tes Result | Result Test Server Connection | 1 | |
connTrustedConnection | Trusted Connection Status | Trusted Connection Status | Yes | 10 |
connUserID | User Id (login to server) | User Id | 10 | |
suAdminUserId | Administrator User (super user admin) | Administrator User | 10 | |
suAdminUserPwd | Administrator Password | Administrator Password | 10 |
Selanjutnya, buatlah sebuah form dengan menggunakan Blank Form. Simpan form ini dengan nama frmKoneksi. Isikan control berikut ini ke dalam form:
- Control Name : connAppProvider, Control Type : Text Box
- Control Name : connDataSource, Control Type : Text Box
- Control Name : connPort, Control Type : Text Box
- Control Name : connDriver, Control Type : Text Box
- Control Name : connNetworkLibrary, Control Type : Text Box
- Control Name : connIntegratedSecurity, Control Type : Text Box
- Control Name : connTrustedConnection, Control Type : Combo Box, Row Source Type : Value List, Row Source : “No”;”Yes”, Default Value : “No”, Control Name : connUserID, Control Type : Text Box.
- Control Name : connPassword, Control Type : Text Box
- Control Name : cmdTestServerConnection, Control Type : Command Button, Caption : &1. Test Server Connection
- Control Name : connPassword, Control Type : Text Box
- Control Name : connInitialCatalog, Control Type : Text Box
- Control Name : connDatabaseConnectionTest, Control Type : Check Box
- Control Name : connServerConnectionTest, Control Name : Check Box
- Control Name : cmdCreateDatabase, Control Type : Command Button, Caption : &2. Membuat Database
- Control Name : cmdTestDatabaseConnection, Control Type : Command Button, Caption : &3. Test Database Connection
Kecuali tipe kontrol (Control Type) Command Button, semua kontrol di atas diambil dari setiap nilai pada field prefsNama yang ada di tabel tblKoneksi. Jadi, di form frmKoneksi ini, kita tidak membuat kontrol yang diikat (bound) ke satu field tertentu dalam tabel, tapi kontrol yang namanya sama dengan nilai data pada field prefsNama dari tabel tblKoneksi.
Tampilan form frmKoneksi beserta kontrol yang ada di dalamnya tampak seperti pada gambar di bawah ini.
Pada gambar di atas, masing-masing nilai pada tabel tblKoneksi terikat pada satu kontrol dalam form frmKoneksi. Sedangkan tombol perintah (Command Button) diletakkan di bawah kontrol connPassword dan berada di bagian paling bawah dari form.
Selanjutnya, kita menyisipkan kode VBA berikut ini:
Option Compare Database 'Aktifkan Microsoft ActiveX Data Object (versi minimum) 2.8 Library pada menu Tools References... Sub testDatabaseConnectionString(Optional blTestOnly As Boolean = False) Dim conn As ADODB.Connection Dim cs As String On Error GoTo Err_Msg Set conn = New ADODB.Connection cs = "Provider=" & Me.connAppProvider & ";" cs = cs & "Data Source=" & Me.connDataSource & ";" cs = cs & "Initial Catalog=" & Me.connInitialCatalog & ";" If Me.connNetworkLibrary <> "" Then cs = cs & "Network Library=" & Me.connNetworkLibrary & ";" End If If (Me.connUserID <> "" And Me.connIntegratedSecurity <> "") _ Or (Me.connUserID <> "" And Me.connTrustedConnection <> "No") _ Or (Me.connIntegratedSecurity <> "" And Me.connTrustedConnection <> "No") _ Then MsgBox "Pilihlah salah satu di antara isian berikut ini:" & vbNewLine & _ "1. Integrated Security, ATAU" & vbNewLine & _ "2. Trusted Connection, ATAU" & vbNewLine & _ "3. User ID.", vbCritical + vbInformation Cancel = True Exit Sub End If If Me.connUserID <> "" Then cs = cs & "UID=" & Me.connUserID & ";" If Me.connPassword <> "" Then cs = cs & "PWD=" & Nz(Me.connPassword, "") & ";" End If End If If Me.connIntegratedSecurity <> "" Then cs = cs & "Integrated Security=" & Me.connIntegratedSecurity & ";" End If If Me.connTrustedConnection <> "No" Then cs = cs & "Trusted_Connection=" & Me.connTrustedConnection & ";" End If conn.Open cs, "", "" If blTestOnly And conn.State = adStateOpen Then MsgBox "Selamat, koneksi dari MS Access ke database SQL Server berhasil dilakukan. Tekan Next untuk proses berikutnya", vbInformation Me.connDatabaseConnectionTest = -1 GoTo Exit_Sub Else MsgBox "Data koneksi sudah terpasang.", vbOKOnly + vbInformation boolAplikasiSudahTerpasang = True End If Exit_Sub: conn.Close Set conn = Nothing Exit Sub Err_Msg: If Err.Number = -2147217887 Or Err.Number = 3706 _ Or Err.Number = -2147467259 Or Err.Number = -2147217843 Then MsgBox "Koneksi tidak tersambung. Mohon dicek kembali connection string dari MS Access ke SQL Server.", vbCritical + vbExclamation Me.connDatabaseConnectionTest = 0 cmdSave_Click End DoCmd.Close acForm, CurrentObjectName Else MsgBox "Connection Error # " & CStr(Err.Number) & ", source: " & Err.Source & _ Chr(13) & Err.Description End End If Resume Exit_Sub End Sub Private Sub testServerConnectionString(Optional blTestOnly As Boolean = False) Dim conn As ADODB.Connection Dim cs As String Dim sqlcmd As String Dim intCount As Integer On Error GoTo Err_Msg Set conn = New ADODB.Connection cs = "Provider=" & Me.connAppProvider & ";" cs = cs & "Data Source=" & Me.connDataSource & ";" If Me.connNetworkLibrary <> "" Then cs = cs & "Network Library=" & Me.connNetworkLibrary & ";" End If If (Me.connUserID <> "" And Me.connIntegratedSecurity <> "") _ Or (Me.connUserID <> "" And Me.connTrustedConnection <> "No") _ Or (Me.connIntegratedSecurity <> "" And Me.connTrustedConnection <> "No") _ Then MsgBox "Pilihlah salah satu di antara isian berikut ini:" & vbNewLine & _ "1. Integrated Security, ATAU" & vbNewLine & _ "2. Trusted Connection, ATAU" & vbNewLine & _ "3. User ID.", vbCritical + vbInformation Cancel = True Exit Sub End If If Me.connUserID <> "" Then cs = cs & "UID=" & Me.connUserID & ";" If Me.connPassword <> "" Then cs = cs & "PWD=" & Nz(Me.connPassword, "") & ";" End If End If If Me.connIntegratedSecurity <> "" Then cs = cs & "Integrated Security=" & Me.connIntegratedSecurity & ";" End If If Me.connTrustedConnection <> "No" Then cs = cs & "Trusted_Connection=" & Me.connTrustedConnection End If conn.Open cs, "", "" Debug.Print cs If blTestOnly And conn.State = adStateOpen Then MsgBox "Selamat, koneksi dari MS Access ke Server bisa dilakukan", vbInformation Me.connServerConnectionTest = -1 Me.cmdCreateDatabase.Enabled = True Else intCount = conn.Execute("SELECT COUNT(*) FROM sys.databases WHERE [Name] = '" & Me.connInitialCatalog & "'").Fields(0).Value If intCount <> 0 Then MsgBox "Maaf, database " & Me.connInitialCatalog & " Sudah dibuat sebelumnya. Silakan lanjut ke proses berikut: Test Database Connection" Me.cmdTestDatabaseConnection.Enabled = True Else sqlcmd = "CREATE DATABASE " & Me.connInitialCatalog & ";" conn.Execute sqlcmd MsgBox "Database " & Me.connInitialCatalog & " Sudah dibuat. Silakan lanjut ke proses berikut: Test Database Connection" Me.cmdTestDatabaseConnection.Enabled = True End If End If conn.Close Set conn = Nothing Exit_Sub: Exit Sub Err_Msg: If Err.Number = -2147217887 Or Err.Number = 3706 _ Or Err.Number = -2147467259 Or Err.Number = -2147217843 Then MsgBox "Koneksi tidak tersambung. Mohon dicek kembali connection string dari MS Access ke SQL Server.", vbCritical + vbExclamation Me.connServerConnectionTest = 0 cmdSave_Click Else MsgBox "Connection Error # " & CStr(Err.Number) & ", source: " & Err.Source & _ Chr(13) & Err.Description End If Resume Exit_Sub End Sub Sub cmdSave_Click() Dim rs As DAO.Recordset Dim ctl As Control Me.AllowAdditions = False Set rs = CurrentDb.OpenRecordset("SELECT * FROM tblKoneksi", dbOpenDynaset) For Each ctl In Me.Detail.Controls Do While Not rs.EOF If Controls(ctl.Name).Name = rs.Fields("prefsName").Value Then updatePrefs ctl.Name, Nz(Controls(ctl.Name).Value, "") rs.MoveNext Loop rs.MoveFirst Next ctl Set rs = Nothing End Sub Private Sub cmdCreateDatabase_Click() If Me.connAppProvider = "" Or IsNull(Me.connAppProvider) Then MsgBox Me.connAppProvider.Controls(0).Caption & " wajib diisi." Me.connServerConnectionTest = 0 Me.connAppProvider.SetFocus Exit Sub End If If Me.connInitialCatalog = "" Or IsNull(Me.connInitialCatalog) Then MsgBox Me.connInitialCatalog.Controls(0).Caption & " wajib diisi." Me.connInitialCatalog.SetFocus Else testServerConnectionString End If End Sub Private Sub cmdTestDatabaseConnection_Click() If Me.connAppProvider = "" Or IsNull(Me.connAppProvider) Then MsgBox Me.connAppProvider.Controls(0).Caption & " wajib diisi." Me.connServerConnectionTest = 0 Me.connDatabaseConnectionTest = 0 Me.connAppProvider.SetFocus Exit Sub End If If Me.connInitialCatalog = "" Or IsNull(Me.connInitialCatalog) Then MsgBox Me.connInitialCatalog.Controls(0).Caption & " wajib diisi." Me.connDatabaseConnectionTest = 0 Me.connInitialCatalog.SetFocus Exit Sub End If testDatabaseConnectionString True cmdSave_Click End Sub Private Sub cmdTestServerConnection_Click() If Me.connAppProvider = "" Or IsNull(Me.connAppProvider) Then MsgBox Me.connAppProvider.Controls(0).Caption & " wajib diisi." Me.connServerConnectionTest = 0 Me.connAppProvider.SetFocus Else testServerConnectionString True End If cmdSave_Click End Sub Private Sub Form_Open(Cancel As Integer) Dim rs As DAO.Recordset Dim ctl As Control Set rs = CurrentDb.OpenRecordset("SELECT * FROM tblKoneksi", dbOpenSnapshot) For Each ctl In Me.Detail.Controls Do While Not rs.EOF If Controls(ctl.Name).Name = rs.Fields("prefsName").Value Then Controls(ctl.Name).Value = DLookup("prefsValue", "tblKoneksi", "prefsName='" & ctl.Name & "'") Controls(ctl.Name).ControlTipText = DLookup("prefsCaption", "tblKoneksi", "prefsName='" & ctl.Name & "'") & _ vbNewLine & DLookup("prefsDescription", "tblKoneksi", "prefsName='" & ctl.Name & "'") Controls(ctl.Name).StatusBarText = DLookup("prefsCaption", "tblKoneksi", "prefsName='" & ctl.Name & "'") & _ ": " & DLookup("prefsDescription", "tblKoneksi", "prefsName='" & ctl.Name & "'") Controls(ctl.Name).Controls(0).Caption = DLookup("prefsCaption", "tblKoneksi", "prefsName='" & ctl.Name & "'") End If rs.MoveNext Loop rs.MoveFirst Next ctl Set rs = Nothing End Sub Function updatePrefs(strPrefName As String, varPrefValue As String) 'OK Dim strsql As String Dim dbs As DAO.Database On Error GoTo Err_Msg strsql = "UPDATE (SELECT * FROM tblKoneksi) tblKoneksi SET prefsValue = '" & Nz(varPrefValue, "") & _ "' WHERE prefsName='" & strPrefName & "'" Set dbs = CurrentDb() dbs.Execute strsql dbs.Close Set dbs = Nothing Exit_Function: Exit Function Err_Msg: MsgBox "Function updatePrefs, Error # " & CStr(Err.Number) & ", source: " & Err.Source & _ Chr(13) & Err.Description Resume Exit_Function End Function
Bila Form View dari frmKoneksi dibuka, tampilannya seperti di bawah ini.
Selanjutnya, untuk menguji koneksi, kita masukkan nilai pada baris berikut ini:
- Pada baris Application Provider:
- bila databasenya adalah SQL Server Express, isikan SQLNCLI11
- bila databasenya adalah SQL Server Standard Edition, isikan SQLOLEDB
- Pada baris Data Source, isikan nama komputer atau alamat IP, bisa juga disertakan nama model aplikasi server database. Misalnya:
- Nama komputer adalah SERVER01, maka data source: SERVER01
- Nama komputer adalah SERVER01 dan aplikasi SQL Server edisi Express, maka data source: SERVER01\SQLExpress.
- Alamat IP 192.168.1.1. maka data source: 192.168.1.1
- Pada baris Network Library, isikan DBMSSOCN
- Pada baris Integrated Security, Trusted Connection Status, dan User Id, kita harus memilih salah satu:
- Bila menggunakan Integrated Security, isikan SSPI.
- Bila menggunakan Trusted Connection Status, pilih Yes.
- Bila menggunakan SQL Server Authentication, pada user ID, isikan nama login SQL Server yang sudah terotentikasi dan password yang menyertainya di baris Password.
- Untuk menguji koneksi dari client ke server, tekan tombol Test Server Connection. Bila berhasil, Result Test Server Connection bernilai True, ditunjukkan dengan tanda centang. Selain itu, ada pesan “Selamat, koneksi dari MS Access ke Server bisa dilakukan”, seperti pada gambar di atas. Tekan OK.
- Selanjutnya, bila sudah berhasil terhubung dengan server, kita melakukan koneksi dengan database yang ada dalam SQL Server. Pada baris Database Name, isikan nama database yang ada dalam Node Database di SQL Server. Lalu, tekan tombol 2. Membuat Database untuk membuat database. Pada contoh ini, kita menggunakan AdventureWorks2014 sebagai databasenya. Bila belum ada, saat database berhasil dibuat, muncul pesan seperti ini:
Tetapi, bila database sudah ada di SQL Server, pesan yang ditampilkan akan seperti ini:
Selesai membuat database, kita mencoba tes koneksi ke database. Caranya, tekan tombol 3. Test Database Connection. Bila koneksi ke database berhasil dilakukan, Access menampilkan pesan seperti ini:
Bila pesan seperti gambar berhasil ditampilkan, maka kita bisa melanjutkan proses untuk menyusun program atau aplikasi Access, seperti membuat query, memasukkan dan menampilkan data menggunakan form, menampilkan data di report, dan menuliskan berbagai macam modul yang berisi fungsi atau subrutin yang dibutuhkan
Secara ringkas, bisa dijelaskan sebagai berikut:
ReplyDeleteNama control di form, yang terkait dengan tabel tertentu, harus sama dengan nama field dari tabel itu.
Buat loop untuk membaca nama control (ctl) di form, yang terkait dengan tabel tertentu (tbl).
Buat loop untuk membaca nama field (fld) dari tabel tbl.
Jadi ada dua loop, urutannya terserah, bisa ctl lebih dulu atau bisa fld lebih dulu.
Selanjutnya, jika ctl.name sama dengan fld.name, maka periksa, apakah fld.value<>ctl.value. Jika tidak sama, simpan datanya. Jika sama, lewatkan ke proses looping berikutnya.
Dengan cara ini, kita hanya perlu menyimpan (update) field (fld) yang nilainya berbeda dengan control (ctl).
Saya biasanya memang membuat fungsi seperti yang kamu bilang itu, fungsi universal, yang bisa diaplikasikan ke berbagai macam form dan berbagai macam table. Praktis dan nggak capek.
Syaratnya: tipe data field harus salah satu di antara ketiga ini: text (char), numeric, atau date. Kalau binary data nggak bisa.