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

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

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

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

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

نسخه اکسس پیتر نورتون



به نسخه تمیزی از کتاب برنامه نویسی در اکسس ۲۰۰۰ یا ۲۰۰۲ پیتر نورتون نیازمندم اگر شخصی قصد فروش داشت لطفا کامنت بذاره.




تخصیص از موجودی انبار کل به Order های صادره برای کالا


مرداد 1401 : 


«اِنَّ رِبِّکَ لَبِالمِرصاد»

به استحضار ملّت شریف ایران می‌رساند:

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

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





جدول اول و دوم زیر در سایت W3Schools با دستور Create Table ساخته و داده فیلدها هم با Insert Into اَپِند گردیده ،  تصاویر بعدی کوئری هستند در جریان باشید. فرض کردم جدول اول از موجودی انبارکل گرفته شده و جدول دوم نیز ثبت کالا و اُردِرهااست.


در جدول زیر ۴ محصول با نام فرضی Key در انبار کل به تعداد ذکر شده در ستون Inventory موجودی دارند



در جدول زیر درخواست ها ( Order ) طبق آیتم کالا و تعداد مورد نیاز جمع آوری شده ( حتما از عدد استفاده باید کرد یا ردیف !!! ما اینجا Order1 و Order2 ایجاد کردیم ) توجه : اگر شماره اُردِرها فرضا واحد خاصی درخواست کرده پشت سرهم نیست حتما از یک ستون بعنوان ردیف استفاده کنید و در هر کالا ردیف Reset شود یعنی از یک شروع شود.





در تصویر زیر با جمع زدن رویهم اعداد در خواستی برای هر کالا به توتال آن درخواست رسیدیم فرضا برای Key1 تعداد 158 درخواست شده در حالیکه موجودی در انبار کل 145 است ( تصویر اول )





در تصویر زیر اعداد رویهم ( داده ستون یا فیلد  RunningSum ) را از موجودی انبار کل کم کردیم ( داده ستون یا فیلد Remain در ردیف اول 9-145 شد عدد 136 یعنی بعد از تخصیص تعداد 9 برای کالای Key1 موجودی انبار کل تعداد 136 شده)  اگر Key1 را ببینید در یک ردیف مانده به آخری که Key1 تمام شود عدد 9 خورده یعنی تنها تعداد 9 برای Order آخر از Key1 مانده و عدد 13- مشخص می کند که موجودی انبار کل بعد از تخصیص صفر میشود چون در دیتابیس Sql در W3SCHOOLS همچین تابعی وجود نداشت و همینطور IF لذا تا همین جا پیشرفتم.






در تصویر بالا عدد منفی یعنی دیگر انبار با توجه به اختصاص به Order ها  آیتم کالای مورد نظر مثل Key1 ، موجودی ندارد البته چون از IIF نمی توان در Sql References استفاده کرد چون جزء Function های Sql نیست لذا تا همین جا اقدام شد .... در بالا اگر تابع iif بود می گفتیم اگر داده عددی ستون Remain مثبت باشد عدد ستون اول در ستون بعد از Remain ( با نام فرضی Supplied ) بخورد و اگر داده عددی منفی باشد عدد ستون اول بعلاوه عدد Remain شود ( که منفی است مثل 13- )  چرا ؟برای اینکه مشخص کنیم به اُردِری با Remain منفی چقدر انبار تخصیص داده که بعد موجودی آن کالا در انبار کل صفر شده ، فکر خوبی نیست ؟


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


موفق و موید باشد 


تیر ۱۴۰۱ : 


به گزارش فارس کمپین «برخورد با هتک حرمت امام جعفر صادق (ع) در سالن عروسی در اراک» در سامانه فارس من ثبت شد.
 مخاطبان کمپینی با عنوان «برخورد با هتک حرمت امام جعفر صادق (ع) در سالن عروسی غیرمجاز اراک» در سامانه «فارس من» ثبت کردند.
