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

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

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

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

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

Teigger در Sql



Create Trigger [dbo].[Trg_Update] On [dbo].[myTable]
After Update 
As Begin
Update myTable Set ModifyDateTime = GETDATE()
Where myTable.id = (Select d.id from deleted d)
End


ساخت تریگری که بعد از ویرایش فیلد ModifyDateTime پر می شود  البته با شرط id 


After Update Trigger در SQL یک رویه ذخیره شده در جدول پایگاه داده است که پس از اجرای موفقیت آمیز عملیات Update در جدول مشخص شده ، به طور خودکار فراخوانی یا راه اندازی می شود .برای مواردی که شروع نشده اند ، از دستور Update برای اصلاح داده ها در ردیف های موجود جدول داده استفاده می شود.


CREATE TRIGGER [dbo].[after_update] ON [dbo].[MYTABLE]
AFTER UPDATE
AS
BEGIN
    DECLARE @ID INT

    SELECT @ID = D.ID
    FROM inserted D

    UPDATE MYTABLE
    SET mytable.CHANGED_ON = GETDATE()
        ,CHANGED_BY = USER_NAME(USER_ID())
    WHERE ID = @ID
END




Inserted and Deleted Tables in SQL
  1. If any record is being inserted into the main table, a new entry, of the record being created, is also inserted into the INSERTED table.
  2. If any record is being deleted from the main table, an entry of the record is being deleted, is inserted into the DELETED table.


جداول inserted یا Deleted در SQL  : 


1-اگر رکوردی در جدول اصلی insert یا Delete شود ، یک ورودی جدید از رکورد در حال ایجاد یا حذفی  نیز در جدول  Deleted ، Inserted درج میشود . اینها برای مواردی هستند که شما میخواهید Update در همان ردیف انجام شود نه کل ستون پس نیاز به id دارید !!!


SET NOCOUNT ON/OFF statement controls the behavior in SQL Server to show the number of affected rows in the T-SQL query.



عبارت Set NOCOUNT ON/OFF برای نمایش یا عدم نمایش ردیف های متاثر از تغییر در کوئری T-SQL یعنی زمان ON بودن تعداد رکوردهای اضافه ، آپدیت یا حذف شده را نمایش خواهد داد.



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


Database.RecordsAffected property

















اصلاح دیزاین جدول در اکسس یا اصلاح فیلد تایپ



ALTER TABLE : 


Modifies the design of a table after it has been created with the CREATE TABLE statement.


دیزاین یک جدول ایجاد شده با CREATE TABLE را تغییر می دهد . ALTER COLUMN نیز برای اصلاح دیتا تایپ فیلد استفاده می شود. ( در نمای SQL )



ALTER TABLE table {ADD {COLUMN field type[(size)] [NOT NULL] [CONSTRAINT index] | ALTER COLUMN field type[(size)] | CONSTRAINT multifieldindex} | DROP {COLUMN field I CONSTRAINT indexname} }


DROP هم برای حذف ستون یا فیلد مورد نظر استفاده میشه ، حذف فیلد یا ستون با دیتا تایپ AutoNumber باعث خطا می شود ( برای حذف این ستون  می بایست اول دیتا تایپ را تغییر دهید مثلا به Number یا Text ، اگر Primary Key دارد آنهم بایستی برداشته شود و بعد Drop Column yourfield   استفاده شود )


ALERT نام جدول DROP COLUMN نام فیلد


برای اضافه یا اصلاح فیلد نوع یا تیپ AutoNumber در اکسس از Counter استفاده بنمائید.(دوپارامتر دارد اولی از چه عددی شروع شود و دومی چند تا چند تا)


برای Reset شماره های AutoNumber  زمانیکه یکسری اعداد بخاطر حذف رکوردهایی lost شده می توان با همان Alter Column دیتا تایپ را به Number تغییر داد و سپس دوباره آنرا با Counter ، دیتا تایپ AutoNumber کنید میشه ؟!!!  خیر امکانپذیر نیست


