PDA

View Full Version : سوال: ارتباط با SQLSrver



mostafa_zamani
یک شنبه 27 مهر 1393, 19:50 عصر
همکاران گرامی
سلام علیکم
می خواهم به جداول sqlserver که روی سرور قرار داره ارتباط برقرار کنم و بتوانم داده های مورد نظر را بخوانم .

با تشکر

javad_1349
سه شنبه 29 مهر 1393, 09:02 صبح
سلام
باید یک کانکشن درون فرم قرار بدی که بتونی اطلاعات را ذخیره یا ویرایش نمایید

gh_khajehzade
سه شنبه 29 مهر 1393, 09:57 صبح
سلام
من با sqlserver2000 , یک کم !کار کردم اگه میخوای میتونم کمک کنم.

mostafa_zamani
شنبه 03 آبان 1393, 17:55 عصر
سلام
اگر کمک کنید ! سپاس گزار می شوم
با تشکر

mostafa_zamani
شنبه 03 آبان 1393, 17:56 عصر
سلام
من با sqlserver2000 , یک کم !کار کردم اگه میخوای میتونم کمک کنم.

سلام علیکم
اگر می شه بیشتر توضیح بدهید.
با تشکر

farhad_shiri_ex
چهارشنبه 28 آبان 1393, 12:21 عصر
در ویژوال فاکس به دور روش میتوانبد با SQL Server ارتباط بر قرار نمایید.
۱- ODBC و استفاده از درایور های آن که معمولا در همگی ویندوز ها درایور sql 10 وجود دارد نیاز به نصب نیست!
۲- شی گرا ADO منتهی نه ADO.NET .
تفاوت این دو روش در ساختار بکارگیری تکنولوژی های فوق می باشد. که در این جا نمی گنجد.
برای استفاده از این روشها هم در روش اول کافی است که CS یا همان Connection String خود را با درایور های ODBC تنظیم نمایید برای درک بهتر هم می توانید یکسر به سایت ConnectionString.com بزنید و الگوی مناسب خود را انتخاب نمایید. مانند Driver=SQL Server
البته در این روش حفاظت از CS کاری مشکلی می باشد . ولی راه حلهایی زیادی وجود دارد که اگر دوستان مایل باشند می توانیم در این مورد بحث کنیم.
البته دوستان من خیلی کلی مطرح کردم چون هر کدام از این مباحث به تنهایی یک بخش مجزا می طلبد.
برای استفاده از روش دوم هم کافی است یک شی از کلاس ADODB.Connection فوق ایجاد نمایید و بعد Property ConnectionString را به Provider مناسب مقدار دهی نمایید مانند Provider=SQLOLEDB.1 البته بسته به نوع SQL Server بستگی دارد و بعد هم ساخت یک شی از کلاس ADODB.RecordSet و استفاده از Cursor ساخته شده از بانک اطلاعاتی همانند یک بانک DBF در ویژوال فاکس .
البته باید اشاره کنم برای استفاده از روش اول که به SQL‌مدفون نیز مشهور است حتما باید با دستورات SQLEXEC,SQLTABLES,SQLSETPROP,SQLGETPROP,... آشنایی کامل داشته باشید.
ولی در روش دوم شما با استفاده از SQL ایستا کار میکنید که حتما باید با متدهای کلاس ADO آشنایی کامل داشته باشید به هر حال به عنوان کسی که چندین نرم افزار بزرگ با ویژوال فاکس و MFC و SQL Server طراحی کرده ام نظرم اینست که استفاده از این دو روش کاملا به نوع کدنویسی و لایه های برنامه شما بستگی دارد و همچنین کنترل لایه DAL که بسیار مهم است امیدوارم مفید بوده باشد اگر دوستان علاقمند بودند ادامه می دهم.

frahimi
پنج شنبه 29 آبان 1393, 10:55 صبح
من هم بنوبه خود بسیار متشکرم و امیدوارم با یک مثال ساده و مرحله به مرحله بر روی یک فرم اینکار را ادامه دهید.

