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

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

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

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

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

خروجی جدول یا کوئری در فرمت txt



بهترین روش این است که در ریبون اکسس و تب اکسترنال باتن اکسپورت را زده و بعد از دایالوگ باکسی که باز میشود مسیر فایل را انتخاب کرد و گزینه Save  Import/Export در آنجا نحوه ی  فاصله گذاری و غیره را می توان تنظیم کرد قبل از ذخیره کردن و با متد DoCmd.RunSavedImportExport میتوان فراخوان کرد .

اکسپورت به اکسل


کپی رکوردست 




AutoFit  : 


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






عملگر منطقی


Between [Start Date] And [End Date] Or ([Start Date] Is 

(Null And [End Date] Is Null


Start و End هر دو نال باشند :

در پارت اول قبل از And 

Null And Null=Null 

در پارت دوم بعد از And 

Start is null=True

End is null=True

گفته شد اگر Null باشد تابع True  ، IsNull  را بر می گرداند پس 

داخل پرانتز میشود    ( True And True ) که طبق عملگر And  نتیجه پارات دوم True می شود 


مرحله آخر نتیجه ی پارت اول یعنی Null و پارت دوم True با توجه به Or بین آنهاست نتیجه طبق جد ول دوم : TRUE 

نتیجه ی آخر که True هست باعث میشود که تمام مقادر اعمال شود در Boolean گفته شد برای False  صفر در نظر می گیریم و برای True هر مقداری غیر از صفر 





شرط ساده در کوئری

جدول titles : 

title _id type price
-------- --------- -----
T01 history 21.99
T02 history 19.95
T06 biography 19.95
T13 history 29.99
T12 biography 12.9
SELECT title_id, type, price
FROM titles
('WHERE (type = 'history
('OR type = 'biography
AND price < 20;

در Sql بالا شرط بدین شکل است تنها  رکوردهائی را نمایش میدهد که فیلد type شان history  یا biography  و قیمت شان هم کوچکتر از 20 باشد  و نتیجه : 

title_id type price
-------- --------- -----
T06 biography 19.95
T02 history 19.95
T12 biography 12.99

فیلتر پیشرفته ( شرط کوئری )


فرض کنید کنترل چک باکسی در فرم ساخته اید به نام Check2 که در فرم اصلی با نام Form3 قرار گرفته میخواهید آن چک باکس را به رکوردسورس فرم وصل کنید به این منظور که هر زمان باتنی با نام فیلتر را فشردید بر حسب تگ آن چک باکس فیلتر در دیتیل  اعمال گردد. 


در تگ چک باکس  مقدار را وارد کنید (  فرض می کنیم میخواهیم فیلد تحصیلات در دیتیل با مقدار چک باکس فیلترشود  پس مقدار تگ را  دیپلم قرار می دهیم )  سپس به دیزاین فرم رفته و در رکورد سورس به کوئری بیلدر می رویم  ( با زدن سه نقطه کنار باکس رکوردسورس) . 


در قسمت Criteria فیلد Education  تایپ میکنیم 

Forms!Form3!Check2.Tag

حتما  در رویداد باتن فیلتر منبع فرم را ریکوئری کنید 

Me.Requery 

زمانیکه فرم باز شود دیتیل فرم طبق مقداری که در  پراپرتی تگ (  Tag ) چک باکس گذاشتید فیلتر میشود و امکان حذف فیلتر را ندارید. (مگر ساخت باتن دیگر و نوشتن Me.FilterOn=False )


اگر بخواهید زمان بازشدن فرم کل رکوردها نمایش داده شود و زمانیکه بر روی باتن فیلتر فشردیدآنوقت فیلترانجام شودباید دریک ستون دیگرفیلدEducation را انتخاب و توتالزرا Where کنید و سپس در کریتریای آن بنویسید 

(iif(Forms!Form3!Check2=True,Forms!Form3!Check2.Tag,False

موردبالا بعد از برداشتن تیک دیتیل را خالی نمایش میدهد که برای اینکار از Is Null آن چک باکس و  false در iff ذکرشده استفاده می کنیم.


فیلتر کردن تاریخ : 

-  دو تکست باکس به نام های Text12 و Text14در فرم دارید و می خواهید رکوردهای بین دو تاریخ درج شده در دو تکست باکس فیلترشود در همان کوئری بیلدر در شرط فیلد تاریخ می نویسید 

Between Forms!Form3!Text12 And 

Forms!Form3!Text14


*** Null معادل هیچ مقداری نیست  جمع مقادیر با Null همان Null میشود پس برای فیلد رکوردی که Null است یا کنترلی که Null است باید صفر در نظرگرفته شود تا جواب جمع Null نشود و ارور دریافت نکنید !!!

اگر یکی از تکست باکس ها یا جفت خالی باشند چه اتفاقی خواهد افتاد به رفتار عملگرها مراجعه کنید )  ؟!!!

طبق داکیومنت اکسس بولین مقدار ندارد ولی برای فالز صفر و برای ترو هر عددی غیر از ترو می تواند باشد 


Between True And Null=Null 

Between Null And True=Null

Between Null And Null=Null


( یکسری از دوستان فقط بلدن کپی کنن !!! در عبارت بالا  فاصله 

رعایت شود )


نکته !!!   اگر در تکست باکسها  الگوی ورودی یا Input Mask استفاده کردید برای تاریخ حتما باید مثل Input Mask فیلد تاریخ باشد یعنی اگر در فیلد تاریخ جدول  از 0 ;0000/00/00  استفادا کردید که اسلش ها هم درنظر گرفته میشود اگر Inpust Mask تکست باکس ها را فقط 0000/00/00 در نظر بگیرید چون مچ نمی شود خالی نمایش میدهد  و یا اگر اینپوت ماسک شما در جدول بصورت 0000/00/00 ( که اسلش ها در نظر گرفته نمی شود ) باشد و در تکست باکس از اینپوت ماسک استفاده نکرده باشید و خودتان تاریخ را با اسلش تایپ کنید باز هم مچ نمیشود چون در جدول فرضا 13980120 ثبت شده ولی شما در تکست باکس 1398/01/20 وارد کرده اید . ( پس خالی بودن دیتیل فرم بدین معنیست که مچ نشده چه تاریخ مورد نظر در مقدار فیلد جدول نباشد یا اینکه الگوی شما با تکست باکس نخواند )


پس اول چک کنید که الگوها یکی باشند !!! بعد از تطبیق دادن اگر شما یکی از تکست باکس ها را خالی رها کنید زمانیکه باتن فیلتر را کلیک می کنید باز هم دیتیل را خالی نمایش می دهد برای اینکه اگر یکی از آنها خالی بود از حالت فیلتر خارج شود کافیست با آن آدرس تکست باکس عبارت Is Null را بکار ببرید  ( بافاصله !!! ). اشتباه نکنید در محیط وی بی تابع  IsNull  وجود دارد.



Between (Forms!Form3!Text12 Or Forms!Form3!Text12 is Null) And

 (Forms!Form3!Text14 Or Forms!Form3!Text14 is Null)


برای درک عبارت بالا  بهتر است حتما عملکرد عملگرها را بدانیم 


Boolean Operation

  • not NULL = NULL

  • NULL or false = NULL

  • NULL or true = true

  • NULL or NULL = NULL

  • NULL and false = false

  • NULL and true = NULL

  • NULL and NULL = NULL




The Microsoft Access IsNull function returns TRUE if the expression is a null value. Otherwise, it returns FALSE.


فرضا در Text12 هیچ مقداری وجود ندارد ( Null )  یعنی  Null است و is Null برابر True ( چون  در اینجا تکست 12 Null است پس True را بر می گرداند ) پس طبق  بالا داریم   


Null Or True=True

AβAND(&amp;&amp;)OR(| |)NOT(exclA)
FALSEFALSEFALSEFALSETRUE
FALSETRUEFALSETRUETRUE
TRUEFALSEFALSETRUEFALSE
TRUETRUETRUETRUEFALSE
حال طبق جدول عملگرهای  منطقی بالا اگر تکست ۱۲ نال باشد مقدار پرانتز اول True هست ( طبق Operation Boolean ) و مقدار پرانتز دوم که True Or False هست هم میشود True و True And True نتیجتا True میشود 

در عملگر And اگر دو مقدار بولین فالز باشد فالز را بر می گرداند ولی اگر جفت ترو باشد ترو را

-داکیومنت برای  مقدار Boolean  :

Type Conversions

When Visual Basic converts numeric data type values to Boolean, 0 becomes False and all other values become True. When Visual Basic converts Boolean values to numeric types, False becomes 0 and True becomes -1.

در مورد Between...And : 

If exprvalue1, or value2 is Null, Between...Andreturns a Null value.



برای شرط تاریخ میتوان با Iif شرطی نوشت که اگر تکست باکس  شروع خالی بودبرای عملگر بزرگتر ( برای تکست باکس شروع ) First یا Min ( بهتر است استفاده شود ) فیلد تاریخ اعمال شود و برای عملگر کوچکتر ( برای  تکست باکس خاتمه ) اگر تکست باکس خاتمه خالی بود Last یا Max فیلد تاریخ ( که بهتر است )  

متدها و پراپرتی های Word


محتویات داخل داکیومنت ( Range )

Documents.Content

برگشت  آبجکت رنج کاراکترهای شروع تا آخر

(Documents.Range(Start,End

Object در داکیومنت اکتیو ورد بسیاره وبه پاگراف ها ، بوک مارک ها و سل ها اعمال میشه و Range استارت و پایانی دارد فرضا اول پاراگراف ۲ تا پایان پاراگراف ۴ 


.(2)ActiveDocument.Range(ActiveDocument.paragraphs

(Range.Start,ActiveDocument.Paragraphs(4).Range.End


  :  Rang.Copy 

ActiveDocument.Paragraphs(1).Range.Copy

اضافه کردن به آخر داکیومنت 
"ActiveDocument.Content.InsertAfter "end of documen
برای اضافه کردن به انتهای پاراگراف باید به رنج ایجاد شده اعمال شود
1-Doc.Paragraphs(1).Range.Start,Doc.Paragraphs(1).Range.End
Set doc = ActiveDocument _ =Set rngRange
_ ,doc.Range(doc.Paragraphs(1).Start
(doc.Paragraphs(1).End - 1 _ rngRange.InsertAfter
" This is now the last sentence in paragraph one."

انتخاب پارگراف بولد کردن فونت
: Range.Select

()Sub SelectParagraph ActiveDocument.Paragraphs(1).Range.Select Selection.Font.Bold = True End Sub


درج تکست Selection.TypeText
درج پارگراف جدید یا بلنک Selecttion.TypeParagrapg



Selection.Collapse Direction:=wdCollapseStart


برای درج تکست در فیلدهائی که در فرم تعبیه کردیم
فرضا برای کپی کردن فیلد رکوردی از جدول یا کوئری اکسس



"ActiveDocument.FormFields("Text1").Result = "Don Funk

باز کردن Word


باز کردن داکیومنت 

از رفرنس تیک Microsoft Word را بزنید و با کالکشن های آن کار کنید 


"Documents.Open FileName:="C:\MyFolder\Sample.doc


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

,expression.Open (FileNameConfirmConversions

 ReadOnlyAddToRecentFiles

PasswordDocumentPasswordTemplate

RevertWritePasswordDocument

WritePasswordTemplateFormat

EncodingVisibleOpenConflictDocument

(OpenAndRepairDocumentDirectionNoEncodingDialog


برای ذخیره ی داکیومنت  ( آرگومان ها آپشنال هستن )

_ , Documents.Save NoPrompt:=True
OriginalFormat:=wdOriginalDocumentFormat

اگر قبلا Save شده باشد با SaveAs

اکسپورت محتویات pdf به رنج اکسل


مراحلی که باید طی شود  


باز کردن pdf در محیط ورد      WordApp.Documents.Open 

کپی کردن محتویات ورد  WordApp.ActiveDocument.Content.Copy

پیست در رنج اکسل     WS.RANG("B4").COPY و WS.PASTESPECIAL 



تبادل داده در Vba و ماکروها با آبجکت Tempvar


-روش مناسب برای تبادل دیتا بین Vba و ماکروها .


-TempVars کلا ۲۵۵ آیتم را ذخیره می کند اگر با Remove حذف نشود در حافظه باقی می ماند تا زمانیکه دیتابیس بسته شود( منظور اگر تعداد بیش از ۲۵۵ باشد چرا چون جایگزین نمیشود  )


 فرض کنید میخواهید نام یوزر را در زمان باز بودن دیتابیس در Vba یا ماکروها ( SetTempVars) استفاده کنید ، در فرم لاگین پس از معتبر بودن پسورد می توانید نام یوزر که در اینجا بنام User هست را در txtUser ذخیره کنید که در حافظه باقی بماند و در طول برنامه هر جائی که لازم بود فراخوانش کنید روش بصورت زیر است آن را Add می کنیم 

TempVars.Add "txtUser",Me.User

برای حذف متغیر تخصیص شده به اسم txtUser کافیست از متد  Remove بجای  Add استفاده کنیم 

آپشن باتن ( رادیو باتن ، چک باکس )


فرض کنید فیلد جنسیت ( کمبوباکس شامل مرد و زن )  را در فرم میخواهید بصورت باتن  های انتخابی در فریم  نمایش دهید  ، کاری که می بایست انجام دهید اینست که کنترل فریم  از تب دیزاین  و گروه کنترلز (  Controls ) را انتخاب کرده و به روی فرم بکشید و رها کنید اگر ویزارد یا همان عصای جادوئی فعال باشد از شما نام آیتم ها و بعد نوع باتن ( چک باکس یا رادیو باتن ) را میخواهد بعد از اتمام ( دستی هم میشود پراپرتی ها ی هر کدام را تغییر داد منظور کپشن باتن ها )  روی فریم در حالت دیزاین فرم کلیک کرده پنجره ی پراپرتی را باز بنمائید در تب Data پراپرتی  ControlSource را نام فیلد جدول جنسیت قرار بدهید بعد از انجام می بینید که بعد از انتخاب در جدول بجای رکورد های مرد یا زن در آن فیلد آپشن ولیوی آن قرار گرفته .

 درزمان باز کردن فرم ( سینگل !!!) و جابجاشدن در رکوردها اتومات جنسیت طبق چیزی که در آن  رکورد درج شده در آن فریم نمایش داده خواهد شد .    OptionValue 

پراپرتی های لیست باکس


ListBox.Properties


 :   ListCount

شمارش ردیف های داخل لیست باکس

  :  ListIndex

ایندکس ردیف های لیست باکس که از صفر شروع میشود

   : ItemData

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

(ListBox.ItemData(Listbox.ListIndex

 : (Selected(lRow

چک میکند آیا انتخاب شده یا خیر ، فرضا بخواهید ردیف موردنظر انتخاب شود (  lRow از صفر شروع می شود مهندسان عزیز!!!)

ListBox.Selected(4)=True

: ItemSelected

برای فعال کردن حالت چند انتخابی ردیف ها ی یک لیست باکس  ، از پنجره ی پراپرتی خود کنترل ، پراپرتی MultiSelect را به حالت Simple یا Extended تنظیم بنمائید.

این پراپرتی خودش دو تا پراپرتی دارد به نام های Count و Item و متدی ندارد.

مثال برای شمارش آیتم های سلکت شده : (محدودیت ر دیف های ایجادشده حدودتقریبی ۶۴۰۰۰ ردیف )

 Dim C As Long

۱-C=ListBox.ItemSelected.Count

برای گرفتن آیتم های سلکت شده هم میتوان توسط تابع  For...Next و لوپ زدن در کانت آن که به متغیر C ارسال شده  اقدام نمود ...  گرفتن دیتای آیتم  : (LISTBOX.ITEMDATA(LISTBOX.LISTINDEX که در پراپرتی مربوطه بدان اشاره گردید.

 : (Column(Index,IRow

برای ارجاع به کالمن مشخص شده  که هر دو از صفر شروع میشوند تاکانت Index یا IRow منهای یک 

فرضا اگر لیست باکس شما چهارستونه باشد برای گرفتن دیتای ستون دوم و ردیف پنجم

(LISTBOX.COLUMN(1,4

: ColumnCount

برای شمارش کالمن های لیست باکس یا لیست باکس کمبو استفاده میشود ( کانت منهای یک !!! )

فرضا برای گرفتن دیتاهای کل کالمن ها در ردیف مورد نظر در کانت کالمن منهای یک لوپ ایجاد شده و طبق پراپرتی کالمن آیتم ها نمایش یا پرینت خواهد شد.

: ColumnOrder

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

: BoundColumn

دیتای کالمنی که باید در جدول اعمال شود فرضا سه ستون دارید میخواهید اطلاعات کالمن ۳  و ردیف انتخاب شده در جدول ثبت شود باند را روی ۳ میگذارید که در حصر کالمن ۳ فقط باشد برای عدم نمایش کالمن های دیگر پراپرتی ColumnWidth است که میتوانید آنرا صفر کنید فرضا اگر ۳ ستون داشته باشید و فقط بخواهید ستون سوم را ببینید در پنجره ی پراپرتی لیست باکس و پراپرتی ColumnWidth  تایپ کنید   1;0;0   .. یک منظور کالمن آخر ۱ اینچ باشد .

: ColumnHeads

برای نمایش هدر لیست باکس ( تیتر ، عنوان ستون ها  فقط در یک ردیف ) در لیست باکس یا لیست باکس کمبو استفاده میشود 

مدیریت دستگاه های تصویری متصل به کامپیوتر


باید با CreateObject انجام شود 


("CreateObject("Wia.DeviceManager


Properties




Deviceinfos Properties 






Set DevMgr = New WIA.DeviceManager
    For ii = 1 To DevMgr.DeviceInfos().Count
        Debug.Print "DevMgr.DeviceInfos(" & ii & ").Properties!Name.Value = " & DevMgr.DeviceInfos(ii).Properties!Name.Value
        If DevMgr.DeviceInfos(ii).Properties!Name.Value = MyScanner Then Set DevInfo = DevMgr.DeviceInfos(ii)
    Next ii
    
    ' ---
    Set dev = DevInfo.Connect
        
    ' ---
    Set img = dev.Items(1).Transfer(ImageFormat)
 


اقساط وام


تخصیص اقساط وام مشتری بمبلغ 3,800,000 بمدت 36 ماه در جدول LoanDetail ( جزئیات وام دریافتی توسط اشخاص )



105,555.555=36÷3,800,000


105555=36\3,800,000

      باقیمانده ی تقسیم یا  مود با فاصله    !!!     3,800,000Mod36=20


   105000=1000×(1000\(36\3,800,000))

555=1000×(1000\((36\3,800,000)))-(36\3,800,000)


125000=36×1-105000+20+555

3,675,000=35×2-105000


طبق عملیات بالا قسط اول میشود 125000 و قسط دوم تا 36میشود 105000 و بنابراین در جدول LOANDETAIL که شامل CUSTOMERID LOANID LOANNUM LOANDT AMOUNT هست طبق زیر اپند را انجام می دهیم فرم ورود اطلاعات ایجاد اقساط وام FRM_LOAN هست .


 زمان ایجاد اقساط وقتی طبق آیدی مشتری و آیدی وام  که در جدول واسط ایجاد شده در جدول LOANDETAIL رکوردی ثبت نشده و تابع DLOOKUP نال ولیو ( NULL ) را برمی گرداند نتیجتا قسمت دوم در تابع DLOOKUP که FALSE است اجرا شده و قسط اول 125000 اپند میشود و زمان اپند کردن قسط دوم به آخر چون رکورد ایجادشده و دیگر NULL نیست قسمت TRUE اجرا خواهد شد که همان 105000 می باشد اپند در بین حلقه ی FOR.... NEXT قرار می گیرد فرضا اگر کوئری اپند APP_LOANDETAIL باشد میشود : 


DIM I AS INTEGER

FOR I=1 TO ME.PERIOD

DOCMD.SETWARNINGS FALSE

"DOCMD.OPENQUERY "APP_LOANDETAIL

DOCMD.SETWARNINGS TRUE

NEXT


اکسپرژن مربوط به اضاف کردن مبلغ هر قسط در جدول دیتیل اقساط ...  محدودیت تعداد  کاراکتر در اکسپرژن ،  ۱۰۲۴ کاراکتر است .



(IIf ( expr , truepart , falsepart

)Iif

Dlookup("Amount","LoanDetail","CustomerId & LoanId=" & 

(forms!loan!CustomerId & forms!loan!LoanId

,

 (forms!loan!Amount\forms!loan!period)\1000)×1000))

, 

(forms!loan!Amount\forms!loan!period)\1000)×1000))

forms!loan!period×((forms!loan!Amount\formd!loan!period)+

-(forms!loan!Amount\formd!loan!period)\1000)

forms!loan!Amount Mod forms!loan!period+

(




با پیش پرداخت 50,000 



برای AddMonth بدون درنظر گرفتن کانتریا سال کبیسه کافیه توسط  تابعی سال ماه و روز را گرفته و به ماه یک عدد اضافه کنیم در خط بعد اگر ماه از ۱۲ بزرگتر شد ماه یک میشود و سال یکی بدان اضافه خواهد شد روز هم همان در نظر گرفته میشود فقط تنها مشکل اینه که اگر فرضا سالی کبیسه نباشد و کسی ۳۰ بهمن وام گرفته باشد با توجه به تابع بالا قسط اول ۳۰ اسفند میشود درصورتیکه اسفندماه ۲۹ روز ه هست پس سعی کنید بازه ی وام بین ۱ تا ۲۹ آن ماه باشد حتی فرض کنید کسی وامی را ۳۱ شهریور گرفته باشد در اینصورت طبق روش بالا میتوانیم برای رفع این مشکل بگوئیم اگر ماه بزرگتر از ۶ شد و اگر روز بزرگتر از ۳۰ بود همان ۳۰را درنظر بگیرد 

گرفتن پنجره ی فعال ( API )

ویندوز یوزر Windows User  کامپوننتی است که توابعی را بر ای ایجاد رابط کاربری User Interface  فراهم میسازد فرضا ایجاد پنجره ی جدید یا تغییر استایل پنجره یا برداشتن منوهای سیستمی و ارسال مسیج ها به آن و ایجاد کنترل ها  ... یا بعبارت دیگر اتصال به سایر اپلیکشن ها .

64Bit'

Declare PtrSafe Function GetActiveWindow Lib "user32" () As LongPtr

ماه قمری


لینکhttps://fararu.com/fa/news/401468/پاسخ-به-پرسش‌های-متداول-در-مورد-رویت-هلال-ماه


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


آیا ماه رمضان همیشه ۲۹ روزه است؟

طول ماه‌های قمری در کشور‌های اسلامی بر اساس معیار‌های نجومی پیش‌بینی می‌شود و طول یک ماه در هر سال ارتباطی به سال‌های دیگر ندارد؛ بنابراین طول ماه رمضان می‌تواند مانند هر ماه دیگری ۲۹ یا ۳۰ روز باشد

آیا اگر ماه شعبان ۳۰ روزه باشد، ماه بعد (رمضان) ۲۹ روزه خواهد بود؟

خیر. مدت طول هر ماه مستقل از ماه قبل است. محاسبات نشان می‌دهد ۳ ماه قمری متوالی می‌توانند ۲۹ روزه و ۴ ماه قمری متوالی می‌توانند ۳۰ روزه باشند.

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

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

آیا همیشه شروع ماه قمری (مثلا رمضان یا شوال) در ایران بعد از عربستان است؟

شروع ماه در هر نقطه‌ای بستگی به مشخصه‌های نجومی در آن کشور و البته ملاک شرعی فق‌های آنجا دارد؛ بنابراین ممکن است شروع ماه در ایران و عربستان یکی باشد (مثل ماه رمضان امسال)

ارسال کامند به Device ( دوربین )

 متد (Device.ExecuteCommand(CommandID



برای گرفتن عکس توسط دوربین اول انتخاب Device با متد ShowSelectDevice و بعد ارسال کامند به آن دستگاه 


 : CommandID

wiaCommandTakePicture


ppResult = .ShowSelectDevice( _
  [ ByVal DeviceType As WiaDeviceType ], _
  [ ByVal AlwaysSelectDevice As VARIANT_BOOL ], _
  [ ByVal CancelError As VARIANT_BOOL ] _
) As HRESULT

Boolean منظور استفاده از True یا False

: WiaDeviceType
   UnspecifiedDeviceType  0 
ScannerDeviceType      1 
CameraDeviceType       2 
VideoDeviceType        3 


اسکنر کار با WIA در رفرنس اکسس (یوزر اینترفیس )


CommonDialog Object


محتوی تمام متدهایی است که UI ( رابط کاربری یا  User Interface ) را نشان میدهد و باید  "WIA.CommonDialog" با CreateObject ساخته شود یا CommonDialog در فرم آورده شود.


Methods


ShowAcquireImage

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

ShowAcquisitionWizard

ویزارد اسکنر و دوربین را فعال می کند ( نمایش )

ShowDeviceProperties

نمایش پراپرتی های دیالوگ باکس دستگاه یا Device مربوطه 

ShowItemProperties

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


باز شدن پنجره ی  اسکنر  


Dim Img 

Dim CommonDialog1

Set CommonDialog1=CreateObject("Wia.CommonDialog

Set Img = CommonDialog1.ShowAcquire

(Img.SaveFile (Img


میشود لوپ زد و پراپرتی های مربوطه رو گرفت   For Each Prp In


کپی در Word البته در خود Word نوشته شده مربوط به اکسس نیست 


objImage.SaveFile strPath ' save into temporary file
' Insert in Word Document
Selection.InlineShapes.AddPicture 

strPath



'Requires a reference to Microsoft Windows Image Acquisition Object Library




Dim Img 'As ImageFile _ )Set Img=CommonDialog1.ShowAcquireImage

_ ,UnspecifiedDeviceType

_ ,TextIntent

_ ,MaximizeQuality

( wiaFormatGIaf




(ScanDev=CommonDialog1.ShowSelectDevice(1,False,False

("Set img=CreateObject("Wia.ImageFile

      (ScanDev.Items(1).Transfer(WiaFormatBMP


چیدمان کالمن ها در دیتاشیت با ColumnOrder


طبق مثال زیر البته در حالت دیزاین هم در ریبون در تب Order میشود Rearrange را انجام داد.


Me.Student_ID.ColumnOrder = 1
Me.Family_Name.ColumnOrder = 2
Me.Preferred_Name.ColumnOrder = 3


Start  Module----

Set frm =Screen.ActiveDatasheet.Form


index=1

لوپ در داخل فیلدهای کوئری                    Start  Loop '

       (Set ctl = frm.Controls(fld.name
ctl.ColumnOrder = index

index=index+1

      End Loop '

End Module----



   (Private Sub Id_DblClick(Cancel As Intege

Me.Id.ColumnOrder = 1
Me.OrderID.ColumnOrder = 2
Me.ProductID.ColumnOrder = 3
Me.UnitPrice.ColumnOrder = 4
Me.Quantity.ColumnOrder = 5
End Sub

چیدمان کالمن ها در دیتاشیت با ColumnOrder


طبق مثال زیر البته در حالت دیزاین هم در ریبون در تب Order میشود Rearrange را انجام داد.


Me.Student_ID.ColumnOrder = 1
Me.Family_Name.ColumnOrder = 2

Me.Preferred_Name.ColumnOrder = 3



(Set ctl = frm.Controls(fld.name
        ctl.ColumnOrder = index

کپی کردن رکوردست در شیت اکسل ( بازیابی اطلاعات Extract )



برای کپی کردن محتویات شی رکوردست  (ADO یا DAO ) در گوشه ی بالائی سمت چپ رنج مشخص شده در شیت اکسل استفاده میشود 


public int CopyFromRecordset (object Data, object MaxRows, object

MaxColumns);


که Data همان متغیر نسبت داده شده بعنوان رکوردست است ، MaxRows ماکزیمم ردیف هایی که باید داخل شیت کپی شود و MaxColumns ماکزیمم تعداد فیلدهایی که میخواهیم در شیت اکسل کپی شود.


فرضا


Dim Rs As RecordSet

Dim Sql As String

("Sql="Select * From Query1

(Set Rs=CurrentDb.OpenRecordset(Sql


درقسمت پائین اول باید آبجکت Excel.Application ساخته شود بعد اضافه کردن WorkBook به اپلیکیشن و استفاده از پراپرتی های مربوطه مثل Range یا Cell


Dim Wk As Object

Set Wk=XlObj.WorkBook.Add

Wk.Sheets(1).Range("A3").CopyFromRecordset Rs


برای کپی کردن فیلدها هم میشود در همان ماژول اگر جدول یا کوئری پراپرتی کپشن داشته باشد و فارسی آن فیلد را درآن ذخیره کرده باشیم با یک لوپ زدن داخل فیلدهای رکوردست (Rs.Fields ) به Cell مربوطه در آن شیت اکسل کپی کرد مثل 


Dim Fld As Fields

.

("Wk.Sheets(1).Cells(2,i)=Fld.Properties("Caption

.



نمونه هائی از پراپرتی های مورد استفاده

xlsh.UsedRange.Borders.Weight = 2

xlApp.Application.Columns.AutoFit

xlApp.displayalerts = False

xlwk.saveas "D:\" & Me.Name & ".xlsx"

xlApp.Quit


بازیابی ردیف های رکوردست



Recordset.GetRows


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


(varRecords(intField, intRecord


طبق تصویر پائین دومی Start و سومی شماره ی ردیف

 است


(array= recordset.GetRows(Rows, Start, Field




"strSQL="SELECT FirstName,LastName,Title FROM Employees
(Set rstEmployees=CurrentDb.OpenRecordset(strSQL,dbOpenSnapshot
(varRecords = rstEmployees.GetRows(3
intNumReturned = UBound(varRecords, 2) + 1
intNumColumns = UBound(varRecords, 1) + 1



-یا کد زیر را در نظر بگیرید که رکوردها را داخل آرایه می ریزد.
Dim Values As Variant
Values=Rs.GetRows

مثال زیری باز کردن رکوردست به اسم recSales و استفاده از Ubound برای گرفتن
بالاترین عدد آرایه هم تعداد فیلدها هم تعداد ردیف ها

(2)varValues = recSales.GetRows
    (intFieldCount = UBound(varValues, 1
   (intRowCount = UBound(varValues, 2
گام بعدی ایجاد لوپ در RowCount و دوباره ایجاد لوپ در FieldCount و گرفتن دیتاهای رکورد 

خروجی به فرمت های Excel Pdf Rtf



ObjectTypeObjectNameOutputFormatOutputFileAutoStart

                                                                               


                                                         نوع آبجکت  :  ObjectType

acOutputQuery

       acOutputTable

acOutputForm

             acOutputReport

               

      نام آبجکت : فرم کوئری فرم یا گزارش : ObjectName

  

    فرمت خروجی  : OutputFormat 

acFormatRTF
acFormatPDF
acFormatTXT
acFormatXLS
acFormatXLSX
acFormatXLSB

  نام فایل یا مسیر ونام فایل  : OutputFile


خروجی جدول Employees  به فرمت ( rtf ( Rich Text  و True هم که بعد از ایجاد فایل rtf بنام Employee.rtf باعث نمایش آن در اپلیکیشن می شود .


 _ , "DoCmd.OutputTo acOutputTable, "Employees

 acFormatRTF, "Employee.rtf", True


مثال بعدی : خروجی کوئری به اکسل ۲۰۰۷ که فرمت xls هست و بعد نمایش آن  .. در صورت خالی گذاشتن مسیر کامل فایل خود اکسس برای نام و مسیر آن سوال می کند.


 _ ,"DoCmd.OutputTo acOutputQuery,"YourQueryName

                                                                                          acFormatXLS,,True



تغییر مقادیر پراپرتی های کنترل در فرم یا گزارش با ControlType


استفاده از   ControlType Propert 


در مثال زیر در کنترل های فرم  لوپ زده میشود فقط مورد Lable که با acLabel مشخص شده  و پراپرتی SpecialEffect و BorderStyle را عوض میکند ... کد را کپی نکنید اول خط به خط یاد بگیرید بعد مستفیذ شوید 


For Each ctl in frm.Controls
With ctl
انتخاب موارد تیپ کنترل Select Case .ControlTpye

مورد لیبل Case acLabel

اگر پراپرتی اسپشیال افکت برابر ثابت Shadow بود

If .SpecialEffect = acEffectShadow Then

اسپشیال افکت لیبلی که Shadow بود به نرمال تبدیل میشود

SpecialEffect = acEffectNormal

بوردر لیب هم فرضا اگر ثابت Transparent بود به Solid تغییر می یابد
BorderStyle=1
Else
End if
End Select
Next







ConstantControl
acBoundObjectFrameBound object frame
acCheckBoxCheck box
acComboBoxCombo box
acCommandButtonCommand button
acCustomControlActiveX (custom) control
acImageImage
acLabelLabel
acLineLine
acListBoxList box
acObjectFrameUnbound object frame or chart
acOptionButtonOption button
acOptionGroupOption group
acPagePage
acPageBreakPage break
acRectangleRectangle
acSubformSubform/subreport
acTabCtlTab
acTextBoxText box

ساخت دیتابیس جدید


(DBEngine.CreateDatabase method (DAO


اسم دیتابیس نهایتا ۲۵۵ کاراکتر است حتی Space و اگر آدرس در شبکه باشد باید طبق مدل زیرعملنمود.

"Server1\loc1\db1.accdb\\"
()Private Sub cmdCreate_Click
Dim db As DAO.Database
(Set db = CreateDatabase("Exercise.accdb", dbLangGeneral
End Sub
در مثال بالا اگر بخواهید پسورد دار بسازید باید بعد از زبان جنرال از فرمت زیر استفاده کرد . در قسمت آخر این متد که Option هست میتوان از متغیرهای ثابت مثل dbVersion120   یعنی file format 12.0 یا dbEncrypt که معرف ساخت دیتابیس Encrypt شده استفاده کرد

"dbLangGeneral & ";pwd=NewPassword

البته با  Access.Application و NewCurrentDatabase هم میتوان بلنک دیتابیس ساخت 

(NewCurrentDatabase ("D:\dbs1.accdb",acNewDatabaseFormatAccess12.  

مقدار Constant فرمت Accdb در اکسس ۱۲ هست 

رفرنسی که باید تیک بخورد برای استفاده از متد DAO   طبق شکل زیر Microsoft Access Object Library  است.

اکسپورت آبجکت ذخیره شده به فایل Txt


برای اکسپورت از متد Docmd.TransferText استفاده می کنیم 


DoCmd.TransferText acExportDelim,"Standard Output   "External Report", "C:\Txtfiles\April.doc,"


مثال بالا جدول External Report  از دیتابیس اکسس که با نام Standard Output با Docmd.RunSavedImporExport ذخیره شده است را به فایل April  اکسپورت میکند با جداکننده.


البته مثل تصویر بالا حتما Import یا Export را بصورت قرار دادی مشخص کنید تا اشتباه نگیرید 



acExportDelim2Export Delimited
acExportFixed3Export Fixed Width
acExportHTML8Export HTML
acExportMerge4Export Microsot Word Merge
acImportDelim0Import Delimited
acImportFixed1Import Fixed Width
acImportHTML7Import HTML
acLinkDelim5Link Delimited
acLinkFixed6Link Fixed Width
acLinkHTML9Link HTML