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

نام تاپیک: دریافت آخرین رکورد جدول در برنامه تحت شبکه

  1. #1
    کاربر تازه وارد آواتار mohammad-j
    تاریخ عضویت
    مهر 1384
    محل زندگی
    نصف جهان
    پست
    74

    Question دریافت آخرین رکورد جدول در برنامه تحت شبکه

    با سلام خدمت تمامی برنامه نویسای گل گلاب
    من یک برنامه نوشتم به صورت تک کاربره (برنامه آموزش) ولی الان می خواهم فرم های ورودی اطلاعات که کدینگ هستند رو تحت شبکه کنم ، الان برنامه در شبکه جواب می دهد اما مشکلی که من دارم این هست که هر فرمی مثل فرم ثبت دانش آموز در ابتدا می رود اخرین رکورد جدول دانش آموز رو می خونه و به آخرین کد یکی اضافه می کند و اون کد می شه کد جدید . ولی در شبکه وقتی دو تا سیستم همزمان می خواهند دانش آموز تعریف کنند هر دو سیستم کد یکسان می دهد .
    این کد :
    procedure TFStu.NRecord;
    begin
    DM.TT_Stu.Cancel;
    DM.TT_Stu.Append;
    BSave.Enabled := False;
    BCancel.Enabled:= False;
    BDelete.Enabled := False;
    ActiveControl:= TB_ID;
    if DM.T_Stu.RecordCount>0 then
    begin
    DM.T_Stu.IndexFieldNames:='id';
    DM.T_Stu.Last;
    end;
    if DM.T_Stu.RecNo<=0 then
    DM.TT_Stu.FieldByName('id').AsInteger:=1
    else
    DM.TT_Stu.FieldByName('id').AsInteger:=
    DM.T_Stu.FieldValues['id']+1;

    end;

    حالا من چطوری می توانم این مشکل رو برطرف کنم ؟

  2. #2
    کاربر تازه وارد آواتار mohammad-j
    تاریخ عضویت
    مهر 1384
    محل زندگی
    نصف جهان
    پست
    74

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

    دوستان در این زمینه کسی نیست ؟
    من فقط می خواهم اطلاعات در هر دو سیستم به روز باشه ؟

  3. #3
    کاربر دائمی آواتار Unique
    تاریخ عضویت
    مرداد 1384
    محل زندگی
    ایران - اصفهان
    پست
    3,199

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

    سلام

    ببین دوست عزیز ، بهتره برای اینجور فیلد ها حالت Autoincrement را تعریف کنی و خودت را خلاص کنی ! اجازه بده پایگاه خودش مقادیر Unique را برات ایجاد کنه !

    شما مشکلت اینه که اول Append میکنی بعدش مقدار را چک میکنی !


    var
    lastId : integer;
    begin
    if myTable.recordcount = 0 then
    lastId := 1
    else begin
    myTable.last;
    lastId := myTable.FieldByName('id_field').asinteger + 1;
    end;
    myTable.append;
    ....
    end;


  4. #4
    کاربر تازه وارد آواتار mohammad-j
    تاریخ عضویت
    مهر 1384
    محل زندگی
    نصف جهان
    پست
    74

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

    یعنی غیر از این کار هیچ راه دیگه ای نداره ؟

  5. #5
    کاربر دائمی آواتار Unique
    تاریخ عضویت
    مرداد 1384
    محل زندگی
    ایران - اصفهان
    پست
    3,199

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

    چی غیر از این کار راه دیگه ای نداره ؟
    بهترین راه برای ایجاد فیلد های یکتا در پایگاه داده ، فیلد های Autoincrement هستند !
    در ضمن ایراد کد شما را هم من گفتم ! می تونی از هر کدوم خواستی استفاده کنی ! خود من هم بعضی جاها از روش شما استفاده می کنم !

  6. #6
    کاربر دائمی آواتار MSHService
    تاریخ عضویت
    آذر 1387
    محل زندگی
    اکنون توی EJB
    پست
    207

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

    سلام عجب نام کاربری آشنایی داری ها(2picher)
    گفته همه صحیح و عالی.اما اگه اصرار داری راه خودت رو بری پس...
    زمانی که برنامه شما یه عملیات تکراری برروی مجموعه داده ها (dataset) انجام میدهد یا یک عملیات جستجو در مجموعه داده انجام میدهید بهتر است از به روز رسانی اطلاعات در این مدت زمان جلوگیری کنید.جهت انجام اینکار متد DisableControls از عنصر مجموعه داده را به هنگام شروع عملیات تکراری فراخوانی و در پایان این عملیات ، متد EnableControls از همین عنصر را فراخوانی کنید.بهتر است این عمل را در یک بلاک try..Finally انجام دهید.

    custTable.disablecontrols
    try
    custTable.last
    .....
    finally
    custTable.enablecontrols
    end;


    بر گرفته از مثال1-12 از Learn Delphi Programing (Farsi).pdf

  7. #7
    کاربر تازه وارد آواتار mohammad-j
    تاریخ عضویت
    مهر 1384
    محل زندگی
    نصف جهان
    پست
    74

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

    میشه در مثالی که بالا زدم بگید چطوری باید پیاده کنم ؟

  8. #8
    کاربر دائمی آواتار Unique
    تاریخ عضویت
    مرداد 1384
    محل زندگی
    ایران - اصفهان
    پست
    3,199

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

    سلام عجب نام کاربری آشنایی داری ها(2picher)
    گفته همه صحیح و عالی.اما اگه اصرار داری راه خودت رو بری پس...
    زمانی که برنامه شما یه عملیات تکراری برروی مجموعه داده ها (dataset) انجام میدهد یا یک عملیات جستجو در مجموعه داده انجام میدهید بهتر است از به روز رسانی اطلاعات در این مدت زمان جلوگیری کنید.جهت انجام اینکار متد DisableControls از عنصر مجموعه داده را به هنگام شروع عملیات تکراری فراخوانی و در پایان این عملیات ، متد EnableControls از همین عنصر را فراخوانی کنید.بهتر است این عمل را در یک بلاک try..Finally انجام دهید.
    من دارم شاخ در میارم!!!!
    منظور شما را اصلا نمیفهمم تا اونجا که بنده حقیر میدونم معمولا این کار را میکنند که جلوی fetch کردن Data در هر Insert را بگیرین و سرعت بالا بره و کنترل هی Update نشه ! اما چه ربطی به این قضیه داره ؟

    میشه منو راهنمایی کنین ؟

  9. #9
    کاربر تازه وارد آواتار mohammad-j
    تاریخ عضویت
    مهر 1384
    محل زندگی
    نصف جهان
    پست
    74

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

    آقا من واقعا پاک گیج شدم ، اگر یه مثال عملی بزندید ممنون می شوم

  10. #10
    کاربر دائمی آواتار MSHService
    تاریخ عضویت
    آذر 1387
    محل زندگی
    اکنون توی EJB
    پست
    207

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

    سلام
    بروبچ عذر می خوام زیاد.(این شکلک عذر خواهی نمی دونم کجاست)
    من تازه کارم اما خیلی دوست دارم کمک کنم.
    دیدم نوشته میخواد آخرین رکورد رو بخونه گفتم پس بهتره این موقع insert انجام نشه تا رکورد آخرش رو بدست بیاره.
    یعنی وقتی خواست رکورد آخر رو بخونه تو این بلوک بخونش (یا چکش کنه)تا مطمئن باشه که درسته.
    اونم دیدید که از تو e-book نوشتم از خودم نبود.
    بازم اگه بزرگان بی ربط بود ببخشید.
    من عاشق این فرومم.

  11. #11
    کاربر دائمی آواتار Unique
    تاریخ عضویت
    مرداد 1384
    محل زندگی
    ایران - اصفهان
    پست
    3,199

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

    آقا محمد !
    مگه مشکل شما این نبود که کد یکسان می گرفتی ؟
    خوب من که توی این Post https://barnamenevis.org/showpo...54&postcount=3
    گفتم شما داری اول Append میکنی بعد Last میگیری ! که این غلطه ! شما اول برو روی Last و آخرین مقدار را تعین کن بعدش Appned کن ! این فکر نکنم ایراد بگیره !

    اما من به طور کلی گفتم بگذار سیستم Autoincrement را بده ! میدو.نی برای چی ؟
    فکر کن در یک مثال نسبتا نادر ! دو تا کاربر بد شانس در یک زمان insert کنن که توی سیستم شما امکان اینکه کاربر دوم کد ID تکراری بگیره هست ! اما اگه Autoincerement باشه این اتفاق نمیفته !

  12. #12
    کاربر تازه وارد آواتار mohammad-j
    تاریخ عضویت
    مهر 1384
    محل زندگی
    نصف جهان
    پست
    74

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

    اگه یه مثال عملی بزنید به یا کد ممنون می شوم

  13. #13
    کاربر دائمی
    تاریخ عضویت
    اردیبهشت 1387
    محل زندگی
    گمگشته در دیارغریب و عجیب
    سن
    66
    پست
    276

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

    محمد جان
    قرار نیست برای هر جوابی یک مثال زده شود اینطوری شما خودت کمتر درگیر می شی و فکر می کنم مطلب را نتوانی اصولی یاد بگیری
    اما در مورد سوال : تعداد کاربرانی که همزمان از سیستم استفاده می کنند خیلی مهم است بهترین روش اگر نمی خواهی فیلد autonumber استفاده کنی این است که ابتدا یک تابع بنویسی که در آن اولین آی دی قابل استفاده را تعیین کنی و سپس در دستور ذخیره رکورد اگر از پارامتر ها استفاده کرده و مقدار پارامتر فیلد مورد نظر را برابر با تابع فوق الذکر قرار دهی کمترین احتمال فیلد تکراری را خواهید داشت
    ضمنا خاصیت عدم تکرار را در فیلد مورد نظر بگذار و دستور insert را هم در داخل try .. except .. end قرار بده که اگر رکورد تکراری بود بتوانی برنامه را کنترل کنی

  14. #14
    کاربر تازه وارد آواتار shahrokhkian
    تاریخ عضویت
    شهریور 1387
    محل زندگی
    -
    سن
    45
    پست
    68

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

    قبل از Insert از کد زیر استفاده کن.

    DM.TableName.Resync(rmExact);

    برای استفاده از این خط باید DB را در قسمت Uses اضافه کنی.

  15. #15
    کاربر تازه وارد آواتار mohammad-j
    تاریخ عضویت
    مهر 1384
    محل زندگی
    نصف جهان
    پست
    74

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

    DM.TableName.Resync(rmExact);


    این کد دقیقا چیکار می کنه ؟

  16. #16
    کاربر تازه وارد آواتار shahrokhkian
    تاریخ عضویت
    شهریور 1387
    محل زندگی
    -
    سن
    45
    پست
    68

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

    کلیه تغییرات صورت گرفته بر روی بانک را بروز میکند.

  17. #17
    کاربر تازه وارد آواتار mohammad-j
    تاریخ عضویت
    مهر 1384
    محل زندگی
    نصف جهان
    پست
    74

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

    به نگام استفاده از این دستور دلفی خطای زیر رو می ده :

    [Error] UFStu.pas(93): Incompatible types: 'TResyncMode' and 'Enumeration'

  18. #18
    کاربر دائمی آواتار Unique
    تاریخ عضویت
    مرداد 1384
    محل زندگی
    ایران - اصفهان
    پست
    3,199

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

    اینطوری بنویسید :
    DM.TableName.Resync([rmExact]);

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

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