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

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

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

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

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

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”.