کلینیک فوق تخصصی اکسس ( کاربرد vba در اکسس )

کلینیک فوق تخصصی اکسس ( کاربرد vba در اکسس )

به اشتراک گذاری اطلاعات کسب شده در اکسس از سایت آفیس و سایت های تخصصی خارجی
کلینیک فوق تخصصی اکسس ( کاربرد vba در اکسس )

کلینیک فوق تخصصی اکسس ( کاربرد vba در اکسس )

به اشتراک گذاری اطلاعات کسب شده در اکسس از سایت آفیس و سایت های تخصصی خارجی

الگوریتم لان ( Luhn algorithm )





الگوریتم لان یا فرمول لان، که به الگوریتم "پیمانه ۱۰" نیز مشهور است، یک فرمول ساده برای درستی یابی تعداد زیادی شماره شناسایی است، مانند شماره کارت‌های اعتباری، شماره‌های IMEI و شماره ملی.



در محاسبات یک Payload ظرفیت حمل یک بسته یا سایر واحدانتقال داده است


شرح برای شماره ای که حاوی Check digit نباشد : 

-شماره شامل 10 رقم 

--اولین رقم سمت راست را در نظر می گیریم و آنرا دوبل می کنیم مثلا اگر رقم سمت راست یک باشد عدد دوم میشود دو

--عدد یک و دو ( و به ترتیب تکرار می کنیم ) را زیر رقم های سمت چپ قرار می دهیم و در هم ضرب می کنیم 

--عدد حاصل از ضرب هر رقم ( در یک یا ۲ ) اگر دو رقمی شد ، آن عدد دو رقمی حاصله را رقم اول و دومش را با هم جمع می کنیم

--اعداد بدست آمده را باهم جمع می کنیم

--از فرمول زیر برای Check digit استفاده می کنیم 

10-(s mOod 10)


Example :

7992739871


1->>>> 1

2>>>> 1×2=2

3>>>>

7x1=7

9×2=18 >>>> 1+8=9

9×1=9

2×2=4

7×1=7

3×2=6

9×1=9

8×2=16 >>>> 1+6=7

7×1=7

1×2=2


s=Sum(7+9+9+4+7+6+9+7+7+2)=67

10-(67 mod 10)=3

67÷10=6.7>>67-(6×10)=67-60=3


final >>>> 79927398713












حوادث روزگار نامروت : 


محسن فوق‌لیسانس حسابداری داشت و یک تاجر بین‌المللی و پولدار بود. همه‌‌چیز در زندگی او به خوبی پیش می‌رفت تا اینکه شریکش سر او را کلاه گذاشت و اموالش را تصاحب کرد. محسن ماند با کلی بدهی؛ او در فضای مجازی از 10 پزشک به‌صورت آنلاین مشورت گرفت تا با شیوه بیهوشی از زنان سرقت کند. او که سال‌ها قبل مقام قهرمانی شطرنج کشور و کیک بوکسینگ را کسب کرده بود حالا تبدیل به یک سارق حرفه‌ای شده است.

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







ISO 8583 ( تبادل پیام تراکنش مالی )


ISO 8583 یک استاندارد بین المللی برای کارت تراکنش مالی  منشا پیام های تبادلی است


-فرمت پیام 

--نشانگر نوع پیام یا MTI

از ۴ رقم تشکیل شده ، رقم اول نسخه ، رقم دوم هدف کلی پیام ، رقم سوم چگونگی جریان در سیستم و رقم چهارم  مکان منبه پیام در زنجیره پرداخت را مشخص می کند


مثال : برای 0110

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

0*** - ISO 8583:1987
1*** - ISO 8583:1993
2*** - ISO 8583:2003
...


یک بیتمپ کدباینری است در این ایزو که نشان میدهد کدام فیلد  در یک پیام تراکنش مالی  موجودیت دارد . هر بیت بیانگر یک تک فیلد است ، با یک به معنی موجودیت و 0 عدم موجودیت فیلد .
مثال : 
ما فیلدهای زیر را در پیام  ایزو دریافت کردیم
 3, 4, 6, 7, 10, 12, 13, 14, 21, 24, 25, 27, 29, 30, 33, 34, 36, 39, 44, 48, 52, 55, 57, 59, 62,63

 اگر بعنوان باینری بخواهیم ارائه کنیم بصورت زیر می شود : 64 بیت برابر با ۸ بایت از باینری 

 0011 0110 0101 1100 0000 1001 1010 1100 1101 0010 0001 0001 0001 0010 1010 0110


0011 از سمت چپ شروع کنید  00  اول یعنی فیلد اول و دوم وجود ندارند و دو تای بعدی که یک هستند یعنی فیلد سوم و چهارم موجود هستند (فیلد چهارم میشه مبلغ تراکنش)

وقتی بخواهیم چیزی را خواناتر و فشرده تر سازیم ، می توانیم باینری را به صورت 16 بایت از مقدار هگزادسیمال ( Unpacked ) نشان دهیم که به شکل زیر می شود

365C09ACD21112A6

در زیر نشان داده شده که چگونه هگزادسیمال از باینری بدست آمده 

