1 ضمیمه
کار با پایگاه داده خارجی بوسیله DAO
با سلام
یکی از دوستان یه آموزش میخواست برای کار با یک پایگاه داده خارج از خود برنامه، که یه نمونه براش برنامه درست کردم که با کتابخانه dao هستش، اتچ می کنم شاید مورد استفاده دوستان قرار بگیره.
آموزش:
توی این فایلهای ارسال شده یک فایل بعنوان برنامه و یک برنامه بعنوان پایگاه داده هستش، در نمونه آدرس دهی بصورت مطلق است ولی میشه آدرس دهی رو طوری نوشت که قابل تغییر باشه و بشه از مسیرهای مختلف خوندش.
توی فایلی که بصورت برنامه هست یک کلاس نوشتم هرچند خیلی پیچیده نیست ولی خوبه و کار راه اندازه که کار اتصال به پایگاه داده که با رمز پروتکت شده رو انجام میده هر چند بدون رمز نیز میتونه باشه.
محتویات کلاس:
Public Function conectToDB(dbPath As String, Optional dbPassword As String) As Boolean
همونطور که از اسمش پیداست کار اتصال با پایگاه داده ات و دوتا ورودی داره که یکی آدرس فایل مورد نظر و دیگر رمز فایل است که در صورت نیاز وارد می شود، قبل ازهر کاری باید این عمل انجام شود.
روش استفاده :
اول باید یک اینستنس از کلاس میگیریم به این شکل
Dim dB As New dBA
که dBA همون نام کلاس هستش
رمزدار
dB.conectToDB CurrentProject.Path & "\dB\data1.mdB", "123456789"
بدون رمز
dB.conectToDB CurrentProject.Path & "\dB\data1.mdB", ""
' or
dB.conectToDB CurrentProject.Path & "\dB\data1.mdB"
فانکشن بعدی
Public Function setSql(StrSql As String) As Boolean
همونطور که از اسمش پیداست sql رو میگیره
به این صورت:
dB.setSql "SELECT MAX(userId) AS highest FROM tbl_a"
' or
dB.setSql "tbl_a"
' or
dB.setSql "SELECT * FROM tbl_a WHERE userId ='" & newUserId & "'"
برای این فانکشن یا متد هر نوع sql ای که قابلیت اجرا داشته باشه را میشه ارجاع داد
متد بعدی
Public Function isValidProcess() As Boolean
این متد چک میکنه که آیا پردازش قابل اجرا هست یا نه، به این صورت که وقتی یک sql ارجاع داده میشه اگر recordset با خطا مواجه باشه و ست نشده باشه false رو بر میگردونه
متد آخر این کلاس
Public Function gRecordCount() As String
اینم تعداد رکوردهای سلکت شده رو برمیگردونه هر چند اینو توی پردازش هم میشه گرفت
بعد از اینکه رکوردست ایجاد شد میتوان بقیه پردازش رو اعم از select, add,delete,update بوسیله dB.rst. پیگیری کرد
مانند کد زیر که وظیفه اففزودن یک مورد را بعهده میگیره:
'add new item
If (dB.isValidProcess) Then
dB.rst.AddNew
dB.rst.Fields("userId") = "sampleID"
dB.rst.Fields("name") = "That's User "
dB.rst.Fields("date") = Now
dB.rst.Update
'close database
dB.cloesDB
Else
'Process not valid
MsgBox "invalid"
End If
نمونه استفاده کامل از کد :
Option Compare Database
Private Sub Command0_Click()
'create instance of class
Dim dB As New dBA
Dim newUserId As String
newUserId = 0
'connect to database using custom params
dB.conectToDB CurrentProject.Path & "\dB\data.mdB", "8661645875"
'get highest value in userid field and sum +1
dB.setSql "SELECT MAX(userId) AS highest FROM tbl_a"
If IsNull(dB.rst.Fields("highest")) = False Then
newUserId = dB.rst.Fields("highest")
End If
newUserId = CInt(newUserId) + 1
'select a table
dB.setSql "tbl_a"
'add new item
If (dB.isValidProcess) Then
dB.rst.AddNew
dB.rst.Fields("userId") = newUserId
dB.rst.Fields("name") = "Tha's User " & newUserId
dB.rst.Fields("date") = Now
dB.rst.Update
'select last inserted data
dB.setSql "SELECT * FROM tbl_a WHERE userId ='" & newUserId & "'"
If (dB.gRecordCount > 0) Then
MsgBox "new row:" & vbNewLine & "name: " & dB.rst.Fields("name") & vbTab & "date: " & dB.rst.Fields("date"), vbInformation, "test"
End If
'close database
dB.cloesDB
Else
'Process not valid
MsgBox "invalid"
End If
End Sub
امیدوارم مورد استفاده دوستان قرار گرفته باشه.
2 ضمیمه
نقل قول: کار با پایگاه داده خارجی بوسیله DAO
با سلام
فرمی برای برنامه اضافه شده که به صورت پیشرفته تری اطلاعات رو ثبت میکنه، فایل مربوطه نیز اتچ شده.
موفق باشید
تصویر فرم :
نقل قول: کار با پایگاه داده خارجی بوسیله DAO
سلام
برنامه خوبی ارایه نمودید ققط نمیدونم چرا سرعت عملیات کند میشه تو این روش !
هم موقع باز شدن برنامه هم با زیاد شدن حجم جدولها سرعت جستجو پایین میاد !
و یه سوال : چرا از خاصیت لینک کردن جدول استفاده نمیکنید و میایید با کد نویسی این کار را انجام میدید ؟
لطفا روان توضیح بدید تا منم بتونم استفاده کنم
خدا نگهدار
نقل قول: کار با پایگاه داده خارجی بوسیله DAO
خوبی این روش این است که شما فرمها و پایگاه داده رو از هم جدا میکنید و اینکه بوسیله کانکشن استرینگ به پایگاه داده متصل میشید همونطور که عرض کردم این نمونه هست و اگه کسی بخواد بنویسه میتونه استاندارتر بنویسه
سرعت لود فکر نمیکنم تفاوت آنچنانی داشته باشه و تنها در ایجاد کانکشن شاید کمی تاخیر احساس بشه ولی اونم بیشتر بخاطر اینه که پایگاه داده رمز داره
در مورد لینک هم، نمیدونم شاید من با کدنویی راحت ترم، در کدنویسی دستم بازتره و به نظرم برنامه منعطف تر میشه تا اینکه از خاصیت bound یا link خود اکسس استفاده کنم هرچند قبلاً از هر دو روش استفاده کردم
اینم بگم که من با اکسس دیگه کار نمیکنم.
برنامه قبلی: https://barnamenevis.org/showthread.p...=1#post2160842
موفق باشید