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

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

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

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

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

سِلِکت کوئری در اکسس ( جستجو در Date )





IDCodeDt
1100103/06/2018
2100103/15/2018
3100106/10/2018
4100202/10/2018
5100203/08/2018
6100205/08/2018
7100205/08/2018
8100304/05/2019
9100305/05/2019
10100308/15/2019
11100403/15/2019
12100404/01/2019
13100402/01/2019
14100403/11/2019
15100404/22/2019
16100502/15/2019
17100503/15/2019
18100601/15/2019
19100603/09/2019
20100703/09/2019



SELECT All * FROM [tt] where dt between '01/01/2019' And '03/07/2019'





Text1 :

Text2:








پراپرتی Cycle ( چرخه ) در اکسس






The Cycle property uses the following settings.



SettingVisual BasicDescription
All Records0(Default) Pressing the TAB key from the last control on a form moves the focus to the first control in the tab order in the next record.
Current Record1Pressing the TAB key from the last control on a record moves the focus to the first control in the tab order in the same record.
Current Page2Pressing the TAB key from the last control on a page moves the focus back to the first control in the tab order on the page.






سِلِکت کوئری در اکسس




CustomerIDCust_NameCityGradeSalesMan_ID
3002Nick RimandoNew York1005001
3007Brad DavisNew York2005001
3005Graham ZusiCalifornia2005002
3008Julian GreenLondon3005002
3004Fabian JohnsonParis3005006
3009Geoff CameronBerlin1005003
3003Jozy AltidorMoscow2005007
3001Brad GuzanLondon5005


فهرست تعداد Grade هایی که بزرگتر از میانگین عددهایی که مقادیر فیلد City آنها برابر New York است


SELECT Grade,Count(*) From Customer Group By Grade Having Grade>(Select AVG(Grade) From Customer Where City="New York")




Select  {0} From {1} Where {2} Group By {3} Having {4}



CityAvg(Grade)
Berlin100
California200
London150
Moscow200
New York150
Paris300


CityGradeTotGr
New York100100
New York200300
California200200
London300300
Paris300300
Berlin100100
Moscow200200
London0


Citymax(TotGr)countAvg
Berlin1001100
California2001200
London3002150
Moscow2001200
New York3002150
Paris3001300





جدول employee

idnamesalaryrole
1Augustine Hammond10000Developer
2Perice Mundford10000Manager
3Cassy Delafoy30000Developer
4Garwood Saffen40000Manager
5Faydra Beaves50000Developer



جدول awards


idemployee_idaward_date
112022-04-01
232022-05-01



SELECT id, name FROM employee WHERE id IN (SELECT employee_id FROM awards);



idname
1Augustine Hammond
3Cassy Delafoy


SELECT * FROM employee WHERE role = 'Developer' AND salary >  ( SELECT salary FROM employee WHERE role = 'Manager' )



idnamesalaryrole
3Cassy Delafoy30000Developer
5Faydra Beaves50000Developer






OrderIDOriginalVale
11
23
72
81
97
113
121



OrderIDOriginalValeSum
111
234
726
817
9714
11317
12118












ویژگی Dirty


از ویژگی Dirty برای تعیین انجام ویرایش یا عدم ویرایش رکورد جاری از زمان آخرین ذخیره سازی استفاده می شود . برای مثال ، ممکن است از کاربر بخواهید که تغییراتی در رکورد صورت پذیرفته یا خیر ، اگر نه ، به کاربر اجازه دهید بدون ذخیره تغییرات به رکورد بعدی برود . از نوع Boolean و خواندنی و نوشتنی



البته رویه زیر در رویداد After Update تکست باکس فراخوان می شود و اگر تغییر صورت گرفت باتن با نام BtnUndo فعال می شود و ویژگی Value تکست باکس به OldValue تبدیل میشود . البته ویژگی AllowEdition برای جلوگیری از ویرایش ( برگشت به حالت OldValue ) در فرم وجود دارد.


Sub UndoEdits()
    If Me.Dirty Then
       Me!btnUndo.Enabled = True
         ' Enable button
    Else
      Me!btnUndo.Enabled = False
        ' Disable button
    End If
End Sub







Tracking


varOld = Screen.ActiveControl.OldValue 

varNew = Screen.ActiveControl.Value 

strFormName = Screen.ActiveForm.Name strControlName = Screen.ActiveControl.Name 

Set dbs = CurrentDb() 

Set rst = dbs.TableDefs("tblDataChanges").OpenRecordset














ویژگی PrtMip در تنظیم Page Setup درفرم و گزارش اکسس


می توانید از ویژگی PrtMip در ویژوال بیسیک برای تنظیم یا بازگرداندن اطلاعات حالت دستگاه مشخص شده برای فرم یا گزارش در کادر محاوره ای Print استفاده کنید البته در نمای دیزاین امکانپذیر است یعنی اگر فرمت اکسس به accde تبدیل شود در نمای دیزاین قادر به انجام تغییرات نخواهید بود



توضیحات :

تنظیمات ویژگی PrtMip ساختاری ۲۸ بایتی دارد که برای فرم یا گزارش در کادر محاوره ای Page Setup به تنظیمات در برگه حاشیه ها برنامه ریزی می شود




Private Type str_PRTMIP 
strRGB As String * 28
End Type 
Private Type type_PRTMIP 
xLeftMargin As Long 
yTopMargin As Long 
xRightMargin As Long 
yBotMargin As Long 
fDataOnly As Long 
xWidth As Long 
yHeight As Long 
fDefaultSize As Long 
cxColumns As Long 
yColumnSpacing As Long 
xRowSpacing As Long 
rItemLayout As Long 
fFastPrint As Long 
fDatasheet As Long 
End Type











