PDA

View Full Version : ثبت مقدار در فیلد کلید اصلی و کلید خارجی بصورت همزمان



mehdiba3
یک شنبه 31 شهریور 1392, 11:31 صبح
سلام دوستای خوبم

2 جدول دارم که با استفاده از فیلد codeclass به هم وصل شدن

codeclass در جدول class کلید اصلی و در جدول hoghogh کلید خارجی می باشد.

codeclass در جدول کلاس identity =yes میباشد و خودش مقدار میگیره

مشکل اینجاست که میخوام وقتی رو دکمه ثبت کلیلک بشه این اتفاق بیفته:

class.codeclass=hoghogh.codeclass

یعنی هر مقداری او فیلد class.codeclass قرار گرفت در جدول hoghogh.codeclass نیز این مقدار قرار بگیره.

بخاطر این من این روش رو دارم استفاده می کنم چون ممکنه من 3 کلاس هم اسم و هم کد داشته باشم و تنها راهی که میشه حقوق یک استاد رو در جدول حقوق پرداخت کرد این هستش که hoghogh.codeclass مقدار داشته باشه چرا که codeclass کلید اصللی در جدول class هستش و اینطوری میشه هر کلاس رو جداگانه پرداخت کرد.


جدول ها رو هم میزام که بیشت متوجه بشین

file:///C:/Users/milana/AppData/Local/Temp/moz-screenshot-1.png111065

مرسی

hamid_hr
یک شنبه 31 شهریور 1392, 11:39 صبح
الان مشكلت كجاس دقيقا
نميتوني اخرين كد ثبت شده رو بگيري
نميتوني ثبت كني
....

mehdiba3
یک شنبه 31 شهریور 1392, 11:51 صبح
مشکل اینه:

اصلا کل کار اینجورییه که وقتی تو سیستم کلاس جدید ثبت میشه هم تو جدول class و هم تو جدول hoghogh اطلاعاتی درج میشه. در جدول حقوق فیلد مهمی بنام flag داریم که با ثبت هر کلاس در جدول hoghogh این فیلد flag=false میشه. این تا اینجا

حالا وقتی میخوایم حقوق هر استاد رو برای درس مربوطه بدیم اول میایم فیلد flag را چک می کنم اگر flag<>true بود یعنی هنوز حقوقش پرداخت نشده و سیستم اجازه میده حقوق پرداخت بشه وبعدش flag=true میشه و اینطوری بار بعدی اگه اشتباهی کاربر همون استاد و همون کلاس رو انتخاب کنه چون شرط flag<>tue برقرار نیست یعنی flag=true میشه و سیستم پیم خطا میده.

حالا مشکل اینجاست که :

فرض کن ما 3 کلاس مثل هم به یک استاد دادیم مثل ICDL و وقتی رو دکمه پرداخت حقوق میزنم همه فیلدهای جدول flag ها در جدول حقوق true شده و پول همه درسا باهم پرداخت میشه و این یک اشکال بزرگه ولی اگه بتونم با یک راه کاری در جدول hoghogh فیلد codeclass رو موقه ثبت درس در جدول class قرار بدم یعنی codeclass که کلید اصلی هستش همزمان در جدول hoghogh که کلید خارجی هستش درج بشه با یک شرط ساده درکوئری میتونم این تفکیک رو بین کلاسا بر قرار بشم و فقط کد مروبط به اون کلاس true میشه.

مشخص شد؟

hamid_hr
یک شنبه 31 شهریور 1392, 12:10 عصر
ببين موقع ثبت ميتوني با اين كوئري كليد اصلي رو از جدول اولت بگيري بعد تو جدول دومت ثبتش كني
declare @tbl table(t1 varchar(10))

insert into Tbl(Col1,Col2,Col3,Col4,Col5)
output inserted.codeclass into @tbl
values ('','','','','')

select * from @tbl

mehdiba3
یک شنبه 31 شهریور 1392, 12:16 عصر
این کوئری برام قابلفهم نیست
میشه یکم توضیحش بدین؟

و اینکه میخوام وقث رو دکمه ثبت کلاس کلیک زد کاربر کد اصلی که همین الان ایجاد شده و در جدول class قرار داره همزمان همون کد در جدول حقوق هم ثبت بشه.

sajadsobh
سه شنبه 02 مهر 1392, 08:56 صبح
من فکر کنم اینجا از تریگر استفاده کنی بهتر باشه. یعنی بعد از هر بار اضافه کردن به جدول، مقداری که میخوای رو به یه جدول دیگه اضافه کنه.
البته میتونی از scope_identity() هم موقع insert استفاده کنی.
مثلاً فرض کن یه جدول Tbl1 با سه تا فیلد داریم (ID, FirstName, LastName)
یه جدول هم داریم Tbl2 با 2 تا فیلد (MyID, flag) که ID توی جدول Tb1 کلید اصلی که خاصیت identity ش رو فعال کردیم و توی جدول Tbl2 کلید خارجی هستش که با MyID ارتباط داره.
حالا میخوام وقتی توی جدول Tbl1 رکوردی وارد شد، ID بره توی فیلد MyID از جدول Tbl2 و مقدار flag هم false کنه.
کوئری رو اینجوری می نویسیم:

INSERT INTO Tbl1( ّFirstName, LastName) VALUES ('Sajad' ,'Sobh')
INSERT INTO Tbl2(MyID, Flag) VALUES (SCOPE_IDENTITY(), false)