PDA

View Full Version : چگونه در جداول Master Details برای هر جدول details می توان ای دی IDENTITY را پیاده سازی کرد؟



fahimi
دوشنبه 25 خرداد 1394, 16:25 عصر
با سلام
من دنبال روشی می گردم در هنگام Insert متناسب با جدول اصلی ردیف را بصورت اتوماتیک(IDENTITY) ایجاد کند برای مثال در یک فاکتور در قسمت details ردیف را در هر فاکتور ذخیره کند.

tefos666
سه شنبه 26 خرداد 1394, 15:19 عصر
سلام
اگر اشتباه منظورتون رو متوجه نشده باشم میخواهید id که تو جدول a درج شده رو داشته باشین تا تو جدول b ازش استفاده کنید

کد انتهای خط (SELECT @@IDENTITY)اینکار رو میکنه یعنی دوتا دستور رو تو یک دستور با ; میفرستیم

insert into table (x) values(100);SELECT @@IDENTITY

البته من بیشتر از C#‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎ ‎‎‎‎ استفاده میکنم و اونجا راحتتر هندلش میکنم با ۲ تا insert متفاوت

بعنوان مثال



private void InsertRelatedPrice(int id)
{
int ObjID = 0;
string ObjInsertHeader = "insert into PriceHeader (PriceDeclarationDate) values('" + txtIssued.Text + "')";
string ObjInsertedID = "SELECT @@IDENTITY";

/////////////////////////////////////////////////////////////////
// insert into Header
////////////////////////////////////////////////////////////////
using (OleDbConnection ObjconnHeader = new OleDbConnection(mydb.CstrّOSM))
{
using (OleDbCommand ObjcmdHeader = new OleDbCommand(ObjInsertHeader, ObjconnHeader))
{
ObjconnHeader.Open();
ObjcmdHeader.ExecuteNonQuery();
ObjcmdHeader.CommandText = ObjInsertedID;


///////////////////////////////////////////////////////////////
Get Inserted ID from Previous table
///////////////////////////////////////////////////////////////
int? ID = (int?)ObjcmdHeader.ExecuteScalar();
if (ID.HasValue)
{
ObjID = ID.Value;
}

}
}
////////////////////////////////////////////////////////////////
// insert into Detail///
///////////////////////////////////////////////////////////////
using (OleDbConnection ObjconnDetail = new OleDbConnection(mydb.CstrّOSM))
{
string ObjInsertDetail = "insert into PriceDetails(ParentID,GoodCode,Price) values(" + ObjID + ",'" + id + "'," + txtPrice.Text + ")";


using (OleDbCommand ObjcmdDetail = new OleDbCommand(ObjInsertDetail, ObjconnDetail))
{
ObjconnDetail.Open();
ObjcmdDetail.ExecuteNonQuery();
}
}

}

tooraj_azizi_1035
سه شنبه 26 خرداد 1394, 15:24 عصر
سلام
اگر به قصد نمایش در فرم یا گزارش چنین کاری را می کنید بهتر است در خود گزارش یا فرم این کار را بکنید و هزینه ذخیره سازی یا محاسبه RowNumber() را از دوش سرور بردارید. اگر علت دیگری دارید مطرح کنید.

pezhvakco
سه شنبه 26 خرداد 1394, 16:25 عصر
در هنگام Insert متناسب با جدول اصلی ردیف را بصورت اتوماتیک(IDENTITY) ایجاد کند
اگه بشه، کمی بیشتر و روان تر توضیح بنویسید خواسته شما چی است.

برای مثال در یک فاکتور در قسمت details ردیف را در هر فاکتور ذخیره کند.
نیازی به نگهداری ردیف نیست.