mostafa_zamani
دوشنبه 03 آذر 1393, 06:56 صبح
با سلام و سپاس از شما دوست گرامی
سایت معرفی شده "ConnectionString.com" غیر فعال است . اگر ممکنه یک مرجع دیگری را معرفی کنید.
با تشکر

gh_khajehzade
دوشنبه 03 آذر 1393, 08:56 صبح
سایت فعاله!http://www.connectionstrings.com/

farhad_shiri_ex
دوشنبه 03 آذر 1393, 10:41 صبح
http://www.connectionstrings.com
همین الان که چک کردم باز شد !!!!
شاید مشکل از مررگر تون باشه من با کروم باز کردم بدون هیچ مشکلی !!!

mostafa_zamani
دوشنبه 03 آذر 1393, 11:59 صبح
متشکرم
البته شما
ConnectionString.com نوشته بودید و حرف s آخر کار را نزده بودید که با کمک دوستمان مشکل حل شد .

javad_1349
شنبه 23 اسفند 1393, 21:19 عصر
در ویژوال فاکس به دور روش میتوانبد با SQL Server ارتباط بر قرار نمایید.
۱- ODBC و استفاده از درایور های آن که معمولا در همگی ویندوز ها درایور sql 10 وجود دارد نیاز به نصب نیست!
۲- شی گرا ADO منتهی نه ADO.NET .
تفاوت این دو روش در ساختار بکارگیری تکنولوژی های فوق می باشد. که در این جا نمی گنجد.
برای استفاده از این روشها هم در روش اول کافی است که CS یا همان Connection String خود را با درایور های ODBC تنظیم نمایید برای درک بهتر هم می توانید یکسر به سایت ConnectionString.com بزنید و الگوی مناسب خود را انتخاب نمایید. مانند Driver=SQL Server
البته در این روش حفاظت از CS کاری مشکلی می باشد . ولی راه حلهایی زیادی وجود دارد که اگر دوستان مایل باشند می توانیم در این مورد بحث کنیم.
البته دوستان من خیلی کلی مطرح کردم چون هر کدام از این مباحث به تنهایی یک بخش مجزا می طلبد.
برای استفاده از روش دوم هم کافی است یک شی از کلاس ADODB.Connection فوق ایجاد نمایید و بعد Property ConnectionString را به Provider مناسب مقدار دهی نمایید مانند Provider=SQLOLEDB.1 البته بسته به نوع SQL Server بستگی دارد و بعد هم ساخت یک شی از کلاس ADODB.RecordSet و استفاده از Cursor ساخته شده از بانک اطلاعاتی همانند یک بانک DBF در ویژوال فاکس .
البته باید اشاره کنم برای استفاده از روش اول که به SQL‌مدفون نیز مشهور است حتما باید با دستورات SQLEXEC,SQLTABLES,SQLSETPROP,SQLGETPROP,... آشنایی کامل داشته باشید.
ولی در روش دوم شما با استفاده از SQL ایستا کار میکنید که حتما باید با متدهای کلاس ADO آشنایی کامل داشته باشید به هر حال به عنوان کسی که چندین نرم افزار بزرگ با ویژوال فاکس و MFC و SQL Server طراحی کرده ام نظرم اینست که استفاده از این دو روش کاملا به نوع کدنویسی و لایه های برنامه شما بستگی دارد و همچنین کنترل لایه DAL که بسیار مهم است امیدوارم مفید بوده باشد اگر دوستان علاقمند بودند ادامه می دهم.

سلام لطفا بحث sql را ادامه دهید و برای ارتباط و ایجاد دیتا بیس و همچنین ایجاد تیبل و فراخوانی آن در فاکس پرو لطفا مثالی بزنید و آیا کامپونت خاصی را باید نصب نمود یا خیر
ممنون