متن کمپین به شرح زیر است:
در زمین‌های کشاورزی اراک منطقه کرهرود یک تالار باغ به صورت غیرمجاز ساخته شده است که حکم تخریب آن در سال ۹۳ صادر شد، ولی به دلایل نامعلوم تاکنون اجرا نشد.
در شب شهادت امام جعفرصادق (ع ) در این مکان، مراسم عروسی با سر و صدای زیاد و پخش آهنگ‌های مبتذل برگزار شد، که باعث ناراحتی قشر مذهبی منطقه شده است.
به گزارش فارس با توجه به جریحه‌دار شدن احساسات دوستداران اهل بیت(ع)در این منطقه، امضاکنندگان این کمپین خواستار اجرای حکم تخریب این تالار باغ که مرکز فساد در این ناحیه است، هستند.





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

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





















Filter و Requery در اکسس


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



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



SELECT *
FROM Vergabeumfang
WHERE 
(
    Vergabeumfang.VSS_LAW Like "*" & [Forms]![Vergabeumfang]![VSS_LAW_Box] & "*" Or Vergabeumfang.VSS_LAW Is Null
)
AND 
(
    Vergabeumfang.V_Commodity_Name Like "*" & [Forms]![Vergabeumfang]![Commodity_Name_Box] & "*" Or Vergabeumfang.V_Commodity_Name Is Null
)
AND 
(
    (
        Vergabeumfang.S63T2 = iif([Forms]![Vergabeumfang]![S63T2_box]=-1, True, -999)
    )
    OR
    (
        Vergabeumfang.S63T4 = iif([Forms]![Vergabeumfang]![S63T4_box]=-1, True, -999)
    )
)






در باتن  از متد Requery استفاده شده



فرق متد Docmd.Requery و متد Me.Requery در زیر قید شده مطالعه نمائید ... زبان برنامه نویسی زبان انگلیسی است پس سعی کنید نسبتا بفهمید


In addition, when you use the Requery action or the DoCmd.Requery method, Microsoft Access closes the query and reloads it from the database, but when you use the Requery method, Access reruns the query without closing and reloading it. Note that the ActiveX Data Object (ADO) Requery method works the same way as the Access Requery method.












.












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



لطفا بعد از مطالعه مطلب در نظر سنجی شرکت نُمائید




در زیر از شی DAO یا Data Access Object استفاده شده که در کتابخانه اکسس موجود است.

فرمی ساخته ایم که سورس آن یک جدول یا کوئری است ( یعنی فرم تحت جدول یا کوئری است یا Underlying ) ، سپس رکوردست باز شده ، در بین فیلدها لوپ زده شده و اسامی آن در صفحه immediate window چاپ شده ( Ctrl+G )

field-name-property-dao 

در لینک بالا حداکثر کاراکتر نام فیلد 64 عنوان شده

Dim Rs as DAO.Recordset

Dim Fld As DAO.Fields

Set rs=Me.RecordsetClone

For Each Fld in Rs.Fields

Debug.Print Fld.Name,Fld.Value

Next


database-object-dao



طبق توضیحات ذیل Data Access Object یا DAO شما را قادر می سازد برای دستکاری ساختار دیتابیس و داده.بسیاری از اشیاء DAO به اشیائی مرتبط است که در دیتابیس اکسس مشاهده می کنید - برای مثال یک شی Tabledef به یک جدول مایکروسافت اکسس مرتبط می شود . یک شئ Field مربوط به یک فیلد در یک جدول است.


Data Access Objects (DAO) enable you to manipulate the structure of your database and the data it contains from Visual Basic. Many DAO objects correspond to objects that you see in your database—for example, a TableDef object corresponds to a Microsoft Access table. A Field object corresponds to a field in a table.




















سلام به اساتید اکسسی


لطفا در نظرات این پست مشکلات برنامه نویسی تون در محیط Vbe اکسس رو عنوان کنید فقط اکسس طبق داکیونت آفیس !!!




یک تیر ۱۴۰۱ اجتماع هنجارشکنانه جمعی از دختر  ( بدون روسری ) و پسرهای حدود ۱۶ ساله در شیراز : شجاعی با بیان اینکه دستگیرشدگان (  منظور عوامل اصلی یعنی لیدرها یا راهبرها ) برای سیر مراحل قانونی تحویل مرجع قضائی شدند، گفت: برگزاری هرگونه تجمع ورزشی یا غیر ورزشی مختلط بدون رعایت موازین شرعی و قانونی از نظر پلیس ممنوع بوده و خلاف مقررات است و برابر قانون با برگزارکنندگان آن برخورد خواهد شد.



