PDA

View Full Version : سوال: مشکلات مهاجرت به دیتابیس sql server



mohammadsaleh
سه شنبه 31 اردیبهشت 1398, 15:06 عصر
باسلام
بنده تصمیم دارم برخی از برنامه ها به ویژه برنامه هایی که در شبکه اجرا و تعداد زیادی کاربر از ان استفاده می کنند را با دیتابیس ساخته شده در sql server باز طراحی کنم از این رو اقدامات زیر را انجام دادم:
برنامه sql server را نصب کردم
دیتابیس مورد نظر را در آن ایجاد کردم
جدوال را از اکسس همراه با اطلاعات درون آن به دیتابیس وارد کردم
تغییرات لازم را در فیلدهای id اتونامبر انتقال داده شده مثل فعال کردن identity انجام دادم
برای دیتابیس یک یوزر و پسورد در بخش سکیوریتی ایجاد کردم
به یوزر ساخته شده دسترسی ها چهارگانه را دادم
در بخش Administrative Tools ویندوز برنامه ODBC Data Sources (32-bit) را اجرا و در تب user dsn با اضافه کردن sql server و انتخاب دیتابیس ساخته شده dsn را ساختم
در برنامه اکسس با اتصال به داده های خارجی ODBC تمام جداول ساخته شده را به صورت لینک به برنامه وارد کردم .
اولین اشکال این بود که تمام جداول به صورت read only بودند
بعد از باز و بسته کردن برنامه برای بازکردن جداول یوزر نیم و پسورد ایجاد شده در sql را باید وارد می کردم

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

Mehr@ban
چهارشنبه 01 خرداد 1398, 23:33 عصر
سلام

از اینکه تجربه خودتون رو به اشتراک گذاشتین متشکرم

قطعا مراحلی رو که انجام دادین و خلاصه وار در بالا ذکر کردین، جای سوال برای برخی از کاربران من جمله حقیر داره. در صورت امکان نحوه تبدیل به sql و کارهای لازم که در بالا به (تغییرات لازم را در فیلدهای id اتونامبر انتقال داده شده مثل فعال کردن identity انجام دادم) اشاره کردین رو بیشتر توضیح بدین.

mohammadsaleh
جمعه 03 خرداد 1398, 15:38 عصر
سلام

از اینکه تجربه خودتون رو به اشتراک گذاشتین متشکرم

قطعا مراحلی رو که انجام دادین و خلاصه وار در بالا ذکر کردین، جای سوال برای برخی از کاربران من جمله حقیر داره. در صورت امکان نحوه تبدیل به sql و کارهای لازم که در بالا به (تغییرات لازم را در فیلدهای id اتونامبر انتقال داده شده مثل فعال کردن identity انجام دادم) اشاره کردین رو بیشتر توضیح بدین.


سلام. البته من در ابتدای راهم ولی خوب مسیری که طی کردم در تصاویر لینک زیر می تونید دنبال کنید ( شماره تصاویر ترتیب کار است )
ضمنا برای اتصال به دیتابیس در اس کیو ال از یوزر پس اصلی برنامه استفاده کردم
https://drive.google.com/file/d/11n_yEvusGQIuE9XxiI57eWfRtctUJ0fb/view?usp=sharing

Mehr@ban
جمعه 03 خرداد 1398, 17:45 عصر
سلام. البته من در ابتدای راهم ولی خوب مسیری که طی کردم در تصاویر لینک زیر می تونید دنبال کنید ( شماره تصاویر ترتیب کار است )
ضمنا برای اتصال به دیتابیس در اس کیو ال از یوزر پس اصلی برنامه استفاده کردم
https://drive.google.com/file/d/11n_yEvusGQIuE9XxiI57eWfRtctUJ0fb/view?usp=sharing

از اشتراک گذاری تجربیاتتون ممنونم
ولی ظاهرا لینک مورد نظر محدودیت داره

mohammadsaleh
شنبه 04 خرداد 1398, 14:18 عصر
از اشتراک گذاری تجربیاتتون ممنونم
ولی ظاهرا لینک مورد نظر محدودیت داره

تست بفرمایید
https://drive.google.com/file/d/11n_yEvusGQIuE9XxiI57eWfRtctUJ0fb/view?usp=sharing