در Vba متد خاصی برای  اصلاح دیتا تایپ فیلد وجود ندارد کاری که می کنید این است : با CreateField یک فیلد جدید بسازید بعد با UpdateQuery مقادیر را به آن انتقال دهید ( Set NewField=OlfField )  سپس فیلد قدیمی (  OldField )  را حذف  و شئ TableDef را Refresh کنید. ( حتما برای تنظیم اشیاء و کاربردشون از Set استفاده کنید چون باید متغیر تعریفی مثل tdf  به کالکشن TableDefs متصل و بتواند از متدها و ویژگیهای آن بهره ببرد ) اگر از Set استفاده نکنید مطمئنا پیام خطائی صادر و از ادامه کار جلوگیری می کند.



نحوه اجرای دستورات Sql هم با RunSql یا از کالکشن دیتابیس متد Execute . لینک database-execute



The Microsoft Access database engine does not support the use of CREATE TABLE, or any of the DDL statements, with non-Microsoft Access database engine databases. Use the DAO Create methods instead.


موتور دیتابیس اکسس استفاده از Create Table یا هر یک از عبارات Data Definition Language ( DDL ) را با دیتابیس  های موتور دیتابیس غیر اکسس پشتیبانی نمی کند.به جای آن از روش های Dao Create بهره ببرید.


In the context of SQLdata definition or data description language (DDL) is a syntax for creating and modifying database objects such as tables,


در مفاد SQL یا Structural Query Language ، این DDL یک علم نوشتاری است برای ایجاد یا اصلاح اشیاء پایگاه داده مثل جداول 



Dim tdf As Dao.TableDef

Dim fld As Dao.Field

Dim prp As Dao.Property ( no use properties to ger property name )


ایجاد یک کوئری موقت با یک رشته به طول صفر و اجرای یک  Sql که تهیه کردید

Set tdf=CurrentDb.CreateQueryDef("")

StrSQL="Select Distinct id,desc from table1"

Docmd.RunSql StrSQL


Docmd.OpenQeury QueryName


This method is only available in the Access database environment. See the OpenView or OpenStoredProcedure methods if you are using the Access Project environment (.adp).


متد بالا برای باز کردن کوئری فقط در محیط پایگاه داده اکسس است ،  متد OpenView یا OpenStore را مشاهده کنید چنانچه از محیط پروژه اکسس با پسوند adp استفاده می کنید.


-------------------------

For Each fld In tdf.Fields

For Each prp in fld.Properties

-------------------------


Data Access Objects (DAO) enable you to manipulate the structure of your database 


DAO دسترسی شما به دستکاری ساختار پایگاه داده را فراهم می سازد.



Databases in Access are composed of four objects: tables, queries, forms, and reports. Together, these objects allow you to enter, store, analyze, and compile your data however you want

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


access.accessobject


Because an AccessObject object corresponds to an existing object, you can't create new AccessObject objects or delete existing ones. To refer to an AccessObject object in a collection by its ordinal number or by its Name property setting, use any of the following syntax forms:

  • AllForms (0)
  • AllForms ("name")
  • AllForms ![ name ]


بخاطر اینکه شئ AccessObject متعلق است به یک شئ موجود لذا نمی توان شئ های AccessObject جدید ساخت یا آنرا حذف کرد.برای ارجاع به یک شئ AccessObject در یک مجموعه با شماره ترتیبی  یا تنظیم ویژگی Name  خودش  از شکل های نوشتاری که در بالا اشاره شد استفاده شود.


مطالب بر اساس آنچه جستجو و به این بلاگ ختم شده بیان خواهد شد 



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















تغییر نام آبجکت ها در اکسس ( جدول ، کوئری ، فرم و ... )



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


office/vba/api/access.docmd.rename


expression.Rename (NewNameObjectTypeOldName)


سه آرگومان دارد اولی نام جدید دومی نام آبجکت با پیشوند ac مثل acForm یا acTable و سومی نام قدیمی شئ مورد نظر


کپی آبجکت مورد نظر از یک دیتابیس به دیتابیس دیگر با اکشن کپی آبجکت در ویژوال بیسیک.


expression.CopyObject (DestinationDatabaseNewNameSourceObjectTypeSourceObjectName)



You can use the DeleteObject method to delete a specified database object.

