ورود

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



aminzadeh_mojtaba
شنبه 07 خرداد 1384, 09:27 صبح
دو جدول داریم که براساس فیلد ID با هم ارتباط یک به چند دارند. من می خواهم جدول Detail را بر اساس فیلد تاریخ مرتب کنم. وقتی فیلد تاریخ(DATE) را ایندکس می کنم فیلد ID از ایندکس می افتد و داده های نمایش داده نمی شوند. در اصل ارتباط جدول اولی با دومی قطع می شود.
تو رو بخدا راهنمایی کنید.
ممنون از همه دوستان

alidll
شنبه 07 خرداد 1384, 10:48 صبح
AdoQuery1.sql.clear;
AdoQuery1.sql.add('Select * from Table1');
AdoQuery1.open;
AdoQuery1.First;
while AdoQuery1.Eof <> False do
begin
AdoQuery2.sql.clear;
AdoQuery2.sql.add('Insert Into Table2 Values('+
Inttostr(AdoQuery1.Fieldbyname('field1').asinteger )+.....+')';
AdoQuery2.Post;
AdoQuery1.Next;
End;

امیدوارم درست گفته باشم!!! :oops:

aminzadeh_mojtaba
شنبه 07 خرداد 1384, 11:00 صبح
من از BDE استفاده می کنم. در ضمن روش را بلدم فقط نمی دانم مشکل از کجاست که همه رکوردها روی هم نوشته می شود.
جواب سوال دوم را هم خیلی احتیاج دارم
ممنون

دنیای دلفی
شنبه 07 خرداد 1384, 11:13 صبح
قبل از ایجاد در جدول دوم باید insert بکنید
:flower:

alidll
شنبه 07 خرداد 1384, 13:42 عصر
جواب سوال 2 :
شما اگر فیلد ID را در جدول Detail بصورت کلید خارجی FK برروی فیلد ID در جدول Master تعریف کرده باشید (یعنی در همان زمان تعریف و ساخت DataBase ) همچین مشکلی نباید بروز کند..!

alidll
شنبه 07 خرداد 1384, 13:48 عصر
جواب سوال 2 :
شما اگر فیلد ID را در جدول Detail بصورت کلید خارجی FK برروی فیلد ID در جدول Master تعریف کرده باشید (یعنی در همان زمان تعریف و ساخت DataBase ) همچین مشکلی نباید بروز کند..!

aminzadeh_mojtaba
شنبه 07 خرداد 1384, 18:10 عصر
ایندکس هر دو فیلد از یک نوع است
در accsess قسمت ایندکس را Yes انتخاب کرده ام. قابلیت تکرار را هم دارد.

aminzadeh_mojtaba
یک شنبه 08 خرداد 1384, 18:29 عصر
آقای مدیر تورو خدا یه کمکی کنید. آبروم رفت :( :( :( :( :cry:

Tarrah
یک شنبه 08 خرداد 1384, 20:00 عصر
دوست عزیز اگه از bde استفاده می کنی id رو ایندکس نکن.date رو ایندکس کن و id رو با refrential integrity به جدول master ربط بده.
اگه لازمه بگو توضیح بیشتر بدم.

Tarrah
یک شنبه 08 خرداد 1384, 20:01 عصر
دوست عزیز اگه از bde استفاده می کنی id رو ایندکس نکن.date رو ایندکس کن و id رو با refrential integrity به جدول master ربط بده.
اگه لازمه بگو توضیح بیشتر بدم.

aminzadeh_mojtaba
یک شنبه 08 خرداد 1384, 20:35 عصر
آره یکم بیشتر توضیح بدی ممنون میشم :oops:

Tarrah
یک شنبه 08 خرداد 1384, 20:50 عصر
ببین عزیز خیلی راحته
برو تو restructure جدول detail. با دابل کلیک روی id اون رو از ایندکس خارج کن. و date رو ایندکس کن.
حالا از سمت راست refrential integrity رو باز کن و فیلد id رو add کن و از سمت راست هم جدول master رو انتخاب کن و فیلد id اونو هم انتخاب کن.و تائید کن.و یه اسم بده.این اسم مجازیه و تو دلفی به درد نمی خوره فقط دو جدول رو به هم مرتبط می کنه.امیدوارم مشکلت حل بشه.ولی اگه متوجه نشدی من حاضرم بازهم توضیح بدم. :wise1:

babak_delphi
دوشنبه 09 خرداد 1384, 00:19 صبح
از order by هم می تونی استفاده کنی

aminzadeh_mojtaba
دوشنبه 09 خرداد 1384, 08:37 صبح
ممنون یه امتحان می کنم بهت خبر می دم.
باز هم ممنون

javidtaheri
دوشنبه 09 خرداد 1384, 10:00 صبح
به نظر من هردو فیلدجدول Detail را Id,Date را ایندکس کن(Secondary Index)
بعد با دستور IndexField جدولت را مرتب کن
برو با Ado کار کن کلکش را بکن از BDE بیا بیرون :flower:

najafi_1
دوشنبه 09 خرداد 1384, 12:33 عصر
با کسب اجازه از اساتید
به نظر میاد مشکل دوستمون در این مورد هست که میخواد جدول detail مثلا در یک دی بی گرید بر حسب تاریخ مرتب باشه پس بعد از اینکه ارتباط برقرار کرد مجددا اقدام به تغییر ایندس در متن برنامه میکنه و این موضوع مشکل ساز شده .
اگه این درست باشه بنظر میاد راه حل اون اینه که فیلد تاریخ مورد نظرش رو با فیلد کی id ادغام کنه و به عنوان ایندکس کی تعریف کنه بعد که دوتا فایل رو مرتبط میکنه خودبخود جدول detail بر اساس تاریخ مرتب شده است.

aminzadeh_mojtaba
دوشنبه 09 خرداد 1384, 14:36 عصر
از راهنمایی همه دوستان ممنون
حل شد.
خاصیت Indexfieldname را برابر با ID;Date قرار دادم درست شد.
از همه دوستان که ابراز لطف کردند ممنون