mohammadsaleh
شنبه 04 خرداد 1398, 22:33 عصر
حل مشکل خواندنی بودن جداول:
هر جدول باید یک کلید اولیه داشته باشد. در انتقال جداول اکسس به اس کیو ال مثل فیلد اتونامبر فیلد کلید اولیه نیز باید به صورت دستی با راست کلیک روی نام فیلد در حالت دیزاین مشخص شود.
راه حل دیگر اجرای کوئری مشابه زیر است

ALTER TABLE Persons
ADD PRIMARY KEY (ID);

Mehr@ban
یک شنبه 05 خرداد 1398, 18:11 عصر
حل مشکل خواندنی بودن جداول:
هر جدول باید یک کلید اولیه داشته باشد. در انتقال جداول اکسس به اس کیو ال مثل فیلد اتونامبر فیلد کلید اولیه نیز باید به صورت دستی با راست کلیک روی نام فیلد در حالت دیزاین مشخص شود.
راه حل دیگر اجرای کوئری مشابه زیر است

ALTER TABLE Persons
ADD PRIMARY KEY (ID);



ALTER TABLE Persons
ADD PRIMARY KEY (ID);

mohammadsaleh
سه شنبه 07 خرداد 1398, 12:51 عصر
با این دستور جداول به صورت کامل لینک و آماده استفاده می شوند
البته مشکلات اصلی تازه شروع شده و اگر فرمهای از قبل اماده داشته باشیم و انها را با کدهای sql نوشته باشیم خطاها یکی بعد از دیگری شروع می شود.
من برای ارتباط با دیتابیس اکسس از کتابخانه DAO و رکوردست استفاده کردم و حالا این کدها جوابگو نیست و یا حداقل در برخی کدها خطاهای جدی می دهد. البته پیشنهاد در رفرنس های موجود بازنویسی کدها با کتابخانه ADO است.( والبته با استفاده از این کتابخانه اساسا نیازی به لینک جداول هم نمی باشد و با ایجاد یک کنکشن ارتباط با سرور به سادگی برقرار می شود)
نمی دانم کدامیک از دوستان این تجربه را از سرگذرانده. حتما راهنمایی های مفید اساتید، امثال بنده که در این مسیر جدید قرار گرفته ایم را کمک زیادی خواهد کرد تا حداقل کمتر آزمون و خطا کنیم
امیدوارم راهی باشد تا همان فرمهای قبلی با جداول لینک شده از اس کیوال سرور هم بدرستی کار کند

rero.639
سه شنبه 07 خرداد 1398, 14:11 عصر
هر دیتابیسی برای خودش یک مصیبت عظمی داره:متعجب: من خودم هم موندم که اکسس رو ادامه بدم یا برم کلا به فکر اس کیو ال سرور باشم .

amirzazadeh
پنج شنبه 09 خرداد 1398, 20:19 عصر
با این دستور جداول به صورت کامل لینک و آماده استفاده می شوند
البته مشکلات اصلی تازه شروع شده و اگر فرمهای از قبل اماده داشته باشیم و انها را با کدهای sql نوشته باشیم خطاها یکی بعد از دیگری شروع می شود.
من برای ارتباط با دیتابیس اکسس از کتابخانه DAO و رکوردست استفاده کردم و حالا این کدها جوابگو نیست و یا حداقل در برخی کدها خطاهای جدی می دهد. البته پیشنهاد در رفرنس های موجود بازنویسی کدها با کتابخانه ADO است.( والبته با استفاده از این کتابخانه اساسا نیازی به لینک جداول هم نمی باشد و با ایجاد یک کنکشن ارتباط با سرور به سادگی برقرار می شود)
نمی دانم کدامیک از دوستان این تجربه را از سرگذرانده. حتما راهنمایی های مفید اساتید، امثال بنده که در این مسیر جدید قرار گرفته ایم را کمک زیادی خواهد کرد تا حداقل کمتر آزمون و خطا کنیم
امیدوارم راهی باشد تا همان فرمهای قبلی با جداول لینک شده از اس کیوال سرور هم بدرستی کار کند
سلام
همونطور كه خودتون هم اشاره كرديد استفاده از كدهاي ADO و ايجاد كانكشن براي ارتباط با فرمها و جداول مناسب ترين گزينه هست.
ولي اگر از جداول لينك شده توسط odbc استفاده مي كنيد كدهاتون هنوز كار مي كنند و با تغييرات جزيي قابل استفاده هستند.
.........................
موفق باشيد