If you leave the ObjectType and ObjectName arguments blank (the default constant, acDefault, is assumed for ObjectType), Access deletes the object selected in the Database window. To select an object in the Database window, you can use the SelectObject action or SelectObject method with the InDatabaseWindow argument set to Yes (True).


استفاده از اکشن DeleteObject در ویژوال بیسیک برای حذف آبجکت دیتابیس مشخص شده.


اگر آرگومان های  ObjectType و ObjectName را خالی بگذارید ( ثابت پیش فرض acDefault است که برای ObjectType انجام میشود ) ، اکسس آبجکت انتخاب شده در دیتابیس را انتخاب می کند آخ آخ آخ !!! برای انتخاب آبجکت در پنجره دیتابیس می توان از اکشن SelectObject یا متد  SelectObject استفاده نمود با تنظیم آرگومان InDatabaseWindow به Yes یا True.


expression.SelectObject (ObjectTypeObjectNameInNavigationPane)


InNavigationPane : 


Use True to select the object in the Database window. Use False (0) to select an object that's already open. If you leave this argument blank, the default (False) is assumed.


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



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



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















SetOption جهت تنظیم مقادیر options در دیالوگ باکس Access Options مثل تغییر رفتن به رکورد دیگر یا خاموش کردن پیام های کوئری اپند


اگر چک باکس باشد از True و False استفاده می شود


Selection Behavior یا رفتار انتخاب در چک باکس


Application.SetOption "Selection Behavior", 1


آیتم زیر انتقال بعد از زدن اینتر اگر مقدار آرگومان دوم یک باشد وقتی در فیلد جدول اینتر بزنید به فیلد بعدی می رود بستگی به tab order دارد ولی اگر 2 باشد بعد از زدن اینتر به رکورد بعدی می روید.البته بعضی از آیتم ها مثل تغییر ریبون نیازمند بستن دیتابیس است و مستقیما اعمال نمی شود!!!


Application.SetOption("Move After Enter", 1) ' to set it to move to the next control

Application.SetOption("Move After Enter", 2) ' to set it to move to the next record


وقتی کوئری اپند را اجرا می کنید یا رکورد یا رکوردهایی را با کوئری delete حذف می کنید پیغام های اکسس مبنی بر اینکه مایلید یا خیر و ... نمایان می شود برای اینکه دیگر نمایش داده نشود در دیالوگ باکس Options تیک چک  موارد زیر باید برداشته شوند.معادل SetWarnings هستند 


Application.SetOption "Confirm Action Queries", 0 Application.SetOption "Confirm Document Deletions", 0 Application.SetOption "Confirm Record Changes", 0


برای compact  کردن در لحظه از SetOption یا سایر روش ها مستقیما نمی توان عمل کرد و دیتابیس را compact نخواهد کرد چرا چون اکسس اگر مشاهده کنید یک فایل دیگر با پسوند lccdb در کنار آن می سازد و قفل می شود و اجازه چنین کاری در این حالت داده نخواهد شد. خودش هم اگر می بینید گزینه ای در دیالوگ باکس با عنوان compact on close دارد مطمئن باشید که این compact را در دیتابیس دیگر که بسته است انجام می دهد و آنرا با دیتابیس شما عوض میکند بطوریکه ما کاربران از درک آن عاجز خواهیم بود. ( نکته  : زمانیکه دیتابیس باز است وقتی می خواهید عمل split انجام دهید حتما از بسته بودن اکسسی که share کردید اطمینان حاصل کنید چون باعث می شود درست کار نکند و زحماتتان به باد رود !!!  مخصوصا دستکارس در دیزاین آبجکت ها )



set-options-from-visual-basic










تریگر در اکسس ( ماکروهایی که اتومات اجرا می شوند )




Data Macro 


آپدیت فیلد اتومات در جدول 


after-insert-macro-event


Macro Action : 


The SetLocalVar action creates a temporary variable and set it to a specific value.


ایجاد متغیر موقت و تنظیم به مقدار مشخص


در Vba به TempVars مراجعه شود





Store Procedure در SQL


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


در زیر پروسیجور SelectAllCustomers با پارامترهایی تعریف شده 



CREATE PROCEDURE SelectAllCustomers @City nvarchar(30), @PostalCode nvarchar(10)
AS
SELECT * FROM Customers WHERE City = @City AND PostalCode = @PostalCode
GO;

