آموزش اکسس :: درس ۳

با سلام و عرض پوزش برای وقفه چند روزه

صدور پیغامهای فارسی بجای پیغامهای Error اکسس
یکی از دوستان وبلاگی من پرسیده بود چطوری پیغام
Error مربوط به ورود رکورد تکراری را در اکسس فارسی کنیم . ترجیح دادم جواب کاملی برای سئوال ایشون بدم تا همه استفاده کنن. بنابراین ابتدا جواب ایشون رو میدم و بعد از اون بطور کاملتر برای همه وبلاگی های عزیز روش کنترل خطا را تشریح می کنم .

(توجه داشته باشید که در زیر کدهای نوشته شده از راست به چپ نمایش داده می شوند)

جواب دوست ما:
در رویداد
OnError مربوط به فرم ورود اطلاعات این کد را می نویسیم:


If DataErr = 3022 Then
MsgBox "
اطلاعات وارده تکراری است"
Response = acDataErrContinue
End If


جواب کلی :
اساسا ، هر خطا در اکسس یا
VB یک کد تولید می کند . برنامه نویسان باید یک بانک اطلاعات از کد خطاهایی که رخ می دهد داشته باشند تا بتوانند با چک کردن شماره خطا پیغام فارسی مناسب آن خطا را صادر کنند .

بطور کلی دو روش کنترل خطا از این قرارند:

1- اگر خطا مربوط به کل فرم باشد باید از طریق رویداد
OnError فرم کنترل شود .
معمولا خطاهایی که مربوط به کدنویسی ما نبوده و صرفا توسط اکسس و در واکنش به اشتباهات کاربر صادر می شود در این رویداد کنترل می شود . در این رویداد ، پارامتر
DataErr حاوی کد خطاست. (بعبارت واضح تر اگر می خواهید کد مربوط به هر Error را شناسایی کنید می توانید این دستور در رویداد OnError فرم بنویسید: MsgBox DataErr )

بطور کلی بعد از اینکه کد خطاها را شناسایی کردید با نوشتن قالب برنامه زیر در رویداد
OnError فرم می توانید خطاها را کنترل کنید :


Dim Str as String

Select Case DataErr
Case 3022
Str="
اطلاعات وارده تکراری است"
Case 2237


Str = "اطلاعات وارده در لیست وجود ندارد"
'خط فوق برای مواردی است که یک مقداری که در کمبو باکس وجود ندارد ، تایپ شده باشد


Case ...
Str=...
....
End Select

Msgbox Str
Response = acDataErrContinue



2- اگر خطا مربوط به کدهایی باشد که خودمان در یک
Sub نوشته ایم :
در این روش باید در ابتدای
Sub با دستور : <اسم زیر روال کنترل خطا> On Error Goto ، کنترل خطا را به یک روال کنترل خطا ارجاع دهیم.
( تمام کدهایی که ویزارد
Command Button بطور خودکار در رویداد OnClick دکمه ها ایجاد می کند نمونه خوبی برای این روش هستند. ضمنا در این روش بکمک Err.Number کد خطا شناسایی می شود )

تا بعد ... در پناه حق

اکسس ( بخش دوم )

با سلام .

 

در این یادداشت روش غیرفعال کردن دکمه Shift به هنگام باز شدن فایلهای اکسس را توضیح خواهم داد . در ابتدا باید مقدمه ای را عنوان کنم.

مقدمه
مطلب زیر در زمینه افزایش امنیت سیستم ها است. نکته ای که در زمینه امنیت هر نوع سیستمی باید به آن توجه داشت اینست که بطور کلی امنیت یک امر نسبی است .
بعبارت دیگر یک راه حل امنیتی ، قطعا جلوی بسیاری از حملات علیه سیستم را خواهد گرفت ولی هیچگاه بطور کامل حملات را خنثی نخواهد کرد و همیشه حفره های امنیتی وجود خواهند داشت .
در یادداشت قبل گفتیم که به هنگام باز شدن فایلهای اکسس،
Startup اجراء می شود . به کمک گزینه های Startup می توانیم از دسترسی کاربران به محیط طراحی برنامه جلوگیری کنیم . ولی همانطور که قبلا گفته شد میکرو سافت با انگیزه ایجاد سیستم امنیتی چند مرحله ای یک روش ضد امنیتی برای آن ایجاد کرده است و کاربران برنامه ما می توانند با پایین نگه داشتن دکمه Shift از اجراء Startup جلوگیری کنند و وارد محیط طراحی شوند . حال اگر بخواهیم دکمه شیفت را غیر فعال کنیم تا کسی نتواند وارد محیط طراحی شود باید به این طریق عمل کرد :

استفاده از خاصیت
AllowByPassKey
خاصیت
AllowByPassKey یکی از خواص شیء Database است که:
اگر مقدار آن
True باشد دکمه شیفت فعال است .
و اگر مقدار آن
False باشد دکمه شیفت غیر فعال است .

این خاصیت عملا در لیست خواص یک
Database نیست و باید آنرا فقط برای اولین بار ایجاد (Create) کرد . بعد از ایجاد آن می توان مقدار آنرا False یا True کرد .

