Dimanakah kita menyimpan setting koneksi supaya bisa lebih dinamis dan dapat disetting oleh user?
Aplikasi dengan framework .NET menyediakan fasilitas built in untuk menyimpan setting yang dapat diakses dan diatur saat runtime. Sehingga user dapat mengubah setting tanpa harus melakukan compile ulang aplikasi.
Untuk lebih jelas nya kita langsung saja buka Project Properties dengan cara klik menu Project -> [Nama Project] Properties.
Saat Project Properties terbuka klik tab Setting yang ada disisi kiri. Terdapat 4 kolom isian untuk masing-masing baris setting yaitu Name, Type, Scope, Value. Rani isikan setting-setting yang diperlukan untuk koneksi sebagai berikut:
Name merupakan nama dari setting yang nantinya dapat dipanggil dari code.
Type adalah tipe data untuk nilai yang diisikan.
Scope terdiri dari 2 jenis User dan Application. Scope Application bersifat readonly (hanya bisa dibaca) saat runtime sementara scope user readable dan writeble (bisa dibaca dan diganti). Karena disini kita ingin user dapat mengatur sendiri setting maka dipilihlah Scope User. Setting ini akan tersimpan pada level user account, karena itu jika user window login berbeda bisa memiliki setting berbeda pula.
Sementara value merupakan nilai default dari setting sebelum nanti user dapat mengubahnya.
Oke, lanjut.....
String koneksi adalah variable yang perlu diakses dari hampir seluruh bagian project karena itu mari kita buat variable-variable public yang disimpan dalam sebuah module.
Klik Project -> Add Module...
Pilih template Module, berinama (contoh: ModGlobalVar) kemudian klik Add.
Di dalam nya Rani simpan 4 variable untuk menyimpan nama server, user, password, dan nama database. Serta 1 buah variable string untuk menyimpan connection string lengkap.
Module ModGlobalVar
Public dbServer As String
Public dbUser As String
Public dbPassword As String
Public dbName As String
Public sLocalConn As String
End Module
Kemudian kita buat juga sebuah sub procedure public untung memberikan nilai pada variable-variable tersebut yang diambil dari user setting. Bisa disimpan juga dalam module sehingga bisa dipanggil dimanapun dalam project saat diperlukan.
Public Sub GetDatabaseSetting()
dbServer = My.Settings.dbServer
dbUser = My.Settings.dbUser
dbPassword = My.Settings.dbPassword
dbName = My.Settings.dbName
sLocalConn = "server=" & dbServer & ";user id=" & dbUser & ";" & _
"password=" & dbPassword & ";database=" & dbName
End Sub
Sub GetDatabaseSetting dipanggil saat applikasi mulai dijalankan (misal nya saat form splash load). Tapi saat ini Rani fokus dulu ke form koneksi nya yah, jadi sub ini akan dipanggil pada load form koneksi.
Oiya kita tambahkan juga di module sebuah function untuk mengecek apakah setting database koneksi dapat terkoneksi sengan baik.
Public Function DatabaseConnected(Optional ByVal Server As String = "", _
Optional ByVal User As String = "", _
Optional ByVal Password As String = "", _
Optional ByVal DatabaseName As String = "") As Boolean
Dim conn As MySqlConnection
conn = New MySqlConnection()
If Server = "" And User = "" And Password = "" And DatabaseName = "" Then
conn.ConnectionString = sLocalConn
Else
conn.ConnectionString = "server=" & Server & ";user id=" & _
User & ";password=" & Password & _
";database=" & DatabaseName
End If
Try
conn.Open()
conn.Close()
Return True
Catch myerror As MySqlException
Return False
MessageBox.Show("Error: " & myerror.Message)
Finally
conn.Dispose()
End Try
Return False
End Function
Nah ceritanya untuk mempercepat, kita bisa pakai template form dialog untuk membuat form ini:
Atur UI sebagai berikut:
Code:
Imports System.Windows.Forms
Public Class frmConnection
Private Sub frmConnection_Load(ByVal sender As System.Object, _
ByVal e As System.EventArgs) Handles MyBase.Load
GetDatabaseSetting()
txtDbServer.Text = dbServer
txtDbUser.Text = dbUser
txtDbPassword.Text = dbPassword
txtDbName.Text = dbName
End Sub
Private Sub OK_Button_Click(ByVal sender As System.Object, _
ByVal e As System.EventArgs) Handles OK_Button.Click
If DatabaseConnected(txtDbServer.Text, txtDbUser.Text, _
txtDbPassword.Text, txtDbName.Text) = True Then
With My.Settings
.dbServer = txtDbServer.Text
.dbUser = txtDbUser.Text
.dbPassword = txtDbPassword.Text
.dbName = txtDbName.Text
.Save()
End With
GetDatabaseSetting()
Me.DialogResult = System.Windows.Forms.DialogResult.OK
Me.Close()
End If
End Sub
Private Sub Cancel_Button_Click(ByVal sender As System.Object, _
ByVal e As System.EventArgs) Handles Cancel_Button.Click
Me.DialogResult = System.Windows.Forms.DialogResult.Cancel
Me.Close()
End Sub
End Class
Pada event OK_Button_Click kita bisa melihat bagaimana cara mengubah nilai setting.
Sekian, selamat mencoba
Click here if you like this article.
42 Comments
Terimakasih b'Rani info-nya.
ijin utk copy yah.
:)
Btw, saya ingin bertanya apakah cara ini hanya untuk koneksi ke database? jika saya ingin mengatur (misal) size dari form, picturebox yang ada di form ... apakah itu semua bisa diaplikasikan lewat cara ini?
Dan untuk keterangan kolom value setelah kolom scope itu penjelasannya apa yah? kita mengisikan apa di kolom value tersebut?
Sebelumnya saya ucapkan terima kasih
Salam,
value itu diisi nilai default sebelum nanti user bisa mengubah nya sendiri.
AppSetting
Name : PictureBox
Type : System.Windows.Forms.PictureBox
Scope : User
Value : True (bener gak ini default value nya? kalau benar, aplikasi tau darimana value ini untuk properties enabled?)
Setelah di app setting, apa perlu saya membuat module seperti untuk mengkoneksikan database? bisa tolong kasih contoh bu? :(
Terima kasih banyak ibu rani
Klo rani bikin module itu supaya nilai setting nya bisa dimasukan ke variable yang bersifat public dan dapat diakses/digunakan dari semua form yang ada di project yang bersangkutan.
tapi klo mau langsung ambil dari setting juga bisa koq.
contoh:
PictureBox1.Enabled = My.Settings.PictureBox
Saya akan coba ya bu, tapi nanti jika ada masalah yang tak terpecahkan :D
bisa kan saya tanya kembali?
Bisa minta alamat emailnya bu?
Thanx
klo misalnya form koneksi itu, muncul cuman sekali waktu buat koneksi ke-DB
lalu,..setelah ditekan OK muncul form login gmna yaa??
note :....kan jika program pertama kali dijalankan di setiap komputer itu butuh koneksi
klo koneksi sukses save settingan kemudian form login nya dimunculkan pake frmLogin.Show
bisa kasih contoh kodingan cek nilai setting sudah ada/tidak
sama yang if clause itu mbakk???
masih pemula saya mbakkk ..hehehe
saya kbetulan sdang mcari cara untuk mjalankan aplikasi dr komputer klien, dan bingung untuk mnghubungkannya dengan database yg running dr Server itu bagaimana.
stelah saya coba cara Rani, stelah dtekan OK tdk terjadi apa2, bila saya sngaja mngisi data database nya di form jg tdk terjadi apa2.
mohon pencerahannya,trims..
Imports System.Data.SqlClient
Module ModuleConnection
Public connection As SqlConnection ' declaration our connection
Public DS As DataSet
Public DR As SqlDataReader
Public DA As SqlDataAdapter
Public cmd As SqlCommand
Public DT As DataTable
Public STR, sql As String
Public QUERY As String
' function for connection
'local Connection
Public dbServer As String
Public dbUser As String
Public dbPassword As String
Public dbName As String
Public sLocalConn As String
Public Sub GetDatabaseSetting() 'This make Public so can do anywhere we want
dbServer = My.Settings.DbServer
dbUser = My.Settings.dbUser
dbPassword = My.Settings.dbPassword
dbName = My.Settings.dbName
sLocalConn = "server=" & dbServer & ";user id=" & dbUser & ";" & "password=" & dbPassword & ";database=" & dbName
End Sub
Public Function DatabaseConnected(Optional ByVal Server As String = "", Optional ByVal User As String = "", Optional ByVal Password As String = "", Optional ByVal DatabaseName As String = "") As Boolean
Dim conn As SqlConnection
conn = New SqlConnection
If Server = "" And User = "" And Password = "" And DatabaseName = "" Then
conn.ConnectionString = sLocalConn
Else
conn.ConnectionString = "server=" & Server & ";user id=" & User & ";password=" & Password & ";database=" & DatabaseName
End If
Try
conn.Open()
conn.Close()
Return True
Catch myerror As SqlException
Return False
MessageBox.Show("Error: " & myerror.Message)
Finally
conn.Dispose()
End Try
Return False
End Function
Sub OpenConnection()
Try
connection = New SqlConnection("Data Source=DESKTOP-5VBP3C9\SQLEXPRESS;Initial Catalog=crud_sqlserver;Integrated Security=True") 'Main Xample
If connection.State = ConnectionState.Closed Then
connection.Open() ' open the connection
End If
Catch ex As Exception
MsgBox("Failed to connect, Error at " & ex.ToString)
End Try
End Sub
End Module
sya harus mengisi Try lagi untuk bisa login?
bgaimana jika tanpa source code connecti?
contoh yang saya pakai database-nya pakai mysql.
klo pakai SQL Server silahkan disesuaikan connection string nya
Imports MySql.Data.MySqlClient
...:)
Imports MySql.Data.MySqlClient
dan itu keperluan untuk koneksi ke database mysql nya
ini pertama saya pake app.config, teknik kakak uda jalan
Cuma kendala, biasanya saya pake Mysql dgn xampp dan ini sifatnya statis , gak bisa diubah server,user,login dan database, kalo pake punya data kakak app.config bisa diubah via notepad lebih dinamis ..
yg biasa saya pakai
module:
Module Modulekoneksi
'koneksi
Public CONN As New MySqlConnection 'myqlconn
Public STR As String 'SQL
Public DA As MySqlDataAdapter 'myAdapter
Public DS As DataSet 'myData
Public CMD As MySqlCommand
Public DR As MySqlDataReader
Public CMD1 As MySqlCommand
Public DR1 As MySqlDataReader
Sub KoneksI()
Call KoneksIServer() 'panggil koneksi
Dim DatabaseName As String = "karisma" 'Database Name
Dim server As String = "localhost" 'ip address here
Dim userName As String = "root"
Dim password As String = ""
If Not CONN Is Nothing Then CONN.Close()
' sifatnya statis data tidak bisa diubah nama server hingga database
CONN.ConnectionString = String.Format("server={0}; user id={1}; password={2}; database={3}; pooling=false", server, userName, password, DatabaseName)
Try
CONN.Open()
'MessageBox.Show("Koneksi Berhasil")
CONN.Close()
Catch myerror As MySqlException
MessageBox.Show("Error Koneksi: " & myerror.Message)
Finally
CONN.Dispose()
End Try
End Sub
End Module
login form nya :
Private Sub BtnOK_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles BtnOK.Click
Call KoneksI() 'panggil koneksi
CONN.Open() 'buka database
CMD = New MySqlCommand("select * from tbluser where kode_user='" & txtuser.Text & "' and pwd_user='" & Txtpass.Text & "'", CONN)
DR = CMD.ExecuteReader
DR.Read()
If Not DR.HasRows Then ' jika tdk ditemukan munculkan pesan
MsgBox("Login gagal")
'kosongkan
txtuser.Clear()
Txtpass.Clear()
Else
'jika ada hilangkan login
Me.Visible = False
MenuUtama.Show() 'munculkan menu utama
end if
end sub
Hanya panggil call koneksi aja buat buka server
Call KoneksI() 'panggil koneksi
CONN.Open() 'field database
CMD = New MySqlCommand("select * from tbluser where kode_user='" & txtuser.Text & "' and pwd_user='" & Txtpass.Text & "'", CONN)
-------------------------------
Kalo saya mau adaptasikan login dimana app.config hanya untuk ambil Server
Form login saya uda coba
Private Sub OK_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles OK.Click
dim conn As MySqlConnection
DatabaseConnected() ' connect ke app.config untuk baca server
conn.Open()
CMD = New MySqlCommand("select * from tbluser where kode_user='" & txtuser.Text & "' and pwd_user='" & Txtpass.Text & "'", conn)
DR = CMD.ExecuteReader <--- akan error database not found
bagaimana agar connection bisa baca database
makasi kak rani
Simpan aja di 1 module khusus untuk keperluan database.
Public Function GetFieldValue(ByVal FieldName As String, ByVal TableName As String, ByVal WhereClause As String, ByVal DefaultValue As String) As String
Dim conn As MySqlConnection
Dim cmd As New MySqlCommand
Dim objValue As Object
conn = New MySqlConnection()
conn.ConnectionString = sLocalConn
Try
conn.Open()
cmd.Connection = conn
cmd.CommandText = "SELECT " & FieldName & " FROM " & TableName & " " & WhereClause & " LIMIT 1"
objValue = cmd.ExecuteScalar()
conn.Close()
If objValue Is Nothing Then
Return DefaultValue
ElseIf IsDBNull(objValue) Then
Return DefaultValue
Else
Return objValue.ToString
End If
Catch myerror As MySqlException
MessageBox.Show("Error: " & myerror.Message)
Finally
conn.Dispose()
End Try
Return DefaultValue
End Function
Nanti cara pakainya bisa seperti ini:
Private Sub OK_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles OK.Click
If GetFieldValue("COUNT(*) AS ceklogin", "tbluser", "where kode_user='" & txtuser.Text & "' and pwd_user='" & Txtpass.Text & "'", 0) > 0 Then
MsgBox("login berhasil")
Else
MsgBox("login gagal")
End If
End Sub
Silahkan disesuaikan aja, sama keperluan login nya....
sekali lagi makasi kak, saya coba dulu
Kita buat module baru ya
isinya yg ini:
Public Function GetFieldValue(ByVal FieldName As String, ByVal TableName As String, ByVal WhereClause As String, ByVal DefaultValue As String) As String
Dim conn As MySqlConnection
Dim cmd As New MySqlCommand
Dim objValue As Object
conn = New MySqlConnection()
conn.ConnectionString = sLocalConn
Try
conn.Open()
cmd.Connection = conn
artinya
Function
DatabaseConnected()
tidak diperlukan , ini
conn.ConnectionString = sLocalConn
sudah mewakili untuk baca server, host, pass dan nama database
gak perlu ini lagi
Call KoneksI() 'panggil koneksi
CONN.Open() 'buka database
CMD = New MySqlCommand("select ---****----, CONN)
ok, saya coba dulu, maaf, saya uda cari topik bahas app.config, gak ketemu.. pas pake punya kakak, hanya bisa tuk cek koneksi database
tapi saya mau pake buat yg lain. cek customer, login, penjualan, pembelian yg berhubungan select,update dan delete
tapi server ada di app.config dan database ada di Xampp
makasi kak
dan kenapa mesti edit di notepad (walopun bisa)
artikel ini kan menjelaskan gimana user bisa milih sendiri setingan koneksi dari UI yang kita buat.
tinggal nama dan type data nya aja disesuaikan. di artikel ini sebenarnya udah ada jawaban nya, tapi sepertinya kurang dipahami.
Coba lihat bagian ini:
Public Sub GetDatabaseSetting()
dbServer = My.Settings.dbServer
dbUser = My.Settings.dbUser
dbPassword = My.Settings.dbPassword
dbName = My.Settings.dbName
sLocalConn = "server=" & dbServer & ";user id=" & dbUser & ";" & _
"password=" & dbPassword & ";database=" & dbName
End Sub
GetDatabaseSetting dipanggil saat aplikasi berjalan. Simpan aja di sub main atau di event form_load pertama saat aplikasi berjalan.
sLocalConn ini kita deklarasikan sebagai variable public, yang akan mengambil data dari setting. Nah si setting ini secara fisik akan menjadi file app.config
Saat kita mengubah nilai setting si GetDatabaseSetting dipanggil lagi supaya setting koneksi.
Klo kmu ngikutin artikel ini, coba lihat di bin nanti otomatis akan membuat file app.config sendiri.
Jadi ga usah di build ulang.
gak seribet pake config, saya malah liat xml lebih simple pake ReadWriteXML ...bisa save dan edit lebih mudah,tapi makasi kak rani, uda nyoba, tapi saya malah cendrung pake xml...
@hijram: itu kayak nya folder buat debug nya terhapus atau readonly.
status connect/disconnect tergantung pakai control apa buat nampilinnya. Coba baca lagi artikel nya ada bagian function DatabaseConnected yang mengembalikan nilai boolean True/False.
Jadi tinggal dipasangin IF Clause aja True -> Connected, False -> disconnected.
untuk port bisa ditambahin di connection string nya, e.g.
Dim connStr As String = "server=localhost;user=root;database=world;port=3306;password=******;"
klo aku manual manggil dari menu setting.
Dan saat aplikasi pertama kali dijalanin, dia kan cek koneksi. Klo koneksi nya gagal form dialog nya muncul.
Bisa bikin koneksi database access runtime gak mba melalui openfiledialog. Jadi ketika user buka aplikasi, user harus milih database access melalui openfiledialog mba.
Makasih
Ada waktu buat bikin tutorialnya gak mba?
Kalo ada boleh tuh mba..
Makasih
https://rani-irsan.blogspot.com/2020/05/menyimpan-setting-koneksi-vbnet-ms.html
bu Rani saya gagal menginisialisasi di User setting itu kenapa ya, saya sudah ikuti tutorial ini, tapi gagal.
Terim kasih sebelumnya.