۰۲-تير-۱۳۸۵, ۲۲:۲۳:۵۸
۰۹-مرداد-۱۳۸۶, ۲۳:۱۸:۵۹
با سلام
يكمم خودم مي نويسم :
براي ارتباط با ديتابيسهايي كه با اكسس 2000 به بالا ساخته شده اند
براي اين كار ميتوان از دو روش استفاده كرد :
اولين :
با استفاده از adodc
با استفاده از كليدهاي ctrl + t به صفحه ي كامپوننت ها رفته و گزينه Microsoft ADO data control 6.0 رو به پروژه اضافه كنيد
بعد اونو به رويه فرم اضافه كنيد و مانند ديتا كنترل ذاتي كه مربوط به نسخه jet 2.0 هست با اين كنترل رفتار مي كنيم
در مرحله بعد از خصوصيات كنترل adodc گزينه custom را انتخاب كرده و با استفاده از دكمه Build صفحه انتخاب ديتابيس مي رويم و از صفحه باز شده گزينه : Microsoft Jet 4.0 OLE DB Provider رو انتخاب كرده و با دكمه Next به مرحله انتخاب ديتابيس مي رويم و بعد از انتخاب ديتابيس براي مطمئن شدن از درستي ارتباط دكمه Test Connection رو كليك مي كنيم و بعد از دريافت پيام موفقيت در ارتباط با استفاده از دكمه ok پنجره رو مي بنديم
و با برگشت به پنجره Property برگه RecordSource رو انتخاب كرده و از ليست Command Type گزينه adCmdTable رو انتخاب مي كنيم (براي انتخاب كل جدول ) و يا با انتخاب adCmdText در كادر SQL مي توانييم دستورات sql رو بنويسيم و يا با انتخاب گزينه adcmdStoredProc مي توانييم از كوئري هاي نوشته شده در بانك اكسس استفاده كنيم
(( توجه در صورت انتخاب adCmdTable يا adcmdStore... بايد از ليست Table or stored Procedure name نام جدول و يا كوئري مورد نظر رو انتخاب كنيم
بعد همانند كنترل ديتاي jet 2.0 كه جزو كنترلهاي ذاتي است با آن ديتابيس رفتار مي كنيم
و براي فهميدن دستورات فرمان اين كنترل مي تونيين از اون پي دي اف كه تو پست بالا گذاشتم استفاده كنيد
روش دوم هم كه توسط كد نويسي هست بعدا مي گم :
يكمم خودم مي نويسم :
براي ارتباط با ديتابيسهايي كه با اكسس 2000 به بالا ساخته شده اند
براي اين كار ميتوان از دو روش استفاده كرد :
اولين :
با استفاده از adodc
با استفاده از كليدهاي ctrl + t به صفحه ي كامپوننت ها رفته و گزينه Microsoft ADO data control 6.0 رو به پروژه اضافه كنيد
بعد اونو به رويه فرم اضافه كنيد و مانند ديتا كنترل ذاتي كه مربوط به نسخه jet 2.0 هست با اين كنترل رفتار مي كنيم
در مرحله بعد از خصوصيات كنترل adodc گزينه custom را انتخاب كرده و با استفاده از دكمه Build صفحه انتخاب ديتابيس مي رويم و از صفحه باز شده گزينه : Microsoft Jet 4.0 OLE DB Provider رو انتخاب كرده و با دكمه Next به مرحله انتخاب ديتابيس مي رويم و بعد از انتخاب ديتابيس براي مطمئن شدن از درستي ارتباط دكمه Test Connection رو كليك مي كنيم و بعد از دريافت پيام موفقيت در ارتباط با استفاده از دكمه ok پنجره رو مي بنديم
و با برگشت به پنجره Property برگه RecordSource رو انتخاب كرده و از ليست Command Type گزينه adCmdTable رو انتخاب مي كنيم (براي انتخاب كل جدول ) و يا با انتخاب adCmdText در كادر SQL مي توانييم دستورات sql رو بنويسيم و يا با انتخاب گزينه adcmdStoredProc مي توانييم از كوئري هاي نوشته شده در بانك اكسس استفاده كنيم
(( توجه در صورت انتخاب adCmdTable يا adcmdStore... بايد از ليست Table or stored Procedure name نام جدول و يا كوئري مورد نظر رو انتخاب كنيم
بعد همانند كنترل ديتاي jet 2.0 كه جزو كنترلهاي ذاتي است با آن ديتابيس رفتار مي كنيم
و براي فهميدن دستورات فرمان اين كنترل مي تونيين از اون پي دي اف كه تو پست بالا گذاشتم استفاده كنيد
روش دوم هم كه توسط كد نويسي هست بعدا مي گم :
۲۷-مرداد-۱۳۸۶, ۰۳:۴۶:۱۲
قسمت دوم (با تاخير)
قسمت دوم خودمون با استفاده از كد نويسي به ديتابيس متصل مي شيم و داده رو از اون مي گيريم
در اين حالت ابتدا بايد كتابخانه ADO رو به پروژمون اضافه كنيم بطريق زير :
Project >> Refrences...
و از پنجره باز شده گزينه Microsoft ActiveX Data Objects 2.7 Library رو انتخاب مي كنيم و به پروژمون اضافه مي كنيم
حالا شروع به ساخت اتصالات مي كنيم :
ابتدا در قسمت جنرال ( محل كد نويسي فرم اصلي) يك شي براي اتصال به ديتا بيس مي سازيم و يك شي براي اتصال به جدول(و يا انتخاب بخشي از جدول(جداول))
حالا بايد اين اشيا شروع بكار كنند
براي متصل شدن به ديتابيس از اشيا تعريف شده بشرح زير استفاده مي كنيم :
خوب حالا ما با فرض اينكه نام ديتا بيس ما db1.mdb است و داراي پسورد Pass مي باشد به آن متصل مي شويم
و از جدولي كه در آن ديتابيس با نام table1 است تمام اطلاعاتش را انتخاب ميكنيم
يعني اين ركوردست كه rec نام دارد به تمامي اطلاعات جدول table1 دسترسي دارد
براي مثال به كد رويداد كليك كه براي يك شي دكمه كه روي همين فرم قرار دارد توجه كنيد :
با دستور فوق روي فرم تعداد سطرها(ركوردها)ي جدول نمايش داده مي شود
همين
براي استفاده از امكانات ado هم همون كتابي رو مطالعه كنيد كه در پست اول معرفي كردم
براي استفاده از دستورات اس كيو ال و ارتباط با جداول و انتخاب بازجستها در پست بعدي توضيح مي زنم
قسمت دوم خودمون با استفاده از كد نويسي به ديتابيس متصل مي شيم و داده رو از اون مي گيريم
در اين حالت ابتدا بايد كتابخانه ADO رو به پروژمون اضافه كنيم بطريق زير :
Project >> Refrences...
و از پنجره باز شده گزينه Microsoft ActiveX Data Objects 2.7 Library رو انتخاب مي كنيم و به پروژمون اضافه مي كنيم
حالا شروع به ساخت اتصالات مي كنيم :
ابتدا در قسمت جنرال ( محل كد نويسي فرم اصلي) يك شي براي اتصال به ديتا بيس مي سازيم و يك شي براي اتصال به جدول(و يا انتخاب بخشي از جدول(جداول))
کد:
Dim cnn As New ADODB.Connection
Dim rec As New ADODB.Recordset
براي متصل شدن به ديتابيس از اشيا تعريف شده بشرح زير استفاده مي كنيم :
کد:
Private Sub Form_Load()
Dim strSql As String
cnn.ConnectionString = "provider=Microsoft.Jet.OLEDB.4.0;data source=" & App.Path & "\db1.Mdb;" & ";Jet OLEDB:Database Password=Pass"
cnn.CursorLocation = adUseClient
cnn.Open
strSql = "Select * from table1;"
rec.Open strSql, cnn, adOpenDynamic, adLockOptimistic
End Sub
و از جدولي كه در آن ديتابيس با نام table1 است تمام اطلاعاتش را انتخاب ميكنيم
يعني اين ركوردست كه rec نام دارد به تمامي اطلاعات جدول table1 دسترسي دارد
براي مثال به كد رويداد كليك كه براي يك شي دكمه كه روي همين فرم قرار دارد توجه كنيد :
کد:
msgbox "All records count :" & rec.recordcount
همين
براي استفاده از امكانات ado هم همون كتابي رو مطالعه كنيد كه در پست اول معرفي كردم
براي استفاده از دستورات اس كيو ال و ارتباط با جداول و انتخاب بازجستها در پست بعدي توضيح مي زنم
۲۷-مرداد-۱۳۸۶, ۰۶:۲۳:۳۲
انتخاب قسمتي از جدول موجود در ديتابيس (بانك اطلاعات خودمون )
با استفاده از دستورات اس كيو ال مي توانييم بازجستهايي (Query) ايجاد كنيم و ركوردها و حتي ستونهايه خاصي رو استخراج كنيم
اولين دستور ساده :
با استفاده از دستور فوق ما تمام ركوردهاي موجود در جدول table1 رو استخراج مي كنيم
با استفاده از * مشخص مي كنيم كه تمام ستونها رو انتخاب كن (تمام ستونهاي موجود در جدول)
و يا با نوشتن نام هر يك از ستونها ميتونييم اونا رو انتخاب كنيم مثلا من در جدول خود 4 ستون دارم ولي مي خواهم براي نمايش داده ها
فقط از 3 ستون آن استفاده كنم پس با نوشتن نام آن 3 ستون در انتخاب خود محدوديت قائل مي شويم
با استفاده از كلمه where در جستجوي خود محدوديتي اعمال مي كنيم بطوريكه : ركوردهايي (سطرهايي) از جدول table1 انتخاب مي شوند
كه مقدار ستون اول برار a باشد
يعني تمام ستونها انتخاب شوند و از سطرها انهايي اتخاب شوند كه فيلد اول آنها مقدار a را دارد
مي توان در اين شرط چند گزينه ديگر را هم افزود (به مثالهاي زير توجه كنيد :)
در مثال بالا انتخاب بشرطي صحيح است كه در جدول table1 ما
ستوني با نام col1 و از نوع رشته ايي
ستوني بانام col2 و از نوع عددي
ستوني با نام col3 و از نوع date/time (تاريخ و زمان)
وجود داشته باشد .پس ما در مثال بالا سطرهايي را انتخاب مي كنييم كه ستون اول برابر d و ستون دوم برابر 3 و ستون سوم كه از نوع تاريخ است
از تاريخ امروز يعني 2007/08/18 كوچكتر باشد.
مي توان نتيجه گرفت كه د رمقايسه رشته و كاراكتر در اس كيو ال از علامت ' (تك كوتيشن)
براي مقايسه عدد (فيلد عددي با يك عدد) از هيچ علامتي
و براي مقايسه تاريخ و زمان # (شارپ) استفاده مي كنيم
در مثال بالا از جدول مذكور تمام سطرهايي انتخاب مي شوند كه مقدار موجود در ستون اول با حرف h شروع شده باشد (ادامه كلمه مهم نيست)
در مثال بالا ما در انتخاب خود محدوديت تعداد انتخاب را اعمال كرده ايم يعني از جدول table1 فقط 10 سطر اول انتخاب شوند
در مثال بالا ما فقط ستون اول را نمايش مي دهيم ولي با استفاده از دستور distinct تمام موارد تكراري را در ان ستون حذف مي كنيم
بعنوان مثال اگر 5 سطر داده داشته باشيم بصورت : a1,a1,a2,a3,a1
و با دستور بالا از اين داده ها انتخاب كنيم خروجي ما شامل : a1,a2,a3 خواهد بود
مي توانييم انتخابهاي محاسباتي هم داشته باشيم مثلا تعداد ركوردهاي مطابق با شرط يا (بزرگترين/كوچكترين) داده موجود در بين ركوردها
و يا معدل داده ها و جند مورد ديگر
با دستور فوق بزرگترين مقدار در فيلد اول و كوچكترين مقدار در فيلد دوم و تعداد ركوردهاي فيلد سوم را به ما خواهد داد
نكته : مي توانييم به هر يك از اين ستون ها يك نمام هم اختصاص دهيم تا هنگام استفاده راحتتر عمل كنيم بصورت زير:
براي داشتن نتيجه مرتب م يتوانييم آنها را با دستورorder by مرتب كرد بصورت زير :
با اين دستور يافته ها بر اساس ستون اول مرتب خواهند شد
نكته : پيش فرض مرتب سازي بصورت صعودي مي باشد و اگر بخواهييم اين حالت را عوض كنيم مي توانييم بعد از كلمه order by نوع مرتب سازي را نيز
مشخص كنيم مثلا براي صعودي Asc و براي نزولي از كلمه Desc استفاده مي كنيم
در استفاده از دستورات sql مي توانييم 255 select تو در تو را بنويسيم و استفاده كنيم:
در مثال بالا ابتدا ركوردهايي كه ستون دوم آنها برابر حرف s است انتخاب مي شوند سپس از ميان انها ستونهاي اول و دوم بطوري انتخاب مي شوند
كه مقدار ستون سومشان به f ختم مي شوند (حالا اينو به 10 انتخاب تودرتو ديگه تعميم بدين )
-------------------------------------
نكته : الان ساعت 5 صبح هست مثالا رو هم از خودم درآوردم و همينجا تايپ كردم پس ممكنه
توشون اشتباه تايپي يا گرامري وجود داشته باشه (اگه بود بگين درست كنم )
-------------------------------------
تا همينجا بسه خسته شدم
ادامشو هم بعدا ميگم
با استفاده از دستورات اس كيو ال مي توانييم بازجستهايي (Query) ايجاد كنيم و ركوردها و حتي ستونهايه خاصي رو استخراج كنيم
اولين دستور ساده :
کد:
Select * From Table1;
Select Col1,Col2,Col3 from Table1;
با استفاده از * مشخص مي كنيم كه تمام ستونها رو انتخاب كن (تمام ستونهاي موجود در جدول)
و يا با نوشتن نام هر يك از ستونها ميتونييم اونا رو انتخاب كنيم مثلا من در جدول خود 4 ستون دارم ولي مي خواهم براي نمايش داده ها
فقط از 3 ستون آن استفاده كنم پس با نوشتن نام آن 3 ستون در انتخاب خود محدوديت قائل مي شويم
کد:
Select * From Table1 Where (col1='a');
كه مقدار ستون اول برار a باشد
يعني تمام ستونها انتخاب شوند و از سطرها انهايي اتخاب شوند كه فيلد اول آنها مقدار a را دارد
مي توان در اين شرط چند گزينه ديگر را هم افزود (به مثالهاي زير توجه كنيد :)
کد:
Select * from table1 where(col1='d' and col2=3 and col3<#2007/08/18#);
ستوني با نام col1 و از نوع رشته ايي
ستوني بانام col2 و از نوع عددي
ستوني با نام col3 و از نوع date/time (تاريخ و زمان)
وجود داشته باشد .پس ما در مثال بالا سطرهايي را انتخاب مي كنييم كه ستون اول برابر d و ستون دوم برابر 3 و ستون سوم كه از نوع تاريخ است
از تاريخ امروز يعني 2007/08/18 كوچكتر باشد.
مي توان نتيجه گرفت كه د رمقايسه رشته و كاراكتر در اس كيو ال از علامت ' (تك كوتيشن)
براي مقايسه عدد (فيلد عددي با يك عدد) از هيچ علامتي
و براي مقايسه تاريخ و زمان # (شارپ) استفاده مي كنيم
کد:
Select * from Table1 where(col1 like 'h%');
کد:
select Top 10 *from table1;
کد:
select Distinct col1 from table1;
بعنوان مثال اگر 5 سطر داده داشته باشيم بصورت : a1,a1,a2,a3,a1
و با دستور بالا از اين داده ها انتخاب كنيم خروجي ما شامل : a1,a2,a3 خواهد بود
مي توانييم انتخابهاي محاسباتي هم داشته باشيم مثلا تعداد ركوردهاي مطابق با شرط يا (بزرگترين/كوچكترين) داده موجود در بين ركوردها
و يا معدل داده ها و جند مورد ديگر
کد:
Select max(col1),min(col2),count(col3) from table1;
نكته : مي توانييم به هر يك از اين ستون ها يك نمام هم اختصاص دهيم تا هنگام استفاده راحتتر عمل كنيم بصورت زير:
کد:
Select max(col1)as MxC1,min(col2)as MnC2,count(col3)as CnC3 from table1;
براي داشتن نتيجه مرتب م يتوانييم آنها را با دستورorder by مرتب كرد بصورت زير :
کد:
select * from tabl1 order by col1;
نكته : پيش فرض مرتب سازي بصورت صعودي مي باشد و اگر بخواهييم اين حالت را عوض كنيم مي توانييم بعد از كلمه order by نوع مرتب سازي را نيز
مشخص كنيم مثلا براي صعودي Asc و براي نزولي از كلمه Desc استفاده مي كنيم
در استفاده از دستورات sql مي توانييم 255 select تو در تو را بنويسيم و استفاده كنيم:
کد:
select col1,col2 from(select * from table1 where col2='s') where (col3 like '?f'));
كه مقدار ستون سومشان به f ختم مي شوند (حالا اينو به 10 انتخاب تودرتو ديگه تعميم بدين )
-------------------------------------
نكته : الان ساعت 5 صبح هست مثالا رو هم از خودم درآوردم و همينجا تايپ كردم پس ممكنه
توشون اشتباه تايپي يا گرامري وجود داشته باشه (اگه بود بگين درست كنم )
-------------------------------------
تا همينجا بسه خسته شدم
ادامشو هم بعدا ميگم
۲۷-مرداد-۱۳۸۶, ۱۴:۳۱:۴۴
ممنون حامد خان خیلی مفید بود خسته نباشی
حالا یه سوال هم داشتم اگه بخواییم سطرهایی رو انتخاب کنیم
بزارید اینجوری بگم میخوام مثل تابع Instr در ویژوال بیسیک در اینجا همون کار رو بکنم یعنی در یک سطری من میخوام اگه مقدار COOL رو پیدا کرد اونو انتخاب کنه حالا اون مقدار ممکنه که اول یا آخر نباشه ممکنه وسط قرار گرفته باشه
حالا یه سوال هم داشتم اگه بخواییم سطرهایی رو انتخاب کنیم
بزارید اینجوری بگم میخوام مثل تابع Instr در ویژوال بیسیک در اینجا همون کار رو بکنم یعنی در یک سطری من میخوام اگه مقدار COOL رو پیدا کرد اونو انتخاب کنه حالا اون مقدار ممکنه که اول یا آخر نباشه ممکنه وسط قرار گرفته باشه
۲۷-مرداد-۱۳۸۶, ۲۲:۴۳:۵۴
جواب :
البته براي اطمينان از نتيجه مي توان اين دستورو كاملترش هم كرد :
و چون قراره كه كلمه cool از خود وي بي ارسال بشه پس مي تونييم همونو هم بزرگش كنيم بفرستيم
كد زير را با فرض اينكه اين دستور تو اديتور بيسيك هست مي نويسم :
کد:
Select * from table1 where( col1 like '%cool%');
کد:
select * From Table1 Where(ucase(Col1) like '%COOL%');
كد زير را با فرض اينكه اين دستور تو اديتور بيسيك هست مي نويسم :
کد:
strSql="Select * from table1 where(Ucase(col1) Like '%" & Ucase(text1.text) & "%');"
۲۸-مرداد-۱۳۸۶, ۲۲:۵۸:۱۵
ممنون حامد خان همینو میخواستم بازم دستت درد نکنه
۰۲-مهر-۱۳۸۶, ۱۴:۳۲:۱۸
man mikham yak bank ba password ro baz konam password ro ham midonam vali khata azam migireh va ta password ro bar nadaram kar nemikoneh vali bana be dalaeli nimitonam password to access ro bardaram ba tashakor
۱۵-مهر-۱۳۸۶, ۲۳:۳۷:۳۰
ممنون از شما دوست گرامی و تشکر فراوان از پاسخ شما آقای حامد عزیز
امیدوارم همواره در کار و زندگیتان موفق باشید
امیدوارم همواره در کار و زندگیتان موفق باشید
۲۷-آبان-۱۳۸۶, ۲۲:۵۲:۰۶
ممنون از شما دوست گرامی
۱۰-بهمن-۱۳۸۸, ۱۷:۰۵:۱۹
سلام
ممنونم بابت آموزش مفیدتون
یه سوالی دارم در مورد آپدیت دیتا بیس
ببینید من دو تا جدول توی یه دیتا بیس دارم که می خوام دومی رو توسط اولی آپدیت کنم
هر دو تاشون دو تا فیلد دارن :اسم و قیمت
توی اولی اینطوریه:
p5kpl 50000
p5kpl-am 52000
p5kpl-am-ae 540000
توی دومی :
58000 مادربرد p5kpl
59000 مادربرد p5kpl-am
100000 مادربرد p5kpl-am-ae
حالا می خوام از اولی بخونه p5kpl ، بیاد توی جدول دومی تشخیص بده که کدومه (مادربرد p5kpl ) و قیمتش رو به قیمت اولی تغییر بده
ممنونم بابت آموزش مفیدتون
یه سوالی دارم در مورد آپدیت دیتا بیس
ببینید من دو تا جدول توی یه دیتا بیس دارم که می خوام دومی رو توسط اولی آپدیت کنم
هر دو تاشون دو تا فیلد دارن :اسم و قیمت
توی اولی اینطوریه:
p5kpl 50000
p5kpl-am 52000
p5kpl-am-ae 540000
توی دومی :
58000 مادربرد p5kpl
59000 مادربرد p5kpl-am
100000 مادربرد p5kpl-am-ae
حالا می خوام از اولی بخونه p5kpl ، بیاد توی جدول دومی تشخیص بده که کدومه (مادربرد p5kpl ) و قیمتش رو به قیمت اولی تغییر بده