۲ تیر ۱۴۰۱ کراماتی بیان داشت: استاندار بوشهر تمامی فرمانداران و مدیران را از بازنشستگان استفاده کرده، جز یکی دو مورد که آن هم به گمانم از دستش در رفته است.


۲ تیر ۱۴۰۱  باور فعالان اقتصادی این است که در دوران تحریم و تورم بالا که به شدت روی کسب‌وکار آن‌ها اثر گذاشته، دریافت مالیات از تراکنش‌های بانکی، فشار بسیار به آنها وارد خواهد کرد. رضا صولتی، فردی که فروشنده گوشی تلفن‌همراه است، دراین باره می‌گوید: بحث مالیات از تراکنش یک روی سکه است. روی دیگر سکه، جدول ضریب سود ناعادلانه ای است که ممیزها براساس آن مالیات را تعیین می‌کنند. ممیز برای فروش گوشی موبایل مربوط به سال ۹۹ آمده و ۱۹ درصد سود فروش لحاظ کرده؛ در حالی که اتحادیه رسما اعلام کرده سود فروش موبایل کمتر از ۴ درصد است، اما سازمان امور مالیاتی ضریب سود ناعادلانه و دلخواه خودش را اعمال می‌کند.

فرد دیگری که تابلوفروشی دارد، می‌گوید: تراکنش‌ها همه سود نیستند که بر آنها مالیات در نظر گرفته شود!



۲ تیر ۱۴۰۱ در بیانیه وزارت خارجه سوئد که امروز صادر شده آمده است: «به دلیل وضعیت امنیتی، وزارت امور خارجه انجام هر سفری به ایران را توصیه نمی‌کند


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









کد نویسی در اکسس



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




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






فیلتر در اکسس


در تصویر زیر سه Toggle Button در OptionGroup با نام Frame5 قرار گرفته و ولیوی آنهای به ترتیب 0 تا 2 است با کلیک روی اولین باتن ،  تمام رکوردهایی که فیلد chk آنها تیک خورده یا نخورده در سابفرم آورده میشود Forms!Form1!Frame5=0 ، کلیک روی باتن دوم رکوردهایی که فیلد chk آنها غیر صفر است در سابفرم لیست میشود و باتن آخر هم لیست رکوردهایی  است که فیلد chk آنها صفر یا تیک ندارند 




Select-Query-Access-


filename=trysql_create_table









در تصویر زیر فرمی Simulate شده که سه کنترل CheckBox برای فیلتر کردن گرید A تا B ( فیلد Grade ) و دو کنترل CheckBox دیگر برای فیلتر کردن تیک خورده ها یا نخورده ها ( فیلد chk )، دارد چنانچه هیچکدام از ۵ چک باکس تیک نخورده باشند کل داده نمایان خواهد شد.( تعداد کل ورودی در تصویر ۹ رکورد بوده )


سمت راست تصویر چهار رکورد نمایش داده شده دقیقا تیک چک باکس گرید A و تیک چک باکس ( Unchecked مربوط به فیلد chk ) در فرم زده شده ...  طبق عبارت Sql کوئری شامل  رکوردهایی با گرید A که تیک  Chk آنها نخورده باشد.


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





?'A' AND FALSE=FALSE

?'A' AND TRUE=NULL

'A' OR TRUE=TRUE

'A' OR FALSE=0

'A' OR TRUE=1

FALSE OR TRUE=TRUE

TRUE OR FALSE=TRUE

TRUE AND FALSE=FALSE

FALSE AND FALSE=FALSE

FALSE OR FALSE=FALSE

NULL AND FALSE=FALSE

NULL AND TRUE=NULL

NULL AND NULL=NULL


برای ارسال داده ها به اکسل نام کوئری را در دستور DOCMD.OUTPUTTO قرار می دهید.


Method vba/api/access.docmd.outputto