mohammadsaleh
شنبه 11 خرداد 1398, 12:00 عصر
سلام و تشکر از اظهار نظرتون
به نظرم حالا که قراره کدهامون رو تغییر بدیم بهتره آنها با ADO بنویسیم. به قول معروف مرگ یک بار شیون هم یکبار
من تصمیم گرفتم این کار رو انجام بدم
برای مثال در قطعه کد زیر می تونیم به سرور و یا دیتابیس اکسس متصل و Recordset فرم، لیست باکس و حتی سابفرم را set کنیم
توجه داشته باشیم که در رفرنس کتابخانه ADO را هم باید انتخاب کنیم


Private Const dBPath = "D:\DBV3.accde"


Dim cn As ADODB.Connection
Dim rst1 As ADODB.Recordset

Dim strServer, strDatabase, strUsername, strPassword As String
Dim strConnectionString As String
strServer = dBPath ' نام سرور
'strDatabase = "Northwind"
'strUsername = "sa"
strPassword = "123" ' پسورد سرور ياديتابيس شما


'sql server
'strConnectionString = "Provider=SQLOLEDB;Data Source=" & strServer & ";Initial Catalog=" & strDatabase & ";User ID=" & strUsername & ";Password=" & strPassword & ";"


' ms access
strConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & strServer & ";Jet OLEDB:Database Password=" & strPassword & ";"





Set cn = New ADODB.Connection
cn.ConnectionString = strConnectionString
cn.CommandTimeout = 0
cn.Open

Dim strSQL As String
strSQL = "SELECT * " _
& " FROM customer " _
& " Where ( firstname like '%" + txtSearch + "%') " _
& " ORDER BY id ASC"

Set rst1 = New ADODB.Recordset
rst1.Open strSQL, cn, adOpenKeyset, adLockOptimistic

Me.lblCount.Caption = rst1.RecordCount


Set Me.Recordset = rst1
Set Me.subformname.Form.Recordset = rst1
Set Me.List8.Recordset = rst1


rst1.Close
Set rst1 = Nothing
cn.Close
Set cn = Nothing


Exit Sub

mohammadsaleh
چهارشنبه 15 خرداد 1398, 16:47 عصر
سلام و تشکر از اظهار نظرتون
به نظرم حالا که قراره کدهامون رو تغییر بدیم بهتره آنها با ADO بنویسیم. به قول معروف مرگ یک بار شیون هم یکبار
من تصمیم گرفتم این کار رو انجام بدم
برای مثال در قطعه کد زیر می تونیم به سرور و یا دیتابیس اکسس متصل و Recordset فرم، لیست باکس و حتی سابفرم را set کنیم
توجه داشته باشیم که در رفرنس کتابخانه ADO را هم باید انتخاب کنیم


Private Const dBPath = "D:\DBV3.accde"


Dim cn As ADODB.Connection
Dim rst1 As ADODB.Recordset

Dim strServer, strDatabase, strUsername, strPassword As String
Dim strConnectionString As String
strServer = dBPath ' نام سرور
'strDatabase = "Northwind"
'strUsername = "sa"
strPassword = "123" ' پسورد سرور ياديتابيس شما


'sql server
'strConnectionString = "Provider=SQLOLEDB;Data Source=" & strServer & ";Initial Catalog=" & strDatabase & ";User ID=" & strUsername & ";Password=" & strPassword & ";"


' ms access
strConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & strServer & ";Jet OLEDB:Database Password=" & strPassword & ";"





Set cn = New ADODB.Connection
cn.ConnectionString = strConnectionString
cn.CommandTimeout = 0
cn.Open

Dim strSQL As String
strSQL = "SELECT * " _
& " FROM customer " _
& " Where ( firstname like '%" + txtSearch + "%') " _
& " ORDER BY id ASC"

Set rst1 = New ADODB.Recordset
rst1.Open strSQL, cn, adOpenKeyset, adLockOptimistic

Me.lblCount.Caption = rst1.RecordCount


Set Me.Recordset = rst1
Set Me.subformname.Form.Recordset = rst1
Set Me.List8.Recordset = rst1


rst1.Close
Set rst1 = Nothing
cn.Close
Set cn = Nothing


Exit Sub



