نمایش نتایج 1 تا 32 از 32

نام تاپیک: فیلد AutoInc و Master/Details

  1. #1
    کاربر دائمی آواتار Mohammad_Mnt
    تاریخ عضویت
    اسفند 1381
    محل زندگی
    جنگلی به نام ایران
    سن
    41
    پست
    1,875

    Exclamation فیلد AutoInc و Master/Details

    فیلد کلید من توی جدول مستر یه فیلد autoInc است و در جدول دیتیلز یه فیلد Integer . چکار کنم که موقع اضافه کردن یه رکود به جدول مستر ، فیلد مقدار کلید من توی جدول دیتیلز برای تمام رکوردهای مرتبط ، همون مقدار autoInc توی جدول مستر بشه ؟

  2. #2
    کاربر دائمی آواتار jafari1
    تاریخ عضویت
    بهمن 1382
    محل زندگی
    ايران
    پست
    367
    MasterSorce جدولی که detail است را data sorce جددول 1 و Master field آنرا فیلد مشترک بگذارید

  3. #3
    کاربر دائمی آواتار Mohammad_Mnt
    تاریخ عضویت
    اسفند 1381
    محل زندگی
    جنگلی به نام ایران
    سن
    41
    پست
    1,875
    همین کار رو کرده ام ولی یک مشکل پیش می آد :
    تا وقتی که رکورد توی جدول مستر Post نشه ، مقدار فیلد AutoInc مشخص نمی شه و قبل از این که رکورد توی جدول مستر بخواد ذخیره بشه ، رکوردهای جدول دیتیلز ذخیره می شن

  4. #4
    کاربر دائمی آواتار DataMaster
    تاریخ عضویت
    تیر 1382
    محل زندگی
    مشهد الرضا
    پست
    634
    من فکر می کنم حتی اگه فیلد شما از نوع AutoInc نبود با توجه به این مطلب که گفتید ابتدا رکورد Detail ذخیره میشه در حالت های دیگه هم به مشکل بر می خورید
    چون ابتدا باید همیشه رکورد Master درج شده باشه تا بتونی Detail رو درج کنی

  5. #5
    کاربر دائمی آواتار Mohammad_Mnt
    تاریخ عضویت
    اسفند 1381
    محل زندگی
    جنگلی به نام ایران
    سن
    41
    پست
    1,875
    راه حل چیه ؟

  6. #6
    کاربر دائمی آواتار jafari1
    تاریخ عضویت
    بهمن 1382
    محل زندگی
    ايران
    پست
    367
    با سلام
    من هم مشکل شما را دارم لکن با post کردن بعد ازرویداد AfterInsert جدول مستر مشکل حل میشود

  7. #7
    کاربر دائمی آواتار Mohammad_Mnt
    تاریخ عضویت
    اسفند 1381
    محل زندگی
    جنگلی به نام ایران
    سن
    41
    پست
    1,875
    من 8 تا فیلد Not Null دارم ، نمی تونم بدون اطلاعات لازم Post کنم !!!

  8. #8
    ظاهرا تو شرایطی که شما دارین نمی تونین از MasterDetail استفاده کنین. چون
    1-فیلدهای AutoInc تا قبل از اینکه Post بشن معلوم نیست مقدارشون چقدره
    2- همیشه تو جداول Master Detail اول باید Master وارد بشه نه Detail
    You never know what you can do until you try

  9. #9
    می شه عزیزم
    یه تراکنش بازکن، بعد جدول مستر رو با مقادیر پیش فرض برای فیلدهای NotNull پر کن سپس Post کن و مقدار Auto Inc بدست آمده بعد از Post رو در Detail استفاده کن نهایتاً اگر نخواستی این رکورد ذخیره بشه تراکنش رو Rollback کن !

  10. #10
    کاربر دائمی آواتار Mohammad_Mnt
    تاریخ عضویت
    اسفند 1381
    محل زندگی
    جنگلی به نام ایران
    سن
    41
    پست
    1,875
    مشکل این جاست که من از DataAware ها استفاده می کنم و این منطقی نیست که مثلا beginTransaction را توی BeforePost و CommitTransaction را توی AfterPost بذارم .

    یه راه حل دیگه :
    حالا من فیلد را از حالت AutoInc در آوردم و همون Integer کردم . توی MSSQL تا زمانی که رکورد جدول مستر پست نشه اجازه نمی ده که رکورد دیتیلز مرتبط با اون پست بشه .
    توی دلفی این قضیه کاملا برعکسه ، اول رکوردهای دیتیلز پست می شن و بعد رکورد مستر .
    برای همین خطا پیش می آد و رکوردها ثبت نمی شن .

  11. #11
    نقل قول نوشته شده توسط Mohammad_Mnt
    مشکل این جاست که من از DataAware ها استفاده می کنم و این منطقی نیست که مثلا beginTransaction را توی BeforePost و CommitTransaction را توی AfterPost بذارم .

    یه راه حل دیگه :
    حالا من فیلد را از حالت AutoInc در آوردم و همون Integer کردم . توی MSSQL تا زمانی که رکورد جدول مستر پست نشه اجازه نمی ده که رکورد دیتیلز مرتبط با اون پست بشه .
    توی دلفی این قضیه کاملا برعکسه ، اول رکوردهای دیتیلز پست می شن و بعد رکورد مستر .
    برای همین خطا پیش می آد و رکوردها ثبت نمی شن .
    محمد جان روش ذکر شده رو بنده در حداقل یکی دو تا برنامه نسبتا بزرگ بکار بردم و هیچ مشکلی هم راجع به SQL Server وجود نداره . مطلقاًً نیاز نیست این قدر خودت رو به رویداد های DataSet مقید کنی بعد از عمل Post می تونی Commit کنی و نیازی به استفاده از رویداد نیست و ... به همان روشی که گفتم حتی با وجود فیلد Auto Inc مشکل ات حل می شه !!!

  12. #12
    کاربر دائمی آواتار Mohammad_Mnt
    تاریخ عضویت
    اسفند 1381
    محل زندگی
    جنگلی به نام ایران
    سن
    41
    پست
    1,875
    1 ) مهران جان ، مشکل محل قرار گیری Brgin,Commit,RollBack است . این ها رو توی کدوم Event ها قرار بدم ( من دارم از DataAware ها استفاده می کنم ها )

    2 ) راه حل این مشکل چیه ؟ فیلدهای کلید من Integer و NotNull هستند . توی MSSQL تا زمانی که رکورد جدول مستر پست نشه اجازه نمی ده که رکورد دیتیلز مرتبط با اون پست بشه .
    توی دلفی این قضیه کاملا برعکسه ، اول رکوردهای دیتیلز پست می شن و بعد رکورد مستر .
    برای همین خطا پیش می آد و رکوردها ثبت نمی شن .

  13. #13
    ) مهران جان ، مشکل محل قرار گیری Brgin,Commit,RollBack است . این ها رو توی کدوم Event ها قرار بدم ( من دارم از DataAware ها استفاده می کنم ها )
    به هیچ Event خاصی نیاز نیست ، قبل از Append عمل آغاز تراکنش رو انجام بده. و عمل Post در یک Try ... Except ... end قرار بده حالا به این شکل:
     try
    DM.ADOCon.BeginTrans;
    DM.Table1.Append;
    DM.Table1.fieldByName('SomeField').Asinteger:=1;
    DM.Envelops.Post;
    DM.ADOCon.CommitTrans;
    except
    DM.ADOCon.RollbackTrans;
    end
    ) راه حل این مشکل چیه ؟ فیلدهای کلید من Integer و NotNull هستند . توی MSSQL تا زمانی که رکورد جدول مستر پست نشه اجازه نمی ده که رکورد دیتیلز مرتبط با اون پست بشه .
    توی دلفی این قضیه کاملا برعکسه ، اول رکوردهای دیتیلز پست می شن و بعد رکورد مستر .
    برای همین خطا پیش می آد و رکوردها ثبت نمی شن
    به هیچ عنوان چیزی برعکس نیست تست کن متوجه میشی که دقیقاً در دلفی هم تا رکورد جدول مستر رو نساخته باشی دیتیل تو ثبت نخواهد شد مگر برای رکوردهای مستری که قبلاً ثبت شده باشند. ضمنا فیلد های Not Null در جداول ات رو با مقادیر معتبر پیش فرض پرُ کُن !!!

  14. #14
    یه تراکنش بازکن، بعد جدول مستر رو با مقادیر پیش فرض برای فیلدهای NotNull پر کن سپس Post کن و مقدار Auto Inc بدست آمده بعد از Post رو در Detail استفاده کن نهایتاً اگر نخواستی این رکورد ذخیره بشه تراکنش رو Rollback کن !
    چون طبق گفته خودشون از DataAware استفاده میکنن. اگر بخوان به روش شما عمل کنن باید مثلا هنگام ورود به فرم تراکنش رو شروع کنن و هنگام تثبیت نهائی اون رو قطعی کنن. که این روش زیاد جالب به نظر نمیرسه.
    یه راه حل دیگه :
    حالا من فیلد را از حالت AutoInc در آوردم و همون Integer کردم . توی MSSQL تا زمانی که رکورد جدول مستر پست نشه اجازه نمی ده که رکورد دیتیلز مرتبط با اون پست بشه .
    توی دلفی این قضیه کاملا برعکسه ، اول رکوردهای دیتیلز پست می شن و بعد رکورد مستر .
    خوب همونطور که دوستمون گفتن رکورد Master رو با یه سری مقادیر پیش فرض ایجاد کنید و در آخر مقادیرش رو به روز رسانی کنید.
    یا اینکه از جداول موقت استفاده کنید
    You never know what you can do until you try

  15. #15
    چون طبق گفته خودشون از DataAware استفاده میکنن. اگر بخوان به روش شما عمل کنن باید مثلا هنگام ورود به فرم تراکنش رو شروع کنن و هنگام تثبیت نهائی اون رو قطعی کنن. که این روش زیاد جالب به نظر نمیرسه.
    متاسفانه متوجه منظورت نشدم !!!

  16. #16
    کاربر دائمی آواتار Mohammad_Mnt
    تاریخ عضویت
    اسفند 1381
    محل زندگی
    جنگلی به نام ایران
    سن
    41
    پست
    1,875
    فرض کنید من یک فاکتور فروش دارم . هنگام ورود اطلاعات ، هر دو جدول مستر و دیتیلز در حالت Insert هستند و شماره فاکتور می تونه تغییر کنه .
    اگه من توی MSSQL جدول مستر را با دیتیلز مرتبط کنم ، دیگه نمی تونم عمل Post را توی دلفی انجام بدم و خطا پیش می آد

    متاسفانه متوجه منظورت نشدم !!!
    یعنی من از DBGrid و DBNavigator استفاده می کنم که Post و Delete و ... را اتوماتیک صدا میزنه
    عکس های ضمیمه عکس های ضمیمه

  17. #17
    اگه من توی MSSQL جدول مستر را با دیتیلز مرتبط کنم ، دیگه نمی تونم عمل Post را توی دلفی انجام بدم و خطا پیش می آد
    دوستمون گفتن که
    شما بیا اول Master رو Insert کن با یه مقادیر پیش فرض
    آخر سر مقادیر Master رو اصلاح کن.
    You never know what you can do until you try

  18. #18
    کاربر دائمی آواتار Mohammad_Mnt
    تاریخ عضویت
    اسفند 1381
    محل زندگی
    جنگلی به نام ایران
    سن
    41
    پست
    1,875
    چطوری آخه ! کاربر روی دکمه + کلیک می کنه و یه رکورد Insert می شه . حالا من کجا باید این کاری که گفتین را انجام بدم ؟ ( یه نگاه به عکس بندازین )

  19. #19
    متاسفانه من از فرم چیزی نفهمیدم
    یعنی ترتیب کارهائی که کاربر باید انجام بده مشخص نیست
    You never know what you can do until you try

  20. #20
    مشکل تو اینه که به شدت وابسته به ساختار استاندارد تعریف شده در دلفی هستی ، نمونه اش هم اینکه آیا نیازی هست که حتما از DBNavigator استفاده کنی ؟ من که فکر نمیکنم . این کنترل یک کنترل خوب ولی در عین حال دارای محدودیت هستش و به نظر من به درد کار حرفه ای نمی خوره (آقا این نظر منه پس کسی کَل کَل راه نندازه !).

  21. #21
    کاربر دائمی آواتار Mohammad_Mnt
    تاریخ عضویت
    اسفند 1381
    محل زندگی
    جنگلی به نام ایران
    سن
    41
    پست
    1,875
    متاسفانه من از فرم چیزی نفهمیدم
    این فاکتور فروش یه کارخانه سنگبری است . اون کادر Details مربوط به آیتم های اون فاکتور است . آیتم ها از طریق یه DBGrid نشون داده می شن و از طریق DBEditBox ها ویرایش می شن . Navigator وسطی مربوط به آیتم ها و Navigator پایینی مربوط به کل فاکتور است . البته این فرم کامل نیست .

    آیا نیازی هست که حتما از DBNavigator استفاده کنی
    اگه استفاده نکنم چطور Insert,Delete کنم یا به رکوردهای قبلی و بعدی برم ؟

  22. #22
    اگه استفاده نکنم چطور Insert,Delete کنم یا به رکوردهای قبلی و بعدی برم ؟
    حرفا میزنی ها !!!!!!!!! یه بار کل متد های یک DataSet رو مرور کن ببین چی دستگیرت می شه؟

  23. #23
    کاربر دائمی آواتار Mohammad_Mnt
    تاریخ عضویت
    اسفند 1381
    محل زندگی
    جنگلی به نام ایران
    سن
    41
    پست
    1,875
    مهران جون ، آخرش مجبورم همون کارهای navigator رو خودم انجام بدم دیگه !!!

    اصلا این کدی که نوشتی رو توی هیچ Event ای نمیشه گذاشت !!!

    try
    DM.ADOCon.BeginTrans;
    DM.Table1.Append;
    DM.Table1.fieldByName('SomeField').Asinteger:=1;
    DM.Envelops.Post;
    DM.ADOCon.CommitTrans;
    except
    DM.ADOCon.RollbackTrans;
    end


    یه کار دیگه ، اگه شما بخوای فرم ورود اطلاعات یه فاکتور فروش رو به صورت مستر / دیتیلز بنویسی از اول چه کار می کنی ؟

  24. #24
    یه کار دیگه ، اگه شما بخوای فرم ورود اطلاعات یه فاکتور فروش رو به صورت مستر / دیتیلز بنویسی از اول چه کار می کنی ؟
    دقیقآً همان کاری که گفتم رو می کنم . این کد رو هم می تونی در هر رویدادی ازجمله FormShow
    Or Button Click استفاده کنی .خوش باشی!

  25. #25
    کاربر دائمی آواتار Mohammad_Mnt
    تاریخ عضویت
    اسفند 1381
    محل زندگی
    جنگلی به نام ایران
    سن
    41
    پست
    1,875
    من می خوام از DBEdit و DBCheckBox و .... استفاده کنم . این که شما نوشتین :

    DM.Table1.fieldByName('SomeField').Asinteger:=1;

    در صورتی است که از این کنترل ها استفاده نشه . همون طور که می دونی این کنترل ها مستقیما روی خود فیلد کار می کنن .

  26. #26
    نقل قول نوشته شده توسط Mohammad_Mnt
    من می خوام از DBEdit و DBCheckBox و .... استفاده کنم . این که شما نوشتین :

    DM.Table1.fieldByName('SomeField').Asinteger:=1;
    در صورتی است که از این کنترل ها استفاده نشه . همون طور که می دونی این کنترل ها مستقیما روی خود فیلد کار می کنن .
    در صورتی که از کنترلهای مذکور استفاده می کنی فقط نیاز داری عمل Insert و Post رو انجام بدی باقیش با خود دلفی . خوش باشی !!!

  27. #27
    کاربر دائمی آواتار Mohammad_Mnt
    تاریخ عضویت
    اسفند 1381
    محل زندگی
    جنگلی به نام ایران
    سن
    41
    پست
    1,875
    پس چطوری این کارها رو بین BeginTransaction و CommitTransaction قرار بدم ؟

  28. #28
    نقل قول نوشته شده توسط Mohammad_Mnt
    پس چطوری این کارها رو بین BeginTransaction و CommitTransaction قرار بدم ؟
    قبل از عمل Append شروع بهBeginTrans کن وبعد از Post هم Commit کن دیگه!!!

  29. #29
    قبل از عمل Append شروع بهBeginTrans کن وبعد از Post هم Commit کن دیگه!!!
    برای درج درون یک جدول که تراکنش کاربردی نداره. تراکنش زمانی کاربرد داره که اطلاعات شما بیش از یک رکورد باشه یا رکوردها درون بیش از یک جدول باشه و بخواهید یا همه باشن یا هیچ کدام نباشن
    پس چطوری این کارها رو بین BeginTransaction و CommitTransaction قرار بدم ؟
    شما اگه اطلاعاتتون شرایط فوق رو دارن باید ساختاری رو درنظر بگیرید که احتاجاتتون رو براورده کنه نه ساختاری که راحت تر باشید و شما تنها کسی هستید که میدونید چی می خواهید و هدفتون و شرایطتون چیه. ولی یه کار میتونید بکنید.
    هنگام درج اولین رکورد Detail تراکنش رو شروع کنید و پس از درج آخرین رکورد اون رو قطعی کنید و در صورت انصراف کاربر اون رو RollBack کنید ولی کلا این روش زیاد جالب نیست. من پیشنهاد می کنم از یک جدول موقت استفاده کنید و در انتها با یک ترا کنش اطلاعات رو به جدول اصلی منتقل کنید.
    اگر از BDE استفاده میکنید خاصیت Catched Update هم کمک زیادی به شما می کنه.
    You never know what you can do until you try

  30. #30
    هنگام درج اولین رکورد Detail تراکنش رو شروع کنید و پس از درج آخرین رکورد اون رو قطعی کنید و در صورت انصراف کاربر اون رو RollBack کنید ولی کلا این روش زیاد جالب نیست. من پیشنهاد می کنم از یک جدول موقت استفاده کنید و در انتها با یک ترا کنش اطلاعات رو به جدول اصلی منتقل کنید.
    100% مخالفم !!!
    شما زمانی از تراکنش استفاده میکنید که در چند جدول دارید عملیات انجام میدهید و این جداول یک ارتباط منطقی با هم دارند ؛ایضاًً در مورد مشکل ایشان این ارتباط یک ارتباط Master/Detailsهست نهایتاً به نظر این حقیر زمانی شما یک تراکنش رو آغاز می کنید که یک رکورد در جدول Master درج می کنید و زمانی این تراکنش رو قطعی میکنید که تمام درج های مورد نظر شما در جداول Details انجام شده باشه و نهایتاً بخواهید کل تراکنش های بر روی این جداول اعمال وقطعی بشه لذا فکر نمی کنم تا زمانی که یک رکورد Master هنوز وجودش قطعی نشده لازم باشه رکوردهای Detail قطعی بشوند . نکته دیگه اینکه اگه از ترکیب ADO/SQL SERVER استفاده میکنی باید بدونی که SQL Server از Nested Transactions (تراکنش های تو در تو)پشتیبانی نمیکند. خوش باشی!!!

  31. #31
    قبل از عمل Append شروع بهBeginTrans کن وبعد از Post هم Commit کن دیگه!!!
    100% مخالفم !!!
    شما زمانی از تراکنش استفاده میکنید که در چند جدول دارید عملیات انجام میدهید و این جداول یک ارتباط منطقی با هم دارند
    ولی کلا این روش زیاد جالب نیست.
    همیشه شرایط متفاوتی وجود داره . بعضی اوقات برای کار روی یک جدول تک هم به تراکنش نیاز داریم
    You never know what you can do until you try

  32. #32

    نقل قول: فیلد AutoInc و Master/Details

    مشکل من اینه که می خوام تو کد نویسی از mastersource ,master field استفاده کنم ولی نمی دونم چطوری باید کدش رو بنویسم !
    لطفا کمکم کنید