در تصویر زیر ، تصویر اول تمام رکوردهای جدول t نمایش داده شده شامل ۹ رکورد ایجاد شده با INSERT INTO ، تصویر سوم که فیلد DATE دارد شامل رکوردهایی است که کوچکت مساوی یک تاریخ خاص و نیز کوچکتر مساوی عدد 105 است ، تصویر چهارم یا آخر در تصویر زیر ، از رکوردهای داخل تصویر سوم آنهایی که تیک چک فیلد CHK آنها زده شده ( یا باصطلاح غیر صفر است ) را نمایش میدهد که شامل دو رکورد است .


در لینک زیر روش بیان شده ، البته هزینه بر است  (کلا در چند خط خیلی کوتاه و شامل 4 تصویر که بعد از اعمال کد SQL جدول فیلترشده) . برای ارسال داکیومنت آن درخواست دهید و بعد از واریز مبلغ ده هزار تومان به ایمیل شخصی ارسال خواهدشد.


Multi Filter  Select-Query-Access-





در تصویر زیر ، رکوردهایی که نام محصول به les ختم می شود لیست شده البته در SQL بجای علامت * در اکسس از % استفاده شده.اگر در اکسس عبارت جستجو بین دو * قرار بگیرد تمام رکوردهایی که نام محصول شامل آن عبارت است را می آورد چه آخر باشد چه هر جای دیگر رشته در فیلد نام محصول.



MULTIFILTER IN ACCESS : 



در تصویر زیر اینطور تصور شده که فرمی با دو چک باکس برای فیلتر کردن فیلد Available و یک کنترل تکست باکس برای فیلتر کردن محتویات فیلد GradeNo موجود است.


در تصویر در صورت تیک داشتن یا نداشتن جفت تکست باکس کل رکوردها که 11 رکورد با Insert Into ایجاد شده در سابفرم نمایش داده میشود. در صورت تیک چک باکس اول رکوردهای دارای  مقدار صفر یا False فیلد Available و تیک چک باکس دوم مقادیر غیر صفر یا True لیست میشوند . البته سابفرم باید Requery شود تا نتیجه فیلترشدن را ببینید.


برای اینکه در سابفرم تمام رکوردهای False و True فیلد Available نمایش داده شود می بایست  : 

Available=False  Or Available=True

حال اگر قرار باشد فیلد Available در کوئری بیلدر مقادیر ولیوی چک باکس ها در فرم را بگیرد میشود :( در صورتیکه جفت چک باکس ها تیک نخورده باشند = False )

Available=False  Or Available=False

و در اینصورت فقط  مقادیر صفر  یا False ها نمایش داده میشود ولی ما می خواهیم در صورت تیک نداشتن دو چک باکس و داشتن ولیوی صفر دو مقدار False  و True را مشاهده بنمائیم.پس باید یکی از طرفین مخاف False  شود.


FALSE OR  <>FALSE=TRUE   نمایش همه

TRUE  OR   <>FALSE = هاTRUE نمایش 

FALSE OR  <>TRUE= ها FALSE نمایش

TRUE  OR  <>TRUE=TRUE نمایش همه




در تصویر زیر دو تکست باکس تصور شده که در صورت تایپ عدد در این دو باکس اعدادی بین این دو که در جدول باشد نمایش داده میشود ، در صورتیکه یک باکس یا هر دو خالی بود از فیلتر در می آید . البته بدین شکل که اگر باکس دوم خالی باشد همه ی رکوردها و اگر باکس اول خالی باشد رکوردها تا مقدار باکس دوم مشاهده میشود در این دو تکست باکس چک میشود که اگر PartNo  در جدول نباشد ارور بدهد در رویداد LOST FOCUS می توان با DlookUp چک کرد اگر نبود  پراپرتی OldValue  مقدار Value  تکست باکسی شود که در حال Exit از آن هستید از رویداد Exit  هم میشود بهره برد.


حال در تصویر زیر  تکست باکس اول در فرم Null و تکست باکس دوم 1003 است ( جدول کلا 11 رکورد دارد )


(GradeNo>='' Or True) And (GradeNo<='1003' Or False) 


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

(GradeNo='123' Or False)  AND (GradeNo='896' Or False) 

False And False=False  ' No Record




بررسی عبارات زیر : 


(GradeNo Between '458' And  '678' Or False Or False)

458 , 678 Not Exist in Above Table

FALSE AND FALSE OR FALSE OR  FALSE=FALSE