نحوه فراخوانی :

EXEC SelectAllCustomers City = "London", PostalCode = "WA1 1DP";

create_procedure


stored-procedure-in-sql


از لینک بالا کپی شد یک store procedure به نام GetCarDesx_Para که پارامتری بنام CID  را میگیرید و در Select کوئری که جوین شده است قرار داده و خروجی می دهد.


با دستور insert into داده ها را به فیلدهای ساخته شده (با Create table ) اضافه نموده.

SELECT * FROM Car;

Output:

StoredProcedureInSQL_1

ایجاد جدول CarDescription با Create Table و اضافه کردن داده به فیلدهای آن با دستور insert into


SELECT * FROM CarDescription;

Output:

StoredProcedureInSQL_2

در زیر store procedure با نام GetCarDesc تعریف شده و با EXEC فراخوانی شده مشخص است که این پروسیجور Description را بر اساس CarID در کنار فیلدهای جدول Car نمایش می دهد.


EXEC GetCarDesc;

Output:

StoredProcedureInSQL_3


در عبارت Sql زیر دو جدول را بهم جوین کرده یکی جدول کار با Alias یا مستعار C و دیگری CD بطوریکه داده ی  فیلد CarID این دو جدول با هم مطابقت داشته باشند ( اگه تکست باشه حتی یک space اضافی باعث عدم تطابق خواهد شد ، پس فقط رکوردهایی که دارای دو داده مشابه باشند می آید مثل A اشتراک B که مشترک ها خروجیست )  و در آخر گفته این پروسیجور پارامتر با فیلد CarID مورد تطابق قرار گیرد یعنی اگر پیدا کرد لیست کند در جدول 


CREATE PROCEDURE GetCarDesc_Para (@CID INT)

As

BEGIN

SET NOCOUNT ON

SELECT C.CarID,C.CarName,CD.CarDescription  FROM 

Car C

INNER JOIN CarDescription CD ON C.CarID=CD.CarID

WHERE C.CarID=@CID

END

To execute it :

EXEC GetCarDesc_Para 201;

Output:

StoredProcedureInSQL_4



Using Store Procedure In Access ( ADO )


calling-a-stored-procedure-with-a-command


You can use Access as a front-end application and then link to tables in a back-end server, such as SQL Server


لینک زیر : می توان از Access بعنوان یک برنامه front-end استفاده نمود و سپس پیوندی به جداول در سرور back-end مثل sql server زد.


create-a-pass-through-query


برای اجرای store procedure  ساخته شده می توان استفاده نمود لینک زیر داکیومنت آفیس

vba/api/access.docmd.openstoredprocedure



در کد زیر یک کوئری موقت یا Temporary در دیتابیس اکسس ایجادشده و بعد کانکت شده به sql و سپس اجرای store procedure یا دستورالعمل ذخیره شده در sql سرور


With db.CreateQueryDef("")
.Connect = db.TableDefs("ODBC;DATABASE=OurDB;UID=test1;PWD=password;DSN=OMBudget Prod SQL04;").Connect
.sql = "exec Update_UserPermissions 'Username', 'Department'"
.ReturnsRecords = False 'this will avoid error 3065
.Execute dbFailOnError
End With


البته connect بالا توصیه نمیشود چون اگر کسی بتواند اکسس شما را از جای دیگر هک کند با همین کانکت می تواند پسورد اس کیوال را تصرف نموده و تریگرها یا ساختار جداول را دستکاری یا حذف نماید.پس می توانید از شئ ADODB استفاده نمائید و کانکشن استرینگ بسازید آنرا Open کرده و کامند خود را اجرا کنید.


تعریف شی ارتباط ADO : 


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


The ADO Connection Object is used to create an open connection to a data source


connectionstring :


stConnect = "ODBC;DRIVER=SQL Server;SERVER=" & stServer & ";DATABASE=" & stDatabase & ";UID=" & stUsername & ";PWD=" & stPassword





Don’t forget the instance name!

When connecting to a SQL Server Express database, you must include the instance name along with the server name. For example, the default instance name when installing Express is “SQLExpress”, if you’re connecting to a server called “DEVServer” than the server portion of your connection string should be: “DEVServerSQLExpress”.