farhad_shiri_ex
چهارشنبه 19 فروردین 1394, 16:19 عصر
1- یک فرم جدید ایجادکنید.
2- درون فرم یک شی گرید اضافه نمایئد. نام شی را SqlGridData بگذارید.
3- یک command button نیزاضافه نموده و نام شی را ReadBtn بگذارید.
حال طبق صحبت های قبلی باید روش ارتباط با سرور SQL را انتخاب نمایید.
ابتدا با روش ADO توضیح می دهم دوستان توجه نماید خیلی Basic بطوری که فقط بتوانید قدرت این تکنیک ها را لمس کنید توضیح می دهم راجع به مسائل بیشتر در طول به سرانجام رساندن این بحث می توانیم بحث کنیم.
4- حال در فرم مذکور در Data environment کلیک راست نمائید و از منو گزینه builder را انتخاب نمایئد
در منوی فوق دو Tab Page وجود دارد به نامهای Data Source, Cursor اگر بخواهم خیلی ساده توضیح بدم از Tab اول برای مشخص کردن نوع ارتباط با Data Source ها استفاده میشود چه SQL-Server چه Access , چه Oracle ویا هر پایگاه داده ای دیگری که امکان ارتباط با آن از V-fox میسر باشد استفاده میشود.
و از Tab دوم هم برای مدیریت بر روی Cursor ها یا همان DataSet ها در Net. ولی کمی متفاوت تر استفاده میشود.
5- اکنون در Tab اول سه گزینه دارید :
5-1 Data Source Type
دارای چهار گزینه می باشد : ADO-NATIVE-ODBC-XML
ADO: مخفف Access Data Object می باشد ابزاری برای کنترل ارتباط با سایر پایگاه دادها به صورت شی گرا .
Native : زمانی که بخواهید از DBC دیتا بیس های خود وی فاکس استفاده نمایید.
ODBC : روشی که به صورت مدفون به SQL-Server وصل شوید با استفاده از درایور هایی که به صورت پیش فرض در ویندوز تعریف شده است اگر هم درایوری که لازم داشتید نبود کافی است از MSDN دانلود کنید اغلب به صورت DLL هستن.
XML : در این روش هم که از تکنولوژی زبان XML استفاده میشود برای استفاده هم بعد ها بیشتر در موردش صحبت خواهیم کرد .
5-2 Use Existing connection handle
5-3 Use DSN
5-4 Use Connection String
ادامه دارد......

mostafa_zamani
یک شنبه 23 فروردین 1394, 12:00 عصر
با سلام و تشکر و تبریک سال نو و ....
خدا خیرتان دهد
خیلی متشکر
لطفا ادامه دهید.

farhad_shiri_ex
دوشنبه 24 فروردین 1394, 15:42 عصر
5-2 Use Existing connection handle
با استفاده از این گزینه می توانید از یک کانکشن هندلی که قبلا به سرور sql فعال کرده اید استفاده نمائید کانکشن هندل شماره ارتباطی است که معمولا سرور به شما تخصیص می دهد برای دریافت و نوشتن اطلاعات به آن نیاز خواهید داشت اگر موفق به دریافت شوید یک شماره بزرگتر از 0 خواهید داشت اگر نه هم که ارتباط میسر نخواهد بود باید علت را بیابید.
5-3 Use DSN
با استفاده از این گزینه می توانید از یک دیتا سورس DSN که قبلا در ODBC در کنترل پنل ویندوز تعریف کرده اید استفاده نمائید.
5-4 Use Connection String
با استفاده از این گزینه می توانید بطور مستقیم از ODBC استفاده نمائید کافیست CS کانکشن استرینگ مناسب را در این قسمت وارد نمائید.
;Driver=SQL Server;Server=SQLSRV\INVENTORYSQLSRV;UID=invuser;P WD=tornadoinv;Initial Catalog=Production
در اینجا یک نمونه برای شما قرار داده ام که جزئی توضیح خواهم داد
DRIVER نام درایور ODBC سرور SQL می باشد توجه کنید با استفاده از گزینه 4-5 فقط می توانید از درایورهای ODBC استفاده نمائید درایورهای OLE.DB یا ADO قابل استفاده نمی باشند.
SERVER نام سرور که شامل ServerName\Instance Name می باشد نام سرور محل نصب SQL و نام سرور SQL که در زمان نصب وارد کرده اید
UID نام کاربری که می تواند به سرور SQL متصل شود توجه کنید در ورژن net. کلمه UID به صورت UserID نوشته می شود.
PWD رمز عبو کاربر در ورژن net. ایم کلمه نیز Password نوشته می شود
Initial Catalog نام دیتا بیسی که می خواهید به صورت پیش فرض فعال شود.(اختیاری)
دوستان توجه کنید که این توضیحات تنها بخش مهمی از یک CS بود قسمتهای دیگری هم دارد که به فراخور کارتان باید از آنها استفاده نمایئد برای اطلاعات بیشتر هم از MSDN ویا ConectionString.com استفاده نمائید

