سلام
اگه ممكنه يه توضيحي درمورد درج اطلاعات در جداول به هم پيوسته (Foreign key دار ) بديد
چون اينجا هم به مشكل برخوردم.
Printable View
سلام
اگه ممكنه يه توضيحي درمورد درج اطلاعات در جداول به هم پيوسته (Foreign key دار ) بديد
چون اينجا هم به مشكل برخوردم.
سلام
کافیه فیلد کلید رو در جدول دیگه ای که با جدول اصلی ارتباط داره وارد کنی و بعد master/detail کنی.
ميشه بيشتر توضيح بديد آخه من تا حالا با master/Detail كار نكردم كسي هم نيست كه ازش بپرسم
جدول tb_user :
id : Autonumber , Name : text , Family : text , Phone : text
جدول user_known :
code : text , Address : text , User-id : number
كه user_id تو اين جا Foreign key هستش و با فيلد id از جدول Tb_user در ارتباط
من واسه درج كردن فك ميكردم كه اول بايد درج رو جدول tb_user صورت بگيره واسه همين اول درج رو رو اين جدول انجام دادم بعد كه خواستم درج رو رو جدول user _konwn انجام بدم از اونجايي كه بايد مقادير user-id با id از جدول tb_user يكسان باشه اين كار رو دستي انجام دادم كه البته درست نشد
اگه ممكنه در مورد master /detail توضيح بيشتري بديد
ممنون
با جدولهای خودتون مثال میزنم که بهتر متوجه شی.
MasterSource جدول user_known رو برابر datasource ی که به جدول tb_user اشاره میکنه قرار بده
روی خصوصیت MasterFields جدول user_known دابل کلیک کن
از کادری که ظاهر میشه، فیلدهایی رو که قراره با هم در ارتباط باشن انتخاب کن -> Add>OK
اینطوری User_known جدول detail و tb_user جدول master هست.
هر وقت که شما بخوای رکورد جدیدی رو به detail اضافه کنی، فیلد کلید خارجی شما به صورت خودکار مقدارش رو از فیلدی که در master با اون ارتباط داره میگیره. پس دقت کن به رکورد فعال در جدول master
سوالی بود در خدمتم. موفق باشی
سلام خيلي خيلي ممنون مشكلم تو اين قسمت حل شد
اما يه سوالي واسم پيش اومده
مي تونم از Adotable ها استفاده مجدد كنم واسه ثبت جدولهاي ديگم ؟؟؟؟
البته خودم امتحان كردم تا وقتي كه ثبت تو dbgrid اتفاق ميفته امكان پذيره اما وقتي كه كليك راست ميكنم و از طريق فيلدي ثبت اطلاعات ميكنم نميشه انگاري كه فيلدهاي جدول قبلي هنوز تو حافظش هستش
حتي وقتي دستي هم فيلد ها رو پاك ميكنم بازم نميشه
كد براي Adotable :
ميشه يه كم راهنمايي كنيدکد:with ADOTable2 do
begin
active := false;
TableName :=' اسم جدول';
MasterSource := DataSource;
MasterFields := 'فيلد مربوطه';
IndexFieldNames := 'فيلد مربوطه';
active:= true;
insert;
end;
اگه بخوام از Adotable ديگه استفاده كنم تعداد آنها خيلي زياد ميشه
شرمنده كه من انقدر دارم اذيتتون ميكنم آخه هنوز من مبتديم و استادي هم نيست كه حداقل سوالام رو بپرسم
راستي يه سوال ديگه هم دارم يه قسمت از برنامم عمل جستجو فيلم رو انجام ميده من مي خوام نتيجه عمليات جستجو (كد فيلم ) رو در فرم ديگه داشته باشم
اگه نتيجه عمليات جستجو چند ركورد باشه هميشه كد ركورد اول رو بر مي گردونه واسه اينكه بتونه كد فيلم ركورد هاي ديگه رو بر گردونه چي بايد كنم ؟
كد دكمه جستجو
البته از دكمه ديگه هم استفاده كردم واسه پيمايش رو جدولکد:with DataModule4.ADOQuery2 do
begin
Active := false;
SQL.clear;
sql.Add('SELECT v_film.code, v_film.film.name');
sql.add('FROM v_film INNER JOIN [film_count_ Mojoudi] ON v_film.code = [film_count_ Mojoudi].Fcode');
sql.add('WHERE ((([film_count_ Mojoudi].count)<>0) AND ((v_film.filmNationality.name)=n) )') ;
Parameters.ParamValues['n'] := ComboBox1.Text;
active := true ;
if Eof then
begin
ShowMessage('There is no film with this details');
form13.DBEdit3.Text:= ' no film' ;
end
else
form13.DBEdit3.Text := FieldValues ['code'] ;
end;
end
اما اگه كد قرمز رنگ رو بهش اضافه كنم خطا ميگيرهکد:DataModule4.ADOQuery2.Next;
//form13.DBEdit3.Text := FieldValues ['code'] ;
چه كار بايد كنم ؟؟؟
بازم مرسي
منظور سوال اول رو نفهمیدم. لطفا واضحتر توضیح بده
در مورد سوال دوم باید بگم که شما زمانی میتونی مقدار dbedit رو تغییر بدی که dataset در وضعیت edit یا insert باشه. پس پیغام خطا درسته.
شما یه combobox یا list به فرمی که میخوای نتایج جستجو رو داشته باشی اضافه کن، بعد رکوردهای مورد نظر رو خیلی راحت به اون اضافه کن.
در مورد سوال دوم هنوز گفته شما رو متوجه نشدم
ببينيد مقدار dbedit تغيير ميكنه (در حالت insert) منتها فقط كد فيلم مربوط به اولين ركورد رو برميگردونه
كد بالا :
کد:if Eof then
begin
ShowMessage('There is no film with this details');
form13.DBEdit3.Text:= ' no film' ;
end
else
form13.DBEdit3.Text := FieldValues ['code'] ;
end;
نتايج جستجو چندين ركورد . كد من فقط كد فيلم مربوط به اولين ركورد رو برمي گردونه (منطقا هم اين درسته چون Search اولين ركورد ي رو كه پيدا ميكنه به عنوان ركورد انتخابي در نظر ميگيره پس فقط كد مربوط به اون رو برميگر دونه) من ميخوام كد فيلم ركورد انتخاب شده رو برگردونه
به عبارت ديگه مي خوام به فيلد كد ركورد انتخاب شده دسترسي داشته باشم . واسه خاطر همين شايد لازم باشه تو قسمت search اين كار رو نكنم و دكمه ديگه داشته باشم كه اين كار رو واسم انجام بده
اگه ممكنه بگيد چطور ميتونم اين كار رو انجام بدم
در مورد سوال اول هم بايد بگم كه منظورم استفاده مجدد از Adotable ها است
سوال دوم واسم مهمتره (سوال اول رو بي خيال)
ممنون
اگر میخوای فقط مقدار فیلد رکورد جاری رو داشته باشی، روی فرم 13 یه edit قرار بده و از کد زیر استفاده کن:
کد رو در رویداد OnCellClick مربوط به dbgrid قرار بده.کد:
if not DataSet.Eof then
form13.edit1.Text:=DataSet.FieldValues['نام فیلد'];
ولی اگر میخوای تمام مقادیر یک فیلد رو بعد از جستجو در فرم دیگه داشته باشی، روی فرم 13 یه combobox قرار بده و از کد زیر استفاده کن:
موفق باشیکد:
if not DataSet.Eof then
while not DataSet.Eof do
begin
form13.comboBox1.Items.Add(DataSet.FieldValues['نام فیلد']);
DataSet.Next;
end;
سلام اتفاقا اين كار رو من رو دكمه انجام دادم منتها نشد
كاري رو هم كه شما گفته بودي انجام دادم بازم نشد، Undeclared identifire :'fieldvalues'