نامگذاری پادشاهان طاغوتی در تهران



www.khabaronline.ir/amp/1584248/




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


نماز برای نابودی برنامه هسته ای ☺



khabaronline


یک خاخام یهودی در اظهاراتی عجیب و ضد ایرانی گفت: برای نابودی برنامه هسته‌ای ایران دعا کنید و نماز بخوانید!

 منبع: کاوش مدیا







گرفتن عبارت Sql مربوط به کوئری یا تغییر آن و تعداد فیلدها و نام فیلد کوئری



ویژگی SQL حاوی عبارت یا دستور SQL است که نحوه انتخاب ، گروه بندی و ترتیب رکوردها را هنگام اجرای کوئری تعیین می کند. می توان از کوئری برای انتخاب رکوردهایی برای گنجاندن در شئ رکوردست استفاده کرد.همچنین می توان اکشن کوئری ها را برای اصلاح بدون ارجاع به رکوردها تعریف کرد.


نوشتار SQL مورد استفاده در یک کوئری باید با SQL موتور کوئری مطابقت داشته باشد که بر اساس نوع فضای کاری تعیین میشود. در یک فضای کاری مایکروسافت اکسس ، از گویش  یا زبان Microsoft Access Sql استفاده کنید مگر اینکه یک کوئری pass-through ایجاد کنید در اینصورت باید از زبان ( dialect  ) سرور استفاده کرد.


اگر عبارت SQL شامل پارامترهایی باشد باید آنها را قبل از اجرا تنظیم کنید . تا زمانیکه پارامترها تنظیم مجدد نشوند ، هر بار که کوئری اجرا می شود ، همان مقادیر پارامتر اعمال می گردد.



You should not use SET except with objects. You need an object for QueryDefs, so:

SET  برای Objects استفاده می شود.

Dim qd As QueryDef
Set qd =CurrentDb.QueryDefs("MyQuery")
qd.SQL = "SELECT Category FROM Categories"


در لینک زیر ویژگیهای دیگر  این آبجکت یا شئ وجود دارد.

querydef-properties-dao

گرفتن تعداد فیلدهای کوئری مورد نظر



QueryDefs("QueryName").Fields.Count

گرفتن نام اولین فیلد از کوئری مورد نظر

QueryDefs("QueryName").Fields(0).Name

پس ملاحظه فرمودید از صفر شروع می شود



دوستان عزیز لطفا شرکت در نظرسنجی فراموش نشود











مطلبی در مورد تنظیم بعضی خواص در فرم




دوستان دستکاری بعضی از خاصیت ها در  پنجره پراپرتی شیت فرم اکسس فقط در نمای دیزاین امکانپذیر است و نمی توانید مستقیم از فرم در حال نمایش آنها را تغییر دهید پس اگر دیتابیس را بصورت accde در آورید بهیچ عنوان کد vba شما کارائی نخواهد داشت از طرفی اگر به accde تبدیل نشود امکان هک کردن بسیار بالاست.


لطفا در نظر سنجی شرکت نمائید.




چک کردن باز بودن فرم بصورت Form Dialog و شفافیت یا کدورت پنجره



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


win32/api/winuser/getwindowlonga

win32/winmsg/extended-window-styles  


GWL_EXSTYLE=-20

WS_EX_DLGMODALFRAME =&H1


GetWindowLongA hWnd,nIndex(GWL_EXSTYLE)


LIB "USER32"


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



using-layered-windows

کدر شدن یا شفاف شدن یک پنجره لایه ای را تنظیم میکند. 

winuser-setlayeredwindowattributes

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

When bAlpha is 0, the window is completely transparent. When bAlpha is 255, the window is opaque.


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



در ویندور 8 استایل Extended Layered برای پنجره های بالایی و زیر پنجره ها پشتیبانی می شود ولی در نسخه های قبل تر فقط به پنجره های بالاتر اعمال می شود.کسانیکه پنجره ویندوزی می سازندبا این مفاهیم آشنا هستند.

Windows 8:  The WS_EX_LAYERED style is supported for top-level windows and child windows. Previous Windows versions support WS_EX_LAYERED only for top-level windows.




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