mostafa_zamani
دوشنبه 24 فروردین 1394, 16:51 عصر
با سلام و تشکر از جنابعالی
شما کدام روش را پیشنهاد می کنید ؟

farhad_shiri_ex
چهارشنبه 26 فروردین 1394, 14:44 عصر
سلام!
بستگی به نرم افزار شما داره ! وپارامتر های دیگه!
ولی اگر روش راحتتر بخواهید از ADO استقاده کنید خیلی سریع و راحتتره نسبت به استفاده از ODBC و SQL مدفون

sohil_ww
چهارشنبه 26 فروردین 1394, 16:07 عصر
با سلام و تشکر از جنابعالی
شما کدام روش را پیشنهاد می کنید ؟

با تشکر از توضیحات استاد آقای شیری که کامل بودن ولی با اجازه ایشون لازم میدونم این نکته رو متذکر بشم که آینده odbc مشخص نیست و شاید در سیستم عامل های آتی ساپورت نشه پس فکر کنم بهترین گزینه استفاده از ado باشه ولی خوب دقیق نمی دونم که اگه بشه از ado.net هم استفاده کرد کد زنی راحتری داره موفق باشید

http://en.wikipedia.org/wiki/Open_Database_Connectivity#Version_history

javad_1349
دوشنبه 14 اردیبهشت 1394, 12:15 عصر
5-2 Use Existing connection handle
با استفاده از این گزینه می توانید از یک کانکشن هندلی که قبلا به سرور sql فعال کرده اید استفاده نمائید کانکشن هندل شماره ارتباطی است که معمولا سرور به شما تخصیص می دهد برای دریافت و نوشتن اطلاعات به آن نیاز خواهید داشت اگر موفق به دریافت شوید یک شماره بزرگتر از 0 خواهید داشت اگر نه هم که ارتباط میسر نخواهد بود باید علت را بیابید.
5-3 Use DSN
با استفاده از این گزینه می توانید از یک دیتا سورس DSN که قبلا در ODBC در کنترل پنل ویندوز تعریف کرده اید استفاده نمائید.
5-4 Use Connection String
با استفاده از این گزینه می توانید بطور مستقیم از ODBC استفاده نمائید کافیست CS کانکشن استرینگ مناسب را در این قسمت وارد نمائید.
;Driver=SQL Server;Server=SQLSRV\INVENTORYSQLSRV;UID=invuser;P WD=tornadoinv;Initial Catalog=Production
در اینجا یک نمونه برای شما قرار داده ام که جزئی توضیح خواهم داد
DRIVER نام درایور ODBC سرور SQL می باشد توجه کنید با استفاده از گزینه 4-5 فقط می توانید از درایورهای ODBC استفاده نمائید درایورهای OLE.DB یا ADO قابل استفاده نمی باشند.
SERVER نام سرور که شامل ServerName\Instance Name می باشد نام سرور محل نصب SQL و نام سرور SQL که در زمان نصب وارد کرده اید
UID نام کاربری که می تواند به سرور SQL متصل شود توجه کنید در ورژن net. کلمه UID به صورت UserID نوشته می شود.
PWD رمز عبو کاربر در ورژن net. ایم کلمه نیز Password نوشته می شود
Initial Catalog نام دیتا بیسی که می خواهید به صورت پیش فرض فعال شود.(اختیاری)
دوستان توجه کنید که این توضیحات تنها بخش مهمی از یک CS بود قسمتهای دیگری هم دارد که به فراخور کارتان باید از آنها استفاده نمایئد برای اطلاعات بیشتر هم از MSDN ویا ConectionString.com استفاده نمائید

