آموزش اکسس

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

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

نظرات 0

join کردن بيش از ۲ جدول براي Database هاي Access 
کتاب ColdFusion MX Bible براي Join کردن بيش از دو جدول يک بانک اطلاعاتي راه حل زير را پيشنهاد مي کند: 


SELECT 
c.CompanyID, 
c.CompanyName, 
e.LastName, 
e.FirstName, 
e.Salary, 
d.FullName, 
d.RelationShip 
FROM 
Company c INNER JOIN Employee e 
ON c.CompanyID = e.CompanyID 
INNER JOIN Dependant d 
ON e.SSN = d.SSN 

که در بيشتر برنامه هاي Database Server درست عمل مي کند. 
اما در بانکهاي اطلاعاتي Microsoft Access پيغام خطايي با توضيح زير مي دهد : 


Operator expected 
من پس از يک کم جستجو در کتاب ها و پرسش از ديگران ، يک دوست آمريکايي من راه حل زير را پيشنهاد داد. در اکسس در برخي قسمت ها وجو د پارانتز الزامي است با اينکه در انواع ديگر بانک هاي اطلاعاتي نيازي به آن پارانتز ها نيست. يعني کد مورد نظر را بايد به صورت زير باز نويسي کنيم : 


SELECT 
c.CompanyID, 
c.CompanyName, 
e.LastName, 
e.FirstName, 
e.Salary, 
d.FullName, 
d.RelationShip 
FROM 
(Company c INNER JOIN Employee e 
ON c.CompanyID = e.CompanyID) 
INNER JOIN Dependant d 
ON e.SSN = d.SSN 

و يک نمونه ي ديگر در اتصال ۴ جدول : 

SELECT 
cfarticle.id, 
cfarticle.title, 
cfarticle.description, 
cfarticle.dateadded, 
editorial.authorname as author, 
categories.name, 
levels.levelname 
FROM 
((cfarticle INNER JOIN categories ON cfarticle.category=categories.id) 
INNER JOIN editorial ON cfarticle.author=editorial.id) 
INNER JOIN levels ON cfarticle.skllevel=levels.id 
سئوال :
چگونه در اكسس اشياء مخفي (Hidden)  مثل فرمها ، جداول و ... را مي توان ديد؟
چواب : 
اين گزينه را تيك بزنيد       Tools>Options>view>Show hidden Object
 
سئوال : 
در برنامه هاي كاربردي بهترين روش براي چاپ گزارشات چگونه است ؟
جواب : 
معمولا براي هر گزارش يك فرم هم بايد ساخته شود كه كاربران پارامترهاي مختلف را قبل از چاپ گزارش در آن فرم تعيين كنند . مثلا در يك گزارش كه ليست بارنامه هاي صادره براي شهرهاي مختلف را چاپ مي كند ممكن است كاربران بخواهند فقط بارنامه هاي مربوط به يك شهر در يك ماه خاص را چاپ كنند . در اين شرايط  بايد در يک فرم حداقل يك كمبو باكس وجود داشته باشد تا از ليست شهرها يكي را انتخاب كرده و دو عدد تكست باكس باشد تا تاريخ شروع و تاريخ پايان محدوده زماني گزارش درآنها وارد شده و سپس گزارش چاپ شود. 
 
روش اجراء اين كار در اكسس :
فرم فوق الذكر بايد يك رشته توليد كند كه در حقيقت همان بخش Where يك رشته  Sql است . اين رشته را بايد در آرگومان WhereCondition از دستور OpenReport بكار برد . مثال زير گوياي مطلب است :
Sub Print_Click()
      Dim Str As String 
  Str=""  
 If Not IsNull(M.ComboCity) Then
  Str="CityId="& Me.ComboCity
 Endif 
 Docmd.OpenReport "Report1",acviewNormal,,Str
End Sub
سئوال : 
چگونه مي توان شرطهاي يك Query  را به مقدار وارده در تكست باكس يك فرم نسبت داد بگونه اي كه اگر تكست باكس خالي بماند شرطي در Query اعمال نشود؟
جواب :
همانطور كه مي دانيد در حالت عادي براي ارجاع شرط Query  به فرم ،  بايد در Criteria  مربوط به Query عبارتي با اين ساختار بنويسيم : [Forms![FormName]![TextBoxName مثلا: Forms![Form1]![Text1] 
اما اين روش شرط گذاري براي حاتي كه تكست باكس خالي باشد شرطي را اعمال مي كند كه باعث مي شود هيچ ركوردي  در نتيجه اجراء Query حاصل نشود و اگر بخواهيم در حالت خالي بودن تكست باكس هيچ شرطي اعمال نشود بايد در Criteria  به اين شكل بنويسيم:
 Forms![Form1]!Text1 Or Forms![Form1]!Text1 Is Null
 
تابع
 در اين يادداشت تابع مربوط به تبديل عدد به معادل حروفي آن ارائه مي كنم . عمدتا در سيستم هاي مالي و حسابداري نياز است معادل حروفي اعداد هم نمايش داده شده يا چاپ شوند كه توابع زير اين نياز را پاسخ مي دهد. مثلا براي چاپ يك چك روي خود برگه چك ، علاوه بر نياز به چاپ مبلغ عددي چك لازمست تا مبلغ حروفي چك هم روي برگه چاپ شود.

نحوه استفاده از تابع :
تابع 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

' *********** End Of Module ***********
 

 

 

0 نظر

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

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

حرف 500 حداکثر