تاپیک های مشابه

  1. یک کوئری و یک جدول و Master Details
    نوشته شده توسط dkhatibi در بخش برنامه نویسی در Delphi
    پاسخ: 3
    آخرین پست: یک شنبه 18 آذر 1386, 19:23 عصر
  2. مشکل با فرم Master/details
    نوشته شده توسط golagha_program در بخش VB.NET
    پاسخ: 3
    آخرین پست: سه شنبه 15 فروردین 1385, 13:41 عصر
  3. Master/Details در DBExpress قابل ویرایش
    نوشته شده توسط Mohammad_Mnt در بخش بانک های اطلاعاتی در Delphi
    پاسخ: 9
    آخرین پست: دوشنبه 21 آذر 1384, 01:48 صبح
  4. مشکل با فیلد AutoInc
    نوشته شده توسط Mohammad_Mnt در بخش بانک های اطلاعاتی در Delphi
    پاسخ: 2
    آخرین پست: دوشنبه 07 آذر 1384, 15:31 عصر
  5. Master and Details
    نوشته شده توسط سار در بخش برنامه نویسی در 6 VB
    پاسخ: 5
    آخرین پست: دوشنبه 04 خرداد 1383, 23:10 عصر

قوانین ایجاد تاپیک در تالار

  • شما نمی توانید تاپیک جدید ایجاد کنید
  • شما نمی توانید به تاپیک ها پاسخ دهید
  • شما نمی توانید ضمیمه ارسال کنید
  • شما نمی توانید پاسخ هایتان را ویرایش کنید
  •