0011 -> 3
0110 -> 6
0101 -> 5
1100 -> C
... etc
مثال دیگر : موجودیت بیت ها 
3,4,7,11,12,13,15,17,32,35,37,41,43,48,
49,60,61,62,63,64,100,102
0011(3) 0010(2) 0011(3) 1010(A) 1000(8) 0000(0) 0000(0) 0001(10010(2) 1000(8) 1010(A) 0001(1) 1000(8) 0000(0) 0001(1) 1111(F)
323A800128A1801F0000000014000000
بصورت ۱۶ کاراکتر هگزادسیمال : 
Primary : 323A800128A1801F
Secondary :0000000014000000

فیلد 49 ( Currency ) برای ایران : کد ۳۶۴

Iran

IRR

364

درجدول ستون Data Field رو ملاحظه کنید که جلوی مقدار 49 ذکر کرده Alpha numeric به طول ۳ کاراکتر ( یعنی می توان یکی از IRR یا کد 364 را وارد کرد.)

----بیتمپ ممکن است به صورت ۸ بایت داده باینری یا بصورت 16 کاراکتر هگزادسیمال ارسال شود.0-9 ، A-F در مجموعه کاراکترهای ASCII یا EBCDIC. یک فیلد تنها زمانی وجود دارد که بیت خاص در بیتمپ درست باشد.به عنوان مثال ، بایت 82x و باینری 1000 0010 و بدین معنی است که  فیلدهای 1 و 7 در پیام موجود است و فیلدهای 2 تا 6 وجود ندارند.

Field 1 : Binary 1000 : Hex 8
Field 64 : Binary 0001 : Hex 1
8000000000000001 (Fields 1, 64)
Field 127,128 :Binary  0011 : Hex 3
0000000000000003
(secondary bitmap) Fields 127, 128


1011001000111000000000000000000000001000100000010000000000010000 .
-Now group it by 4 when it will be like
1011 0010 0011 1000 0000 0000 0000 0000 0000 1000 1000 0001 0000 0000 0001 0000 .
-Get the Hex value of each of the 4 groups.
1011 = B
0010 = 2
0011 = 3
1000 = 8
and so on
-Now put them all together to get the primary bitmap  :
B238000008810010


020012100000000080000000001100000504135520122348IRR
MTI:0200
Primary Bitmap : 1210000000008000
Field 4,7,12,49 are prsent


در ISO 8583 یک Bitmap فیلد یا زیرفیلدهایی درون یک پیام است ، که مشخص می کند سایر عناصر داده یا زیر فیلدهای عنصر داده در جای دیگری از پیام وجود دارند یا خیر.

یک فیلد زمانی وجود دارد که بیت مربوطه در بیتمپ تنظیم شده باشد.بعنوان مثال ، یک هگز با مقدار 0x82 ( دسیمال 130 ) باینری 0010 1000 است.یعنی فیلدهای 1 و 7 در پیام وجود دارند و فیلدهای 6،5،4،3،2 و 8 وجود ندارند.

Bitmap ممکن است بعنوان 8 بایت از داده باینری یا کاراکترهای هگزادسیمال ( A-F , 0-9 ) در کاراکتر اسکی بیان گردد.یک پیام شامل حداقل یک بیتمپ با نام Primary bitmap خواهد بود و نمایانگر اجزاء داده 1 تا 64 موجود است.وجود یک بیتمپ ثانویه اختیاری نیز با بیت اول در بیت مپ اولیه نمایش داده می شود ( یعنی اگر بیت اول یک باشد مثل کد باینری 1000 در اول کدهای باینری Primary با دارا  بودن اولین کاراکتر سمت چپ که  یک است ، نشاندهنده وجود Secondary Bitmap است.  در صورت وجود ، بیتمپ ثانویه نشان می دهد که آیا عناصر داده 65 تا 128 وجود دارند یا خیر .به طور مشابه یک بیتمپ سوم می تواند برای نشان دادن حضور فیلدهای 129 تا 192 استفاده شود ، اگر چه این عناصر به ندرت استفاده می شوند.


مثال : 

مقدار بیتمپ داده شده 

70 10 00 11 02 C0 48 04

هگز 70 برابر 0000 0111 ( شمارش از سمت چپ ، دوم تا چهارمین بیت یک است ، که نشان می دهد فیلد 2 تا 4 موجود هستند.)


هگز 10 برابر باینری 0000 0001 ( اولین بیت متعلق به فیلد 9 است ، همچنین بیت چهارم اینجا نشان می دهد که فیلد 12 موجود است.)


هگز 00 یا باینری 0000 0000 ( هیچ فیلدی موجود نیست )


هگز 11 یا باینری 0001 0001 ( فیلد 28 و 32 موجودند)


هگز 02 یا باینری 0010 0000 ( فیلد 39 موجود است)


هگز C0 یا باینری 0000 1100 ( فیلد 41 و 42 موجودند )



هگز 48 یا باینری 1000 0100 ( فیلد 50 و 53 موجودند)


هگز 04 یا باینری 0100 0000 ( فیلد 62 موجود است )



هگز به دسیمال : 
(70)₁₆ = (7 × 16¹) + (0 × 16⁰) = (112)₁₀
دسیمال به هگز
112÷16=7
112-(7×16)=0
70

هگز 7 به باینری ( دودویی)
7/2=3 , reminder=1
3/2=1 , reminder=1
1/2=0 , reminder=1
So >>> 111 ... 0111
5/2=2 , Reminder=1
2/2=0 , Reminder=0
0/2=0 , reminder=1
So >>> 101 ... 0101
&H57 = 01010111




فیلد 4 حاوی مبلغ تراکنش می باشد، به طور کلی اگر تراکنشی دارای مبلغ باشد، باید مقدار آن را در فیلد شماره 4 با طول ثابت 12 رقم قرار دهد برای مثال 1000 تومن را باید 000000010000 در نظر گرفت.

b 64 منظور تشکیل شده از ۶۴ بیت 
n یعنی فقط  عددی  وقتی dot دارد یعنی تا آن طول
در جدول زیر فیلد 4 ستون Type یعنی  فقط ارقام با طول دوازده کاراکتر
فیلد 7 برای تاریخ و زمان با طول ۱۰ کاراکتر مثل 0504162603 اولی Date و بعدی شامل ساعت دقیقه و ثانیه 
Data fieldTypeUsage
1b 64Bitmap
2n..19Primary account number (PAN)
3n 6Processing Code
4n 12Amount Transaction
5n 12Amount, settlement
6n 12Amount, cardholder billing
7n 10Transmission date & time
8n 8Amount, cardholder billing fee
9n 8Conversion rate, settlement
10n 8Conversion rate, cardholder billing
11n 6System trace audit number (STAN)
12n 6Local transaction time (hhmmss)
13n 4Local transaction date (MMDD)
14n 4Expiration date (YYMM)
15n 4Settlement date
16n 4Currency conversion date
17n 4Capture date
18n 4Merchant type, or merchant category code
19n 3Acquiring institution (country code)
20n 3PAN extended (country code)
21n 3Forwarding institution (country code)
22n 3Point of service entry mode
23n 3Application PAN sequence number
24n 3Function code (ISO 8583:1993), or network international identifier (NII)
25n 2Point of service condition code
26n 2Point of service capture code
27n 1Authorizing identification response length
28x+n 8Amount, transaction fee
29x+n 8Amount, settlement fee
30x+n 8Amount, transaction processing fee
31x+n 8Amount, settlement processing fee
32n ..11Acquiring institution identification code
33n ..11Forwarding institution identification code
34ns ..28Primary account number, extended
35z ..37Track 2 data
36n ...104Track 3 data
37an 12Retrieval reference number
38an 6Authorization identification response
39an 2Response code
40an 3Service restriction code
41ans 8Card acceptor terminal identification
42ans 15Card acceptor identification code
43ans 40Card acceptor name/location (1–23 street address, –36 city, –38 state, 39–40 country)
44an ..25Additional response data
45an ..76Track 1 data
46an ...999Additional data (ISO)
47an ...999Additional data (national)
48an ...999Additional data (private)
49a or n 3Currency code, transaction
50a or n 3Currency code, settlement
51a or n 3Currency code, cardholder billing
52b 64Personal identification number data
53n 16Security related control information
54an ...120Additional amounts
55ans ...999ICC data – EMV having multiple tags
56ans ...999Reserved (ISO)
57ans ...999Reserved (national)
58ans ...999
59ans ...999
60ans ...999Reserved (national) (e.g. settlement request: batch number, advice transactions: original transaction amount, batch upload: original MTI plus original RRN plus original STAN, etc.)
61ans ...999Reserved (private) (e.g. CVV2/service code   transactions)
62ans ...999Reserved (private) (e.g. transactions: invoice number, key exchange transactions: TPK key, etc.)
63ans ...999Reserved (private)
64b 64Message authentication code (MAC)
65b 1Extended bitmap indicator
66n 1Settlement code
67n 2Extended payment code
68n 3Receiving institution country code
69n 3Settlement institution country code
70n 3Network management information code
71n 4Message number
72n 4Last message's number
73n 6Action date (YYMMDD)
74n 10Number of credits
75n 10Credits, reversal number
76n 10Number of debits
77n 10Debits, reversal number
78n 10Transfer number
79n 10Transfer, reversal number
80n 10Number of inquiries
81n 10Number of authorizations (PUTA!)
82n 12Credits, processing fee amount
83n 12Credits, transaction fee amount
84n 12Debits, processing fee amount
85n 12Debits, transaction fee amount
86n 16Total amount of credits
87n 16Credits, reversal amount
88n 16Total amount of debits
89n 16Debits, reversal amount
90n 42Original data elements
91an 1File update code
92an 2File security code
93an 5Response indicator
94an 7Service indicator
95an 42Replacement amounts
96b 64Message security code
97x+n 16Net settlement amount
98ans 25Payee
99n ..11Settlement institution identification code
100n ..11Receiving institution identification code
101ans ..17File name
102ans ..28Account identification 1
103ans ..28Account identification 2
104ans ...100Transaction description
105ans ...999Reserved for ISO use
106ans ...999
107ans ...999
108ans ...999
109ans ...999
110ans ...999
111ans ...999
112ans ...999Reserved for national use
113ans ...999
114ans ...999
115ans ...999
116ans ...999
117ans ...999
118ans ...999
119ans ...999
120ans ...999Reserved for private use
121ans ...999
122ans ...999
123ans ...999
124ans ...999
125ans ...999
126ans ...999
127ans ...999
128b 64Message authentication code (This field belongs to Philipine's Eifle Tower)



00Approved or completed successfully
03Invalid merchant
09Request in progress
12Invalid transaction
13Invalid amount
14Invalid card number (no such number)
19Re-enter transaction
20Invalid response
33Expired card
41Lost card
51Not sufficient funds
54Expired card
57Transaction not permitted to cardholder
58Transaction not permitted to terminal
59Suspected fraud
101expired card
111invalid card number
119transaction not permitted to cardholder
120transaction not permitted to terminal
201expired card


Hex : 080020200000008000000000000000013239313130303031

Table 3. Primary Bitmap
bytehex valuebit valuefield #

0

20

0010 0000

3

1

20

0010 0000

11

2

00

0000 0000

3

00

0000 0000

4

00

0000 0000

5

80

1000 0000

41

6

00

0000 0000

7

00

0000 0000


MTI (0800)
bitmap (2020000000800000)
طبق بالا فیلدهای 3 ، 11 و 41 موجودند بنابراین فیلد بعدی ما شماره 3 است ( اولی MRI دومی BITMAP و سومی ... )



Table 9. Sample authorization request
Fld #DescriptionValueComments

0

MTI

0100

Authorization request

2

Primary Account Number

4321123443211234

3

Processing Code

000000

4

Amount transaction

000000012300

e.g., 123.00

7

Transmission data/time

0304054133

MMYYHHMMSS

11

System trace audit number

001205

14

Expiration date

0205

YYMM

18

Merchant Type

5399

22

POS Entry Mode

022

Swiped Card

25

POS Condition Code

00

35

Track 2

4321123443211234=0205..

37

Retrieval Reference Number

206305000014

41

Terminal ID

29110001

42

Merchant ID

1001001

49

Currency

840












Val(&HE)=Decimal(14) .... Binary (1110)
HEX2BIN:
Dim b As string * 4
b="0000"
جاگذاری از سمت راست
14 Mod 2=0
14\2=7 > 7 Mod 2=1
7\2=3 >  3 Mod 2=1
3\2=1 > 1 Mod 2=1
در نتیجه : 0000 >>>>> 1110 

تبدیل باینری به دسیمال و بعد هگزادسیمال :
Binary(1010)

1×2^(3)+0×2^(2)+1×2^(1)+0×2^(0)=10

Hex(10)=A

Binary(1100)

1×2^(3)+1×2^(2)+0×2^(1)+0×2^(0)=12

Hex(12)=C

Binary(1111)

1×2^(3)+1×2^(2)+1×2^(1)+1×2^(0)=15

Hex(15)=F



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

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

TypeMeaning
Fixedno field length used
LLVAR or (..xx)Where 0 < LL < 100, means two leading digits LL specify the field length of field VAR
LLLVAR or (...xxx)Where 0 < LLL < 1000, means three leading digits LLL specify the field length of field VAR
LL and LLL are hex or ASCII. A VAR field can be compressed or ASCII depending on the data element type.LL can be one or two bytes. For example, if compressed as one hex byte, '27x means there are 27 VAR bytes to follow. If ASCII, the two bytes '32x, '37x mean there are 27 bytes to follow. Three-digit field length LLL uses two bytes with a leading '0' nibble if compressed, or three bytes if ASCII. The format of a VAR data element depends on the data element type. If numeric it will be compressed, e.g. 87456 will be represented by three hex bytes '087456x. If ASCII then one byte for each digit or character is used, e.g. '38x, '37x, '34x, '35x, '36x.




00000:00 5B 30 31 31 30 30 30 30 30 30 30 30 38 32 30 80 38 00 00 [.[01100000000820.8..] 
00020:00 81 00 00 04 00 00 00 00 00 00 00 33 36 32 39 31 30 31 30 [............36291010] 
00040:32 39 35 37 31 30 33 31 31 30 30 30 30 30 30 35 30 33 31 53 [2957103110000005031S] 
00060:55 32 30 31 31 31 30 33 31 31 30 32 39 35 37 32 30 31 31 31 [U2011103110295720111] 
00080:30 33 31 31 30 32 39 35 37 33 30 30 31 [0311029573001 ]

5B طول پیام هست و معادل 91 یعنی 11+16×5

1×18+3×20+13=91


بیتمپ اولیه : 

80 38 00 00 00 81 00 00 
فیلدهای 48 ، 41 ،  13 ، 12 ، 11 ، 1 موجود است و فیلد یک یعنی بیتمپ ثانویه نیز موجود است.

بیتمپ ثانویه : 

04 00 00 00 00 00 00 00 
  • فیلد 70 موجود است 

فیلد ۱۱ :   30 31 39 32 36 33   >>>362910
فیلد ۱۲ : 37 35 39 32 39 31  >>> 102957 hhmmss
فیلد ۱۳ :  31 33 30 31  >>> 1031 MMDD
فیلد ۴۱ : 35 30 30 30 30 30 30 31  >>> 10000005
فیلد ۴۸ : 031 
SU20111031102957201110311029573
به فیلد طول 3 رقمی قبل از داده های باقیمانده در این فیلد توجه کنید . که یک فیلد عمومی ( استفاده آینده / خصوصی ) است.
فیلد 70 : 001  مقدار 001 از پیام این نشانه را میدهد که MTI باید 0800 باشد 

Field DefinitionMeaning
n 6Fixed length field of six digits
n.6LVAR numeric field of up to 6 digits in length
a..11LLVAR alpha field of up to 11 characters in length
b...999LLLVAR binary field of up to 999 bytes in length


بررسی پیام ایزو زیر : 

01581200F230040102B000000000000004000000

1048468112122012340000100000001107221800

000001161204171926FABCDE123ABD06414243

000termid1210Community106A5DFGR1112341234234

0158 : طول هدر ( 4 بایت یا ارقام هدر ).نشان می دهد که طول پیام غیر از هدر 158 رقم است . بصورت دو بایت آورده شده.
از خود 1200به طول 4 تا آخرین کاراکترشمارش کنید طول 158 بدست می آید ... 44+38+40+32+4
1200 : نشاندهنده MTI است .
F23 ببعد فیلد یک دارد و نشاندهنده وجود بیتمپ ثانویه چون F را اگر به باینری تبدیل کنید میشود 1111 . از اینجا مشخص می شود که فیلد یک تا 4 موجود است و فیلد یک هم با یک بودنش نمایانگر Secondary Bitmap است.
104846811212 : فیلد دو حاوی شماره حساب اولیه  ( پیشوند هدر نمایانگر طول فیلد 2 یعنی رقم 10 است ) اگر در جدوا فیلدها مشاهده کنید در ستون وسط قید شده n.19 یعنی فیلد فقط numeric یا عددی است و تا 19 عدد را می تواند شامل شود لذا چون طول حساب کمتر از 19 شده لذا طول آن که 10 است قبل آن پیوست شده.
201234 : فیلد سوم  حاوی کد پردازش
000010000000 : فیلد چهارم حاوی  مبلغ تراکنش.اگر در جدول مشاهده کنید فیلد فقط   از نوع numeric یا عددی است با طول 12 و ننوشته تا 12 در نتیجه جای کاراکتر های خالی قبلش تا طول 12 را با صفر پر کرده.
1107221800 : فیلد 7 حاوی  تاریخ و زمان انتقال.
000001 : فیلد 11 حاوی شماره حسابرسی ردیابی سیستم
161204171926 : فیلد 12 حاوی زمان محلی تراکنش
FABCDE123ABD : فیلد 22 کد داده pos
06414243 : فیلد 32 حاوی اخذ شناسایی موسسه    ( پیشوند هدر 06 که نمایانگر طول فیلد 32 است ).طبق جدول فیلد از نوع فقط numeric یا عددی و تا طول 11 را می پذیرد چون در اینجا هدر 6 عدد است لذا طول 6 را در اول آن قرار می دهیم.
000 : فیلد 39 حاوی کد پاسخ.
termid12 : فیلد 41 حاوی شماره شناسایی ترمینال
در جدول ans 8 قید کرده یعنی شامل عدد و حرف و کاراکترهای ویژه . اگر فرضاً عنوان میشد ans .. 8 اگر طول کاراکتر کمتر از 8 میشد می بایست قبل از آن طول قید گردد.
10Community : فیلد 43 حاوی موقعیت داده ( پیشوند هدر نمایانگر طول فیل  43 یعنی رقم 10 است.)
06A5DFGR : فیلد 44 حاوی کد پاسخ اضافی ( پیشوند هدر نمایانگر طول فیلد 32 یعنی رقم 6 است.)
1112341234234 : فیلد 102 حاوی شماره حساب ... این فیل  طبق جدول طولش تا 28 کاراکتر شامل ارقام و حروف و special character است >>>> ans .. 28 که احتمال زیاد عدد 11 اولی طول هدر است .


















13 خرداد ۱۴۰۲ شرکت در جشن ولیعهد اُردُن

















رفع خطای ثبت MSCOMCTL.OCX در ویندوز ۶۴ بیت




Regsvr32 /u  "C:\Windows\SysWOW64\MSCOMCTL.OCX" Regsvr32 "C:\Windows\SysWOW64\MSCOMCTL.OCX"








عبارت GET در Vba برای خواندن Data



داده را از فایل باز داخل یک متغیر می خواند

Syntax

Get [ # ] filenumber, [ recnumber ], varname



varString=String(10," ")

Get #1,,varString





Serial Port Setting




















Com1:9600,n,8,1






مِتُد Rename در تغییر نام شئ مثل جدول یا کوئری در ویژوال بیسیک


Docmd


expression.Rename (NewNameObjectTypeOldName)


Rename "New","Table","Old"


-آرگومان اول : نام جدید

-آرگومان دوم : نوع شئ مثل Query ، Table یا Form

-آرگومان سوم : نام فعلی


Application

expression.RefreshDatabaseWindow






شئ WshShell برای ایجاد شورتکات یا اجرای برنامه



Wscript.Shell


 زمانیکه نیاز به اجرای برنامه ای بصورت محلی ، دستکاری محتویات رجیستری ، ایجاد شورتکات ، یا دسترسی به پوشه سیستمی دارید می توانید WshShell را ایجاد نمائید.شئ WshShell مجموعه Environment را فراهم می سازد.این مجموعه یا Collection به شما اجازه می دهد تا متغیرهای محیطی ( مانند WINDIR ، PATH یا PROMPT ) را مدیریت کنید.






set oShellLink = WshShell.CreateShortcut(strDesktop & "\Shortcut Script.lnk")
oShellLink.TargetPath = WScript.ScriptFullName
oShellLink.WindowStyle = 1
oShellLink.Hotkey = "CTRL+SHIFT+F"
oShellLink.IconLocation = "notepad.exe, 0"
oShellLink.Description = "Shortcut Script"
oShellLink.WorkingDirectory = strDesktop
oShellLink.Save



 



شئ Shell.Application




بعضی مِتُدها :


Explore : باز کردن یک فولدر

FileRun : باز کردن دیالوگ باکس File-Run

FindFiles : نمایش باکس Search ویندوزی

FindPrinter : نمایش باکس ویندوزی انتخاب پرینتر

MinimizeAll : مینیمایز کردن هرچیزی

("\\:NameSpace("C : ایجاد یک رفرنس شئ به فولدر

Open : بار کردن پوشه خاص

BrowseForFolder : باکس نمایش فولدرها ، نتیجه : یک شئ مرجع به شئ پوشه انتخابی ( شامل ویژگی title و self )

ShellExecute : اجرا کردی اسکریپت یا اپلیکیشن

ShutDownWindowse : نمایش باکس ShutDown ویندوز

ShowBrowseBar : نمایش نوارجستجو

ToggleDesktop : نمایش و مخفی کردن دسکتاپ

UndoMinimizeAll : از حالت مینیمایز در آوردن هر چیزی 



تابع Shell برای اجرای برنامه های اجرائی



نوشتاریِ تابع بصورت زیر و دارای دو آرگومان اجباری (Required) و اختیاری(Optional)است.اولی مسیر و نام فایل ، دومی حالت پنجره مثل vbNormalFocus یا vbHide ( پنهان می شود  )



Shell ( pathname [windowstyle ] )







متد Application.DDEInitiate آغاز مبادله داده های پویا



از تابع DDEInitiate برای شروع ارتباط مبادله داده پویا با سایر برنامه ها استفاده می شود. این تابع یک کانال برای انتقال داده بین سرور DDE و برنامه کلاینت باز می نماید


expression.DDEInitiate (ApplicationTopic)


Application : یک عبارت رشته ای نمایانگر یک برنامه که می تواند در مکالمه DDE همکاری داشته باشد.معمولا این آرگومان نام یک فایل EXE است البته بدون ذکر پسوند فایل برای برنامه های بر پایه ویندوز مثل مایکروسافت اکسل


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

در صورت ارتباط موفق ، این تابع یک مکالمه DDE با برنامه و عنوان مشخص شده توسط برنامه و آرگومان های topic برقرار کرده و مقدار عددی نوع LONG را بر می گرداند.این مقدار بازگشتی یک شماره کانال یونیک و واحدی را نشان می دهد که کانالی را که انتقال داده از طریق آن می تواند انجام شود را مشخص می کند. این شماره کانال متعاقباً با سایر توابع و عبارات DDE استفاده می شود.


Dim chanNum As Variant

شروع تبادل با تابع DDEInitiate ، آرگومان اول اسم فایل Exe و آرگومان دوم نام فایل اکسس 

chanNum = DDEInitiate("MSACCESS", "dde_test.mdb")

اجرای ماکروی یک با تابع DDEExecute

DDEExecute chanNum, "[Macro1]"

خارج شدن از کانال که حتما باید انجام شود.

DDETerminate chanNum

نوشتاری تابع DDEExecute :

expression.DDEExecute (ChanNumCommand)


فرض کنید در حال اجرا کردن Word هستید و می خواهید داده را از پایگاه داده اکسس خاصی درون سندی بریزید.مکالمه DDE با اکسس بوسیله باز کردن کانال DDE با تابع DDEInitiate و مشخص کردن نام فایل پایگاه داده اکسس بعنوان topic را می توانید شروع کنید. سپس داده را از آن پایگاه داده به word از بین این کانال انتقال دهید.مایکروسافت اکسس topic های زیرین را پشتیبانی می نماید : 

-System

-نام دیتابیس

-نام جدول

-نام کوئری

-عبارت Sql 

بعد از انتشار مکالمه DDE ، می توانید از عبارت DDEExecute برای ارسال فرمان از کلاینت به برنامه سرور استفاده کنید.زمان استفاده بعنوان سرور ، اکسس هر یک از فرامین معتبر زیر را تشخیص می دهد:

-نام ماکرو در پایگاه داده جاری

-هر action که شما در ویژوال بیسیک انجام می دهید با استفاده از یکی از متدهای شئ  Docmd.

-اکشن های OpenDatabase و CloseDatabase  ، که فقط برای عملیات های DDE استفاده می شوند.



تابع DDE : 

برای مثال می توانید از این تابع در ویژگی ControlSource کنترل تکست باکس برای مشاهده داده از یک سل مشخص شده داخل شیت اکسل استفاده نمائید

DDE(applicationtopicitem)

-آرگومان اول نام برنامه اجرایی با پسوند Exe است مثل Exel یا MSAccess طبق همان فرمتی که در مسیرش وجود دارد

-آرگومان دوم یا topic اغلب یک سند مثل Sheet است ( در اکسل ) یا فایل داده ای

-آرگومان سوم یا item یک عبارت رشته ای که نام آیتم داده تشخیص داده شده توسط اپلیکیشن است . بطور مثال اگر در حال درخواست داده از اکسل هستید item بایستی بصورت نشانگر ردیف و ستون باشد مثل "R1C1" یا نام محدوده ای از سل ها


-در کمبو باکس هم می توان از داده های ستونی از اکسل استفاده کرد ولی نمی توان درقسمت تکست باکس کمبو چیزی را اضافه نمود.

-در option group و checkbox هم مورد استفاده قرار می گیرد.


















from serial port

جای com1 یا com2 می تواند شماره ip باشد

Chan = DDEInitiate("WinWedge", "Com1") MyData = DDERequest(Chan, "Field(1)")

DDETerminate Chan












جدا کردن عدد از یک متن


48-57

1- لوپ زدن در طول متن که از چندین space تشکیل شده مثل :

For i=1 To Len(sText)

2-استفاده از تابع Mid 

Mid(String,Start,Length)

Var=Mid(sText,1,i)

3-اگر Ascii code کاراکتر بین 48 تا 57 بود آن کاراکتر ( از رشته )  در متغیری موقتا ذخیرشود و در خروجی آن ارقام کنار هم نمایش داده شود.

این کدهای اسکی را می توان در جلوگیری از تایپ حروف نیز بکار برد ( در رویدادی که در  تکست باس موجود است )

می توان برای راحتر شدن از تابع IsNumeric استفاده کرد که اگر کاراکتر عددی بود در متغیری ذخیره شود.


تابع ()Asc در اکسس در مقابل تابع() Chr است.برای برگرداندن مقدار ASCII اولین کاراکتر رشته مورد استفاده قرار می گیرد.



-از تابع Split می توان استفاده کرد

-از شی RegExp در Vba نیز می توان بهره برد با استفاد از ویژگی Pattern می توان صفر تا ۹ را مشخص نمود 

[pt] >> فقط داخل براکت 

[pt^] >> شامل داخل براکت نباشد

[a-z] >> شامل حروف کوچک a تا z باشد

d >> شامل digit یا رقم

D >> شامل digit یا رقم نباشد

.  >> تک کاراکتر

n\  یاnewline

r\ یا vbCr

s\ شامل space باشد 

و استفاده از مِتُد Execute در شئ Vba.RegExp

With objRegex 

برای اجرای تابع که تمام تطابق ها در رشته را شامل شود ویژگی Global به True می بایست تنظیم شود.

.Global = True 

'.Pattern = "[^\d]+" '[NOT digit]  
.Pattern = "[\D]+" '[NOT digit] 

کاراکترهایی که ارقام نیستند را با Null جایگزین می کند 

getNumbersInString = .Replace(strIn, vbNullString) 

End With


 در زیر ویژگی Pattern عبارت A.C است اون نقطه طبق چیزی که بالا گفتیم یعنی تک کاراکتر و پس لوپ زیر تمام عباراتی که شامل سه کارکتر A تا C با داشتن یک تک کاراکتر وسط نامعلوم است را لیست می کند یعنی ABC و ADC و AJC

.Pattern = "A.C"
.Global = True
.IgnoreCase = True
stringOne = "ABC-A1289C-ADC-A1289C-AJC"
Set theMatches = regexOne.Execute(stringOne)
For Each Match In theMatches

Debug.Print Match.Value

Next

برای جدا کردن email ها :
w\ هرچیزی که شامل حرف و رقم باشد
Pattern: [\w\.\-]+@[A-Za-z0-9\.\-]+\.[A-Za-z]{2,24}
داخل براکت اولی : شامل حرف یا عدد ، نقطه یا خط ربط
بعد @
داخل براکت دومی : شامل حروف بزرگ و کوچک و ارقام
بعد دات( dot)
داخل براکت سوم : شامل حروف کوچک یا بزرگ انگلیسی 

پس ملاحظه نمودید که چندین روش برای استخراج متن مورد نظر در یک رشته وجود دارد








لایحه جدید قوه قضائیه به مجلس ( خرداد ۱۴۰۲ ) که موجبات مخالفت محجبه ها را فراهم کرد :

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



















کنترل اعتبار IBAN یا شماره حساب بانکی بین المللی




Example (fictitious United Kingdom bank,2 sort code 12-34-56, account number 98765432):

IBAN :


GB82 WEST 1234 5698 7654 32
انتقال ۴ کاراکتر اول به انتها

W E S T12345698765432 G B82
تبدیل حروف به ارقام ( برای A تا Z شروع از 10 و بهمین ترتیب )


3214282912345698765432161182 Mod 97=1


 

A=10,B=11,C=12,D=13,E=14,F=15,G=16


In this example, the  algorithm for D mod 97 will be applied to D = 3214282912345698765432161182. (The digits are colour-coded to aid the description below.) If the result is one, the IBAN corresponding to D passes the check digit test.

1-Construct N from the first 9 digits of D
N = 321428291
2-Calculate N mod 97 = 70
3-Construct a new 9-digit N from the above result (step 2) followed by the next 7 digits of D.
N = 702345698
4-Calculate N mod 97 = 29
5-Construct a new 9-digit N from the above result (step 4) followed by the next 7 digits of D.
N = 297654321
6-Calculate N mod 97 = 24
7-Construct a new N from the above result (step 6) followed by the remaining 5 digits of D.
N = 2461182
8-Calculate N mod 97 = 1
From step 8, the final result is D mod 97 = 1 and the IBAN has passed this check digit test.








در چک کردن صحَّت شماره حساب ، خود فرد مسئول است و اشتباه بودن حساب شخص ، در سایت خود بانک مشخص خواهد شد نه با الگوریتم 









فرق بین ویژگیهای Text و Value همچنین استفاده از تگ های HTML



-ویژگی Text محتویات جاری کنترل است.

-ویژگی Value مقدار ذخیره شده کنترل تکست باکس است.

-ویژگی Value تا زمانیکه کنترل فوکس دارد همیشه در جریان است .

-ویژگی Value ، ویژگی Default کنترل را تنظیم یا باز می گرداند، که این ویژگی زمانیکه به صراحت نام ویژگی خاصی را مشخص نکردید ، فرض می شود.


ویژگی Value مشابه ویژگی DefaultValue که مقداری را مشخص می کند که یک ویژگی در هنگام ایجاد رکورد جدید به آن اختصاص می یابد نیست



ویژگی TextFormat را برای مشخص کردن اینکه در تکست باکس بتوانید از بعضی تگ های HTML استفاده کنید یا خیر استفاده میشود چنانچه >> به 1  تنظیم شود . بطور مثال میخواهید Bold یا Color بودن را در جاهایی از متن به دلخواه تغییر دهید.












ویژگی AppIcon یا AppTitle در اکسس


ویژگی AppIcon یک عبارت رشته ای که نام یک فایل Bitmap یا Icon است. البته شامل مسیر !!!

راحت ترین راه برای تنظیم این ویژگی استفاده از انتخاب Application Icon در جعبه دیالوگ Access Options است.همچنین می توان با استفاده از ماکرو یا ویژوال بیسیک نیز آنرا تنظیم نمود.


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

در یک پایگاه داده اکسس ، می توان آن را با استفاده از مِتُد CreateProperty و الحاق کردنش به مجموعه پراپرتیزهای شئ آبجکت اضافه نمود.


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


expression .CreateProperty(NameTypeValueDDL)


Type :

dbBoolean

dbText

dbLong

dbByte

Ex:Name="AppIcon";Type=dbText;Value=PathOfIconOrBitmap


خطای ۳۲۷۰ بدین معنی است که ویژگی پیدا نشد.

  • Error 3270 means that the property was not found.

بالا ساختن ویژگی بود و بعد استفاده از مِتُد زیر : 

اضافه کردن ویژگی جدید به مجموعه یا کالکشن پراپرتیزها

expression .Append(Object)




با استفاده از پیام ویندوزی هم که به پنجره فرم می شود ارسال نمود می توان آیکون را ضمیمه کرد.

تابع SendMessageA و ارسال پیام ویندوزی WM_SETICON

wParam :

ICON_BIG=1

ICON_SMALL=0

lParam:

Null





























SetWindowTextA  hWndAccessApp,TitleText





مخفی کردن پنجره اصلی اکسس



advanced-installer


در رویداد بارگزاری فرم با نام لاگین می توان تابعی نوشت که از تابع ShowWondow ویندوزی  و قرار دادن مقدار صفر در آرگومان دوم آن برای مخفی کردن پنجره استفاده کند.


Private Sub Form_Load() On Error GoTo Err_Handler SetAccessWindow (SW_SHOWMINIMIZED) DoCmd.Restore Exit_Handler: Exit Sub Err_Handler: MsgBox "Error " & Err.Number & " in Form_Load procedure : " & Err.description Resume Exit_Handler End Sub

SetAccessWindow یک تابع نوشته شده توسط فرد است مثل 

SetAccessWindow(frm As Form)

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


یک تابع که جوابش Boolean است ازکتابخانه User32 که اظهار آن در ویندوز ۶۴ بیتی با ۳۲ بیتی فرق میکند


BOOL ShowWindow( [in] HWND hWnd, [in] int nCmdShow );



*اما زمان  کلیک کردن روی TaskBar پنجره اصلی نمایان میشود


استفاده از تابع SetWindowalongPtrA و بعد استفاده از SW_HIDE برای اپلیکیشن اکسس و سپس SW_SHOW برای فرم لاگین مورد نظر 



استفاده از تابع برای تغییر Attribute پنجره مشخص شده


LONG_PTR SetWindowLongPtrA( [in] HWND hWnd, [in] int nIndex, [in] LONG_PTR dwNewLong );


nIndex :

GWL_EXSTYLE=-20

WS_EX_APPWINDOW=&H40000 


زمانیکه پنجره یا Window قابل رویت است یک پنجره top-level را داخل نوار وظیفه یا TaskBar می گنجاند.


LONG_PTR GetWindowLongPtrA( [in] HWND hWnd, [in] int nIndex );


خلاصه باید Style  را گرفت و موقتاً تغییر داد


lStyle=GetWindowLongPtrA(Login.hWnd,GWL_EXSTYLE) Or WS_EX_APPWINDOW


lStyle در آرگومان dwNewLong قرار داده می شود



می توان در پکیج نصبی از  create-desktop-shortcut استفاده کرد برای معرفی  Icon مورد نظر.  

ویژگی WindowStyle >>>  در Style ، فرضا مقدار ۱ : فعال و نمایش کردن پنجره . اگر پنجره مینیمایز یا ماکزیمایز باشد ، دستگاه آن را به سایز و موقعیت اصلی خودش باز می گرداند.



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


















خواندن یک فایل باینری با عبارت Open در اکسل




Sub Temp()
Dim intFileNum%, bytTemp As Byte, intCellRow%
intFileNum = FreeFile
intCellRow = 0
Open "C:\temp.bin" For Binary Access Read As intFileNum
Do While Not EOF(intFileNum)
intCellRow = intCellRow + 1
Get intFileNum, , bytTemp 

Cells(intCellRow, 1) = bytTemp

Loop 
Close intFileNum 
End Sub


نوشتاری 

Open pathname For mode [ Access access ] [ lock ] As [ # ] filenumber [ Len = reclength ]


mode: ( اجباری )

Append,Binary,Input,OutPut Or Random

Default : Random


access : ( اختیاری )

ReadWrite, or Read Write.


filenumber: ( اجباری )

in range 1 to 511

use FreeFile function : برای بدست آورن شماره فایل موجود بعدی




در حالت های Binary ، Input و Random یک فایل را می توان با استفاده از شماره فایل متفاوت بدون بستن باز نمود. در حالت های Append و OutPut می بایست قبل از باز کردن آن با شماره فایل متفاوت ، آنرا بست.


عبارت یا دستور Get در Vba : ( خواندن داخل یک متغیر )

Reads data from an open disk file into a Variable.
Get [ # ] filenumber, [ recnumber ], varname


عبارت یا دستور Put در Vba : ( نوشتن )

Writes data from a Variable to a disk file.

Put [ # ] filenumber, [ recnumber ], varname


عبارت یا دستور Input در Vba : ( خواندن داده )


Reads data from an open sequential file and assigns the data to Variables

Input #filenumber, varlist



عبارت یا دستور Print در Vba : ( نوشتن در فایل )

Writes display-formatted data to a sequential file.

Print #filenumber, [ outputlist ]







OpenPort


Open "COM4:2400,N,8,1" For Binary Access Read Write As #1
cmnd$ = cmnd$ + Chr(13)
Put #1, , cmnd$
answer = ""
char = Input(1, #1)
While (char <> Chr(13))
If (char > Chr(31)) Then
answer = answer + char
End If
char = Input(1, #1) 'گرفتن کاراکتربعدی
Wend
Close #1



دهه سوم اردیبهشت ۱۴۰۲ :

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














شئ Drive و کالکشن Drives در فهرست گیری درایوهای موجود



دسترسی به ویژگیهای یک Disk Drive خاص یا اشتراک شبکه  رافراهم میسازد . دارای کالکشن Drives  و ویژگیهایی مثل DriveLetter VolumeName ، TotalSize ، FreeSpace  یاSerialNumber ( نه هارد )  و ... است


اسم متغیر Fso که با Set همراه میشود

CreateObject("Scripting.FileSystemObject")

For Each D in Fso.Drives

Debug.Print D.DriveLetter & ";"  & _

       D.SerialNumber & ";" & _

       D.TotalSize

Next


مِتُد GetDrive :

Declare A Variable Like fso

GetDrive("D:")

.DriveLetter

.TotalSize



The drivespec argument can be a drive letter (c), a drive letter with a colon appended (c:), a drive letter with a colon and path separator appended (c:), or any network share specification (\computer2\share1)











احمد شاه قاجار، آخرین شاه سلسله قاجار نهم اسفند ۱۳۰۸ درست ۴ سال و ۴ ماه پس از خلع قاجاریه از سلطنت ایران در ۳۲ سالگی در پاریس و در تبعید درگذشت. وی دچار اضافه وزن و بیماری کلیوی بود. احمدشاه را در تیرماه ۱۲۸۸ در ۱۲ سالگی برجای پدرش نشانده بودند. او در سال ۱۳۰۲ سه سال پس از کودتای رضا خان، از سلطنت خلع شده بود. احمد شاه به اراده خود به اروپا رفت، اما دیگر به او اجازه بازگشت داده نشد.










بررسی وجود یک فولدر با استفاده از شئ Scripting.FileSystemObjecf



در صورتیکه پوشه مورد نظر موجود باشد True و در غیر اینصورت False را بر میگرداند


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

Object.FolderExists(filespec)




Bound Control چیست




کنترل محدود


یک کنترل آگاه از داده یا Data-aware می تواند دسترسی به یک فیلد یا فیلدهای خاص در پایگاه داده را از طریق یک کنترل داده فراهم کند. این کنترل معمولاً از طریق ویژگی های DataSource و DataField به یک کنترل داده متصل می شود. هنگامی که یک کنترل داده از یک رکورد به رکورد دیگر منتقل می شود، همه کنترل های محدود متصل به کنترل داده برای نمایش داده ها از فیلدهای رکورد فعلی تغییر می کنند. هنگامی که کاربران داده ها را در یک کنترل محدود تغییر می دهند و سپس به یک رکورد دیگر منتقل می شوند، تغییرات به طور خودکار در پایگاه داده ذخیره می شوند.





مِتُد GetFile از شئ FileSystemObject



این متد یک شئ File مرتبط به فایل با یک مسیر مشخص را بازمی گرداند


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


شئ File دسترسی به تمام ویژگیهای یک فایل را فراهم می سازد


GetFolder>>>>>File Object >>>> Access to all properties


شئ File شامل کالکشن Files ( برای بازیابی فایل های موجود در یک پوشه ) ، چند متد مثل  Move ، Delete ،  Copy ،  یا OpenAsTextStream ( برای دسترسی به فایل : جهت خواندن یا نوشتن ) و چندین ویژگی مثل DateCreated ، Name Path یا ShortPath و Size و ... است


برای شمارش تعداد فایل های موجود در پوشه خاص :

CreateObject Function:

Creates and returns a reference to an ActiveX object.


-ایجاد شئ Scripting.FileSystemOject با تابع CrateObject و اعلان آن با یک متغیر و استفاده از Set

.GetFolder(folderSpecified).Files.Count






















شمارش زیر فولدرها با استفاده از شئ FileSystemObject



1-ساخت شئ و تنظیم آن ( با Set ) به متغیری جهت استفاده از مجموعه ها و متدهای آنها

CreateObject :Scripting.FileSystemObject

متد GetFolder شئ Folder مرتبط با پوشه با مسیر مشخص را برمیگرداند و می توان به ویژگیهای آن دسترسی پیدا کرد.

GetFolder(PathSpecified)

شئ Folder طبق گفته بالا دسترسی به تمام ویژگیهای یک پوشه را فراهم می سازد.





این شئ فولدر دو تا کالکشن داره یکی کالکشن Files و دیگری SubFolders که مجموعه ای از تمام اشیاء پوشه موجود در یک شئ Folder است



حالا به SubFolders احتیاج داریم که بعد با Count ، تعداد را بگیریم



GetFolder(psPath).SubFolders.Count



هر فولدری می تواند یک زیرپوشه باشد . می توان با لوپ زدن یا ارسال آن به خود تابع تعداد کل پوشه ها در مسیر مشخص را گرفت. مثلا فولدر MyPath دارای چند زیرپوشه است و زیر پوشه images ممکن است خودش دارای پوشه هایی باشد که برای آن زیرپوشه و خودش برای آنها فولدر محسوب میشود.




درصورت مفید بودن لطفا در نظرسنجی "حتی خیلی کم" شرکت نمائید










عبارت Type در ماژول


دستور Type فقط در سطح Module قابل استفاده است . پس از اینکه یک نوع تعریف شده توسط کاربر را با استفاده از Type اعلام کردید ، *می توانید متغیری از آن نوع را در هر جایی از محدوده  اعلان اعلام کرد.از Dim ، Private ، Public ، Redim یا Static برای اعلام یک متغیر از نوع تعریف شده توسط کاربر استفاده کنید


*User-Defined یعنی تعریف شده از طرف کاربر


مثال : 


Type EmployeeRecord    ' Create user-defined type.
    ID As Integer    ' Define elements of data type.
    Name As String * 20
    Address As String * 30
    Phone As Long
    HireDate As Date

End Type 

Sub CreateRecord() 

*طبق گفته بالا اظهار کنید

    Dim MyRecord As EmployeeRecord    ' Declare variable. 
    MyRecord.ID = 12003    ' Assign a value to an element. 
End Sub


مثال دیگر برای جستجوی فایل توسط متدهای کالکشنFolder


Type Search
lookin As String
Filename As String
FoundFiles() As Variant
FileCount As Long
End Type 

در تابع تعریف شده : 
اول اعلان توسط یک متغیر
Dim SearchResults As Search
With SearchResults
.lookin = "C:\Temp"
.Filename = "*.mdb" 
.FileCount = 0
.
.
End With










تابع API دانلود فایل از آدرس اینترنتی و یافتن فایل در پوشه خاص




Downloads bits from the Internet and saves them to a file.


Library : Urlmon.lib

DLL        : Urlmon.Dll



HRESULT URLDownloadToFile(

             LPUNKNOWN            pCaller,

             LPCTSTR              szURL,

             LPCTSTR              szFileName,

  _Reserved_ DWORD                dwReserved,

             LPBINDSTATUSCALLBACK lpfnCB

);

برای نوشتن تابع بالا برای ویندوز ۶۴ بیت باید PtrSafe را در  نیز در آن بکار ببرید


-Pcaller : را Null یا Zero انتخاب کنید

-szURL : به یک مقدار رشته ای که حاوی URL برای دانلود است اشاره می کند ( منظور آدرس سایت و پیج مربوطه ) اگر معتبر نباشد INET_E_DOWNLOAD_FAILURE را بر می گرداند البته ایندکسش را

-szFileName  : یک مقدار رشته ای حاوی نام یا مسیر کامل ، اگر حاوی مسیر باشد دایرکتوری مقصد یا هدف می بایست از قبل موجود باشد

-dwReserved : رزورشده است و بایستی صفر باشد.

-lpfnCb : عملیات دانلود می تواند کنسل شود توسط برگشت E_ABORT از هر تابع فراخوانی.این پارامتر می تواند به NULL تنظیم شود 





Windows Internet Explorer 8. URLDownloadToFile does not support IBindStatusCallbackEx and cannot be used to download files over 4 gigabytes (GB) in size. Refer instead to IBindStatusCallbackEx::GetBindInfoEx for a code example.



Sub download_multiple_photos()
dlpath = "C:\DownloadedPics\"
For i = 2 To 7
imgsrc = Cells(i, 2)
imgname = Cells(i, 1)
URLDownloadToFile 0, imgsrc, dlpath & imgname & ".jpg", 0, 0
Next i
End Sub



result = URLDownloadToFile(0, url, filePath, 0, 0)
If result = 0 Then
MsgBox ("Succeeded")
Else
MsgBox ("failed ")
End If



برای چک کردن فایل در مسیر خاص 

Syntax   

نوشتاری تابع

Dir[(pathname [, attributes)]

Dir("         " ,VbDirectory)



If Len(Dir("c:\example.mdb")) = 0 Then 

Msgbox "This file does NOT exist." 

Else 

Msgbox "This file does exist." 

End If


از مِتُد FileExists از شی FileSystemObject هم می توان استفاده کرد 


True را بر می گرداند اگر فایل مشخص شده موجود باشد و False را در زمان نبودن موضوع این است بودن یا نبودن !

Returns True if a specified file exists; False if it does not.

Syntax

نوشتاری متد به شرح ذیل است 

object.FileExists (filespec)

این متد از ۳ بخش تشکیل شده

The FileExists method syntax has these parts:

PartDescription
objectRequired. Always the name of a FileSystemObject
filespecRequired. The name of the file whose existence is to be determined. A complete path specification (either absolute or relative) must be provided if the file isn't expected to exist in the current folder.


نوشتاری موجودیت یک پوشه : 

object.FolderExists (folderspec)



  استفاده از  CreateObject و Set برای استفاده از متدهای این شئ : 



Scripting.FileSystemObject


از Set اگر استفاده نشود،  به آن مجموعه که این متدها و ویژگیها را داراست نمی توان دست یافت و با خطا مواجه خواهید شد یادتان نرود عزیزان شما در اکسس و هر زبانی با یکسری Dll سر وکار دارید و برای دسترسی به آنها باید اقداماتی نمود یا تیک آنها را در کتابخانه زد یا ...

-object.GetFile (filespec)
-object.GetFolder (folderspec)

Methods: 
Add
Copy
CreateTextFile
Delete
Move
-Properties:
DateCreated
DateLastAccessed
DateLastModified
Drive
Files
IsRootFolder
Name
ParentFolder
ShortPath
Size
SubFolders
Type





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

























SetOption , GetOption Method



از متدهای SetOption و GetOption برای تنظیم و گرفتن مقادیر انتخاب ( Option Box ) در جعبه دیالوگ Options استفاده کنید.برای مشاهده این دیالوگ باکس ، اول باتن Office  و سپس Access Options را کلیک نمائید.

مقداری که به متد SetOption بعنوان آرگومان  ارسال می کنید  بستگی به نوع گزینه ای دارد که تنظیم می کنید.


مثال : 


گرفتن مقدار :

Debug.Print Application.GetOption("Selection Behavior")

ارسال مقدار :

Application.SetOption "Selection Behavior", 1

مثال دیگر گرفتن فولدر پیش فرض دیتابیس

Application.GetOption("Default Database Directory")



خاموش کردن تنظیم اعلان های تائید تغییر رکورد ، حذف و کوئری های اکشن  یا استفاده از متد Docmd.SetWarnings False


Application.SetOption "Confirm Record Changes", False

Application.SetOption "Confirm Document Deletions", False

Application.SetOption "Confirm Action Queries", False






















Private Declare Function GetUserNameA Lib "advapi32.dll" Alias _
(ByVal lpBuffer As String, nSize As Long) As Long






غیر فعال کردن تیک CheckBox با فعال کردن کنترل تیک چک باکس دیگر در فرم



لطفا در صورت اعلام نظرسنجی خیلی کم یا کم در همان یادداشت علت را ذکر کنید



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


در رویداد کلیک هر کدام می توانید دیگری را فالز یا صفر کنید اگر درسته لطفا نظر بدهید.


checkbox2=Not Checkbox1

یا

CheckBox2=0


چک کنید کدام درست است و اعلام بفرمائید.


threads/if-checkbox1-is-selected-cannot-select-checkbox2-if-checkbox2-is-selected-cannot-select-checkbox1


چنانچه تعداد چک باکس ها زیاد باشد که معمولا همچین کاری کمتر پیش میاد مگر اینکه خلافش ثابت بشود >>> باید در رویداد Click هر کنترل ، سایر کنترل ها را مقدار صفر دهید که زمانبراست ( البته منظورم چک باکس های بیش از ۸ باکس است ). روشی را باید بیابید که در کنترل های چک باکس با نام معین لوپ بزند و اگر اسم کنترل فعلی که زده شد نبود آنها را False نماید  ... اگر کسی به روش مذبور دست پیدا کرد برای نمایش و استفاده سایر کاربران در نظرات قرار دهد.



اجرای کوئری به روز رسانی : 

تیک چک باکس با نام Acct در کل رکوردهای جدول tblData ، در صورتیکه زده شده باشد ( برابر True یا عددی غیر صفر ) را بر می دارد.


Run an UPDATE query.

CurrentDb.Execute "UPDATE tblData1 SET Acct = False WHERE Acct <> False"


اسنادِ ویژگی ( Property ) و اشیاءِ ( Object ) مایکروسافت آفیس به رایگان برای مطالعه همه قرار داده شده مثل ویژگی زیر .لطفا دنبال کد آماده نباشید!!!  در خود  مثال های خیلی خوب و کاربردی آورده که فقط با مطالعه و تست زیاد می توان یاد گرفت.


ویژگی ControlType (جهت مطالعه)

office-2003