پس چون نتیجه FALSE است رکوردی نمایش داده نخواهدشد.

(GradeNo Between Null And  '678' Or True Or False)

678 Not Exist in Above Table

NULL AND FALSE OR TRUE OR  FALSE=TRUE

پس چون نتیجه TRUE است تمام رکوردها نمایش داده خواهدشد.

(GradeNo Between Null And  Null Or True Or  True)

Two Boxes Are Null

NULL AND NULL OR TRUE OR  TRUE=TRUE

پس چون نتیجه TRUE است تمام رکوردها نمایش داده خواهدشد.


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

OR (TRUE AND FALSE) 

که در صورت پر بودن تکست باکس ها ،دو TRUE و FALSE داخل پرانتز TRUE شوند و در نتیجه کل رکوردها نمایش داده شوند و در اینجا جستجو کننده پی خواهد برد که یکی از مقادیر تایپ شده یا هر دو در جدول وجود ندارد البته جلوگیری از تایپ عددی یا تاریخی خارج از محتویات فیلد کار خوب و استانداردی است ولی خوب  کوئری نویسی آسان بنظر میرسد ولی می بینید به همین سادگی که گفته شد نیست مگر اینکه عملگرهای منطقی را کاملا فرا بگیرید.

>>>>>> nullguide-oper

 اگر دو تکست باکس  پر باشند ولی در جدول ناموجود می توانید عبارت بالا را اضافه کنید . ( ... BETWEEN....AND...OR...OR)

(NULL(FALSE) AND NULL(FALSE) OR TRUE OR TRUE )OR (TRUE AND TRUE)=TRUE   (NULL OR TRUE=TRUE)

تکست باکس اول NULL است و تکست باکس دوم مقداری که در فیلد GRADENO وجود ندارد یا حاوی کاراکتر غیر عددیست.

(NULL(FALSE) AND FALSE OR FALSE OR TRUE) OR (TRUE AND FALSE)=TRUE

NULL AND FALSE=FALSE

FALSE OR FALSE OR TRUE=TRUE

TRUE OR (TRUE AND FALSE)=TRUE OR FALSE=TRUE


 جستجو بین دو تاریخ : 