ویژگی ColumnHidden جهت پنهان کردن ستون در نمای دیتا شیت



textbox.columnhidden

اگر ویژگی هیدن در فیلد مورد نظر وجود نداشت با کد زیر می توان این ویژگی ( ColumnHidden ) را اضافه کرد البته پراپرتی یونیک است و اگر دوباره اضافه شود خطا نمایان خواهدشد.

expression .CreateProperty(NameTypeValueDDL)

Field.CreateProperty("ColumnHidden",dbLong,True)


You manipulate a table definition using a TableDef object and its methods and properties



برای دستکاری ویژگیهای جدول : استفاده از شئ TableDef و متد و ویژگیهای آن







متد Add برای اضافه کردن شروط قالب به مجموعه FormatConditions



CONDITIONAL FORMATTING ( VBA )



FormatConditions.Add Method : 


با استفاده از متد Add می توان یک فرمت شرطی  بعنوان شئ FormatCondition به مجموعه FormatConditions یک کنترل  کمبو یا تکست باکس اضافه نمود.


expression.Add (TypeOperatorFormula1Formula2)


آرگومان Type در متد بالا : 

AcFormatConditionType : 


acDataBar :The conditional format is displayed as a 
data bar
قالب شرطی که بصورت میله داده نمایش داده می شود
acExpression : The conditional format is based on an expression.
قالب شرطی بر اساس یک عبارت است مثل "Me.Id Mod 2"
acFieldHasFocus : The conditional format is based on the value of the control that has focus on a form.
قالب شرطی بر اساس مقدار کنترلی است که در فرم فوکس گرفته
acFieldValue : The conditional format is based on values in the selected control.
قالب شرطی بر اساس مقادیر در کنترل انتخاب شده است مثل فیلد ME.ID

آرگومان Operator که عملگرها است مثل acequal و ....

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


اضافه کردن شروط برای کنترل ، محدودیت دارد و زمانی که بیشتر از تعداد مجاز شود ارور یا خطا می دهد ، پس سعی کنید از همان باتنی که در تب فرمت در نمای دیزاین و کنترل تکست یا کمبو باکس بعنوان Conditional Formatting است استفاده کنید.


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

تعریف OFC بعنوان FormatCondition.
Set کردن OFC برای استفاده از متد ADD در ویژگی FormatCondition  تکست باکس ( txt1.FormatConditios.Add ) اگر تنظیم نشود ( یعنی از Set استفاده نشود ) ارور می دهد ، در متد Add آرگومانها بدلخواه پر شوند.
مرحله آخر مقدار دادن به ویژگی ForeColor کنترلی است که به متغیر OFC تنظیم شده. ( OFC.ForeColor=vbGreen )
می توانید کدها را در رویداد لود فرم قرار دهید.

FormatConditions خودش یکسری ویژگیها دارد مثل Count که تعداد شروط مربوط به تکست باکس یا کمبو باکس مشخص شده را می دهد.





Remarks

You can use the Delete method of the FormatConditions collection to delete an existing FormatConditions collection from a combo box or text box control.


با استفاده از متد Delete مجموعه FormatConditions می توان این مجموعه را از یک کنترل تکست یا کمبو باکس حذف نمود


مرجع : داکیومنت اکسس سایت آفیس


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















TempVars یا تعریف متغیر و استفاده در سایر فرم ها



Tempvar متغیری است که می تواند در Vba مورد استفاده قرار گیرد.


مجموعه TempVars که متدهای Add و Delete دادد تا 255 شی Tempvar را می تواند ذخیره کند. اگر آنرا حذف نکنید در حافظه تا بسته شدن دیتابیس باقی می ماند . بهترین پیشنهاد حذف متغیرهاست وقتی که کارتان به اتمام رسیده.

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

  • TempVar![name]


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


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


اکسس فقط یک دیتابیس است












دسترسی به تمام اشیاء دردیتابیس اکسس ( جداول ، کوئری ها ) یا ( فرم و گزارشات )


CurrentData


دارای خصوصیات یا ویژگیهای زیر است ، مورد استفاده : فرضا بخواهید لیست جداول را بگیرید یا در جداول و  کوئری ها لوپ بزنید برای جستجو.


