آموزش اکسس

آموزش اکسس بخش سیزدهم

توسط amin8505 | گروه مقاله های آموزشی | 1394/07/28

نظرات 0

 صدور پيغامهاي فارسي بجاي پيغامهاي 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 به هنگام باز شدن فايلهاي اكسس 
در اين قسمت روش غيرفعال كردن دكمه 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 
 

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

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

 
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 
 

 

0 نظر

نظر محترم شما در مورد مقاله های وب سایت برنامه نویسی و پایگاه داده

نظرات محترم شما در خدمات رسانی بهتر ما را یاری می نمایند. لطفا اگر مایل بودید یک نظر ما را مهمان فرمائید. آدرس ایمیل و وب سایت شما نمایش داده نخواهد شد.

حرف 500 حداکثر