باتشكر ازجناب شيري لطفا بحث را ادامه دهيد ممنون

nasimplus
یک شنبه 20 اردیبهشت 1394, 00:52 صبح
سلام
یه دیتاگرید ایجاد کردم حالا میخوام به SQLSrver کانکشن بزنم اما چه طوری میشه ارتباط بدم؟
اگه ممکنه توضیح با تصویر باشه. ممنون

farhad_shiri_ex
یک شنبه 20 اردیبهشت 1394, 12:06 عصر
سلام
یه دیتاگرید ایجاد کردم حالا میخوام به SQLSrver کانکشن بزنم اما چه طوری میشه ارتباط بدم؟
اگه ممکنه توضیح با تصویر باشه. ممنون

اگر منظورتون ارتباطی همانند زبانهای دات نتی هست که باید بگم طبق توضیحات قبلی استفاده از پایگاه داده های رابطه ای غیر Dbase در ویژوال فاکس کمی متفاوت تر هستش اگر طبق توضیحات پیش برید موفق خواهید شد!
6- Tab دوم Cursors :
در این قسمت می توانید Cursor هایی که با استفاده از یکی روشهای قبلی به پایگاه داده متصل شده اید ایجاد نمائید.
در حقیقت کرسر یک Query به زبان T-SQL می باشد که باید با پایگاه داده ای که استفاده می کنید مطابق باشد.
برای درک بهتر تصور کنید میخواهید از توابع محاسباتی در Query استفاده کنید مانند تابع Count همانطور که می دانید در T-SQL یی که ویژوال فاکس ساپورت میکند باید از تابع CNT استفاده کرد اما اگر شما از پایگاه داده SQL Server استفاده میکنید حتما باید از Syntax Count() as CntColumn استفاده نمایید در غیر اینصورت Query اجرا نخواهد شد.
پس کرسر می تواند از یک Query پیچیده تشکیل شده باشد که با اجرای اتوماتیک آن توسط کامپایلر یک Schema به عنوان خروجی Query به ما خواهد داد توجه کنید کرسرها در Ram ساخته می شوند به همین علت سرعت خیلی خوبی دارند اما مشکل بزرگشان وقتی می باشد که خروجی Query شما تعداد زیادی رکورد به عنوان خروجی داشته باشه پس همیشه به این نکته توجه داشته باشید و حتما از تکنیک های Ad-Hoc Query در پایگاه داده Sql Server برای مدیریت Execution Plan های Query هاتون استفاده نمایید تا نه از کارایی دیتا بیستون کم شود و نه SQL injection برای Query هاتون اتفاق بیفته.

با زدن کلید ADD در این بخش وارد منویی خواهید شد که به سه بخش تقسیم می شود:
6-1 Properties:
در این بخش می توانید یک نام برای کرسر تون انتخاب نمائید و همچنین مب توانید یک نام برای ناحیه کاری کرسرتون Alias انتخاب نمایید.
و اگر تنظیمات ارتباط با پایگاه داده را در سطح Data Environment تنظیم کرده باشید می توانید با زدن تیک گزینه use Data Environment data source تعیین کنید که برای اجرای query کرسرتون از تنظیمات فوق استفاده نماید.
و در صورتی که می خواهید هریک از کرسرها به یک پایگاه داده ویا حتی به دیتابیس های مختلفی متصل شوند باید از گزینه دوم استفاده نمایید و مراحل بالا را برای تک تک کرسر ها تنظیم نمایید
6-2 Data Access
6-3 Auto - update
...to be continued