برای دسترسی به مجموعه های زیر و خصوصیات هر کدام 

Properties

برای دسترسی به فرم ها و گزارشات از CurrentProject استفاده بنمائید



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


office/vba/api/access.currentproject











ساخت کوئری در وی بی ای با CreateQueryDef


CreateQueryDef



در فضای کاری مایکروسافت اکسس اگر چیزی غیر از رشته با طول صفر  ("") برای نام شئ فراهم کنید زمان ساخت QueryDef نتیجه این میشود که شئ QueryDef بصورت اتوماتیک به مجموعه QueryDefs اضافه میشود


اگر شی مشخص شده ( کوئری ایجاد شده )  قبلا عضو مجموعه QueryDefs باشد ، با خطا مواجه خواهید شد. شما می توانید با استفاده از رشته ای با طول صفر زمان اجرای CreateQueryDef برای آرگومان Name یک QueryDef موقت بسازید. حتی می توانید این کار را با تنظیم ویژگی Name یک QueryDef جدید روی یک رشته با طول صفر "" انجام دهید 


شی QueryDef موقت مفید هستند چنانچه بخواهید مکررا از عبارات اس کیو ال دینامیکی بدون احتیاج به ساختن اشیاء دائم جدید در مجموعه QueryDefs استفاده کنید. نمی توانید یک شی QueryDef موقت را به هر مجموعه ای اضافه کنید بدلیل اینکه رشته با طول صفر برای یک شئ QueryDef دائم معتبر نیست . می توان همیشه خصوصیات Sql و Name شئ QueryDef جدیدا ساخته شده را تنظیم و نتیجتا QueryDef را به مجموعه QueryDefs اضافه نمائید.


برای اجرای عبارت Sql در شئ QueryDef از متد Execute یا OpenRecordset بهره ببرید.


 استفاده از شئ QueryDef راه ترجیحی است برای اجرای کوئریهای نوع Sql pass-through یا sql هایب که پاس دهی می شوند به یک رابط بیرونی با ODBC.


برای حذف این شئ از مجموعه در موتور دیتابیس اکسس از متد Delete در مجموعه استفاده نمائید.


expression .CreateQueryDef(NameSQLText)

دو آرگومان بالا Optional یا انتخابی است.


پس با مطالعه داکیومنت آفیس به این نتیجه می رسیم که اگر نام کوئری ساخته شده چیزی غیر از رشته ای  با طول صفر باشد ، در زمان ایجاد دوباره آن یا Recreate با خطا مواجه خواهیم شد چون  بطور دائم به مجموعه QueryDefs اضافه می کند و تکرار پذیر هم نیست ( یونیک است ) لذا برای ایجاد کوئری موقت از ("") استفاده  بنمائید بدون فاصله ، چرا ؟!!! چون خود Space هم طول دارد و صفر نیست.



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





گرفتن موقعیت کرسر ماوس در داخل یا بیرون فرم




برای 32 بیت : 


Private Declare Function GetCursorPos Lib "user32" (lpPoint As POINTAPI) As Long


Private Type POINTAPI

        x As Long

        y As Long

End Type

Dim a As POINTAPI


از رویداد OnTimer استفاده میشود تا در هر لحظه تغییر مختصات ماوس در Screen گرفته شود.


GetCursorPos a

Label1.Caption="X:" & a.x & ";Y:" & a.y



When running in 64-bit versions of Office, Declare statements must include the PtrSafe keyword. The PtrSafe keyword asserts that a Declare statement is safe to run in 64-bit development environments. Adding the PtrSafe keyword to a Declare statement only signifies that the Declare statement explicitly targets 64-bits.


وقتی در نسخه 64 بیت اجرا می شود.عبارات اظهارشده می بایست شامل کلیدواژه ی PtrSafe باشد.در عبارات زیر مشاهده می کنید که PtrSafe در کجا بکاربرده شده و در ضمن بجای تایپ داده Long از LongLong یا LongPtr استفاده شود.


Public | Private ] Declare PtrSafe Function name Lib "libname" [ Alias "aliasname" ] [ ( [ arglist ] ) ] [ As type ]