راهی که شروع کردم به نظرم راه آسانی نیست و مشکلات یکی یکی خودشو نشون میده
وقتی دیتابیس اکسس بود برای شبکه کردن و اتصال به برنامه حتی با روش ADO کافی بود مسیر برنامه رو بنویسیم و تمام
اما برای اتصال به دبتابیس بانک SQL SERVER حتما تنظیمات دیگه ای هم لازمه.
البته من سعی کردم نام کامپیوتری که در آن برنامه SQL SERVER نصب هست را بنویسم ولی جواب نداد
strserver="\\severComputerName"
و یا حتی نام سرور را هم در ادامه نام کامپیوتر سرور آوردم ولی بی نتیجه بود
تقاضایی که از اساتید دارم اینه که در این قسمت مانند بخشهای دیگر بنده را راهنمایی بفرمایندباتشکر

mohammadsaleh
یک شنبه 19 خرداد 1398, 17:11 عصر
من هنوز جواب سئوالم رو دریافت نکردم. البته در سایتهای مرتبط گشتی زدم ظاهرا باید در خود برنامه SQL SERVER تنظیمات مربوط به استفاده در شبکه را انجام داد
و عبارت مربوط به اتصال به سرور را بر آن اساس نوشت. با این حال حتما راه رفته دوستان در این مسیر من را از افتادن در بیراهه کمک خواهد کرد

amirzazadeh
یک شنبه 19 خرداد 1398, 18:27 عصر
من هنوز جواب سئوالم رو دریافت نکردم. البته در سایتهای مرتبط گشتی زدم ظاهرا باید در خود برنامه SQL SERVER تنظیمات مربوط به استفاده در شبکه را انجام داد
و عبارت مربوط به اتصال به سرور را بر آن اساس نوشت. با این حال حتما راه رفته دوستان در این مسیر من را از افتادن در بیراهه کمک خواهد کرد
از اين لينك كمك بگيريد:
https://www.connectionstrings.com/

amirzazadeh
یک شنبه 19 خرداد 1398, 18:39 عصر
اينم يك قطعه كد كوچولو براي اتصال به ديتابيس با استفاده از امنيت استاندارد


Dim Cnxn As ADODB.ConnectionDim strCnxn As String


Set Cnxn = New ADODB.Connection

strCnxn = "Provider='SQLOLEDB';Data Source='.';" & _
"Initial Catalog='نام ديتابيس';User ID='يوزر نيم';Password='پسورد';"
Cnxn.Open strCnxn


Set rs = New ADODB.Recordset


rs.CursorLocation = adUseClient
rs.Open "select * from نام جدول", Cnxn, adOpenDynamic, adLockOptimistic, 1

saeidfar
یک شنبه 19 خرداد 1398, 18:42 عصر
فقط خواندنی بودن دیتا بیس فکر میکنم ربطی وارد کردن جداول نداره، مشکل از جایی دیگه باید باشه.
من بارها این کار رو انجم دادم و مشکلی هم نبوده.
دسترسی به دیتا بیس رو با یوزر sa تست کنید

mohammadsaleh
دوشنبه 20 خرداد 1398, 10:45 صبح
اينم يك قطعه كد كوچولو براي اتصال به ديتابيس با استفاده از امنيت استاندارد


Dim Cnxn As ADODB.ConnectionDim strCnxn As String


Set Cnxn = New ADODB.Connection

strCnxn = "Provider='SQLOLEDB';Data Source='.';" & _
"Initial Catalog='نام ديتابيس';User ID='يوزر نيم';Password='پسورد';"
Cnxn.Open strCnxn


Set rs = New ADODB.Recordset


rs.CursorLocation = adUseClient
rs.Open "select * from نام جدول", Cnxn, adOpenDynamic, adLockOptimistic, 1

سلام ضمن تشکر از توجهتون
منظورتون اینه که در شبکه داخلی که چند کامپیوتر به هم وصل هستند می توانیم از آدرس لوکال برای سرور استفاده کنیم؟
یعنی عبارت Data Source='.'
اما این عبارت در رایانه که برنامه sql نصب هست جواب میده ولی در سایر رایانه ها جواب نمیده؟

amirzazadeh
دوشنبه 20 خرداد 1398, 17:48 عصر
سلام
درست مي فرماييد اين كد در كامپيوتر سرور جواب ميده در ساير كامپيوتر ها بايد نام يا IP كامپيوتر سرور ذكر بشه مثل اين كد:

cn.ConnectionString = "Provider=sqloledb;Data Source=192.168.190.173;Initial Catalog=imexsql;User Id=am;Password=51667;"