دو کنترل تکست باکس به نام های TXTDATEFROM و TXTDATETO . (   سعی کنید دو تا باکس را چک کنید اگر تاریخ اولی از باکس دومی بزرگتر بود خطائی صادر کرده یا باکس را NULL در نظر بگیرد.



BETWEEN TXTDATEFROM AND TXTDATETO OR FORMS!FORM1!TXTDATEFROM IS NULL OR FORMS!FORM1!TXTDATETO IS NULL


فرضا در جدول تاریخ های 1397/01/30 و 1398/02/01 نداریم تکست باکس ها را با این دو رشته پر می کنیم بعد از خروج از تکست باکس ها پراپرتی VALUE میشود مقادیری که گفته شد.چون دو تاریخ در جدول نیست پس برای هر کدام FALSE را بر می گرداند و نتیجه آخر FALSE است و هیچ رکوردی نمایش داده نخواهد شد.

(FALSE AND FALSE OR FALSE OR FALSE) =FALSE OR FALSE=FALSE  ' NO RESULT

اگر تکست باکس اول NULL باشد و تکست باکس دوم دارای رشته ای باشد که داخل جدول نباشد( =FALSE) و بالعکس تمام رکوردها لیست خواهند شد :

(NULL AND FALSE OR TRUE OR FALSE)=FALSE OR TRUE OR FALSE=TRUE 'SHOW ALL RECORDS

تصویر زیر ، خود گویای توضیحات ارائه شده بالا است . جدول شامل کلا ۱۱ رکورد است یکی از تکست باکس ها خالیست و برابر NULL و در دیگری عددی خارج از اعداد جدول ، زمان اجرای کوئری تمام ۱۱ رکورد نمایش داده شده.



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



نظرات باز است در زیر همین یادداشت هم می توانید اعلام نظر بفرمائید و نظرسنجی فراموش نشود !!!








سوالات


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



بازیابی رمز در اکسس قدیمی

offset : 0x42-0x68

47 5E EC 37 9C E1 9C FA 07 FB 28 E6 D2 13 8A 60 95 31 7B 36 34 D7 DF B1 B6 51 13 43 0E 0A B1 33 F5 C4 79 5B 53 10 7C

  XOR روش 



ROW Hex Char HEXNULL Bin1 Bin2 Pass Bin Hexbin Decode_pass
1 78 x 47 01111000 01000111 7847 00111111 3F ?
2 5E ^ 5E 01011110 01011110
00000000 00
3 D3 EC 11010011 11101100 D3EC 00111111 3F ?
4 37 7 37 00110111 00110111
00000000 00
5 A3 ú 9C 10100011 10011100 A39C 00111111 3F ?
6 E1 ß E1 11100001 11100001
00000000 00
7 9C £ 9C 10011100 10011100
00000000 00
8 FA · FA 11111010 11111010
00000000 00


در اکسس جدید امکان بازیابی با این روش وجود ندارد چون تاریخ  و زمان فایل نیز در کد شدن دخیل میشود. پس سعی   نکنید     منظور اکسس ۲۰۰۰ که با ۲۰۰۷ به بالا ایجادشده باشد

 Low Security وبصورت 


اگر با اکسس 2007 و بالاتر فایل ورژن پاینتر ساخته باشید تاریخ  و ساعت ساخت فایل برای کد گذاری در نظر گرفته خواهد شد و در هدر فایل ذخیره خواهد شد برای بدست آوردن رمزاین حقه را میشود  بکار گرفت  باید یک فایل با همان تاریخ و ساعت ایجادکرد و بعد از آفست 42 تا 68 دو فایل را بایت به بایت با هم مقایسه نمود ولی در آفیس ۲۰۱۰ به بالا از رمزنگاریهای مختلف استفاده شده و غیر قابل بازیابیست جز مهندسان مرتبط حوزه ی خودش 



مخفی کردن پنجره ی اکسس ( Hide Access Window )


استفاده از توابع ویندوز API 

در اکسس تابعی برای این موضوع در نظر گرفته نشده ولی میشود با این توابع و هندل کردن ویندو پنجره ای را بست کامند باتن هایی که در Title Bar هست را برداشت مثل خاصیت MinMax Button =No در پراپرتی شیت فرم اکسس  ، یا تغییر پوزیشن نمایش Msgbox  سیستمی  و یا Icon را در Title Bar فرم انداخت ویا پوزیشن پنجره را تغییر داد و خیلی کارهای دیگر یا حتی گرفتن تکست در Title Bar که همان Caption هست و یا تغییر 


Declare Function ShowWindow Lib "User32" ( Byval Hwnd As Long , Byval ncmdShow As Long ) As Long 



نحوه ی نگارش تابع در ( Win64 و Win32 )  فرق میکند و باید  در Win64 قبل از فانکشن Ptrsafe را قرار داد و کل دیتا تایپ Long در تابع به LongPtr تبدیل  شوند  اگر باید در هر دو 32 بیت و 64 کار کند باید از if Win64 Then # و Else .. End If استفاده کرد که قبل از Else با PtrSafe و LongPtr طبق روش بالا و برای بعد از  Else همان تابع بدون PtrSafe و Long قرار می گیرد 


Hwnd نام کنترل مثلا  فرم یا اپلیکیشن اکسس ؛ مثلا در اکسس  


 نکته : قبل از گذاشتن تابع زیر جهت مخفی شدن پنجره ی اصلی اکسس حواستان باشد در رویداد کلوز فرم حتما دستور خروج از اپلیکیشن که Quit هست با Docmd را بدهید وگرنه برای بستن باید از Task Manager ویندوز استفاده کنید چون برنامه ی شما هنوز باز است و ویندوز تنها با دریافت مسیج حاصل از زدن دکمه ی کلوز پنجره ی اصلی اپلیکیشن اکسس را خواهد بست !!!


ShowWindow Application.hWndaccessApp , 0 


Hide  0 

Normal 1

Minimized 2

Maximized 3 


فیلتر کردن محتویات داخل لیست باکس در زمان تایپ کردن در تکست باکس Filter Contents Of ListBox While Typing The TextBox

استفاده از رویداد OnChange تکست باکس موردنظربنام فیلتر بای  ... اسم لیست باکس در این مثال List0 هست .

سورس لیست باکس از جدول بنام Table1 حاوی فیلدهای نام و نام خانوادگی  .... در مثال پائین s برداشته شود ( انتهای متن sql )

()Private Sub FilterBy_Change
Dim Sql As String 
  Sql="Select  Fnam,Lnam From Table1 Where Fnam 
 Lnam Like '" & Me.FilterBy.Text & "*'"  s  & 
Me.List0.RowSource=Sql
End Sub 



گرفتن مقادیر انتخاب شده در لیست باکس Get List Of Selected Items In List Box


ControlName : List0

اگر خاصیت MultiSelect  از پراپرتی خود لیست باکس انتخاب شود ( Simple Or Extended )  با متد زیر مقادیر Bound Column لیست باکس صفر در پنجره ی Immediate Windo w محیط VBE لیست خواهد گردید. 


If Me.List0.ItemsSelected.Count>0 Then 

Dim VarItem As Variant

For Each VarItem In List0.ItemsSelected 

(Debug.Print List0.ItemData(VarItem

Next

End If

چنانچه لیست باکس چند ستونه باشد و بخواهید مقادیر  Column ها با توجه به Row انتخابی را بدست آورید باید بطریق ذیل عمل بنمائید 


 (Debug.Print   List0.Column(0,2 


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


 برای تعداد ردیف یا Row   

List0.ListCount            

Dim i 

For i=0 To List0.Listcount-1      

برای ستون یا Column

List0.ColumnCount


INDEX : یک  Long Integer که محدوده میتونه از صفر باشه تا ColumnCount منهای یک 

ROW : یک  Integer که محدوده میتونه از صفر باشه تا ListCount منهای یک 


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

صفر را برای ارجاع به ردیف اول بکار میبرید یک برای ردیف دو م و ....


(FORMS!CONTACTS!COSTUMERS.COLUMN(1,4


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



رفتن به رکورد خاص



DoCmd.SearchForRecord acDataForm, "frmOrders", acFirst, "[OrderID] = " & Me!txtOrderID

این متد قدرتمند تر از متد FindRecord هست که عملگرهای منطقی نظیر  >  <  And Or و Between رو ساپورت میکند ( ویژگی مهم ) 

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

Form_SubFormName.SetFocud 

خالی کردن تکست باکس های داخل فرم ( سینگل )


Dim  Ctl

For Each Ctl In Me.Controls 

If Ctl.ControlType=acTextBox Then      

Ctl=Null             

End If     

Next


126 - acAttachment
   
'108 - acBoundObjectFrame
   
'106 - acCheckBox
   
'111 - acComboBox
   
'104 - acCommandButton
   
'119 - acCustomControl
   
'103 - acImage
   
'100 - acLabel
   
'102 - acLine
   
'110 - acListBox
   
'114 - acObjectFrame
   
'105 - acOptionButton
   
'107 - acOptionGroup
   
'124 - acPage
   
'118 - acPageBreak
   
'101 - acRectangle
   
'112 - acSubform
   
'123 - acTabCtl
   
'109 - acTextBox
   
'122 - acToggleButton
Go to the top of the page
 

شمردن کاراکتر خاص در طول یک رشته

مثال  شمارش تعداد ro در رشته ی  x 

"X="Roturzrxro

اول در آوردن فاصله در طول رشته ی x اگر وجود داشته باشد 

  (""," ",Replace(x=


راه حل خیلی ساده استفاده از توابع Replace و Len 

(" ","Len(x)-Len(Replace(x,"ro

طول رشته ی X میشود 10 و طول رشته در تابع Replace (جایگزینی فاصله بجای ro ) میشود 8  

در نتیجه تفاضل آنها 2 میشود یعنی دو تا ro در رشته ی x وجود دارد.



ریست کردن شماره ی ردیف در فرم سینگل


اگر AutoNumber باشد که باید فیلد حذف و دوباره اضافه شود 



عدم نمایش پیغام اکشن کوئری 

Docmd.SetWarnings False

ریست کردن ردیف در سینگل فرم 

Docmd.RunSql " Update Tbl Set Row=Row-1 Where  Row>" & Me!Row 

  Docmd.SetWarnings True