farhad_shiri_ex
یک شنبه 20 اردیبهشت 1394, 12:31 عصر
با تشکر از توضیحات استاد آقای شیری که کامل بودن ولی با اجازه ایشون لازم میدونم این نکته رو متذکر بشم که آینده odbc مشخص نیست و شاید در سیستم عامل های آتی ساپورت نشه پس فکر کنم بهترین گزینه استفاده از ado باشه ولی خوب دقیق نمی دونم که اگه بشه از ado.net هم استفاده کرد کد زنی راحتری داره موفق باشید

http://en.wikipedia.org/wiki/Open_Database_Connectivity#Version_history

شاید نه دوست عزیز!
همین الان دیگه از VFPOLEDB.1 که دریوار ODBC ویژوال فاکس هستش چون نسخه 32 بیتی در معماری 64 بیتی با مصیبت اجرا می شن ولی با اینکه اجرا میشن نه به صورت استاندارد، یعنی به درایورهای سیستم عامل 64 بیتی اضافه نمی شوند فقط تنها راه استفاده از این درایور در معمارهای 64 بیتی مانند Win-Server 2008-R2 با یک ترفند قابل اجرا می باشد.
برای اطلاع دوستانی که نمی دونن این درایور چه کاری انجام میده بیسیکلی توضیح بدم برای دسترسی به رکوردهای یک DBF خارج از محیط ویژوال فاکس استفاده میشود.
مثلا تصور کنید باید یکسری محاسبه بر روی حدود 400،000 رکورد انجام دهید؟
انتخاب شما چی ؟ استفاده از دستورات T-SQL و Store Procedure در SQL Server ؟
یا فرمول هاتون در کد می نویسید اگر اینطور باشه برای انتقال این محاسبات به پایگاه داده چی کار میکنید ؟
نگید که رکورد به رکورد INS-UPD رو میخواهید انجام بدید برای این حجم رکورد!!!
پس بهترین راه سریعترین راه مطمئن ترین استفاده از ...
1- Convert to XML
2- Transfer by VFPOLEDB.1
3- Insert or Update Table in Ms-SQL Server with SSIS
4- Run by SQL Server Agent Service
باور کردنی نیست ولی اگر بخواهید این کار رو با حلقه چه در Sp و چه در BLL برنامه تون رو برای این حجم رکورد بخواهید انجام بدید حداقل 10 دقیقه طول میکشه ولی با روش بالا فقط 5-6 ثانیه طول میکشه این نکته رو هم تست کردم هم استفاده میکنم نه برای 400،000 تا برای 1000،000 رکورد استفاده میکنم تازه محاسبه روی رکوردها توی یک ماشین توی یک شهر انجام میشن برای ماشین دیگه تو شهر دیگه ارسال میشن با 15 ثانیه delay ...
از دوستانی هم که علاقه دارن که این بحث رو هم ادامه بدیم یه تاپیک جدید ایجاد کنند و درخواست هایی که دارید بیان کنید.

javad_1349
چهارشنبه 31 تیر 1394, 12:53 عصر
سلام
اگر این امکان وجود داره یک مثال ساده عنوان بشه و نمونه یک فرم که درآن ایجاد ویرایش حذف داشته باشه این طورکه جناب شیری زحمت کشیدند توضیح دادند عالیه فقط باید نمونه فرم را هم در تاپیک قرار بدهند بیشتر ما می خواهیم بدانیم 1- دستورات درون فرم چگونه نوشته می شوند 2- واقعا چه دستوراتی لازم است یاد بگیریم 3- ایجاد تیبل در دیتابیس اسکوئل 4- اضافه کردن فیلد به تیبل
5-ایجاد نمودن دیتا بیس در مسیر تعیین شده درهرصورت بصورت کاربردی تر اگه باشه بهتره متشکرم