سلام!
من يه بار اين سوال رو مطرح كردم. با چند تا از بچه ها هم چت كردم. اما كسي منظور منو نفهميد.كمك خواهشا.
فرضا من يه برنامه ديتابيس دارم مي نويسم(البته واقها هم دارم مينويسم ولي توش موندم :? )
فرضا كتابخانه. توي بانك اين برنامه جداول مربوط به كتاب رو طوري طراحي كردم كه يه جدول نيست. 2 تا جدوله. يكي مشخصات اصلي كتاب با يه فيلد آي دي كه كليد هم هست. جدول بعدي هم مشخصات ديگه كتابها به اضافه يه فيلد آيدي كه كليد هم هست مثل جدول اول. چون مثلا تعداد فيلدها زياد ميشه 2 جدولي ميشه. حالا موقه ورود يه كتاب جديد به كتابخونه بايد به هر دو جدول اضافه بشه ديگه. يعني كاربر اطلاعات كتاب رو وارد ميكنه(همه اطلاعات در يك فرم از كاربر گرفته ميشه) ولي در عمل نصف اطلاعات بايد به جدول اول به عنوان يك ركورد و نصف ديگه به جدول دوم اضافه بشه. حالا نميدونم اين كارو چطوري انجام بدم. يكي از دوستان گفت يه تابع بنويسم و دوبار فراخواني كنمش. با راههاي مختلف ميشه كاري كرد يا ميشه 2 تا عمت درج انجام داد. ولي من مي خوام ببينم بهترين راه چيه. برنامه نويس هاي ديتابيس چه روشي به كار مي برن؟ جناب علي 110 شما اين رو چطور انجام ميديد؟؟ (اووووه! خسته شدم :? )
فقط دوستان يه كمي زودتر كمكم كنيد. خيلي عقب افتادم. ميدونم چيز ساده اي براي ديتابيس كاراس. ولي من بي تجربه هستم. اگه برنامه نمونه هم بديد ديگه خيلي ممنون ميشم! :wink:
سلام دوست عزيز فرض كن adodc1 متصل به ديتابيس اوليته و adodc2 ديتابيس دومي و صد در صد تو ميخواي يك دكمه ذخيره هم بزاري تو فرمت . براي دكمه ذخيره ات اين كد رو بنويس
کد:
adodc2.recordset.addnew
adodc2.recordset(0) = Text1.Text
adodc2.recordset(1) = Text2.Text
adodc1.recordset.save
adodc2.recordset.save
با اين روش مي توني تو دو تا ديتابيست هم ذخيره كني . مطمئنم كه موفق مي شي . در ضمن بايد يه دستور هم بدي كه برنامه اگه يك ركورد تكراري برخورد چي كار كنه و چه پيغامي بده . اگه اينم بلد نبودي دوباره مطلب بزار يا من و يا يكي از دوستان جوابتو مي ده[/code]
سلام!
از جوابت ممنون. ولي من نگفتم 2 تا ديتابيس. گفتم 2 تا جدول تو يك ديتابيس!
حالا با اين توضيح شما يه برنامه نمونه . لينكي چيزي سراغ نداريد؟ متاسفانه من با سرچ سايت هم مشكل دارم از دوستان كسي هست كه از مطالب خود سايت لينكي به من بده؟
سلام
ببين عزيزم اگر من درست فهميده باشم شما به علت زياد بودن فيلدها آمديد دو جدول ايجاد كرديد كه تعدادي از فيلدها در جدول 1 و بقيه در جدول 2 ميباشد درسته ؟
اگر درست فهميدم بايد بگم كه اين كار شما كلا اشتباه ميباشد چون هيچگاه به خاطر زياد بودن فيلدها از چند جدول استفاده نميكنند بلكه هنگامي از دو جدول استفاده ميكنند كه يكسري اطلاعات مشترك و ثابت باشند . مثلا فرض كنيد ما در همين پروژه كتابخانه براي هر كتاب ميخواهيم مشخصات كامل ناشر را نيز براي هر كتاب داشته باشيم . حالا چون يك ناشر ممكن است چندين كتاب چاپ كرده باشد و مشخصات ناشر هم تغييري نميكند ما به جاي آنكه براي هر ركورد بياييم و مشخصات كامل ناشر را فيلد به فيلد وارد كنيم يك جدول براي ناشرين درست ميكنيم و تمام مشخصات ناشران را در آن ميريزيم و به هر ناشر يك كد واحد اختصاص ميدهيم
حالا در جدولي كه مشخصات كتابها در آن موجود است فقط يك فيلد براي ناشر در نظر ميگيريم و در آن فيلد هم كد ناشر را قرار ميدهيم . اگر قرار شد كه به مشخصات ناشر و كتب به صورت همزمان دسترسي پيدا كنيم ( فرضا هنگام چاپ مشخصات كتابها ) آنگاه با يك سلكت ساده
اطلاعات را از دو جدول مذكور بيرون ميكشيم .
بازم تكرار ميكنم هيچگاه به خاطر زياد بودن فيلدها از چند جدول استفاده نميكنيم بلكه زماني از چند جدول استفاده ميكنيم كه اطلاعاتي ثابت و تكراري داشته باشيم . علت اين كار هم كه مشخص ميباشد . اولا در حجم بانك صرفه جويي قابل ملاحظه اي ميشود . دوما اگر زماني معلوم شد كه مثلا نام ناشر را اشتباه وارد كرده ايم ! در اين جا فقط با تغيير يك ركورد مشكل حل ميشود و سوما از ورود اطلاعات تكراري جلوگيري ميشود .
در اخر هم اگر قابل بدانيد ميخواهم به عنوان برادر كوچكتان پيشنهادي به شما بكنم ؟
براي انجام بزرگترين و پيچيده ترين عملياتهاي بانكي در كمترين زمان و داشتن بهترين ضريب اطمينان و به ساده ترين وجه تنها و تنها بايد از t-sql كمك گرفت . شما هم بهتر است تنها يك يا دو روز وقت بگذاريد و t-sql را كامل ياد بگيريد آنگاه متوجه خواهيد شد كه عملياتها و الگوريتمهايي كه تابحال غير ممكن به نظر ميآمدند تنها با يك يا دو خط برنامه نويسي انجام پذيرند .
قربان شما علي 110
سلام!
علي آقا واقعا ممنون از توضيحات كاملتون!
آخرش رو درست نفهميدم. شما منظورتو اينه كه من t-sql رو ياد بگيرم به اين منظور كه الگوريتم هاي كار با ديتابيس و جداول رو ياد بگيرم و تو ويبي ديگه مشكلي نداشته باشم(مي خواد هر نوع بانكي باشه: اس كيو ال- اكسس) درسته؟
راستي ميشه من ايميل شما رو داشته باشم؟
ممنون!
سيد محسن
سلام دوست عزيز . اون مثالي كه من بهت زدم هم مي تونه تو دو تا جدول و هم مي تونه تو دو تا ديتابيس قرار بگيره و فرقي هم نمي كنه .
شما ميتوني TextBox هاي بقيه اتو به ركورد ست دومي وصل كني و در دستور Save بگي جفتش سيو بشه
بعد هم كار شما واقعاً اشتباهه . تو يك جدول همشو تعريف كن
بازم سلام
اميدوارم كه اينجانب را به خاطر تاخير در جوابها به بزرگواري خود عفو كنيد .
در جواب شما بايد عرض كنم كه درست فهميديد . t-sql براي بانك دقيقا مانند زبان اسمبلي ميماند . يعني زبان پايه تمام بانكها ميباشد . البته اين زبان در بانكهاي مختلف تفاوتهاي بسيار ناچيزي دارد مثلا بين اواكل و اسكيوال سرور در بعضي موارد تفاوتهايي در سينتكس دستورات وجود دارد ولي در حالت كلي حدود 95٪ دستورات كاملا مشترك هستند و از استاندارد واحدي تبعيت ميكنند . پس در حالت كلي تفاوتي در نوع بانك وجود ندارد .
در ضمن بايد خدمتون عرض كنم كه زبانهاي برنامه نويسي مختلف از جمله وي بي يا دلفي يا سي و ... آبجكتهايي براي ارتباط با بانك دارند كه يكي از وظايف اين آبجكتها تفسير دستورات t-sql ارسالي توسط شما ميباشد . پس عملا تفاوتي در زبان برنامه نويسي نيز وجود ندارد . در آخر هم بايد خدمتتون عرض كنم كه در حال حاضر پيشرفته ترين آبجكت موجود براي ارتباط با بانكها كه با تمامي بانكها سازگار است و بهترين ابزارها را دارا ميباشد آبجكت ADO محصول شركت ماكروسافت ميباشد كه اين آبجكت تقريبا در تمام زبانهاي ويژوال وجود دارد و روش كار با ان نيز در تمام اين زبانها تقريبا يكسان است .
بازم ميگم من همه رقما درخدمتم و اگر گاهي دير به دير ميام از روي ناچاري است ولي به هرحال ميام . پس بازم اگر در جواب دادن تاخيري داشتم رسما معذرت خواهي ميكنم .
ايميل من هم كه در سايت هست ولي دوستان در صورت نياز ميتوتنند با ايميل زير نيز با من تماس بگيرند . ولي فكر كنم اگر مسايل در همينجا مطرح شوند خيلي بهتر باشد چون همه ميتونند نظر بدند و ما هم از نظرات مختلف اساتيد خودم استفاده كنيم .
alikavoosifar@gmail.com
سلام!
علي آقا خيلي ممنون از اينكه منو بي جواب نميزاري.
اگه ممكنه يه سوال ديتابيسي ديگه هم داشتم و اون اينه كه وقتي ما تو اكسس جدولها رو طراحي ميكنيم فيلد كليد ميزاريم و ارتباط يك به يك- يا يك به چند ميديم به چه دردي ميخوره؟
يعني ميدونم مفهوم ارتباط جداول يعني چي. ولي مي خوام بدونم تو كد نويسي مثلا تو ويبي ميتونه كمكي بكنه؟ مثلا به واسطه ارتباط بعضي كارها خودكار انجام ميشه؟
با سلام .
بازم جواب با حداكثر تاخير . راستش همش تقصير من نيست وقتي تاپيكها سه شماره ميرن تو آرشيو خوب آدم از كجا بفهمه كه سوالات هنوز ادامه دارند . مثلا همين تاپيك من فكر ميكردم شما جوابتون را گرفتيد و ديگه سوالي نيست والان هم خيلي لتفاقي ديدم كه بازم سوال كرده ايد . ايران ويجه ديگه چيكارش ميشه كرد ؟
اما جواب سوال شما . البته كه رابطه ها در برنامه وي بي به درد ميخورند . بزار با مثال جوابتون را بدم .
فرض كنيد داريم يك فروشگاه آنلاين درست ميكنيم . در بانك ما دو جدول با مشخصات زير وجود دارد .
1 - جدول گروه ها با نام groups شامل فيلدهاي زير :
کد:
grp-code -----> Group Code
grp-name -----> Group Name
grp-pic -----> Group Picture
2 - جدول محصولات ( كالا ها ) با نام products و شامل فيلدهاي :
کد:
p-code -----> Product Code
p-name -----> Product Name
grp-code -----> Group Name
p-pic -----> Product Picture
p-price -----> Product Price
در جدول گروهها فيلد grp-code كليد اصلي ميباشد و در جدول محصولات p-code كليد اصلي ميباشد .حالا ما بين فيلدهاي grp-code كه در هر دو جدول مشترك ميباشد يك رابطه برقرار ميكنيم . در واقع بين جدول گروهها و محصولات يك رابطه يك به چند ايجاد كرده ايم .
حالا فرض كنيد در جدول گروهها يك ركورد داريم كه كد گروه آن 103 ميباشد . به بقيه فيلدها كاري ندارم . در جدول محصولات نيز 300 تا ركورد داريم كه كد گروه همه آنها 103 ميباشد . درست ؟ حالا اگر شما روزي تصميم بگيريد كه كد گروه را از 103 به G103 تغيير دهيد فقط كافي
است كه در جدول گروهها كد گروه را از 103 به G103 تبديل كنيم . با اين كار چون ما قبلا يك رابطه بين اين دو جدول برقرار كرده ايم در جدول محصولات همه آن 300 ركوردي كه كد گروه آنها 103 بوده به صورت خودكار تغيير كرده و به G103 تبديل ميشوند . بايد خدمتتون عرض كنم كه در اينجا ما فقط دو جدول را در نظر گرفتيم اما اگر هزار تا جدول ديگه هم باشه كه در انها فيلد كد گروه موجود باشد و بين اين هزار تا جدول و جدول گروهها ارتباز برقرار كرده باشيم - همه هزار تا جدول مانند جدول محصولات فيلد كد گروهشان خود به خود تغيير خواهد كرد .
حالا فرض كنيد ما بين دو جدول محصولات و گروهها ارتباط برقرار نميكرديم . آنگاه مجبور بوديم
هم جدول گروهها را خودمان تغيير بديم و هم جدول محصولات را .
اميدوارم با اين مثال مفهوم رابطه و كاربرد آن را فهميده باشيد . در ضمن بايد عرض كنم كه هر جدول و هر فيلد با چندين جدول ميتواند ارتباط داشته باشد .
قربان شما علي110