Cara Membangun String Koneksi Database secara Dinamis

Setelah selesai Solusi database delphi, langkah terakhir adalah berhasil menyebarkannya ke komputer pengguna.

ConnectionString On-The-Fly

Jika Anda menggunakan komponen dbGo (ADO), theConnectionString properti dari Koneksi TAD menentukan informasi koneksi untuk penyimpanan data.

Jelas, ketika membuat aplikasi database yang akan dijalankan pada berbagai mesin, koneksi ke sumber data tidak boleh dikodekan dalam executable. Dengan kata lain, basis data dapat ditempatkan di mana saja di komputer pengguna (atau di beberapa lainnya komputer dalam jaringan) - string koneksi yang digunakan dalam objek TADOConnection harus dibuat di waktu berjalan. Salah satu tempat yang disarankan untuk menyimpan parameter string koneksi adalah Windows Registry (atau, Anda mungkin memutuskan untuk menggunakan "dataran" File INI).

Secara umum, untuk membuat string koneksi saat run time Anda harus
a) letakkan Path Lengkap ke database dalam Registry; dan
b) setiap kali Anda memulai aplikasi Anda, baca informasi dari Registry, "buat" ConnectionString dan "buka" ADOConnection.

instagram viewer

Basis data... Menghubung!

Untuk membantu Anda memahami prosesnya, kami telah membuat contoh aplikasi "kerangka" yang terdiri dari satu bentuk (bentuk utama aplikasi) dan modul data. Modul Data Delphi menyediakan alat organisasi yang nyaman yang digunakan untuk mengisolasi bagian-bagian dari aplikasi Anda yang menangani konektivitas basis data dan aturan bisnis.

Itu OnCreate Modul Data adalah tempat Anda meletakkan kode untuk secara dinamis membangun ConnectionString dan menyambungkan ke database.

prosedur TDM.DataModuleCreate (Pengirim: TObject); mulaijika DBConnect kemudian
ShowMessage ('Terhubung ke Database!')
lain
ShowMessage ('TIDAK terhubung ke Database!'); akhir;

Catatan: Nama Modul Data adalah "DM". Nama komponen TADOConnection adalah "AdoConn".

Itu DBConnect berfungsi untuk menghubungkan ke database, inilah kodenya:

function TDM.DBConnect: boolean; var
conStr: string; ServerName, DBName: string; mulaiServerName: = ReadRegistry ('DataSource'); DBName: = ReadRegistry ('DataCatalog'); conStr: = 'Penyedia = sqloledb;' + 'Sumber Data =' + ServerName + ';' + 'Katalog Awal =' + DBName + ';' + 'User Id = myUser; Kata Sandi = myPasword '; Hasil: = salah; AdoConn. Menutup; AdoConn. ConnectionString: = conStr; AdoConn. LoginPrompt: = Salah;jika (TIDAK AdoConn. Terhubung) kemudianmencoba
AdoConn. Buka; Hasil: = Benar; kecualidi E: Pengecualian melakukanmulaiMessageDlg ('Terjadi kesalahan saat menyambung ke. data. Kesalahan: '+ # 13 # 10 + e. Pesan, mtError, [mbOk], 0);jikaTIDAK TDatabasePromptForm. Jalankan (ServerName, DBName)
kemudian
Hasil: = salah. lainmulai
WriteRegistry ('DataSource', ServerName); WriteRegistry ('DataCatalog', DBName); // ingat fungsi ini
Hasil: = DBConnect; akhir; akhir; akhir; akhir; //DBConnect

Fungsi DBConnect terhubung ke database MS SQL Server - ConnectionString dibangun menggunakan lokal connStr variabel.

Nama server basis data disimpan di Nama server variabel, nama database disimpan di DBName variabel. Fungsi dimulai dengan membaca kedua nilai dari registri (menggunakan kebiasaan BacaRegistry () prosedur). Setelah ConnectionString dirakit, kita cukup memanggilnya AdoConn. Buka metode. Jika panggilan ini mengembalikan "true", kami telah berhasil terhubung ke database.

Catatan: Karena kami secara eksplisit meneruskan informasi login melalui ConnectionString, modul Karena data dibuat sebelum formulir utama, Anda dapat dengan aman memanggil metode dari modul data di OnCreate MainForm peristiwa.LoginPrompt properti disetel ke false untuk mencegah dialog login yang tidak perlu.

"Menyenangkan" dimulai jika pengecualian terjadi. Walaupun mungkin ada banyak alasan untuk metode Open gagal, mari kita anggap bahwa nama server atau nama database buruk.
Jika ini masalahnya, kami akan memberikan kesempatan kepada pengguna untuk menentukan parameter yang benar dengan menampilkan formulir dialog khusus.
Aplikasi sampel juga berisi satu formulir tambahan (DatabasePromptForm) yang memungkinkan pengguna menentukan server dan nama basis data untuk komponen Koneksi. Bentuk sederhana ini hanya menyediakan dua kotak edit, jika Anda ingin memberikan antarmuka yang lebih ramah pengguna, Anda bisa tambahkan dua ComboBoxes dan isi dengan mencantumkan Server SQL yang tersedia dan mengambil basis data pada SQL Server.

Formulir DatabasePrompt menyediakan kebiasaan metode kelas bernama Execute yang menerima dua parameter variabel (var): ServerName dan DBName.

Dengan data "baru" yang disediakan oleh pengguna (nama server dan basis data), kami cukup memanggil fungsi DBConnect () lagi (secara rekursif). Tentu saja, informasi tersebut pertama kali disimpan dalam Registry (menggunakan metode kustom lain: WriteRegistry).

Pastikan DataModule Adalah "Formulir" Pertama yang Dibuat!

Jika Anda mencoba membuat proyek sederhana ini sendiri, Anda mungkin mengalami pengecualian Pelanggaran Akses saat menjalankan aplikasi.
Secara default, formulir pertama yang ditambahkan ke aplikasi menjadi MainForm (yang pertama dibuat). Ketika Anda menambahkan modul data ke aplikasi, modul data ditambahkan ke daftar "formulir pembuatan otomatis" sebagai formulir yang akan dibuat setelah formulir utama.
Sekarang, jika Anda mencoba memanggil properti atau metode Modul Data apa pun dalam peristiwa OnCreate dari MainForm, Anda akan mendapatkan pengecualian Pelanggaran Akses - karena modul data belum dibuat.
Untuk mengatasi masalah ini, Anda perlu mengubah urutan modul data yang dibuat secara manual - dan mengaturnya menjadi formulir pertama yang dibuat oleh aplikasi (baik menggunakan dialog Project-Properties atau dengan mengedit itu File sumber proyek).

Karena modul data dibuat sebelum formulir utama, Anda dapat memanggil metode dari modul data dengan aman di acara OnCreate MainForm.