PrtMipString.strRGB = rpt.PrtMip
LSet PM = PrtMipString
PM.cxColumns = 2
PM.xRowSpacing = 0.25 * 1440
PM.yColumnSpacing = 0.5 * 1440














رویداد NoData در شئ گزارش اکسس ( عدم چاپ رکورد خالی)


رویداد NoData بعد از قالب بندی یک گزارش برای چاپ که داده ای ندارد (گزارش باند شده یا محدود به یک رکوردست خالی)، اما قبل از اینکه گزارش پرینت شود رخ می دهد.از این رویداد برای کنسل کردن یا لغو چاپ یک گزارش خالی استفاده می شود.

اگر گزارش محدود به جدول یا کوئری نباشد ( با استفاده از ویژگی RecordSource گزارش ) ، این رویداد عملی ندارد.

این رویداد بعد از رویداد Format برای گزارش اما قبل از اولین رویداد Print اتفاق می اُفتد.

این رویداد برای زیر گزارش ها ( SubReports ) اتفاق نمی اُفتد.اگر نیاز دارید کنترل ها در زیر گزارش زمانیکه داده ای ندارد پنهان شود ( Visible)، تا اینکه کنترل ها در این مورد پرینت نشوند ، میتوانید از ویژگی HasData در ماکرو یا پروسه رویداد که زمان اجرای رویداد Format یا Print اتفاق می اُفتد استفاده کنید.

Description(Object)          Value

Has Data                                 -1

No Data                                     0

Unbound                                  1


یعنی ویژگی Visible  ساب ریپورت می شود مقادیر HasData


رویداد NoData قبل از رویداد اولین Page برای گزارش اتفاق می اُفتد.







کوئری در اکسس ( Group By )


جدول R
IDCodeAmountSum
1A2323
2A225
3B1111


ماکزیمم عدد در هر دسته بندی فیلد Code :



Select Code,Max(Sum) From r Group By Code




CodeMax(sum)
A25
B11
























تابعی برای جمع آوری مقدار از رکوردست






Field2.IsComplex DAO.Property :

مقدار True(عددی غیر صفر) یا False(برابرصفر) را که نشان دهنده وجود یک دیتا تایپ چند مقداری است را باز می گرداند.... ( multi-valued data type )


Null=No Valid Data

named-argument


Join:

اگرExpression خالی باشد Set Result=Null

Static Values As New Collection

Set Records=CurrentDb.OpenRecordSet....

(dbOpenSnapShot)

CollValues Records , Delimiter , Result

Values.Add Result

Join=Result




CollValues:


ByRef Rec As DAO.RecordSet

ByRef Delimiter

ByRef Result





Dim SubRec As DAO.RecordSet

Dim Value As Variant

'If Rec.RecordCount>0 Then

While Not Rec.EOF

      Value=Rec.Field(0).Value

          If Rec.Fields(0).IsComplex Then

                 Set SubRec=Rec.Fields(0).Value

                 CollValues SubRec , Delimiter , Result

         ElseIf Nz(Value)="" Then

         ElseIf IsEmpty(Result)

              Result=Value

         Else

              Result=Result & Delimiter & Value

         End If

Rec.MoveNext

Wend

'Else

'Result=Null

'End If



















Expression,Domain,Criteria : 

Const SqlMask As String = "Select {0} From {1} {2}"
Const SqlLead As String = "Select "
Const SubMask As String = "({0}) As T"

Const FilterMask As String = "Where {0}"

Dim Sql As String
Dim SqlSub As String
Dim Filter As String


اگر Expression خالی باشد باید فکر چاره ای باشید و همینطور آرگومان های بعدی


اگر Select را در Domain( که نام جدول یا کوئری و یا زبان اس کیو ال ممکن است داخلش نوشته شده باشد ) یافت نتیجتا Domain یک عبارت اس کیو ال است.
If InStr(1, LTrim(Domain), SqlLead, vbTextCompare) = 1 Then 

در اینجا اگر در آرگومان Domain عبارت Select را بیابد متغیر SqlSub می شود جایگزین کردن Domain با {0}

SqlSub = Replace(SubMask, "{0}", Domain)
Else

در غیر اینصورت Domain نام جدول یا کوئری است.

SqlSub = Domain

End If
اگر آرگومان Criteria پر باشد 
If Trim(Criteria) <> "" Then 
ساخت یک شرط را خواهیم داشت . که عبارت داخل Criteria را بجای {0} در FilterMask قرار خواهد داد.
Filter = Replace(FilterMask, "{0}", Criteria)
End If 
حالا ساخت نهایی Sql که باتابع Replace تودرتو یا Nested Replace انجام گرفته و اگر اشتباهی در نوشتار نداشته باشیم خروجی یک عبارت Sql درست خواهد بود.
Sql = Replace(Replace(Replace(SqlMask, "{0}", Expression), "{1}", SqlSub), "{2}", Filter) 

یعنی درواقع در Replace های بالا جای ۲ ۱ ۰ عبارت یا رشته هایی که داخل آرگومان ها هستند  قرار داده شدِس.


Example : 


Expression="[First Name] & ' ' & [Last Name] & '<' & [Email Address] & '>'"

Domain="Tbl1"

Criteria="[Job]='" & [Job] & "'"


Change To Sql :


"Select [First Name] & ' ' [Last Name] & '<' & [Email Address] & '>' From Tbl1 Where [Job]=' & [Job] & '"



