accdbExe

accdbExe
لینک سایر سایت‌های آموزش Access

اطلاعات تماس و ارسال نظر

شروع کار از: فروردین 1402

۶۱ مطلب در فروردين ۱۴۰۲ ثبت شده است

Values


دستور نوشتاری فرمان(Syntax) به نحو زیر است:


IsNull
Returns a Boolean value that indicates whether an expression contains no valid data (Null).
Syntax
IsNull(expression)
The required expression argument is a Variant containing a numeric expression or string expression.
Remarks
IsNull returns True if expression is Null; otherwise, IsNull returns False. If expression consists of
more than one variable, Null in any constituent variable causes True to be returned for the entire
expression
Example:
MyVar = ""
MyCheck = IsNull(MyVar) ' Returns False.
MyVar = Null
MyCheck = IsNull(MyVar) ' Returns True.


دستور نوشتاری فرمان(Syntax) به نحو زیر است:


IsEmpty
Returns a Boolean value indicating whether a variable has been initialized.
Syntax
IsEmpty(expression)
The required expression argument is a Variant containing a numeric or string expression. However,
because IsEmpty is used to determine if individual variables are initialized, the expression argument is
most often a single variable name.
Remarks
IsEmpty returns True if the variable is uninitialized, or is explicitly set to Empty; otherwise, it returns
False. False is always returned if expression contains more than one variable. IsEmpty only returns
meaningful information for variants.
Example:
MyVar = Null ' Assign Null.
MyCheck = IsEmpty(MyVar) ' Returns False.
MyVar = Empty ' Assign Empty.
MyCheck = IsEmpty(MyVar) ' Returns True.


دستور نوشتاری فرمان(Syntax) به نحو زیر است:


IsNumeric
Returns a Boolean value indicating whether an expression can be evaluated as a number.
Syntax
IsNumeric(expression)
The required expression argument is a Variant containing a numeric expression or string expression.
Remarks
IsNumeric returns True if the entire expression is recognized as a number; otherwise, it returns False.
IsNumeric returns False if expression is a date expression.
Example:
MyVar = "459.95" ' Assign value.
MyCheck = IsNumeric(MyVar) ' Returns True.
MyVar = "45 Help" ' Assign value.
MyCheck = IsNumeric(MyVar) ' Returns False.

Loops and Conditional


دستور نوشتاری فرمان(Syntax) به نحو زیر است:


If...Then...Else Statement
Conditionally executes a group of statements, depending on the value of an expression.
Syntax
If condition Then [statements] [Else elsestatements]
Or, you can use the block form syntax:
If condition Then
[statements]
[ElseIf condition-n Then
[elseifstatements] ...
[Else
[elsestatements]]
End If
The If...Then...Else statement syntax has these parts:
Part Description
condition Required. One or more of the following two types of expressions:
A numeric expression or string expression that evaluates to True or False.
If condition is Null, condition is treated as False.
An expression of the form TypeOf objectname Is objecttype. The
objectname is any object reference and objecttype is any valid object type.
The expression is True if objectname is of the object type specified by
objecttype; otherwise it is False.
statements Optional in block form; required in single-line form that has no Else clause.
One or more statements separated by colons; executed if condition is True.
condition-n Optional. Same as condition.
elseifstatements Optional. One or more statements executed if associated condition-n is
True.
elsestatements Optional. One or more statements executed if no previous condition or
condition-n expression is True.
Example:
Dim Number, Digits, MyString
Number = 53 ' Initialize variable.
If Number < 10 Then
Digits = 1
ElseIf Number < 100 Then
' Condition evaluates to True so the next statement is executed.
Digits = 2
Else
Digits = 3
End If


دستور نوشتاری فرمان(Syntax) به نحو زیر است:


End Statements
Ends a procedure or block.
Syntax
End
End Function
End If
End Property
End Select
End Sub
Aaron Wirth
60
End Type
End With
The End statement syntax has these forms:
Statement Description
End Terminates execution immediately. Never required by itself but may be
placed anywhere in a procedure to end code execution, close files opened
with the Open statement and to clear variables.
End Function Required to end a Function statement.
End If Required to end a block If…Then…Else statement.
End Property Required to end a Property Let, Property Get, or Property Set procedure.
End Select Required to end a Select Case statement.
End Sub Required to end a Sub statement.
End Type Required to end a user-defined type definition (Type statement).
End With Required to end a With statement.
Remarks
When executed, the End statement resets all module-level variables and all static local variables in all
modules. To preserve the value of these variables, use the Stop statement instead. You can then resume
execution while preserving the value of those variables.
Example:
Sub Form_Load
Dim Password, Pword
PassWord = "Swordfish"
Pword = InputBox("Type in your password")
If Pword <> PassWord Then
MsgBox "Sorry, incorrect password"
End
End If
End Sub


دستور نوشتاری فرمان(Syntax) به نحو زیر است:


Stop
Suspends execution.
Syntax
Stop
Remarks
You can place Stop statements anywhere in procedures to suspend execution. Using the Stop statement
is similar to setting a breahkpoint in the code.
The Stop statement suspends execution, but unlike End, it doesn't close any files or clear variables,
unless it is in a compiled executable (.exe) file.
Example:
If Label1 = “Blah” then
Stop
End if


دستور نوشتاری فرمان(Syntax) به نحو زیر است:


Switch
Evaluates a list of expressions and returns a Variant value or an expression associated with the first
expression in the list that is True.
Syntax
Switch(expr-1, value-1[, expr-2, value-2 … [, expr-n,value-n]])
The Switch function syntax has these parts:
Part Description
expr Required. Variant expression you want to evaluate.
value Required. Value or expression to be returned if the corresponding
expression is True.
Remarks
The Switch function argument list consists of pairs of expressions and values. The expressions are
evaluated from left to right, and the value associated with the first expression to evaluate to True is
returned. If the parts aren't properly paired, a run-time error occurs. For example, if expr-1 is True,
Switch returns value-1. If expr-1 is False, but expr-2 is True, Switch returns value-2, and so on.
Switch returns a Null value if:
None of the expressions is True.
The first True expression has a corresponding value that is Null.
Example:
Function MatchUp (CityName As String)
Matchup = Switch(CityName = "London", "English", CityName _
= "Rome", "Italian", CityName = "Paris", "French")
End Function
‘This example uses the Switch function to return the name of a language that matches the name of a
city.


دستور نوشتاری فرمان(Syntax) به نحو زیر است:


Goto
Branches unconditionally to a specified line within a procedure.
Syntax
GoTo line
The required line argument can be any line label or line number.
Remarks
GoTo can branch only to lines within the procedure where it appears.
Note Too many GoTo statements can make code difficult to read and debug. Use structured control
statements (Do...Loop, For...Next, If...Then...Else, Select Case) whenever possible.
Example:
If Label1 = “Blah” then
Goto Something
Else
End
Something:
End if


دستور نوشتاری فرمان(Syntax) به نحو زیر است:


On...GoSub, On...GoTo Statements
Branch to one of several specified lines, depending on the value of an expression.
Syntax
On expression GoSub destinationlist
On expression GoTo destinationlist
The On...GoSub and On...GoTo statement syntax has these parts:
Part Description
expression Required. Any numeric expression that evaluates to a whole number
between 0 and 255, inclusive. If expression is any number other than a
whole number, it is rounded before it is evaluated.
destinationlist Required. List of line numbers or line labels separated by commas.
Remarks
The value of expression determines which line is branched to in destinationlist. If the value of
expression is less than 1 or greater than the number of items in the list, one of the following results
occurs:
If expression is Then
Equal to 0 Control drops to the statement following
On...GoSub or On...GoTo.
Greater than number of items in list Control drops to the statement following
On...GoSub or On...GoTo.
Negative An error occurs.
Greater than 255 An error occurs.
You can mix line numbers and line labels in the same list. You can use as many line labels and line
numbers as you like with On...GoSub and On...GoTo. However, if you use more labels or numbers
than fit on a single line, you must use the line-continuation character to continue the logical line onto
the next physical line.
GoSub...Return Statement
Branches to and returns from a subroutine within a procedure.
Syntax
GoSub line
...
line
...
Return
The line argument can be any line label or line number.
Remarks
You can use GoSub and Return anywhere in a procedure, but GoSub and the corresponding Return
statement must be in the same procedure. A subroutine can contain more than one Return statement,
but the first Return statement encountered causes the flow of execution to branch back to the statement
immediately following the most recently executed GoSub statement.
Note You can't enter or exit Sub procedures with GoSub...Return.
Example:
Sub GosubDemo()
Dim Num
' Solicit a number from the user.
Num = InputBox("Enter a positive number to be divided by 2.")
' Only use routine if user enters a positive number.
If Num > 0 Then GoSub MyRoutine
Debug.Print Num
Exit Sub ' Use Exit to prevent an error.
MyRoutine:
Num = Num/2 ' Perform the division.
Return ' Return control to statement.
End Sub ' following the GoSub statement.
With Statement
Executes a series of statements on a single object or a user-defined type.
Syntax


دستور نوشتاری فرمان(Syntax) به نحو زیر است:


With object
[statements]
End With
The With statement syntax has these parts:
Part Description
object Required. Name of an object or a user-defined type.
statements Optional. One or more statements to be executed on object.
Remarks
The With statement allows you to perform a series of statements on a specified object without
requalifying the name of the object. For example, to change a number of different properties on a single
object, place the property assignment statements within the With control structure, referring to the
object once instead of referring to it with each property assignment. The following example illustrates
use of the With statement to assign values to several properties of the same object.
Example:
With MyLabel
.Height = 2000
.Width = 2000
.Caption = "This is MyLabel"
End With


دستور نوشتاری فرمان(Syntax) به نحو زیر است:


For...Next Statement
Repeats a group of statements a specified number of times.
Syntax
For counter = start To end [Step step]
[statements]
[Exit For]
[statements]
Next [counter]
The For…Next statement syntax has these parts:
Part Description
counter Required. Numeric variable used as a loop counter. The variable can't be a
Boolean or an array element.
start Required. Initial value of counter.

end Required. Final value of counter.
step Optional. Amount counter is changed each time through the loop. If not
specified, step defaults to one.
statements Optional. One or more statements between For and Next that are executed
the specified number of times.
Remarks
The step argument can be either positive or negative. The value of the step argument determines loop
processing as follows:
Value Loop executes if
Positive or 0 counter <= end
Negative counter >= end
After all statements in the loop have executed, step is added to counter. At this point, either the
statements in the loop execute again (based on the same test that caused the loop to execute initially),
or the loop is exited and execution continues with the statement following the Next statement.
Example:
Dim Words, Chars, MyString
For Words = 10 To 1 Step -1 ' Set up 10 repetitions.
For Chars = 0 To 9 ' Set up 10 repetitions.
MyString = MyString & Chars ' Append number to string.
Next Chars ' Increment counter
MyString = MyString & " " ' Append a space.
Next Words


دستور نوشتاری فرمان(Syntax) به نحو زیر است:


While...Wend Statement
Executes a series of statements as long as a given condition is True.
Syntax
While condition
[statements]
Wend
The While...Wend statement syntax has these parts:
Part Description
condition Required. Numeric expression or string expression that evaluates to True or
False. If condition is Null, condition is treated as False.
statements Optional. One or more statements executed while condition is True.
Remarks
If condition is True, all statements are executed until the Wend statement is encountered. Control then
returns to the While statement and condition is again checked. If condition is still True, the process is
repeated. If it is not True, execution resumes with the statement following the Wend statement.
While...Wend loops can be nested to any level. Each Wend matches the most recent While.
Tip The Do...Loop statement provides a more structured and flexible way to perform looping.
Example:
Dim Counter
Counter = 0 ' Initialize variable.
While Counter < 20 ' Test value of Counter.
Counter = Counter + 1 ' Increment Counter.
Wend ' End While loop when Counter > 19.
Debug.Print Counter ' Prints 20 in the Immediate window.


دستور نوشتاری فرمان(Syntax) به نحو زیر است:


Do...Loop Statement
Repeats a block of statements while a condition is True or until a condition becomes True.
Syntax
Do [{While | Until} condition]
[statements]
[Exit Do]
[statements]
Loop
Or, you can use this syntax:
Do
[statements]
[Exit Do]
[statements]
Loop [{While | Until} condition]
The Do Loop statement syntax has these parts:
Part Description
condition Optional. Numeric expression or string expression that is True or False. If
condition is Null, condition is treated as False.
statements One or more statements that are repeated while, or until, condition is True.
Remarks
Any number of Exit Do statements may be placed anywhere in the Do…Loop as an alternate way to
exit a Do…Loop. Exit Do is often used after evaluating some condition, for example, If…Then, in
which case the Exit Do statement transfers control to the statement immediately following the Loop.
When used within nested Do…Loop statements, Exit Do transfers control to the loop that is one nested
level above the loop where Exit Do occurs.
Example:
Dim Check, Counter
Check = True: Counter = 0 ' Initialize variables.
Do ' Outer loop.
Do While Counter < 20 ' Inner loop.
Counter = Counter + 1 ' Increment Counter.
If Counter = 10 Then ' If condition is True.
Check = False ' Set value of flag to False.
Exit Do ' Exit inner loop.
End If
Loop
Loop Until Check = False ' Exit outer loop immediately.


دستور نوشتاری فرمان(Syntax) به نحو زیر است:


IIF
Returns one of two parts, depending on the evaluation of an expression.
Syntax
IIf(expr, truepart, falsepart)
The IIf function syntax has these named arguments:
Part Description
expr Required. Expression you want to evaluate.
truepart Required. Value or expression returned if expr is True.
falsepart Required. Value or expression returned if expr is False.
Remarks
IIf always evaluates both truepart and falsepart, even though it returns only one of them. Because of
this, you should watch for undesirable side effects. For example, if evaluating falsepart results in a
division by zero error, an error occurs even if expr is True.
Example:
Function CheckIt (TestMe As Integer)
CheckIt = IIf(TestMe > 1000, "Large", "Small")
End Function
For Each...Next Statement
Repeats a group of statements for each element in an array or collection.
Syntax


دستور نوشتاری فرمان(Syntax) به نحو زیر است:


For Each element In group
[statements]
[Exit For]
[statements]
Next [element]
The For...Each...Next statement syntax has these parts:
Part Description
element Required. Variable used to iterate through the elements of the collection or
array. For collections, element can only be a Variant variable, a generic
object variable, or any specific object variable. For arrays, element can only
be a Variant variable.
group Required. Name of an object collection or array (except an array of userdefined types).
statements Optional. One or more statements that are executed on each item in group.
Remarks
The For...Each block is entered if there is at least one element in group. Once the loop has been
entered, all the statements in the loop are executed for the first element in group. If there are more
elements in group, the statements in the loop continue to execute for each element. When there are no
more elements in group, the loop is exited and execution continues with the statement following the
Next statement.
Any number of Exit For statements may be placed anywhere in the loop as an alternative way to exit.
Exit For is often used after evaluating some condition, for example If…Then, and transfers control to
the statement immediately following Next.
Example:
Dim Found, MyObject, MyCollection
Found = False ' Initialize variable.
For Each MyObject In MyCollection ' Iterate through each element.
If MyObject.Text = "Hello" Then ' If Text equals "Hello".
Found = True ' Set Found to True.
Exit For ' Exit loop.
End If
Next


دستور نوشتاری فرمان(Syntax) به نحو زیر است:


Select Case Statement
Executes one of several groups of statements, depending on the value of an expression.
Syntax
Select Case testexpression
[Case expressionlist-n
[statements-n]] ...
[Case Else
[elsestatements]]
End Select
The Select Case statement syntax has these parts:
Part Description
testexpression Required. Any numeric expression or string expression.
expressionlist-n Required if a Case appears. Delimited list of one or more of the following
forms: expression, expression To expression, Is comparisonoperator
expression. The To keyword specifies a range of values. If you use the To
keyword, the smaller value must appear before To. Use the Is keyword with
comparison operators (except Is and Like) to specify a range of values. If
not supplied, the Is keyword is automatically inserted.
statements-n Optional. One or more statements executed if testexpression matches any
part of expressionlist-n.
elsestatements Optional. One or more statements executed if testexpression doesn't match
any of the Case clause.
Remarks
If testexpression matches any Case expressionlist expression, the statements following that Case clause
are executed up to the next Case clause, or, for the last clause, up to End Select. Control then passes to
the statement following End Select. If testexpression matches an expressionlist expression in more
than one Case clause, only the statements following the first match are executed.
The Case Else clause is used to indicate the elsestatements to be executed if no match is found between
the testexpression and an expressionlist in any of the other Case selections. Although not required, it is
a good idea to have a Case Else statement in your Select Case block to handle unforeseen
testexpression values. If no Case expressionlist matches testexpression and there is no Case Else
statement, execution continues at the statement following End Select.
Example:
Dim Number
Number = 8 ' Initialize variable.
Select Case Number ' Evaluate Number.
Case 1 To 5 ' Number between 1 and 5, inclusive.
Debug.Print "Between 1 and 5"
' The following is the only Case clause that evaluates to True.
Case 6, 7, 8 ' Number between 6 and 8.
Debug.Print "Between 6 and 8"
Case 9 To 10 ' Number is 9 or 10.
Debug.Print "Greater than 8"
Case Else ' Other values.
Debug.Print "Not between 1 and 10"
End Select

Math


دستور Val برای بدست آوردن یک مقدار عددی از یک جمله استفاده می شود، جملات معمولا دارای مقداری صفر (0)هستند، اما برخی جملا با اعداد شروع می شوند این گونه جملات دارای مقدار عددی هستند، مثلا "128ب12 ایران33" در این تابع سه رقم اولش به عنوان عدد شناخته خواهد شد، یعنی 128.

دستور نوشتاری فرمان(Syntax) به نحو زیر است:


Val function
Returns the numbers contained in a string as a numeric value of appropriate type.
Syntax
Val(string)
The required string argument is any valid string expression.
The Val function stops reading the string at the first character it can't recognize as part of a number. Symbols
and characters that are often considered parts of numeric values, such as dollar signs and commas, are not
recognized. However, the function recognizes the radix prefixes &O (for octal) and &H (for hexadecimal).
Blanks, tabs, and linefeed characters are stripped from the argument.


دستور Round یک عدد اعشاری را رُند می کند، شما تعیین می کنید که چند رقم اعشار یک عدد اعشاری حذف شود، ممکن است بخواهید همه ارقام اعشاری حذف شوند و یا مثلا تا یک یا دو رقم اعشار رُند شود.

دستور نوشتاری فرمان(Syntax) به نحو زیر است:


Round
Description
Returns a number rounded to a specified number of decimal places.
Syntax
Round(expression [,numdecimalplaces])
The Round function syntax has these parts:
Part Description
expression Required. Numeric expression being rounded.
numdecimalplaces Optional. Number indicating how many places to the right of the decimal are
included in the rounding. If omitted, integers are returned by the Round
function.
Example:
Text1.Text = Number
Round(Number,5)
‘Rounds the number in text1 to 5 decimal places


دستور Int و Fix به ارقام اعشار نگاه نمی کنند، این دو تابع فقط عدد صحیح بدون اعشار عددی را برای شما بر می گردانند.مثلا ممکن است شما بخواهید وسط یک چیزی مثل عرض مانیتور را پیدا کنید، وسط عرض مانیتور نمی تواند اعشاری باشد یعنی شما نمی توانید در مکان 625.5 پیکسلی چیزی بنویسید، در واقع شما در مکان 625 یا 626 پیکسلی می توانید چیزی بنویسید یا فرمی را قرار دهید. این تابع هم همین کار را می کند، مثلا اگر عرض مانیتور و یا عرض فرمی را نصف کنید و به عددی اعشاری برسید این تابع بخش اعشاری این عدد را حذف می کند.

دستور نوشتاری فرمان(Syntax) به نحو زیر است:


Int and Fix functions
Returns the integer portion of a number.
Syntax
Int(number)
Fix(number)
The required number argument is a Double or any valid numeric expression. If number contains Null, Null is
returned.
Both Int and Fix remove the fractional part of number and return the resulting integer value.
The difference between Int and Fix is that if number is negative, Int returns the first negative integer less than
or equal to number, whereas Fix returns the first negative integer greater than or equal to number. For example,
Int converts -8.4 to -9, and Fix converts -8.4 to -8.


دستور RND در تولید اعداد تصادفی به برنامه نویس کمک می کند. از آنجا که عددی که توسط این دستور ایجاد می شود عددی اعشاری بین 0 تا 1 است، باید نتیجه برگشت داده شده از این عدد را در عددی بزرگتر ضرب کنید و سپس با استفاده از دستور Int یا Fix چنانچه می خواهید عدد صحصح باشد، بخش اعشاری عدد را حذف کنید. مقلا اگر می خواهید عددی بین 0 تا 1000 تولید کنید باید نتیجه برگشت داده شده از دستور Rnd را در 1000 ضرب کنید، سپس نتیجه را با دستورInt بدون اعشار کنید. اگر می خواهید عدد تصادفی بدست آمده هیچگاه 0 نباشد باید حتما عدد نتیجه خود را با 1 جمع کنید تا همیشه از 1 شروع شود.

دستور نوشتاری فرمان(Syntax) به نحو زیر است:


Rnd and Randomize functions
A function which generates a random number.
Randomize uses number to initialize the Rnd function's random-number generator, giving it a new seed value.
If you omit number, the value returned by the system timer is used as the new seed value.
Syntax
Randomize [number]
Rnd[(number)]
Example:
Randomize
Label1 = Int((6 * Rnd) + 1) 'Generate random value between 1 and 6.
Aaron Wirth
13


دستور sgn به برنامه نویس می گوید که علامت عددی که به آن داده چیست(منفی/مثبت/صفر)

دستور نوشتاری فرمان(Syntax) به نحو زیر است:


Sgn function
Returns a Variant (Integer) indicating the sign of a number.
Syntax
Sgn(number)
The required number argument can be any valid numeric expression.
Return Values
If number is Sgn returns
Greater than zero 1
Equal to zero 0
Less than zero -1
Example:
Dim MyVar1, MyVar2, MyVar3, MySign
MyVar1 = 12: MyVar2 = -2.4: MyVar3 = 0
MySign = Sgn(MyVar1) ' Returns 1.
MySign = Sgn(MyVar2) ' Returns -1.
MySign = Sgn(MyVar3) ' Returns 0.


دستورات هندسی، سینوس، کسینوس، تانژانت و کتانژانت در برنامه نویسی کاربدهایی دارند، و به برنامه نویس چنانچه برایش نتایج این مقادیر اهمیت داشته باشد کمک می کند، عمدتا این نتایج برای برنامه نویسانی که در محیط های گرافیکی کار می کنند کاربرد دارد، هرچند برای سایر برنامه نویسان نیز کاربردهایی می تواند داشته باشد.

دستور نوشتاری فرمان(Syntax) به نحو زیر است:


Sin, Cos, Tan, Log, Atn & Exp Functions
If you're into geometry, you're all set there too. From the list of VB functions below, you can make any
geometric calculation that exists. (Assuming you're Albert Einstein).
Syntax
Sin(number)
Cos(number)
Tan(number)
Log(number)
Atn(number)
Exp(number)


دستور Abs، مقدار مثبت یک عدد را برمی گرداند، چه عدد مثبت باشد چه منفی، گاهی اعدادی از فایل ها یا کاربران دریافت می شود و در فرمولهایی قرار داده می شود، یعنی معلوم نیست اعداد اولیه چه اعدادی هستند، هر اتفاقی ممکن است بیافتد، پس از قرار دادن اعداد در فرمولها ممکن است نتیجه منفی بدست آید در چنین شرایطی باید برنامه نویس بررسی کند که آیا عدد کوچکتر از صفر است و اگر بود آنرا در 1- ضرب کند تا عددی مثبت بدست آورد، بجای تمامی این مراحل برنامه نویس می تواند عدد بدست آمده را توسط این دستور به نتیجه ای مثبت تبدیل کند.

دستور نوشتاری فرمان(Syntax) به نحو زیر است:


Abs function
Returns a value of the same type that is passed to it specifying the absolute value of a number.
Syntax
Abs(number)
The required number argument can be any valid numeric expression. If number contains Null, Null is returned;
if it is an uninitialized variable, zero is returned.
Example:
Dim MyNumber
MyNumber = Abs(50.3) ' Returns 50.3.
MyNumber = Abs(-50.3) ' Returns 50.3.


برخی دیگر از دستورات کم کاربرتر محاسباتی Visual Basic:

دستور نوشتاری فرمان(Syntax) به نحو زیر است:


Other Math Functions
The following is a list of nonintrinsic math functions that can be derived from the intrinsic math functions:
Function Derived equivalents
Secant Sec(X) = 1 / Cos(X)
Cosecant Cosec(X) = 1 / Sin(X)
Cotangent Cotan(X) = 1 / Tan(X)
Inverse Sine Arcsin(X) = Atn(X / Sqr(-X * X + 1))
Inverse Cosine Arccos(X) = Atn(-X / Sqr(-X * X + 1)) + 2 * Atn(1)
Inverse Secant Arcsec(X) = Atn(X / Sqr(X * X – 1)) + Sgn((X) – 1) * (2 * Atn(1))
Inverse Cosecant Arccosec(X) = Atn(X / Sqr(X * X - 1)) + (Sgn(X) – 1) * (2 * Atn(1))
Inverse Cotangent Arccotan(X) = Atn(X) + 2 * Atn(1)
Hyperbolic Sine HSin(X) = (Exp(X) – Exp(-X)) / 2
Hyperbolic Cosine HCos(X) = (Exp(X) + Exp(-X)) / 2
Hyperbolic Tangent HTan(X) = (Exp(X) – Exp(-X)) / (Exp(X) + Exp(-X))
Hyperbolic Secant HSec(X) = 2 / (Exp(X) + Exp(-X))
Hyperbolic Cosecant HCosec(X) = 2 / (Exp(X) – Exp(-X))
Hyperbolic Cotangent HCotan(X) = (Exp(X) + Exp(-X)) / (Exp(X) – Exp(-X))
Inverse Hyperbolic Sine HArcsin(X) = Log(X + Sqr(X * X + 1))
Inverse Hyperbolic Cosine HArccos(X) = Log(X + Sqr(X * X – 1))
Inverse Hyperbolic Tangent HArctan(X) = Log((1 + X) / (1 – X)) / 2
Inverse Hyperbolic Secant HArcsec(X) = Log((Sqr(-X * X + 1) + 1) / X)
Inverse Hyperbolic Cosecant HArccosec(X) = Log((Sgn(X) * Sqr(X * X + 1) + 1) / X)
Inverse Hyperbolic Cotangent HArccotan(X) = Log((X + 1) / (X – 1)) / 2
Logarithm to base N LogN(X) = Log(X) / Log(N)
Aar

دستورات مرتبط با جملات عبارتند از:


دستورات انتخاب بخشی از چپ یا راست جمله، این دستورات بخشی از سمت چپ یا راست جمله ای را برای شما بر می گردانند، دستور نوشتاری فرمان(Syntax) به نحو زیر است:

Left(string, length)
Right(string, length)

مثلا:


Dim AnyString, MyStr
AnyString = "Hello World" ' Define string.
MyStr = Right(AnyString, 1) ' Returns "d".
MyStr = Right(AnyString, 6) ' Returns " World".
MyStr = Right(AnyString, 20) ' Returns "Hello World".

توضیح:

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

پارامتر اول، عبارت رشته ای(String)، که از آن جمله مثلا در دستور Right، سمت راست ترین کاراکترها برگردانده می شود.

اگر رشته شامل نول(Null) باشد، نول(Null) برگردانده می شود.

طول جمله‌ی مورد نیاز(length) نیز اجباری است؛ نوع عدد طول جمله میتواند Long باشد. عبارت عددی که نشان می دهد چند کاراکتر باید برگردانده شود.

اگر طول را صفر بدهید، رشته برگشت داده شده با طول صفر ("") برگردانده می شود.

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


دستورات حذف فواصل سمت راست و چپ یک جمله:

LTrim فواصل سمت چپ یک جمله را حذف می کند.

RTrim فواصل سمت راست یک جمله را حذف می کند.

Trim فواصل سمت راست و چپ یک جمله را حذف می کند.

دستور نوشتاری فرمان(Syntax) به نحو زیر است:

LTrim(string)
RTrim(string)
Trim(string)

مثلا:


Dim MyString, TrimString
MyString = " <-Trim-> " ' Initialize string.
TrimString = LTrim(MyString) ' TrimString = "<-Trim-> ".
TrimString = RTrim(MyString) ' TrimString = " <-Trim->".
TrimString = LTrim(RTrim(MyString)) ' TrimString = "<-Trim->".
' Using the Trim function alone achieves the same result.
TrimString = Trim(MyString) ' TrimString = "<-Trim->".


دستورات تبدیل جملات لاتین به حروف بزرگ مثل ABC یا حروف کوچک مثل abc

رشته ای را که به حروف کوچک تبدیل شده است برمی گرداند.
آرگومان رشته مورد نیاز هر عبارت رشته معتبری است. اگر رشته حاوی Null باشد، Null برگردانده می شود.


LCase and UCase functions

دستور نوشتاری فرمان(Syntax) به نحو زیر است:

UCase(string)
LCase(string)
Remarks
Only uppercase letters are converted to lowercase; all lowercase letters and nonletter characters remain
unchanged.


دستور فرمت‌بندی(قالببندی) یک جمله، که یک متغیر (رشته) حاوی یک عبارت فرمت شده بر اساس دستورالعمل های موجود در یک قالب برمی گرداند.

Formatting

دستور نوشتاری فرمان(Syntax) به نحو زیر است:


Format(expression[, format[, firstdayofweek[, firstweekofyear]]])

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

firstdayofweek Optional.


روز اول هفته (اختیاری). ثابتی که اولین روز هفته را مشخص می کند.

firstdayofweek Optional.


هفته اول سال اختیاری. ثابتی که هفته اول سال را مشخص می کند.


تنظیمات
آرگومان firstdayofweek این تنظیمات را دارد:

vbUseSystem 0 Use NLS API setting.

VbSunday 1 Sunday (default)
vbMonday 2 Monday
vbTuesday 3 Tuesday
vbWednesday 4 Wednesday
vbThursday 5 Thursday
vbFriday 6 Friday
vbSaturday 7 Saturday

آرگومان firstweekofyear این تنظیمات را دارد:



vbUseSystem 0 Use NLS API setting.
vbFirstJan1 1 Start with week in which January 1
occurs (default).
vbFirstFourDays 2 Start with the first week that has at
least four days in the year.
vbFirstFullWeek 3 Start with the first full week of the
year.



d 1-30
dd 1-30
ww 1-51
mmm Displays full month names (Hijri month names have no abbreviations).
y 1-355
yyyy 100-9666


مثال:MyTime و MyDate  با استفاده از تنظیم زمان کوتاه سیستم فعلی و تنظیم تاریخ کوتاه نمایش داده می شوند.



Dim MyTime, MyDate, MyStr
MyTime = #17:04:23#
MyDate = #January 27, 1993#
' Returns current system time in the system-defined long time format.
MyStr = Format(Time, "Long Time")
' Returns current system date in the system-defined long date format.
MyStr = Format(Date, "Long Date")
MyStr = Format(MyTime, "h:m:s") ' Returns "17:4:23".
MyStr = Format(MyTime, "hh:mm:ss AMPM") ' Returns "05:04:23 PM".
MyStr = Format(MyDate, "dddd, mmm d yyyy") ' Returns "Wednesday,
' Jan 27 1993".
' If format is not supplied, a string is returned.
MyStr = Format(23) ' Returns "23".
' User-defined formats.
MyStr = Format(5459.4, "##,##0.00") ' Returns "5,459.40".
MyStr = Format(334.9, "###0.00") ' Returns "334.90".
MyStr = Format(5, "0.00%") ' Returns "500.00%".
MyStr = Format("HELLO", "<") ' Returns "hello".
MyStr = Format("This is it", ">") ' Returns "THIS IS IT".

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


دستورات مرتبط با قالب بندی واحد پولی، درصد و اعداد


FormatCurrency, FormatPercent, FormatNumber

دستور نوشتاری فرمان(Syntax) به نحو زیر است:


FormatCurrency(Expression[,NumDigitsAfterDecimal [,IncludeLeadingDigit [,UseParensForNegativeNumbers [,GroupDigits]]]])
FormatPercent(Expression[,NumDigitsAfterDecimal [,IncludeLeadingDigit [,UseParensForNegativeNumbers [,GroupDigits]]]]) FormatNumber(Expression[,NumDigitsAfterDecimal [,IncludeLeadingDigit [,UseParensForNegativeNumbers [,GroupDigits]]]])

پاارمتر NumDigitsAfterDecimal اختیاری است. مقدار عددی که نشان می دهد چند کاراکتر به سمت راست اعشار نمایش داده می شود. مقدار پیش فرض -1 است که نشان می دهد که از تنظیمات منطقه ای(Region) کامپیوتر استفاده شده است.
IncludeLeadingDigit اختیاری است.
پارامتر UseParensForNegativeNumbers اختیاری است.
GroupDigits اختیاری است.
مثال:

result = FormatCurrency(324.45)
result = FormatPercent(324.45, 0)
result = FormatNumber(324.45, 2)


دستور تعیین قالب بندی تاریخ و زمان


FormatDateTime

دستور نوشتاری فرمان(Syntax) به نحو زیر است:





FormatDateTime(Date[,NamedFormat])


پارامتر  Date  اجباری است.
NamedFormat اختیاری است. مقدار عددی که فرمت تاریخ/زمان استفاده شده را نشان می دهد. در صورت حذف، vbGeneralDate استفاده شده است.
آرگومان NamedFormat دارای تنظیمات زیر است:
نتایج استفاده پارامتر با اعداد مختلف به شرح زیر است:


vbGeneralDate 0 

Sub main()

MsgBox FormatDateTime(Date)

MsgBox FormatDateTime(Time)

End Sub

منتج به نمایش این مقدار خواهد شد: 4/14/2023

سایر نتایج:


vbLongDate 1 
                    Friday, April 14, 2023
vbShortDate 2 
                    4/14/2023


vbLongTime 3 
                    8:01:51 PM
vbShortTime 4

                    20:01


دستور انتخاب بخش از وسط جمله:

Mid function

یک متغیر (رشته) حاوی تعداد مشخصی از کاراکترهای یک رشته را برمی‌گرداند.

دستور نوشتاری فرمان(Syntax) به نحو زیر است:


Mid(string, start[, length])

مثال:

Dim MyString, FirstWord, LastWord, MidWords
MyString = "Mid Function Demo" ' Create text string.
FirstWord = Mid(MyString, 1, 3) ' Returns "Mid".
LastWord = Mid(MyString, 14, 4) ' Returns "Demo".
MidWords = Mid(MyString, 5) ' Returns "Function Demo".


نمایش کارکتر کد مورد نظر:

این دستور یک کد 3 رقمی دریافت می کند و کاراکتری را بر می گرداند که کدش کد مورد نظر شما است.


Chr Function

یک رشته حاوی کاراکتر مرتبط با کد کاراکتر مشخص شده را برمی گرداند.
آرگومان charcode مورد نیاز Long است که یک کاراکتر را مشخص می کند.

دستور نوشتاری فرمان(Syntax) به نحو زیر است:


Chr(charcode)



مثال:


Dim MyChar
MyChar = Chr(65) ' Returns A.
MyChar = Chr(97) ' Returns a.
MyChar = Chr(62) ' Returns >.
MyChar = Chr(37) ' Returns %.

مثلا: مقدار برگشتی برای 64 کاراکتر A است.


دستور تعیین طول کاراکترهای(تعداد حروف) یک جمله


Len Function

یک متغییر از نوع Long حاوی تعداد کاراکترهای یک رشته را برمی گرداند



دستور نوشتاری فرمان(Syntax) به نحو زیر است:


Len(string | varname)

مثال:


Label1 = Len(Text1) ' Text1 = “Blah”
' Label1 = “4”


دستور پیدا کردن نقطه شروع یک جمله در جمله‌ای دیگر:


InStr function


یک متغیر (از نوع Long) را برمی‌گرداند که موقعیت اولین وقوع یک رشته در رشته دیگر را مشخص می‌کند.

دستور نوشتاری فرمان(Syntax) به نحو زیر است:


InStr([start, ]string1, string2[, compare])

تابع InStr دارای این آرگومان ها است:
شروع اختیاری عبارت عددی که موقعیت شروع را برای هر جستجو تعیین می کند. در صورت حذف، جستجو از اولین موقعیت کاراکتر شروع می شود. اگر start حاوی Null باشد، خطایی رخ می دهد. آغاز اگر مقایسه مشخص شده باشد، آرگومان مورد نیاز است.
string1 اجباری است. عبارت رشته در حال جستجو است.
string2 اجباری است. عبارت رشته جستجو شد.
آرگومان مقایسه اختیاری است.

یک LCID معتبر (LocaleID) برای استفاده از قوانین محلی خاص در مقایسه مشخص کنید.
تنظیمات آرگومان مقایسه عبارتند از:

vbUseCompareOption -1 مقایسه ای را با استفاده از تنظیمات انجام می دهد
vbBinaryCompare 0 مقایسه باینری را انجام می دهد.
vbTextCompare 1 مقایسه متنی را انجام می دهد.
vbDatabaseCompare 2 فقط Microsoft Access. مقایسه ای انجام می دهد

If InStr returns
string1 is zero-length 0
string1 is Null Null
string2 is zero-length start
string2 is Null Null
string2 is not found 0
string2 is found within string1 Position at which match is found
start > string2 0



مثال:


Dim SearchString, SearchChar, MyPos
SearchString ="XXpXXpXXPXXP" ' String to search in.
SearchChar = "P" ' Search for "P".
' A textual comparison starting at position 4. Returns 6.
MyPos = Instr(4, SearchString, SearchChar, 1)
' A binary comparison starting at position 1. Returns 9.
MyPos = Instr(1, SearchString, SearchChar, 0)
MyPos = Instr(SearchString, SearchChar) ' Returns 9.
Aaron Wirth
9
MyPos = Instr(1, SearchString, "W") ' Returns 0.


دستور تولید جمله:


String function


تکرار یک حرف برای رسیدن به جمله ای جدید.

دستور نوشتاری فرمان(Syntax) به نحو زیر است:


String(number, character)

حداکثر تعداد تکرار 256 می تواند باشد.


دستور نوشتاری فرمان(Syntax) به نحو زیر است:


InstrRev


موقعیت وقوع یک رشته در رشته دیگر را از انتهای رشته برمی گرداند.

دستور نوشتاری فرمان(Syntax) به نحو زیر است:


InstrRev(stringcheck, stringmatch[, start[, compare]])



آرگومان compare می تواند مقادیر زیر را داشته باشد:
1- (منفی یک)

vbUseCompareOption

مقایسه ای را با استفاده از تنظیمات Option انجام می دهد

0(صفر)

vbBinaryCompare

مقایسه باینری را انجام می دهد.

1(یک)

vbTextCompare 

مقایسه متنی را انجام می دهد.

2(دو)

vbDatabaseCompare

فقط انجام مقایسه بر اساس اطلاعات موجود در پایگاه دادهMicrosoft Access شما


دستور تشخیص کد ASCII یک کاراکتر:

Asc Function
Returns an Integer representing the character code corresponding to the first letter in a string.

یک عدد از نوع Integer، را به عنوان کد اولین کاراکتری که در جمله ای که به عنوان پارامتر به آن می دهید را باز می گرداند.

دستور نوشتاری فرمان(Syntax) به نحو زیر است:


Asc(string)

مثلا


Dim MyNumber
MyNumber = Asc("A") ' Returns 65.
MyNumber = Asc("a") ' Returns 97.
MyNumber = Asc("Apple") ' Returns 65.

مثلا: عدد 65 به عنوان کد کاراکتر A بازگردانده شده است.


دستور تولید یک جمله سرتاسر فاصله، این دستور شاید اضافه باشد چون دستور String همین کار را می تواند به صورت کاملتر انجام دهد.

Space Function

دستور نوشتاری فرمان(Syntax) به نحو زیر است:

sRecord$ = Space(128)


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


Replace Function

دستور نوشتاری فرمان(Syntax) به نحو زیر است:

Replace(expression, find, replace[, start[, count[, compare]]])

مثلا:

a$=Replace("ali find book in library", "find", "replace")

پس از اجرای این دستور، در متغییر $a، این جمله وجود خواهد داشت:

ali replace book in library

البته همانطور که در دستور نوشتاری فرمان و آرگومانهای فرمان ملاحظه می کنید، میتوانید نقطه شروع جایگزینی و تعداد جایگزینی را نیز تعیین کنید و حتی می توانید نوع مقایسه عبارات را نیز تعیین کنید


دستور مقایسۀ دو جمله:


StrComp function
Returns a Variant (Integer) indicating the result of a string comparison.

دستور نوشتاری فرمان(Syntax) به نحو زیر است:


StrComp(string1, string2[, compare])

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



مثال:


Dim MyStr1, MyStr2, MyComp
MyStr1 = "ABCD": MyStr2 = "abcd" ' Define variables.
MyComp = StrComp(MyStr1, MyStr2, 1) ' Returns 0.
MyComp = StrComp(MyStr1, MyStr2, 0) ' Returns -1.
MyComp = StrComp(MyStr2, MyStr1) ' Returns 1.


دستور نوشتاری فرمان(Syntax) به نحو زیر است:


StrConv function
Returns a Variant (String) converted as specified.

دستور نوشتاری فرمان(Syntax) به نحو زیر است:


StrConv(string, conversion, LCID)

conversion

Constant Value Description
vbUpperCase 1 Converts the string to uppercase characters.
vbLowerCase 2 Converts the string to lowercase characters.
vbProperCase 3 Converts the first letter of every word in a string to uppercase.
vbWide 4 Converts narrow (single-byte) characters in a string to wide (double-byte) characters.
vbNarrow 8 Converts wide (double-byte) characters in a string to narrow (single-byte) characters.
vbKatakana 16 Converts Hiragana characters in a string to Katakana characters.
vbHiragana 32 Converts Katakana characters in a string to Hiragana characters.
vbUnicode 64 Converts the string to Unicode using the default code page of the system. (Not available on the Macintosh.)
vbFromUnicode 128 Converts the string from Unicode to the default code page of the system. (Not available on the Macintosh.)

مثلا:

Sub StrConv_Example2()

    Dim TextValues As String
    Dim Result As String

    TextValues = "ACCESS vba"

    Result = StrConv(TextValues, vbLowerCase)

    MsgBox Result

End Sub

Table of Contents

دستورات مرتبط با جملات:

این دستورات سعی می کنند جملات را مدیریت کنند، یعنی بخشی از جمله را انتخاب کنند و بردارند، بخشی از جمله را حذف کنند، یا عبارتی را در جمله ای پیدا کنند، و از این قبیل کارها.

  • Strings
    • Left and Right functions
    • Trim, LTrim, and RTrim functions
    • LCase and UCase functions
    • Formatting
    • FormatCurrency, Percent & Number
    • FormatDateTime
    • Mid function
    • Chr Function
    • Len Function
    • InStr
    • String function
    • InstrRev
    • Asc Function
    • Space Function
    • Replace Function
    • StrComp
    • StrConv function

دستورات مرتبط با محاسبات:

این دستورات سعی می کنند محاسبات ریاضی با اعداد انجام دهند، مثلا یک عدد اعشاری را رند کنند، یا sin , cos عددی را محاسبه کنند و از ایت قبیل کارها.

  • Math
    • Val Function
    • Round
    • Int and Fix functions
    • Rnd & Randomize
    • Sgn
    • Sin, Cos, Tan, Log, Atn & Exp Functions
    • Abs function
    • Other Math Functions

دستورات مرتبط با منطق:

این دستورات سعی می کنند بررسی های منطق را انجام دهند، مثلا بین دو عبارت فقط یک درست باشدف هر دو عبارت درست باشد، یا عددی زوج باشد یا از این قبل کارها.

  • Logic
    • Mod Operator
    • And
    • Or Operator
    • Xor Operator
    • If Not
    • Like Operator
    • Is Operator

آرایه‌ها بخش مهمی در برنامه نویسی است که اصلا بدون آرایه‌ها برنامه نویسی ممکن نیست، هر نرم افزاری که به صورت جدی کار می کند حتما دارای آرایه است، بدون شناخت درست آرایه ها هیچ وقت هیچ برنامه نویسی نمی تواند برنامه نویس موفقی باشد.

دستورات مرتبط با آرایه‌ها:

این دستورات سعی می کنند، ارایه هایی ایجاد کنند، از بین ببرند و یا تغییر دهند.

  • Arrays
    • Base 0 & 1
    • Erase Statement
    • Dim
    • ReDim
    • Array Function

دستورات مرتبط با فایل ها و فولدرها:

این دستورات سعی می کنند، فایل ها را بررسی و محتوای آنها را بخوانند و یا فایلهای جدید بوجود بیاورند در آنها چیزی بنویسند، به محتوای فایل ها بدون اینکه فایل آسیب ببیند چیزی اضافه کنند و یا بخشی از آن را تغییر دهند و ...

  • Files/Folders
    • Dir
    • ChDir
    • ChDrive
    • CurDir
    • MkDir
    • RmDir Function
    • Kill Function
    • FileDateTime
    • FileLen
    • FileCopy
    • Cut, Copy & Pasting Text
    • GetAttr
    • SetAttr
    • FreeFile function
    • Open Function
    • Close Statement
    • Line Input
    • EOF Function
    • Lof Function
    • Print Function

همشه همه چیز درست پیش نمی رود اغلب خطاهایی به وقوع می پیوندد که ناشی از عدم وجود برخی چیزهایی که انتظار می رود وجود داشته باشند، اگر در این مورد برنامهه نویس پیش بینی بروز خطا و مدیریت آنرا به نحو مقتضی ننماید برنامه خاتمه می یابد و معلوم نخواهد شد که چرا!

دستورات مرتبط با خطاها:

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

  • Error Handling
    • On Error Statement
    • Resume, Resume Next, Resume Line
    • Error Function

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

دستورات مرتبط با ساختاریافتگی داده ها:

این دستورات سعی می کنند دادهای ساختار یافته ایجاد کنند،آنها را حذف کنند تغییر دهند و ار این قبیل کارها.   

  • Declarations
    • Function Procedures
    • Const
    • Call Statement
    • CallByName
    • Option Explicit
    • Option Private
    • Option Compare
    • Type…End Type
    • GetObject
    • CreateObject
    • Let Statement
    • TypeName
    • VarType
    • DefType

دستورات مرتبط با تاریخ و ساعت:

این دستورات سعی می کنند تاریخ و ساعت سیستم، فایل و غیرو را بدست آورند، مثلا اینکه الان چه زمانی است، چه تاریخی است، یا مثلا بین دو تاریخ مشخص چند روز فاصله است و از این قبیل کارها.

  • Date/Time
    • Date
    • Time
    • Now
    • Timer
    • DateAdd
    • DateDiff
    • DateSerial
    • DateValue
    • Year
    • Month
    • MonthName
    • WeekDayName
    • Day
    • Hour
    • Minute
    • TimeSerial
    • TimeValue
    • WeekDay

دستورات عمومی و متفرقه:

این دستورات در سعی می کنند امکاناتی را برای برنامه نویس فراهم کنند که بسیار مهم هستند، این دستورات حتی برای برنامه نویسان مبتدی به عنوانن اولین دستورات کاربرد جدی دارند، حتی برای برنامه نویسان حرفه ای این دستورات پر کاربرد هستند.

  • Miscellaneous
    • MsgBox
    • Shell
    • RGB
    • QBColor
    • Beep
    • InputBox
    • Load
    • UnLoad
    • SendKeys
    • LoadPicture
    • AppActivate

دستورات بررسی وضعیت مقادیر:

این دستورات وقتی کارایی دارند که برخی از دستورات در استفاده از مقادیر ناکام می مانند، مثلا وقتی که مقداری داخل متغییری نباشد نمی شود فهمید که آیا با "" برابر است یا خیر، در واقع وقتی مقداری خالی باشد یا وقتی مقداری nul باشد، نمی توان آنرا مثل سایر مقادیر مورد تحلیل قرار دارد، یا مثلا وقتی می وایهم بقهمیم که مقداری عددی است یا خیر این دستورات به برنامه نویس کمک می کنند.

  • Values
    • IsNull
    • IsEmpty
    • IsNumeric

دستورات شرط و حلقه:

این دستورات سعی می کنند مسیر برنامه اجرای برنامه را تعیین کنند، تغییر دهند، یا تکرار کنند.

  • Loops and Conditional
    • If...Then...Else
    • End Statements
    • Stop Statement
    • Switch
    • GoTo Statement
    • On...GoSub, On...GoTo Statements
    • GoSub...Return Statement
    • With Statement
    • For...Next Statement
    • While...Wend Statement
    • Do...Loop Statement
    • IIf Statement
    • For Each...Next Statement
    • Select Case Statement

گاهی شما یک جدول با یک ستون حاوی اسامی (اسامی بازیگران در این نمونه) دارید. شبیه این یکی:

نمونه اسکرین شات از جدول


و می خواهید نام بازیگران از این جدول در یک خط نمایش داده شود، مانند این:

نمونه اسکرین شات از نتیجه


با کمی تجربه برنامه نویسی Access و VBA می توانید این مشکل را به راحتی حل کنید. شما یک مجموعه رکورد را با یک پرس و جو در ستون جدول (یا پرس و جو) خود باز می کنید. سپس، در حالی که در تمام رکوردها حلقه می زنید، مقادیر را با جداکننده مورد نظر در یک رشته به هم متصل می کنید و در نهایت رشته الحاقی منهای آخرین جداکننده اضافه شده را برمی گردانید.

راه حل می تواند چیزی شبیه به این باشد:


Public Function QueryFieldAsSeparatedString(ByVal fieldName As String, _
ByVal tableOrQueryName As String, _
Optional ByVal criteria As String = "", _
Optional ByVal sortBy As String = "", _
Optional ByVal delimiter As String = ", " _
) As String

' Paramter description
' fieldName = Is the name of the field containing the values
' we want in our comma separated string
' tableOrQueryName = Is the name of table or query containing the column
' criteria = The criteria to filter the data
' sortBy = An optional sort expression to sort the data
' delimiter = The delimiter used to separate the values. It defaults
' to a comma and a blank, but you can use anything you
' like there


Dim db As DAO.Database
Dim rs As DAO.Recordset
Dim sql As String
Dim whereCondition As String
Dim sortExpression As String
Dim retVal As String

Set db = CurrentDb

' If there where any criteria passed to the function, we build a WHERE-condition for SQL
If Len(criteria) > 0 Then
whereCondition = " WHERE " & criteria
End If

' If there was a sort expression passed to the function, we build a ORDER BY for SQL
If Len(sortBy) > 0 Then
sortExpression = " ORDER BY " & sortBy
End If

' building the complete SQL string
sql = "SELECT " & fieldName & " FROM " & tableOrQueryName & whereCondition & sortExpression

' opening a recordset
Set rs = db.OpenRecordset(sql, dbOpenForwardOnly, dbReadOnly)
Do Until rs.EOF
' here we are looping through the records and, if the value is not NULL,
' concatenate the field value of each record with the delimiter
If Not IsNull(rs.Fields(0).Value) Then
retVal = retVal & Nz(rs.Fields(0).Value, "") & delimiter
End If
rs.MoveNext
Loop

' we cut away the last delimiter
retVal = Left(retVal, Len(retVal) - Len(delimiter))

' setting the return value of the function
QueryFieldAsSeparatedString = retVal

' cleaning up our objects
rs.Close
Set rs = Nothing
Set db = Nothing

End Function

شما می توانید این تابع را از پنجره فوری ویرایشگر VBA فراخوانی کنید و خروجی درست در زیر چاپ می شود.

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

خروجی نمایشی نتیجه در پنجره فوری با تمام پارامترهای ارائه شده
اگر فراخوانی تابع را در ControlSource-Property یک کنترل جعبه متنی قرار دهید، خروجی نشان داده شده در تصویر در ابتدای این مقاله را ایجاد می کند.

برگه ویژگی اسکرین شات، استفاده از تابع در ControlSource یک جعبه متن
اگر از DAO برای دسترسی به داده ها استفاده می کنید، چیزی برای اضافه کردن به این وجود ندارد. با این حال، اگر با یک SQL Server کار می کنید و از ADO برای دسترسی به داده ها استفاده می کنید، ممکن است عوامل دیگری را در نظر بگیرید. من با آنها در این مقاله توضیح می دهم که چگونه می توان یک رشته جدا شده با کاما از یک ADO-Recordset را در سناریوی کلاینت-سرور با استفاده از روش Clone-, Filter- and Sort- Method/Properties ADO-Recordset ایجاد کرد.

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

Transactions در اکسس

 اکسس (Jet/ACE-Database-Engine)، از Transaction ها نیز پشتیبانی می کند. و به طور ضمنی از آنها به صورت پیش فرض برای هر کوئری اکشنی که اجرا می شود استفاده می کند. تنها یک پرس و جو در داخل Transaction اجرا می شود، بنابراین شما به سختی متوجه وجود Transaction می شوید. با این حال، تضمین می‌کند که در صورت بروز خطا، می‌توان تمام تغییرات داده‌ها توسط پرس‌وجو را برگرداند. (شما می توانید با تنظیم Use Transaction -Property روی "No" استفاده از Transaction را برای یک پرس و جو غیرفعال کنید.)

اسکرین شات از برگه ویژگی یک پرس و جو شامل ویژگی Use Transaction

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

پیاده سازی Transaction ها در کد VBA
حالا اجازه دهید نگاهی به اجرای یک Transaction در VBA بیندازیم.

Public Sub TransactionDemo()

DAO.DBEngine.BeginTrans

On Error GoTo tran_Err

CurrentDb.Execute "INSERT INTO tblLog (Text1) VALUES ('New banana delivery')", dbFailOnError

CurrentDb.Execute "UPDATE tblInfo SET InfoText = 'Banana count: 2983' WHERE ID = 6 ", dbFailOnError

CurrentDb.Execute "DELETE FROM tblTemp", dbFailOnError

DAO.DBEngine.CommitTrans

Exit Sub

tran_Err:

DAO.DBEngine.Rollback

MsgBox "Transaction failed. Error: " & Err.Description

End Sub

(شما نمی توانید از Transaction های ماکرو در Access استفاده کنید.)

قبل از اجرای اولین کوئری، به DBEngine دستور می دهید تا یک Transaction را با استفاده از BeginTrans -Method شروع کند. سپس تمام کوئری های مربوطه را که می خواهید در Transaction گروه بندی کنید، اجرا می کنید.

اگر خطایی وجود نداشته باشد، معمولاً Transaction را با فراخوانی CommitTrans -Method انجام می‌دهید و با این کار، تمام تغییرات همه پرس‌وجوها را ادامه می‌دهید. اما این به شما بستگی دارد. شما می توانید یک Transaction را با روش Rollback -Method برگردانید، حتی اگر همه پرس و جوها بدون خطا موفق شوند. اگر برخی از پرس و جوهای موجود در آن شکست خوردند، همچنان می توانید یک Transaction را انجام دهید.

خوب، حالا بیایید به کد اجرای Transaction نگاه کنیم.


این خیلی سخت نیست، اما دو نکته مهم وجود دارد که باید از آنها آگاه باشید!

رسیدگی به خطاهایی که ممکن است در حین اجرای کوئری ها رخ دهد بسیار مهم است. در صورت بروز خطا، باید Transaction را برگردانید. در غیر این صورت، صفحات پایگاه داده (یک واحد ذخیره سازی داخلی از چندین رکورد) که تحت تأثیر Transaction قرار گرفته اند، قفل خواهند ماند و هیچ کاربر دیگری نمی تواند آن رکوردها را تغییر دهد. بنابراین بخشی از پایگاه داده خود را در حالت فقط خواندنی برای همه باقی می گذارید تا زمانی که نمونه Access که Transaction را شروع می کرد بسته شود. - که Transaction را عقب می اندازد. نکته مهم دیگر در اینجا استفاده از dbFailOnError -Option برای CurrentDb.Execute -Method است . اگر این گزینه را حذف کنید، دستور action SQL می‌تواند بی‌صدا از کار بیفتد. به عنوان مثال اگر پرس و جو باعث نقض قانون کلید یا اعتبار سنجی شود، رکوردها درج، به روز یا حذف نمی شوند، اما هیچ خطایی در VBA وجود نخواهد داشت. هنوز هم می‌توانستید Transaction را انجام دهید، اما فقط تغییرات سایر دستورات SQL واقعاً اجرا شد. - این دقیقاً همان مشکلی است که ما معمولاً می خواهیم با استفاده از Transaction ها از آن جلوگیری کنیم. می توانید هر تعداد پرس و جو را در یک Transaction گروه بندی کنید. اما همیشه به خاطر داشته باشید: سوابق آسیب‌دیده (صفحات پایگاه داده) تا پایان Transaction قفل خواهند شد. درخواست اقدام یا ویرایش دستی کاربر دیگری که به این سوابق دسترسی دارد، تا زمانی که قفل‌های سوابق داخل Transaction آزاد نشوند، با شکست مواجه می‌شوند.

اسکرین شات پیام خطای قفل رکورد

اگر چندین عملیات مختلف با استفاده از Transaction‌ها برای تغییر جداول مشابه دارید، همیشه به ترتیب به این جداول دسترسی داشته باشید، در غیر این صورت ممکن است بن بست (دو Transaction منتظر یکدیگر برای تکمیل و آزاد کردن قفل‌ها) رخ دهد.

بدون تعامل کاربر در یک Transaction!
در نهایت توصیه ای در مورد استفاده مفهومی از معاملات. در حالی که از نظر فنی امکان پذیر است، من قویاً توصیه می کنم از هرگونه تعامل با کاربر ("آیا می خواهید تغییرات را ذخیره کنید؟ - بله/خیر") در Transaction خودداری کنید.

همانطور که در بالا گفته شد، یک Transaction باز بخش‌هایی از پایگاه داده شما را قفل می‌کند تا زمانی که توسط یک commit یا rollback کامل شود. ایده بدی است که منتظر ورودی کاربر برای تکمیل Transaction باشید. ممکن است کاربر در غیر این صورت مشغول باشد و تبادل اطلاعات را برای مدتی باز بگذارد، یا ممکن است به استراحت ناهار خود برود یا به تعطیلات سه هفته ای خود برود. - و بخشی از پایگاه داده در برابر سایر عملیات نوشتن قفل می شود تا زمانی که او برگردد. دلیل دیگری وجود دارد که من توصیه نمی کنم تعامل کاربر در یک Transaction را شامل شود. این یکی برای Access است و برای Transaction‌های با پایگاه‌های داده سرویس‌دهنده/کلاینت مانند Microsoft SQL Server اعمال نمی‌شود. اگر در حین Transaction، مشکل فنی قطع اتصال برنامه Access Frontend از فایل Backend وجود داشته باشد، مانند خرابی شبکه یا قطع برق، خطر خراب شدن پایگاه داده شما وجود دارد. این خطر فساد نیز وجود دارد اگر یک حادثه مشابه در طول اجرای یک پرس و جو بدون Transaction رخ دهد. هر گونه تعامل با کاربر به ناچار زمان تکمیل Transaction را افزایش می دهد و در نتیجه خطر خرابی پایگاه داده را افزایش می دهد. بنابراین لطفاً Transaction‌ها را به‌عنوان یک واحد فنی کار ببینید که شامل تعامل کاربر نیست. اگر عملیاتی که می‌خواهید در Transaction انجام دهید نیاز به ورودی کاربر دارد، آن را قبلا دریافت کنید و قبل از شروع Transaction مطمئن شوید که معتبر و کامل است.

transactions در فرم های دسترسی - به شما هشدار داده شد!

اکنون، پس از اینکه رزروهای خود را در مورد تعامل کاربر در Transaction ها کاملاً روشن کردم، با این وجود توضیح خواهم داد که چگونه می توانید از Transaction ها با ورودی کاربر در فرم ها استفاده کنید. با استفاده از فرم‌های Access که از داده‌های پیش‌فرض اتصال به جدول یا پرس و جو استفاده می‌کنند، اصلاً نمی‌توانید از Transaction‌ها استفاده کنید. داده‌های موجود در فرم Access با اتصال پیش‌فرض خارج از محدوده فضاهای کاری قابل دسترسی برنامه‌نویسی اصلاح می‌شوند. بنابراین، حتی اگر قبل از تغییر داده‌ها در یک فرم، Transaction‌ها را شروع کنید، هر گونه commit یا بازگشتی که در کد انجام می‌شود هیچ تأثیری ندارد. با این حال، راهی برای عملی کردن آن وجود دارد. از Access 2002 به بعد، شما نه تنها می توانید یک فرم را با تنظیم Recordsource فرم به یک جدول یا نام پرس و جو یا هر عبارت SQL متصل کنید، بلکه می توانید فرم را با تنظیمات خاصیت Recordset به مجموعه رکوردهایی که ایجاد کرده اید، به صورت داده پیوند دهید. در کد VBA اگر این کار را انجام دهید، تغییرات داده ها در محدوده Transaction است. از این رو، اکنون می‌توانید یک Transaction را شروع کنید، به کاربر اجازه دهید داده‌ها را در یک فرم ویرایش کند و سپس Transaction را انجام دهد یا آن را برگرداند. این حتی با یک فرم حاوی یک فرم فرعی در رابطه اصلی-جزئیات کار می کند. سپس باید فرم اصلی و زیرفرم جزئیات را به یک مجموعه رکورد متصل کنید. با این حال، یک هشدار جزئی وجود دارد. به دلایلی که من متوجه نمی شوم، اگر از ویژگی های LinkMasterFields/LinkChildFields برای پیوند دادن خودکار داده ها در دو فرم استفاده کنید، این کار نمی کند . به جای آن باید فرم جزئیات را با Master for در کد خود همگام کنید. این شامل تنظیم مقدار فیلد کلید خارجی فرم فرزند به مقدار متناظر فرم اصلی است. این را می توان با تنظیم DefaultValue یک کنترل مخفی محدود به ستون کلید خارجی به مقدار کلید فرم اصلی انجام داد.

در اینجا اسکرین شات یک فرم اصلی جزئیات ساده و کد VBA مربوطه برای کنترل Transaction است.

با مدیریت Transaction به فرم اصلی جزئیات دسترسی پیدا کنید

Access master-detail-form with transaction handling

Private Sub btnBeginEdit_Click()

    DBEngine.BeginTrans

End Sub

Private Sub btnSaveChanges_Click()

    DBEngine.CommitTrans

End Sub

Private Sub btnUndoChanges_Click()

    DBEngine.Rollback

End Sub

Private Sub Form_Current()

    ' loading the child records for the current master record

    Set Me.subActorRatings.Form.Recordset = _

        CurrentDb.OpenRecordset("SELECT * FROM tblActorRatings WHERE ActorId=" & Me!ActorId)

    ' Setting the correct default value for new records

    Me.subActorRatings.Form.Controls("txtActorIdHidden").DefaultValue = Me!ActorId

End Sub

Private Sub Form_Load()

    Set Me.Recordset = CurrentDb.OpenRecordset("SELECT * FROM tblActors")

End Sub

مدیریت Transaction در اینجا به منظور نشان دادن مفهوم کاملاً دستی است. این کد به هیچ وجه برای استفاده در تولید مناسب نیست. در سناریوی تولید، باید Transaction را به صورت خودکار شروع کنید و تمام تعاملات احتمالی کاربر مانند بستن فرم، مرور سوابق، و همچنین حذف و افزودن رکوردهای جدید را انجام دهید. اجرای این امر به شیوه ای قوی یک چالش خواهد بود. متأسفانه، کتابخانه دسترسی به داده DAO هیچ ویژگی یا روشی را برای دریافت وضعیت Transaction های فعلی ارائه نمی دهد. اگر بخواهید یک Transaction غیرموجود را انجام دهید یا برگردانید، خطایی رخ خواهد داد، اما هیچ چیز مانع از باز کردن تصادفی چندین Transaction تو در تو در آن واحد نمی‌شود. بنابراین، هنگام طراحی کد رسیدگی به Transaction باید نهایت دقت را به خرج دهید تا از بروز هرگونه خطای سخت ردیابی جلوگیری کنید. از آنجایی که به هیچ وجه گنجاندن تعاملات کاربر در Transaction‌ها را توصیه نمی‌کنم، هرگز از رویکرد فوق در یک برنامه تولید استفاده نکرده‌ام. نمی توانم بگویم که با چندین کاربر قابل اعتماد کار می کند یا برای مدت طولانی.

Transaction ها و شماره های خودکار
برخی از افراد شکاف در توالی شماره خودکار خود را دوست ندارند. اگر شما یکی از آن‌ها هستید، ممکن است این ایده به ذهنتان برسد که از Transaction‌ها برای جلوگیری از «از دست رفتن» مقادیر یک دنباله شماره خودکار با قرار دادن کدی که رکوردهای جدید را در جدولی با AutoNumber وارد می‌کند، استفاده کنید. ایده خوبی است، اما کار نمی کند. هیچ مقدار AutoNumber را که در یک Transaction برگشتی استفاده شده است، پس نخواهید گرفت. این ارزش ها هنوز "از دست رفته" هستند. منطق مدیریت دنباله شماره خودکار خارج از محدوده هر Transaction است. باید اینجوری باشه در غیر این صورت، هر Transactionی که یک AutoNumber جدید درخواست کند، همه کاربران دیگر را از درج رکوردهای جدید در همان جدول تا زمانی که آن Transaction کامل شود مسدود می کند.

اگر در پروژه‌ای پیام‌های خطای غیرقابل توضیحی دریافت می‌کنید، به‌ویژه زمانی که می‌خواهید کد VBA خود را کامپایل کنید، یا اگر Microsoft Access هنگام اجرای برنامه یا عملکرد خاصی در آن از کار می‌افتد، این احتمال وجود دارد که فایل Access شما حاوی کد VBA خراب باشد. این در واقع کد VBA نیست که خراب است، بلکه کد "ماشین" است که کد VBA شما برای آن کامپایل شده است. 

کامپایل کد VBA
هنگامی که پروژه VBA خود را با استفاده از دستور Debug – Compile ... از منوی محیط VBA کامپایل می کنید، کامپایلر VBA تمام کدهای VBA پروژه شما را به P-Code ترجمه می کند . 

P-Code یک کد میانی است که کد ماشین است، اما نه برای یک معماری فیزیکی واقعی، بلکه برای یک کامپیوتر مجازی انتزاعی. می‌توان آن را به سرعت به کد ماشین اصلی رایانه‌ای که برنامه VBA در حال حاضر روی آن اجرا می‌کند ترجمه کرد. این می تواند یک فرآیند باینری باشد. در ابتدا فقط کد VBA در نمایش متن متعارف آن که در ویرایشگر VBA می بینید وجود دارد و اصلاً کد کامپایل شده وجود ندارد. سپس کد کامپایل شده ایجاد می شود. همانطور که احتمالا متوجه شده اید، می توانید یک خطای کامپایل در کد خود داشته باشید که از کامپایل شدن برخی از کدها جلوگیری می کند، اما در عین حال می توانید بخش های دیگر پروژه خود را اجرا کنید. اجرای کد در پروژه شما نیاز به کامپایل شدن دارد. بنابراین، در این سناریو یک قسمت از پروژه شما به حالت قابل اجرا کامپایل می شود در حالی که قسمت دیگری از پروژه شما به دلیل خطا در کد قابل کامپایل نیست. کامپایلر می تواند بخی ز ماژول های را کامپایل کند در حالی که دیگر ماژول‌ها را نادیده می گیرد. این زمانی اتفاق می‌افتد که یک ماژول جدید ایجاد می‌کنید، مقداری کد می‌نویسید و سپس کد جدید را بدون کامپایل کردن کل پروژه اجرا می‌کنید. سپس کامپایلر تنها ماژول (و وابستگی‌های آن) را که برای اجرای کدی که می‌خواهید در حال حاضر اجرا کنید مورد نیاز است، کامپایل می‌کند.

نتیجه گیری: حالت کامپایل برای کل پروژه اتفاق نمی افتد بلکه فقط برای هر ماژول اتفاق می افتد.

اما به همین جا ختم نمی شود. کامپایل کردن از متن متعارف (کدی که شما نوشتید) به کدی که یک کامپیوتر می تواند اجرا کند معمولاً یک فرآیند چند مرحله ای است. به عنوان مثال، کد در زبان برنامه نویسی C به صورت متوالی توسط یک پیش پردازنده، یک کامپایلر، یک اسمبلر و در نهایت یک پیوند دهنده برای ایجاد یک فایل اجرایی پردازش می شود. در طی این فرآیند، حالت های میانی کد بین متن ساده و کد ماشین ذخیره می شود. نکته اصلی این است: مراحل و بخش های متحرک زیادی از کدهای متنی خالص تا کدهای کاملاً کامپایل شده درگیر هستند. بسیاری از چیزها ممکن است در طول مسیر اشتباه پیش بروند و می توانند باعث شوند که بخش هایی از کد تا حدی کامپایل شده به حالتی برسد که باعث رفتار غیرمنتظره شود، از پیام های خطای مزخرف گرفته تا از کار افتادن Access، در هنگام پردازش. برای کامپایل صریح پروژه VBA از دستور Debug – Compile ... استفاده کنید . اگر این کار با موفقیت انجام شود، همه کدها با موفقیت کامپایل شده اند و دیگر خطر اجرا نشدن ناخواسته به دلیل کامپایل بخشی وجود ندارد.

دیکامپایل(decompile) کنید
برای رفع مشکلات (تا حدی) کد VBA کامپایل شده در یک پایگاه داده Access، تیم Microsoft Access سوئیچ خط فرمان decompile/ را برای MSACCESS.EXE ایجاد کرد. در ابتدا این به عنوان یک ویژگی داخلی و غیر مستند مایکروسافت فقط برای تیم پشتیبانی در نظر گرفته شده بود، اما در نهایت به جامعه Access درز کرد و تبدیل به ابزاری ارزشمند برای نجات پایگاه‌های اطلاعاتی اکسس خراب، شد.

اصطلاح decompile نشان می‌دهد که فرآیند P-Code کامپایل‌شده را از فایل پایگاه داده شما می‌گیرد و فرآیند کامپایل را برای بازسازی نسخه متنی ساده کد VBA معکوس می‌کند.

یک پایگاه داده عادی (mdb/accdb) اکسس شامل کد کامپایل شده و کد اصلی VBA ساده است. اجرای Access با سوئیچ decompile/ به سادگی به Access می‌گوید که تمام حالت‌های مختلف کد کامپایل‌شده را از بین ببرد و دوباره از ابتدا (یعنی کد VBA شما) شروع کند.

اشتباه نکنید، شما نمی توانید از سوئیچ decompile/ برای بازیابی کد اصلی VBA از یک فایل کامپایل شده mde/accde Access استفاده کنید، این سوئیچ در واقع راهکاری برای تیم برنامه نویسی Access در مایکروسافت بوده است که کامپایل  کامل را از سر می گرفته(شروع می کرده)، و نه برای استفاده عموم مردم- اما همانطور که گفتم کارایی دارد. هنگام ایجاد یک فایل mde/accde، کد VBA به P-Code کامپایل می شود، P-Code در فایل ذخیره می شود و کد اصلی VBA حذف می شود. بنابراین، دستور decompile/ نمی تواند با فایل کامپایل شده (mde یا accde) کاری انجام دهد، این دستور برای فایل های از نوع mdb یا accdb کارایی دارد.

هنگامی که کد به طور کامل با موفقیت کامپایل شد، خطر برگشت از کد باینری به کد VBA و حالت های میانی وجود ندارد.

Decompile در عمل
برای جمع بندی همه چیز، بیایید نحوه استفاده واقعی از decompile/ را بررسی کنیم.

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

"MSACCESS.EXE" /decompile "C:\path\to\database.accdb"


ممکن است لازم باشد مسیر MSACCESS.EXE و البته فایل پایگاه داده خود را تنظیم کنید. سپس می توانید خط فرمان بالا را از پردازنده خط فرمان Window (cmd.exe) اجرا کنید.

برای راحتی من، من معمولاً یک میانبر در فهرست کاری هر پروژه Access با چنین خط فرمانی برای فایل Access آن پروژه ایجاد می کنم. این باعث می شود که با دوبار کلیک به راحتی در دسترس باشد.

لطفاً توجه داشته باشید: سوئیچ decompile/ فقط به عنوان یک ابزار داخلی در مایکروسافت در نظر گرفته شده است. این به طور رسمی مستند نیست و احتمالاً به اندازه سایر ویژگی ها کاملاً آزمایش نشده است. همیشه ایده خوبی است که قبل از دیکامپایل کردن از فایل پایگاه داده خود نسخه پشتیبان تهیه کنید.

گاهی اوقات می خواهید بررسی کنید که آیا یک فیلد در جدول وجود دارد یا خیر. در اینجا تابعی وجود دارد که به سادگی سعی می کند فیلد مورد نظر را به متغیر DAO.Field اختصاص دهد. اگر فیلد وجود نداشته باشد، منجر به خطای زمان اجرا می شود و اجرای تابع با برچسب پرش fieldExists_Exit به پایان می رسد ، بنابراین false را برمی گرداند. این عملکرد سریع و است، اما مشکل را حل می کند.

Public Function FieldExists(tableName As String, fieldName As String) As Boolean
On Error GoTo fieldExists_Exit

Dim fld As dao.Field

FieldExists = False
Set fld = CurrentDb.TableDefs(tableName).Fields(fieldName)
FieldExists = True

fieldExists_Exit:
Set fld = Nothing

End Function

تابع عمومی FieldExists 

Public Function FieldExists(tableName As String, fieldName As String) As Boolean

Dim db As dao.Database
Dim td As dao.TableDef
Dim fld As dao.Field
Dim i As Long

FieldExists = False
Set db = CurrentDb
Set td = db.TableDefs(tableName)

For i = 0 To td.Fields.Count - 1
If td.Fields(i).Name = fieldName Then
FieldExists = True
Exit For
End If
Next

End Function

اگر فیلد در جدول وجود نداشته باشد و حلقه تا انتهای مجموعه فیلدها اجرا شود، انتظار دارم تابعی که در تمام فیلدها حلقه می زند، به میزان قابل توجهی کندتر باشد. بنابراین یک آزمایش مقایسه عملکرد کوچک را تنظیم کنید. من هر نوع از FieldExists-Function را برای جدولی با 60 فیلد به دنبال یک فیلد غیر موجود در یک حلقه فراخوانی کردم. - شگفت‌انگیز این است که به سختی تفاوتی بین این دو پیاده‌سازی از نظر عملکرد وجود دارد. من باید تعداد اجرای حلقه را به بیش از 100000 برسانم تا اصلاً آن را اندازه گیری کنم. سرانجام با 500000، فرض من به وضوح تأیید می شود. اجرای 1 (با گرفتن خطا) 2 ثانیه طول می کشد تا 500000 بار اجرا شود. پیاده سازی 2 (با حلقه از میان فیلدها) 11 ثانیه طول می کشد. بنابراین نتیجه این است که در حالی که تفاوت عملکردی بین هر دو پیاده‌سازی وجود دارد، اما ناچیز است.