تذکر : حتما یک کپی از فایل خودتان قبل از اجراء این برنامه بردارید چون ممکن است دیگر نتوانید وارد محیط برنامه خودتان شوید . من هم با عرض معذرت وقت پاسخگویی به ایمیل های دوستان را ندارم و دچار مشکل خواهید شد.

سه دکمه روی یک فرم مطابق شکل بالا ایجاد کنید و کدهای زیر را در آن بنویسد.
(نمایش کدهای نوشته شده مناسب نیست ولی اگر آنرا در حافظه کپی کنید و در ماجول فرمتان کپی کند بدرستی تمایش داده می شود .)



'
برای اولین دفعه :
Private Sub Create_Click()
On Error GoTo Er

Dim db As Database
Dim prp As Property
Set db = CurrentDb
Set prp = db.CreateProperty("allowbypasskey", dbBoolean, False)
db.Properties.Append prp
db.Close

Ex:
Exit Sub
Er:
If Err.Number = 3367 Then
MsgBox "
این خاصیت ایجاد شده و لازم نیست مجددا ایجاد شود"
End If
Resume Ex

End Sub

'
جهت غیر فعال کردن شیفت
Private Sub ShiftNo_Click()
Dim db As Database
Set db = CurrentDb
db.Properties("allowbypasskey") = False
db.Close
End Sub

'
جهت فعال کردن شیفت
Private Sub ShiftOk_Click()
Dim db As Database
Set db = CurrentDb
db.Properties("allowbypasskey") = True
db.Close
End Sub

تا بعد ... در پناه حق

اکسس ( بخش اول )

با سلام .

 

تعریف کلی از اکسسAccess

اکسس ابزاری برای تولید بانکهای اطلاعاتی رابطه ای است. بانکهای اطلاعاتی امکان گردآوری انواع اطلاعات را برای ذخیره ‌سازی ،جستجو و بازیابی فراهم می‌کند.


اجزا بانک اطلاعاتی اکسس عبارتند از:


DataBase:

1.
Table
2.
Query
3.
Form
4.
Report
5.
Macros
6.
Modules

• ‏‏
Table :(جدول ) هر جدول برای نگهداری داده‌های خام بانک اطلاعاتی است.داده‌ها را شما در جدول وارد می‌کنید.جداول سپس این داده‌ها را به شکل سطرها و ستونهایی سازماندهی میکند.


Query :هر پرس و جو برای استخراج اطلاعات مورد نظر از یک بانک اطلاعاتی مورد استفاده قرار می‌گیردهر پرس و جو می‌تواند گروهی از رکوردها را که شرایط خاص دارا هستند انتخاب کند.پرس و جوها را می‌توان بر اساس جداول یا پرس و جوهای دیگر اماده نمود. با استفاده از پزس‌وجوها می‌توان رکوردهای بانک اطلاعاتی را انتخاب کرد، تغییر داد و یا حذف نمود.


Form :متداولترین روش استفاده از فرمها،برای ورود و نمایش داده‌ها است.


Report :گزارش ها می‌توانند بر اساس جدول ،پرس‌وجوها باشند ،قابلیت گزارش چاپ داده‌ها می‌باشدگزارشها را می‌توان بر اساس چند جدول و پرس‌وجو تهیه نمود تا رابطه بین داده‌ها را نشان داد.


Macro :ماکروها به خودکار کردن کارهای تکراری ،بدون نوشتن برنامه‌های پیچیده یا فراگیری یک زبان برنامه نویسی ، یاری می‌کند، در واقع ماکروها یکسری قابلیت‌هایی هستند که امکان سریع سازی را فراهم می‌سازند.


Modules : محیط بسیار قوی و با کیفیت برای برنامه‌نویسی محاسبات و عملیات پیچیده روی سیستم بانک اطلاعاتی.

-----------------------------------
الف ‌- تعریف داده
Data :

هرگونه اطلاعات لازم و کاربردی درباره یک موجودیت را یک داده می‌گویند.


ب‌- تعریف
Fild :

به هر ستون یک جدول که در بر گیرنده کلیه اطلاعات مربوط به آن ستون می‌باشد و بخشی از یک موجودیت را تشگیل میدهد فیلد گفته می‌شود.


ت‌- تعریف
Record :

به هر سطر یک جدول که اطلاعات مربوط به یک موجودیت را نشان می‌دهد ، رکورد گویند.


ث‌- تعریف پایگاه داده‌ای ارتباطی:

پایگاه داده‌های ارتباطی، مجموعه‌ای از جدول‌های داده است که یک فیلد مشترک در هر یک از جدولهای موجود دارد و از طریق آن می‌توان داده‌ها را بهم ربط داد.به این مدل از پایگاه داده‌ها ، پایگاه داده‌های ارتباطی RelationShip می‌گویند.

تابع تبدیل عدد به حروف

مقدمه :