با قرار دادن Optional قبل از آرگومان ها می شود آنها را در تابع اختیاری کرد نه اجباری ( Required ).



وقتی دیتا تایپ فیلدی عددی نیست مثل نام بای  از تک کوتیشن بین آنها استفاده کنیم : 

"FirstName='" & Variable1 & "'"

اگر بنویسید :

"FirstName=" & Variable1 & ""

قطعا دچار خطا خواهید شد ، برای دیتا تایپ عددی نیازی به قرار دادن تک کوتیشن ها ندارید.









لیست آخرین آیتم براساس گروبندی فیلد SupplierID



تمام برداشت ها از سایت های خارجی جهت آموزش شما دوستان مبتدی اخذشده،نایاب هستند لذا نهایت استفاده را ببرید.


We are looking to make changes



select * from products where productid in(

(select val(lastt) as lastt from (select distinct dlast('ProductId','products',"supplierId=" & [SupplierId]) as Lastt,supplierid from products

order by supplierid)))




w3schools/sql




ProductIDProductNameSupplierIDCategoryIDUnitPrice
Aniseed Syrup 12 - 550 ml bottles 10 
Northwoods Cranberry Sauce 12 - 12 oz jars 40 
12 Queso Manchego La Pastora 10 - 500 g pkgs. 38 
15 Genen Shouyu 24 - 250 ml bottles 15.5 
23 Tunnbröd 12 - 250 g pkgs. 
24 Guaraná Fantástica 10 12 - 355 ml cans 4.5 
27 Schoggi Schokolade 11 100 - 100 g pieces 43.9 
30 Nord-Ost Matjeshering 13 10 - 200 g glasses 25.89 
39 Chartreuse verte 18 750 cc per bottle 18 
41 Jack's New England Clam Chowder 19 12 - 12 oz cans 9.65 
44 Gula Malacca 20 20 - 2 kg bags 19.45 
46 Spegesild 21 



استفاده از عبارت Last 


select * from products where productid in(select lLast from (select distinct last([productId]) As lLast,supplierid from products group by supplierid order by supplierid))



Or 


select * from products where productid in(select distinct last([productId]) As lLast from products group by supplierid)



select * from products where productid in(select distinct last([productId])-1 As lLast from products group by supplierid)



select * from products where productid in(select distinct first([productId]) As ifirst from products group by supplierid)





first-and-lastfunction-in-ms-access




























لوپ For Each با آرایه



اول باید دو متغیر Arr و element را با Dim اعلان کنید


Arr(0)="123"

Arr(1)="456"

Arr(2)="789"

Arr(3)="012"


For Each element in Arr

Debug.Print element

Next






لوپ زدن در فیلدهای جدول



RecordSet.Fields Property ( DAO )



کالکشن یا مجموعه Fields را باز می گرداند که ارائه کننده یا حاوی اشیاء Field ذخیره شده برای شئ مشخص شده است.فقط خواندنی ( ReadOnly )



For Each Fld in Rs.Fields

Debug.Print Fld.Name

'Or your code

Next










Bla Bla حذف تکرار یا استخراج فیلد بدون تکرار


Tbl

A

test1

test1

test2

test3

test2

test1

test4

test3

test1


راه اول : تعریف Primary Key برای فیلد A در نمای دیزاین ، اگر فایل به accde ( اجرایی) تبدیل شود قادر به تغییرات در نمای دیزاین اشیاء نخواهید بود.

راه دوم : ساخت کوئری و استفاده از عبارت Group by  یا Distinct و اجرای کوئری Make Table برای اکسپورت به جدول New

راه سوم : ایجاد رکوردست ، لوپ در فیلد مورد نظر و کپی رکورد [بدون تکرار] در جدول دیگر.




البته کد زیر خالی از اشکال نیست پس سعی کنید اشکالات را برطرف کنید



RsSource : Tbl

RsTarget : tTbl


