ورود

View Full Version : مشکل در ارتباط جدول



look20
جمعه 09 بهمن 1388, 18:58 عصر
با سلام خدمت دوستان و اساتید
ببخشید من دو تا جدول توی اکسس ساختم با ویژوال هم ارتباط دادم یعنی مثلا برای کد 850104 دوتا رکورد از جدول دوم دارم ولی مشکل من اینکه وقتی برای کد 850105 سه تا رکورد در جدول دوم دارم ولی وقتی به این رکورد میرم قسمت پایین فرمم هنوز اطلاعات مربوط به کد 850104 رو نشون میده میشه کمک کنید مشکلم تو کجاست!
فایلم رو ضمیمه کردم
با تشکر

xxxxx_xxxxx
جمعه 09 بهمن 1388, 19:59 عصر
سلام،
تو رویداد Load فرم نوشتید:

Ado.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & App.Path & "\DB.mdb"
Ado.RecordSource = "select * from Table1"
Ado.Refresh
Ado2.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & App.Path & "\DB.mdb"
Ado2.RecordSource = "SELECT * FROM Table2 WHERE ncod=" & Ado.Recordset.Fields("cod")
Ado2.Refresh
خب ابتدا جدول اول نمایش داده میشه و کدی که در ابتدا تو این جدول قرار داره 850104 هست. بعد از اون امدید جدول دوم رو با این شرط نمایش دادید که فیلد ncod مقدارش برابر با مقدار فیلد cod از رکورد جاری جدول اول باشه.
پس این طبیعی هست.
اگر میخواید جدول دوم هم مثل جدول اول همه رکوردهاش قابل دسترس باشند، Recordsource رو اینطوری مقدار بدید:


Ado2.RecordSource = "SELECT * FROM Table2"
Ado2.Refresh
فقط شرط رو ازش برداشتیم.

look20
جمعه 09 بهمن 1388, 22:50 عصر
ببخشید ولی فکر کنم منظورم رو خوب متوجه نشدید چون می خوام دو قسمت بالا و پایین با هم در ارتباط باشن
مشکل من اینجاست که من توی table2 برای کد 850105 سه تا رکورد دارم ولی وقتی در قسمت بالای فرم که مربوط به table1 به رکورد بعدی که:
Ali Rezaii با کد 850105 میرم قسمت پایین هنوز کد 850104 رو نشون میده که مربوط به Salman Hedayat هستش با تشکر

xxxxx_xxxxx
جمعه 09 بهمن 1388, 23:44 عصر
حالا متوجه منظورتون شدم.
ببینید، هر کدوم از اون ابزارهای Adodc که رو فرم گزاشتید در هر لحظه تنها میتونند یک Recordset داشته باشند. (هر Recordset حاوی هیچ یا یک یا بیشتر از یک رکورد هست). زمانی که در رویداد Load شما Recordsource رو مقداردهی می کنید و بعد Refresh؛ یک Recordset ایجاد میشه. این Recordset تو کل برنامه همینطور ثابت باقی میمونه تا زمانی که دوباره Recordsource تغییر کنه.
خب شما فقط یک بار و اون هم در رویداد Load این Recordset ها رو تشکیل میدید به همین خاطر Ado2 روی رکوردهایی با کد 850104 ست میشه و دیگه تحت هیچ شرایطی تغییر نمیکنه تا زمانی که دوباره Recordsource رو عوض کنید.
برای این کار باید با هر حرکت روی رکوردهای Ado ، یک بار Ado2 رو با شرط موردنظر ست کنید.

look20
یک شنبه 11 بهمن 1388, 11:33 صبح
با سلام و با تشکر مشکلم حل شد
ولی یه مشکل دیگه که گفتم بهتر توی همین تاپیک بگم

میشه کاری کرد اگه مثلا یه فیلدرو خالی گذاشته باشم پیغام بده من چندتا فیلد دارم و یه دکمه update که بعد از اینکه فیلدهارو پر کردم فرم رو update کنه
حالا اگه فیلدها رو خالی بزارم و روی update کلیک کنم ارور میده می خوام یه پیغام تعریف کنم که اگه فیلدی خالی باشه دیگه ارور نده واین پیغامی که تعریف کردم رو نشون بده
با تشکر

xxxxx_xxxxx
یک شنبه 11 بهمن 1388, 18:56 عصر
دلیل error دادن، کلید بودن فیلدی هست که خالی رها میشه. فیلد کلید نمیتونه خالی باشه. پس اگر لزومی نداره خاصیت کلید رو بردارید از روی فیلد.
بازم اگر بخواید می تونید با چند تا شرط قبل از Update ، خالی بودن تکست باکس ها رو بررسی کنید که اگر خالی بود اجازه ثبت داده نشه.


If Not Text1.Text = Empty Then
MsgBox "not complete"
Else
' update
End If