در این یادداشت تابع مربوط به تبدیل عدد به معادل حروفی آن ارائه می کنم . عمدتا در سیستم های مالی و حسابداری نیاز است معادل حروفی اعداد هم نمایش داده شده یا چاپ شوند که توابع زیر این نیاز را پاسخ می دهد. مثلا برای چاپ یک چک روی خود برگه چک ، علاوه بر نیاز به چاپ مبلغ عددی چک لازمست تا مبلغ حروفی چک هم روی برگه چاپ شود.

نحوه استفاده از تابع :

تابع Adad که در زیر ارائه شده است یک عدد را بعنوان ورودی گرفته و معادل حروفی آن عدد در زبان فارسی را بعنوان خروجی تولید می کند. مثلا (Adad(1373 مقدار"یکهزار و سیصد و هفتاد و سه" را بعنوان خروجی تولید می کند.برای استفاده از این توابع باید از چند خط پایین تر (Start of Module) تا انتهای این یادداشت را در حافظه کپی (Copy) کرده و در یک ماجول جدید در اکسس یا VB ، Paste کنید ( توجه داشته باشید که نمایش کدهای نوشته شده در اینجا راست به چپ است که پس از کپی کردن آن در ماجول اکسس بشکل صحیح نمایش داده خواهد شد)

' *********** Start of Module ***********

'
توابع تبدیل عدد به معادل حروفی آن در زبان فارسی

Function Adad(ByVal Number As Double) As String
If Number = 0 Then
Adad = "
صفر"
End If
Dim Flag As Boolean
Dim S As String
Dim I, L As Byte
Dim K(1 To 5) As Double

S = Trim(Str(Number))
L = Len(S)
If L > 15 Then
Adad = "
بسیار بزرگ"
Exit Function
End If
For I = 1 To 15 - L
S = "0" & S
Next I
For I = 1 To Int((L / 3) + 0.99)
K(5 - I + 1) = Val(Mid(S, 3 * (5 - I) + 1, 3))
Next I
Flag = False
S = ""
For I = 1 To 5
If K(I) <> 0 Then
Select Case I
Case 1
S = S & Three(K(I)) & "
تریلیون"
Flag = True
Case 2
S = S & IIf(Flag = True, "
و ", "") & Three(K(I)) & " میلیارد"
Flag = True
Case 3
S = S & IIf(Flag = True, "
و ", "") & Three(K(I)) & " میلیون"
Flag = True
Case 4
S = S & IIf(Flag = True, "
و ", "") & Three(K(I)) & " هزار"
Flag = True
Case 5
S = S & IIf(Flag = True, "
و ", "") & Three(K(I))
End Select
End If
Next I
Adad = S
End Function


Function Three(ByVal Number As Integer) As String
Dim S As String
Dim I, L As Long
Dim h(1 To 3) As Byte
Dim Flag As Boolean
L = Len(Trim(Str(Number)))
If Number = 0 Then
Three = ""
Exit Function
End If
If Number = 100 Then
Three = "
یکصد"
Exit Function
End If

If L = 2 Then h(1) = 0
If L = 1 Then
h(1) = 0
h(2) = 0
End If

For I = 1 To L
h(3 - I + 1) = Mid(Trim(Str(Number)), L - I + 1, 1)
Next I

Select Case h(1)
Case 1
S = "
یکصد"
Case 2
S = "
دویست"
Case 3
S = "
سیصد"
Case 4
S = "
چهارصد"
Case 5
S = "
پانصد"
Case 6
S = "
ششصد"
Case 7
S = "
هفتصد"
Case 8
S = "
هشتصد"
Case 9
S = "
نهصد"
End Select

Select Case h(2)
Case 1
Select Case h(3)
Case 0
S = S & "
و " & "ده"
Case 1
S = S & "
و " & "یازده"
Case 2
S = S & "
و " & "دوازده"
Case 3
S = S & "
و " & "سیزده"
Case 4
S = S & "
و " & "چهارده"
Case 5
S = S & "
و " & "پانزده"
Case 6
S = S & "
و " & "شانزده"
Case 7
S = S & "
و " & "هفده"
Case 8
S = S & "
و " & "هجده"
Case 9
S = S & "
و " & "نوزده"
End Select

Case 2
S = S & "
و " & "بیست"
Case 3
S = S & "
و " & "سی"
Case 4
S = S & "
و " & "چهل"
Case 5
S = S & "
و " & "پنجاه"
Case 6
S = S & "
و " & "شصت"
Case 7
S = S & "
و " & "هفتاد"
Case 8
S = S & "
و " & "هشتاد"
Case 9
S = S & "
و " & "نود"
End Select

If h(2) <> 1 Then
Select Case h(3)
Case 1
S = S & "
و " & "یک"
Case 2
S = S & "
و " & "دو"
Case 3
S = S & "
و " & "سه"
Case 4
S = S & "
و " & "چهار"
Case 5
S = S & "
و " & "پنج"
Case 6
S = S & "
و " & "شش"
Case 7
S = S & "
و " & "هفت"
Case 8
S = S & "
و " & "هشت"
Case 9
S = S & "
و " & "نه"
End Select
End If
S = IIf(L < 3, Right(S, Len(S) - 3), S)
Three = S
End Function

 تا بعد ... در پناه حق