RsSource=db.OpenRecordSet("Tbl",dbOpenSnapShot")

RsTarget=db.OpenRecordSet("tTbl")

RsSource.MoveFirst

Do

RsTarget.MoveFirst

Do

if  (RsSource!A=RsTarget!A) Then

NewValue=RsSource!A

End If

RsTarget.AddNew

RsTarget!A=NewValue

RsTarget.Updats

RsTarget.MoveNext

Unlti RsTarget.EOF=-1

RsSource.MoveNext

Until RsSource.EOF=-1




OrderIDProductPrice
10280AAA280
10280AAA280
10280AAC267
10285CCC350
10285CCC350
10285CCC350
10285CCA348

Select distict * from t

OrderIDProductPrice
10280AAA280
10280AAC267
10285CCC350
10285CCA348




IDLast NameNational Code
1Akbari0012020400
2Akbari0012020400
3Akbari0012021400
4Asghari0011021400
5Asghari0012021400
6Asghari0012021400
7Rajabi0032029400
8Rajabi0032029400
9Rajabi0032029400
10Rajabi0032129400


Select distinct [Last Name],[National Code] from t1

Or

Select [Last Name],[National Code] from t1 Group By [Last Name],[National Code]


Last NameNational Code
Akbari0012020400
Akbari0012021400
Asghari0011021400
Asghari0012021400
Rajabi0032029400
Rajabi0032129400


در جدول ماقبل بالا چون دو رکورد در فیلد اول و دوم وجود دارد ( Zero Base ) نمی توانید ID را به جدول قبل اضافه کنید مگر با نوشتن سلکت کوئری درون آن





create table CC (ID int not null,Code int not null)


Insert into CC Values(1,123)

IDCode
1123
2123
3123
4121
5122
6122
7123
8124
9124
10123
11125
12123



Delete From CC Where ID Not In(Select ID From (SELECT distinct Code,(Select ID from CC C where C.id<=CC.ID And C.Code=CC.Code) ID FROM CC order by code Asc))



IDCode
1123
4121
5122
8124
11125



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


SELECT DISTINCT can be used in Microsoft Access SQL to select unique values in a field. Note that you cannot use this keyword in Query Design View, you can only use it directly in SQL View.

The outcome of DISTINCT is exactly the same as GROUP BY if you only try to find the unique values, but GROUP BY can be used together with other Aggregate Functions such as COUNT, SUM, AVERAGE. In terms of performance, they should be the same or nearly the same.



IDCode
1123
2123
3121
4122
5123
6121
7120
8124
9123
10124
11121
12122
13125
14122
15126
16125
17126
18127
19125
20128

-Delete Query ( SQL View )

IDCode
1123
3121
4122
7120
8124
13125
15126
18127
20128

-Nested Select ( Count(ID) And Where Clause )

RowNunIDCode
11123
23121
34122
47120
58124
613125
715126
818127
920128


















































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


متد GetRows برای کپی از یک رکوردست استفاده میشود.این متد یک آرایه دوبعدی را باز می گرداند. اولی نمایانگر فیلدیاستون و دومی شماره ردیف است.برای مثال intField فیلد و intRecord شماره ردیف را نمایش می دهد.


Zero-Base هستند یعنی 0 در جای خود معرف ستون یا ردیف صفر است 


avarRecords(intField, intRecord)


برای گرفتن مقدار فیلد اول در ردیف دوم :


field1 = avarRecords(0,1)


برای گرفتن مقدار فیلد دوم در ردیف اول : 


field2 = avarRecords(1,0)


اگر برای آرایه از تایپ Variant استفاده شود Ubound نیز استفاده کنید و +۱ را





Dim varEmployees As Variant
varEmployees = rstEmployees.GetRows(rstEmployees.RecordCount)
تعداد ردیف های بازیابی شده
Debug.Print "Number of Rows Retrieved: " & UBound(varEmployees, 2) + 1
تعداد فیلد ( ستون های بازیابی شده )
Debug.Print "Number of Fields Retrieved: " & UBound(varEmployees, 1) + 1


چاپ در پنجره Immediate window ( محتوای  ستون ۳ و ردیف ۴)
Debug.Print "Field 3 - Row 5: " & varEmployees(2, 4)
چاپ در پنجره Immediate window ( محتوای ستون ۱ و ردیف ۲)
Debug.Print "Field 1 - Row 2: " & varEmployees(0, 1) 



لوپ در بین هر ردیف :

'Loop thru each Row
For intRowNum = 0 To UBound(varEmployees, 2) 
لوپ در بین هر ستون : 
'Loop thru each Column       
For intColNum = 0 To UBound(varEmployees, 1)   
Debug.Print varEmployees(intColNum, intRowNum),  Next
Debug.Print vbCrLf
Next









  1. Number of Rows Retrieved: 9
  2.  
  3. Number of Fields Retrieved: 5
  4.  
  5. Field 3 - Row 5: 908 W. Capital Way
  6. Field 1 - Row 2: Callahan
  7.  
  8. Last Name     First Name    Address                     City          Region
  9. ---------------------------------------------------------------------------------------------
  10. Buchanan      Steven        14 Garrett Hill             London        Null          
  11.  
  12. Callahan      Laura         4726 - 11th Ave. N.E.       Seattle       WA            
  13.  
  14. Davolio       Nancy         507 - 20th Ave. E., Apt. 2A Seattle       WA            
  15.  
  16. Dodsworth     Anne          7 Houndstooth Rd.           London        Null          
  17.  
  18. Fuller        Andrew        908 W. Capital Way          Tacoma        WA            
  19.  
  20. King          Robert        Edgeham Hollow, Winchester Way            London        Null          
  21.  
  22. Leverling     Janet         722 Moss Bay Blvd.          Kirkland      WA            
  23.  
  24. Peacock       Margaret      4110 Old Redmond Rd.        Redmond       WA            
  25.  
  26. Suyama        Michael       Coventry House, Miner Rd.   London        Null   



CopyFromRecordset : 


محتویات یک شئ ADO یا DAO Recordset را روی یک کاربرگ کپی می کند و از گوشه سمت چپ بالای محدوده مشخص شده آغاز می گردد . اگر شئ رکوردست حاوی فیلدهایی با اشیاء OLE در آنها باشد این روش با شکست مواجه خواهد شد.


For iCols = 0 to rs.Fields.Count - 1 
 ws.Cells(1, iCols + 1).Value = rs.Fields(iCols).Name 
Next 
ws.Range(ws.Cells(1, 1), _ 
 ws.Cells(1, rs.Fields.Count)).Font.Bold = True 
ws.Range("A2").CopyFromRecordset rs























تنظیم صفت پنهان کردن شئ مشخص در پنجره راهبری اکسس




KeyWord : کلیدواژه


متد SetHiddenAttribute صفت پنهان کردن یک شئ اکسس مثل ماکرو،جدول،پرس و جو و .... را تنظیم می کند


نوشتاری : 


expression.SetHiddenAttribute (ObjectTypeObjectNamefHidden)



هر سه آرگومان Required یا اجباری هستند در اولی نوع شئ مثل acTable یا acReport ، دومی از نوع رشته ای و نام شئ و سومی ازنوع Boolean فالز یا ترو را در خود جای می دهد








اضافه کردن و حذف فیلد از جدول



TableDefs Collection :

'Add

tdf.Fields.Append tdf.CreateField("Desc",dbText,200)

'Delete

tdf.Fields.Delete "Desc"







باز کردن رکوردست با استفاده از ActiveX Data Objects



ADO شما را قادر می سازد تا ساختار پایگاه داده خود  و داده های موجود در آن  را از ویژوال بیسیک دستکاری کنید.خیلی از اشیاء ADO با اشیایی که در پایگاه خود می بینید مطابقت دارند - برای مثال یک شئ Table با یک جدول Acces مطابقت دارد.یک شئ فیلد مربوط به یک فیلد در یک جدول است.



Microsoft ActiveX Data Objects 2.x Library



Function AdoRecordsetExample()
    
    Dim rs As New ADODB.Recordset
    Dim strSql As String
    
    strSql = "SELECT MyField FROM MyTable;"
    rs.Open strSql, CurrentProject.Connection
    
    Do While Not rs.EOF
        Debug.Print rs!MyField
        rs.MoveNext
    Loop
    
    rs.Close
    Set rs = Nothing
End Function







کنکور تیرماه ۱۴۰۲ : 

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







لوپ در رکوردهای جدول و تغییرمحتویات فیلدها



در لوپ زیر محتویات فیلدهایی که از نوع عددی نیستند به حروف بزرگ تبدیل می شوند با تابع Ucase . نکته که چندین بار تکرار کردم وقتی Edit استفاده می کنید و رکوردست خالیه چون رکوردی داخلش نیست خطای No Current Record میزنه بنابراین تعجب نکنید و اصرار به ادامه کار نداشته باشید 


UCase ("Tech on the Net")
Result: "TECH ON THE NET"

Result: "ALPHABET"
UCase ("Alphabet")



With rst
Do While Not .EOF
.Edit
For Each fld in .Fields
If Not IsNumeric(fld) then fld = UCase(fld)
Next fld
.Update
.Movenext
Loop
.Close
End With





کنکور تیرماه ۱۴۰۲ : 

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














لوپ در فیلدها و ذخیره در آرایه





Do While Not rs.EOF 
    For j = 0 to rs.Fields.Count-1
     Set fieldSet(j) = rs.Fields.Field(j).Value
    Next j
rs.MoveNext
Loop









رشته کانکشن به جدول اکسس



مجموعه Tabledefs را مطالعه کنید برای Link زدن و استفاده از Connect


TableDefs collection contains all stored TableDef objects in a database (Microsoft Access workspaces only).




strConnect = "MS Access;PWD=" & strPassword & ";DATABASE=" & strDbFile 










what is this

[;database=C:\sample.mdb;PWD=128]










لوپ در جدول با بازشدن رکوردست در اکسس



If Not rs.BOF And Not rs.EOF Then
        rs.MoveFirst
        While (Not rs.EOF)
            Debug.Print rs.Fields("Employee Name")
            rs.MoveNext
        Wend
    End If
    rs.Close
    Set rs = Nothing













معنی Dia inch یا قطر اینچ


قطر اینچ به معنی سایز لوله ای است که به لوله هم سایز خودش متصل شده - میگن یک لوله ۱۰ اینچ قطر اینچی برابر ۱۰ دارد بنابراین برای هدف پیشرفت/گزارش/محاسبه زمانیکه یک لوله ۱۰ اینچ به یک لوله ۱۰ اینچ دیگر جوش داده شده خروجی ۱۰ قطر اینچ است.


مثال دیگر : اگر یک سه راهه کاهنده ۴×۱۰ جوش داده شود در نتیجه جوشکاری می شود ۲۴=۴+۱۰+۱۰ ( سه راهه سه اتصال دارد) >>> اتصال سه راهه بین دو لوله جوش داده می شود در نتیجه ۳ سر دارد دو تا ۱۰ و یکی ۴ که جمعشون شده ۲۴ قطر اینچ !!!


در پروژه های ساخت قطر اینج برای اندازه گیری / ارزیابی پیشرفت ساخت اسپول لوله کشی ( Fabrication ) بکار برده می شود.اتصال جوش سایز لوله به معادل قطر اینچ جوشکاری تبدیل می شود.


فرمول قطر اینچ : 


:

Dia-Inch = Number of joints  Size of joint per Inch




inch meter برای ارزیابی پیشرفت کار در سایت هست مخصوصاً در تست پکیج هم استفاده می کنند.



لطفا نظر سنجی فراموش نشود

















عمل Transpose یا جابجائی در اکسل



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










تاریخ قمری




سرآغاز گاه‌شماری هجری قمری روز جمعه «۱ محرم سال ۱ هجری قمری» (۲۷ تیر سال ۱ هجری خورشیدی) برابر با ۱۶ ژوئیه ۶۲۲ میلادی قدیم (ژولینی) و ۱۹ ژوئیه ۶۲۲ میلادی جدید (گریگوری) است.[۸]



گاه‌شماری هجری قمری قراردادی یا حسابی یا رسمی به‌عنوان گاه‌شماری قمری یکنواخت در سطح جهان شناخته شده‌است. در این گاه‌شماری از روش محاسباتی خطی و غیرتجربی برای تقریب زدن طول ماه‌های قمری استفاده می‌شود. ماه‌های قمری در آن به‌طور متناوب ۳۰ روزه (ماه‌های فرد) و ۲۹ روزه (ماه‌های زوج) در نظرگرفته می‌شود و در هر سی سال، ۱۱ سال، با ۳۰ روزه کردن آخرین ماه (ذیحجه) کبیسه می‌شود. بر اساس کبیسه‌گیری رایج در یک دورهٔ سی‌ساله، سال‌های متوالی ۲، ۵، ۷، ۱۰، ۱۳، ۱۶، ۱۸، ۲۱، ۲۴، ۲۶، ۲۹ طول سال به صورت کبیسه (۳۵۵ روزه) است، یعنی چنانچه باقی‌مانده حاصل تقسیم سال قمری به عدد ۳۰ یکی از اعداد مذکور باشد آن سال کبیسه‌است؛ و در نوزده سال دیگر طول سال عادی (۳۵۴ روزه) می‌باشد.[۱۳][۱۴] با توجه به خطی و قراردادی بودن محاسبه این گاه‌شماری نسبت به سال قمری حقیقی (برابر  ۳۵۴.۳۶۷۰۸ روز) طی حدود ۲۴۱۹ سال یکبار به اندازهٔ یک روز نیاز به تصحیح دارد.[۱۵]



روزهای همۀ ماه‌های قمری با هم برابر و دقیقاً 29 روز و 12 ساعت و 44 دقیقه و 3 ثانیه یا 53059028/29 روز است. همچنین ماه‌های همۀ سال‌های قمری با هم برابر و دقیقاً دوازده ماه و برابر با 3670834/354 روز است. اما برای سهولت محاسبات هر سال قمری را 354 روز در نظر می‌گیرند، بدین جهت در یک سال، 6 ماه سی روزی و 6 ماه 29 روزی وجود دارد.

برای جبران کسری سال، هر سه سال یکبار، یک روز اضافه می‌شود؛ یعنی سال سوم 355 روز خواهد بود؛ چرا که مقدار کسری در سه سال، 3670834/0× 3 یا برابر 101/1 روز می‌شود.

نتیجه‌ی مهمی که این محاسبه دارد و نباید از آن غفلت نمود، «قاعده یک در میان» است؛ یعنی در سال قمری، ماه‌‌ها یک در میان 30 و 29 روز، هستند.






باتوجه به اینکه شروع هرماه قمری طبق رصد هلال ماه انجام میشه پس دنبال تبدیل دقیق میلادی به قمری نباشید طبق روش قراردادی می توانید پیش بروید آما در بعضی سال ها ممکن است آن روزی که باید باشد نشود ( چون برنامه نوشته شده شما رصد هلال بلد نیست )



در تصویر بالا 11 دسامبر سال 2028 را برابر 24 رجب 1450 قرار داده.

7/19/622=1/1/1 محرم

12/11/2028

datediff

Diff=513677


در جستجوی گوگل می توانید فرمول زیر برای تبدیل سال میلادی به قمری را بیابید.

H=G-622+(G-622)÷32

H=2028-622+(2028-622)÷32=1449.9375~1450


Jalali:1300/06/20

Hijri : 1340/01/08 محرم

G(MM/DD/YYYY) : 9/11/1921

Diff :  474504



جمعه ۱۳۹۱/۸/۲۶ معادل یک محرم(۱) سال ۱۴۳۴ و ۱۱/۱۶/۲۰۱۲ ( ۱۶ نوامبر)


۱۴۰۰/۶/۲۰ (۹/۱۱/۲۰۲۱:MM/DD/YYYY)

۱-بدست آوردن اختلاف روزهای دو تاریخ شمسی

سال ۱۳۹۱ کبیسه است

-تعداد روزها : از ۱۳۹۱/۸/۲۶ تا آخر سال ۱۳۹۱

۳۰+۳۰+۳۰+۳۰+۳۰-۲۶=۱۲۴

Jalali Leap Years:

۱۳۷۹، ۱۳۸۳، ۱۳۸۷، ۱۳۹۱، ۱۳۹۵، ۱۳۹۹، ۱۴۰۳، ۱۴۰۸

-تعداد روزهای ۱۳۹۲تا ۱۳۹۹ را محاسبه می کنیم بین ۱۳۹۱ تا ۱۳۹۹ تنها ۲ سال کبیسه داریم:

۱۳۹۹-۱۳۹۲+۱=۸×۳۶۵+۲=۲۹۲۲

در بالا چون سال ۹۵و۹۹کبیسه بود اختلاف ۳۶۶و۳۶۵ را برای دوسال که عدد ۲ میشد را در نظر گرفتیم.

-تعداد روزها از اول سال ۱۴۰۰ تا ۱۴۰۰/۰۶/۲۰ :

۵×۳۱+۲۰=۱۷۵


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

۱۲۴+۲۹۲۲+۱۷۵=۳۲۲۱

SELECT DateDiff("d", #11/16/2012#, #09/11/2021#);3221


در تصویر زیر از آغاز تا پایان را ذکر کرده ولی در DateDiff اکسس اختلاف بین دوتاریخ را... توجه کنید که این دو باهم فرق دارند!!!




کبیسه قمری : 

سال Mod 30=2,5,7,10,13,16,18,21,24,26,29


تاریخ قمری ۱/۱/۱۴۳۴ ( ۱۳۹۱/۸/۲۶ )

اضافه کردن عدد ۳۲۲۱ به آن ( ۳۲۲۲ در باحساب)

سال های ۱۴۳۴ ، ۱۴۳۶ ، ۱۴۳۹ ، ۱۴۴۲ کبیسه هستند البته طبق فرمول بالاتر

اگر اختلاف رو ۳۲۲۲ بگیریم و نه ۳۲۲۱ معادله تابع اکسس داریم : 

۳۲۲۱-(۳۵۵-۱)-۳۵۴-۳۵۵-۳۵۴-۳۵۴-۳۵۵

-۳۵۴-۳۵۴-۳۵۵=۳۳


نتیجتا مشخص شد که تبدیل بر اساس تقویم هلالی است و نه قراردادی چون محرم سال ۹۱ بیست و نه روزه است در صورتیکه طبق تقویم قراردادی روزهای فرد ۳۰ روزه و روزهای زوج ۲۹ روزه در نظر گرفته میشود و ماه ۱۲ قمری در سال کبیسه ۳۰ روزه محاسبه می شود.


پس خودتون رو برای تبدیل به قمری یا بالعکس خسته نکنید چون قانون درستی مثل شمسی یا میلادی برا آن حکمفرما نیست.


۱۳۹۱/۸/۲۶ طبق تقویم آن زمان اول محرم است ولی تبدیل زیر ۲ محرم را نشان می دهد چرا که طبق تقویم قراردادی است و نه هلالی

tabdil




حالا خودتون قضاوت کنید 
















فرآیند ایجاد تقویم شمسی در اکسس



۱-فرمی را ایجاد می کنید شامل ۷ باتن در بالا یا بغل با نام گذاری در ویژگی کپشن آنها البته از سمت راست به چپ شامل : شنبه ، یکشنبه ، ... و جمعه 


۲-اگر روزیکم ماهی از یکسالی جمعه باشد در نتیجه باید طبق تصویر زیر ۵ ردیف ۷ تایی باتن یا لیبل داشته باشید



۳-کنترل کمبو باکس یا لیست باکسی ایجاد کنید که سال ها و نام ماه ها در آن فهرست شوند چرا که باتوجه به سال و ماه انتخابی کنترل ها یا لیبل های ایجاد شده در مرحله ۲  پر خواهندشد.

-نحوه پرشدن یا Filling : باید مشخص کنید ، اولِ هرماه چه روزی در هفته است >> شنبه ، یکشنبه و یا جمعه ، سپس در اولین ردیف در ستون شنبه تا جمعه نسبت به قرار دادن اعداد یک تا ۳۰ یا ۳۱ با توجه به ماه انتخابی اقدام کنید.


در تصویر اول فروردین ۷۱ روز شنبه است و چون فروردین ۳۱ روزه است از لیبل ۱ تا ۳۵ اعداد یک تا سی و یک در کپشن کنترل ها قرار گرفته خواهندشد.

bahesabtimeconversion

اختلاف روزهای بین دو تاریخ ۱/۱/۱ (جمعه) تا ۱۳۷۱/۱/۱ (شنبه) عدد ۵۰۰۳۸۳ روز است می توانید در آدرس اینترنتی >>باحساب<< این مقدار را بدست آورید.


اگر فرض شود که یکم جمعه باشدو ماه ۳۱ روزه ، باید از باکس  یا لیبل ۷ شروع به پر کردن  اعداد ۱ تا ۳۱ کنیم :




















این تقویم بر پایه سال اعتدالی خورشیدی برابر با ۳۶۵٫۲۴۲۱۹۸۷۸ روز است؛ که سال تقویمی آن ۳۶۵ و ۳۶۶روزه (کبیسه) می‌باشد.





















تاریخ های میلادی و معادل های شمسی


بازیگر رنج کشیده گذر از رنج ها : 




در گاه‌شماری گرگوری ده روز از تاریخ حذف گردید و کبیسه‌گیری‌های یکنواخت چهارساله نسبتاً کاهش یافت بدینگونه که سال‌های قرن غیرقابل قسمت به ۴۰۰ (مانند: ۱۷۰۰، ۱۸۰۰ و ۱۹۰۰) بدون کبیسه‌گیری باشند. در نتیجه، با احتساب سال گریگوری ۳۶۵٫۲۴۲۵ روز (نسبت به سال حقیقی ۳۶۵٫۲۴۲۱۹۸۷۹ روز) میزان دقت گاه‌شماری میلادی را به عقب‌ماندگیِ یک روز در هر ۳٬۳۲۰ سال رساند.[۶]



DateDiff from 3/22/622 ( 1/1/1 : Jalali  : Friday)

Defaults: vbSunday = 1, vbSaturday = 7


MM/DD/YYYY

datediff

bahesab


1/1/2500

DateDiff:685846

۱۸۷۸/۱۰/۱۲

0+6=6 Friday


2/18/2102

DateDiff:540527

۱۴۸۰/۱۱/۲۹

1+6=7 Saturday


3/20/2999

DateDiff:868180

۲۳۷۷/۱۲/۳۰

Wednsday


2/28/2000

DateDiff:503282

۱۳۷۸/۱۲/۹

Monday


5/23/2012

DateDiff:507750

۱۳۹۱/۳/۳

Wednesday


12/23/1978

DateDiff:495545

۱۳۵۷/۱۰/۲

Saturday


9/11/1978

DateDiff:495442

۱۳۵۷/۶/۲۰

Monday


3/20/2005

DateDiff:505129

۱۳۸۳/۱۲/۳۰

Sunday


3/19/2017

DateDiff:509511

۱۳۹۵/۱۲/۲۹


8/3/2015

DateDiff:508917

۱۳۹۴/۵/۱۲


4/1/2013

DateDiff:508063

۱۳۹۲/۱۰/۱۲


1/2/1979

DateDiff:495555

۱۳۵۷/۱۰/۱۲


1/1/2012

DateDiff:507607

۱۳۹۰/۱۰/۱۱


3/17/2012

DateDiff:507683

۱۳۹۰/۱۲/۲۷


9/21/2021

DateDiff:511158

۱۴۰۰/۶/۳۰


11/22/2026

DateDiff:513046

۱۴۰۵/۹/۱


12/10/2024

DateDiff:512334

۱۴۰۳/۹/۲۰


11/9/2026

DateDiff:513033

۱۴۰۵/۸/۱۸


11/7/1972

DateDiff:493308

۱۳۵۱/۸/۱۶


10/8/2020

510810

۱۳۹۹/۷/۱۷


3/5/2024

512054

۱۴۰۲/۱۲/۱۵


6/6/2024

512147

۱۴۰۳/۳/۱۷


10/9/2023

511906

۱۴۰۲/۷/۱۷


12/31/2023

511989

یکشنبه

۱۴۰۲/۱۰/۱۰


2/5/2023

511660

یکشنبه

۱۴۰۱/۱۱/۱۶


2/8/2023

511663

چهارشنبه

۱۴۰۱/۱۱/۱۹


9/22/2029

514081

۱۴۰۸/۷/۱

شنبه


12/31/2936

516738

۱۴۱۵/۱۰/۱۱

چهارشنبه


3/31/2036

516463

۱۴۱۵/۰۱/۱۲

دوشنبه


12/11/1961

489324

۱۳۴۰/۰۹/۲۰

دوشنبه
















روز عرفه، روز دعاونیایش/ مَاذَا وَجَدَ مَنْ فَقَدَکَ وَ مَاالَّذِی فَقَدَ مَنْ‌وَجَدَک... آن‌کس که تو را ندارد، چه‌دارد؟ و آن‌کس که تو را یافته، چه‌ندارد؟




6 تیر 1402 : مصرف الکل تقلبی


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

استاد تمام دانشگاه و فوق تخصص مراقبت‌های ویژه ادامه داد: کاهش سطح هوشیاری مسمومیت با متانول، درگیری چشمی، تاری دید است به طوری که بیمارستان‌های تخصصی چشم باید در این خصوص با ما همکاری کنند اما متأسفانه تاکنون این بیماران را پذیرش نکردند و ما فقط با متخصصینی که در بیمارستان هستند ارتباط داریم.

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




بنا به نقل وقایع‌نگاران عاشورا وقتی یاران امام حسین(ع) شهید شدند و او تنها ماند این جملات را بر زبان راند که «هَلْ مِنْ ذَابٍّ یَذُبُّ عَنْ حَرَمِ رَسُولِ اللَّهِ ص هَلْ مِنْ مُوَحِّدٍ یَخَافُ اللَّهَ فِینَا هَلْ مِنْ مُغِیثٍ یَرْجُو اللَّهَ بِإِغَاثَتِنَا هَلْ مِنْ مُعِینٍ یَرْجُو مَا عِنْدَ اللَّهِ فِی إِعَانَتِنَا؛ آیا دفاع‌کننده‌ای هست که از حرم رسول خدا دفاع کند؟ آیا یگانه‌پرستی هست که درباره ما از خدا بترسد؟ آیا فریادرسی هست که با فریادرسی از ما به خدا امید داشته باشد؟ آیا مددکاری هست که با کمک به ما امید به آنچه نزد خداست داشته باشد؟»



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

جناب زعفر جِنی حکایت رسیدن به محضر امام حسین (ع) را برای یکی از علما تعریف نموده که مرحوم دربندی مفصلاً آن قضیه را در کتاب مقتلش آورده:
زعفر گفت: وقتی وارد زمین کربلا شدم دیدم از چهار فرسخ تا چهار فرسخ، لشگر دشمن، امام و یارانش را محاصره کرده اند. همچنین دیدم که فوج عظیم ملائکه که به شمارش نمی آمدند، پَر در پَر ایستاده اند. در یک سمت، منصور ملک با سپاهی از ملائکه و در یک طرف میکائیل با سپاهی از ملائکه، در طرف دیگر اسرافیل با گروه عظیمی از ملائکه، همچنین ملک الرّیاح و ملک البحار و ملک الجبال و ملک دوزخ و ملک النار و ملک العذاب با لشگر خود منتظر اجازه و فرمانند. ارواح صد و بیست و چهار هزار پیغمبر از حضرت آدم(ع) تا حضرت خاتم(ص) هم صف کشیده اند. حضرت خاتم انبیاء (ص) آغوش گشوده و می فرماید: «العجل العجل انّا مشتاقون»: فرزندم شتاب و عجله کن که ما بسیار مشتاق تو هستیم».

امام با گوشه چشم به سوی من نگاه کرد، من لشگر خود را عقب گذاشته و خود را به حضور رساندم، رکاب بوسیدم و بر امام (ع) سلام نمودم، حضرت جواب سلام داد و فرمود: زعفر کجا بودی؟ عرض کردم قربانت گردم، در بئرالعلم مجلس عروسی داشتم. خبر از این واقعه شما نداشتم، خبر بی کسی و غریبی شما را که شنیدم با سی و شش هزار جن آمده ام تا یاری شما نمایم.
حضرت فرمود: وفای شما جنیان از آدمی بیشتر است. خدا و رسول از تو راضی باشند، خدمت تو را خداوند قبول نموده، لازم به زحمت تو نیست، چرا که این ها همه ملائکه فتح و ظفرند. عرض کردم: قربانت شوم چرا اجازه نمی دهی با آنان بجنگیم؟ حضرت فرمود: شما آن ها را می بینید ولی آن ها شما را نمی بینند و این از جوانمردی به دور است.
زعفر عرض کرد: آقاجان! ما هم به صورت انسان ظاهر می شویم، اگر هم کشته شویم، در راه خدا کشته و شهید شده ایم.
حضرت اجازه ندادند و به زعفر جِنی فرمودند بجای خودت برگرد.