PDA

View Full Version : کوئری های اکسس



kiani.mehdi
دوشنبه 14 خرداد 1386, 21:27 عصر
همونطور که میدونید اکسس قابلیتی مثل SP ها در SQL SERVER نداره
تو SP ها میتونید متغیر تعریف کرده و انها را از C# به SP پاس دهید
توی اکسس چطوری میشه این کار را کرد؟
یعنی کوئری بنویسید که بشه با متغیر آنها را کنترل کرد

ghafoori
دوشنبه 14 خرداد 1386, 22:25 عصر
دوست عزیز پیشنهاد من این است که یک تابع در سی شارپ بنویسید که پارامترها را گرفته و رشته sql لازم را تولید کند و نهایتا این کد sql را به اکسس بفرستید

kiani.mehdi
دوشنبه 14 خرداد 1386, 22:50 عصر
دوست عزیز پیشنهاد من این است که یک تابع در سی شارپ بنویسید که پارامترها را گرفته و رشته sql لازم را تولید کند و نهایتا این کد sql را به اکسس بفرستید

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

موفق باشید
مهدی کیانی

ghafoori
سه شنبه 15 خرداد 1386, 07:10 صبح
مگه فقط یه نوع کوئری داریم که یه تابع بنویسم؟
دوست عزیز شما هم داخل sql server هم یک sp ندارید حالا بجای هر sp یک تابع داخل سی شارپ می نویسید که کار ان sp را شبیح سازی کند

انتظار هم که نداری یه تابع بتونه انواع و اقسام کوئری ها را تولید کنه
overload کردن هم که فکر نکنم خیلی جالب باشه
برای هر کوئری هم که نمیشه یه تابع نوشت
اتفاقا میشه اما فکر نکنم جالب باشه یک تابع بنویس که یک متغییر int بگیرد و یک رایه از sting متغییر اولی نوع کوئری را که تابع باید تولید کند مشخص می کند و ارایه هم بارمترهای کوئری را در خود دارد نهایتا این تابع همیشه یک کد sql به شما تحویل می دهد

kiani.mehdi
سه شنبه 15 خرداد 1386, 08:59 صبح
راه جالبی نیست
یعنی راه حل دیگه ای وجود نداره؟
بقیه دوستانی که با اکسس برنامه نوشتن تاحالا به یه همچین موضوعی فکر نکردن؟
یا اینکه فقط کوئری می نویسند ؟
من خیلی از برنامه های بزرگ را هم دیدم که دیتا بیس اونا اکسس بوده
یعنی اونا هم فقط ار کوئری های متنی استفاده می کنند؟

Alireza_Salehi
سه شنبه 15 خرداد 1386, 09:05 صبح
همونطور که میدونید اکسس قابلیتی مثل SP ها در SQL SERVER نداره


با همون Query های موجود در Access میشه عملکردی مشابه SP ها ایجاد کرد (البته نه دقیقا با امکانات SQLServer) ولی ارسال پارامتر که ساده ترین کارشه!

کافیه در حالت ویژوال کار نکنید و دستی Query ها رو بنویسید ، به Help خود Access هم یک نگاهی بندازید توضیح داده.
مثلا :
اول وارد SQLView شوید (عکس زیر را ببینید) بعد دستورات زیر را تایپ کنید:

PROCEDURE myProcedure [pID] Number,[pname] Text(50);
INSERT INTO Table1 ([ID],[Name]) VALUES ([pID],[pname])

حالا در Access یک SP دارید!


نکته آخر این که حتی لازم نیست شما PROCEDURE هم تعریف کنید ، خیلی راحت در حالت SQLView کوئری مورد نظر را بنویسید، مثلا یک SELECT بنویسید که چند تا پارامتر دخلش استفاده شده باشه ، کار تمومه و نیازی بهمعرفی کردن پارامترها هم نیست Access خودش اتوماتیک در زمان اجرای کوئری پارامترها و نوع اونها رو شناسایی میکنه و مقادیر اونها رو درخواست میکنه!
به همین راحتی.
مثلا این یک کوئری که قبلا در Access نوشته بودم و داخلش پارامتر داره :

SELECT SUM(DailyDeal.LastPrice*PortfolioContent.Count)
FROM DailyDeal, PortfolioContent, Company
WHERE DealDate IN (SELECT MAX(DealDate) AS MAXDate FROM DailyDeal GROUP BY CompanyID) AND DailyDeal.CompanyID = PortfolioContent.CompanyID AND PortfolioContent.CompanyID=Company.ID AND PortfolioContent.PortfolioID=pid;
بعد مثلا این کوئری رو با اسم PortfolioSUM ذخیره میکنید و بقیه کارها مثل SQL هستش:
مثلا برای کار کردن تو دات نت هم یک راهش اینه:


OleDbConnection con = newOleDbConnection("ConnectionString");
OleDbCommand cmd = newOleDbCommand("PortfolioSUM",con);
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.Add("pid", OleDbType.Numeric).Value = 1;
con.Open();
//data manipulation
con.Close();


فقط دقت کنید نوشتن کوئری در ACCESS به راحتی SQL Server نیست چون اولا در حالت SQL View امکانات Query Analyzer را در اختیار ندارید ثانیا این که Access در حد SQLServer از زبان SQL پشتیبانی نمی کند و این باعث میشه بعضی کوئری هایی که در SQL Server در یکی دو خط خلاصه میشن در Access چندین خط بشن.

once4ever
سه شنبه 15 خرداد 1386, 22:49 عصر
تو همین حالت میشه دوتا INSERT باهم انجام داد؟

Alireza_Salehi
چهارشنبه 16 خرداد 1386, 08:50 صبح
تو همین حالت میشه دوتا INSERT باهم انجام داد؟
فکر نمیکنم بشه چون تا جایی که میدونم Access در Query ها فقط یک دستور رو قبول میکنه.

مگر این که در قسمت VB برنامه بنویسید!

Sorenaa_s
پنج شنبه 17 خرداد 1386, 23:39 عصر
می تونید VB Function بنویسید و از تو برنامتون اونو صدا بزنید.
http://support.microsoft.com/kb/317114