PDA

View Full Version : سوال: مشکل هنگام Insert کردن رکورد به جدول



اصغر (پآچ)
پنج شنبه 26 اردیبهشت 1387, 00:01 صبح
سلام
من یه برنامه دفتر اندیکاتور می نویسم که نامه های وارده و صادره از شرکتمون رو توش ثبت کنم.
یه مشکلی هست اونم اینه که من Pirmery key جدولم رو شماره نامه قرار دادم و برای شماره ردیف دادن به نامه ها وقتی کاربر روی ثبت نامه جدید کلیک کرد توی رویداد OnShow فرم ثبت نامه جدید تو برنامه گفتم بیاد شماره آخرین نامه ثبت شده رو از جدول بگیره و یکی به اون اضافه کنه ما این برنامه رو روی شبکه مورد استفاده قرار دادیم اما وقتی دو تا کاربر همزمان اقدام به ثبت نامه جدید کنن به هر دوتا شون یه شماره می ده که اگه یکی شون زودتر ثبت کنه وقتی کاربر بعدی بخواد نامه رو ثبت کنه میگه شماره تکراری و کلا برنامه بسته می شه!
حالا من چطوری بفهمم توی جدول یک رکورد جدید اضافه شده؟
من این فکر رو هم کردم که وقتی کاربر روی دکمه ثبت کلیک کرد بعد بیاد آخرین شماره رو هنگام Post کردن اطلاعات بگیره و به کاربر بده اما توی این روش اگه ما بخوایم نامه رو با یک شماره قبلی که جا مونده یا خودمون خالی گذاشتیمش ثبت کنیم این امر دیگه از دست ما خارج میشه اگه کسی میدونه من چطور از این دردسر خلاص میشم کمکم کنه!
اجرکم عند ا... موفق و موید باشید

SYNDROME
پنج شنبه 26 اردیبهشت 1387, 07:09 صبح
در رویداد Onshow شماره را ندهید.
زمانی که کاربر دکمه ثبت یا ذخیره را زد Max شماره نامه ها را به دست آورید و سپس آن را به کاربر مورد نظر اختصاص دهید.


Try
No := MaxNo;
// Save
Except
// Message
End;

MaxNoنام تابعی است که شماره بزرگترین نامه را به اضافه 1 می کند و در متغییر No می ریزد و اگر دو کاربر به صورت هزمان اقدام به ثبت کنند یکی اطلاعاتش با شماره 1 ذخیره می شود و دیگر پیغام خطایی رویت می کند و سپس دوباره که دکمه ثبت را بزند شماره 2 به کاربر فوق نسبت داده می شود.
موفق باشد

اصغر (پآچ)
شنبه 28 اردیبهشت 1387, 15:01 عصر
خوب اگه بخوایم با یه شماره قبلی یا چند شماره جلوتر این نامه رو ثبت کنیم باید چکارکنم؟
(مثلا یه شماره رو قبلا استفاده کردیم که وارد دفتر نشده. وقتی به اون شماره می رسیم نباید نامه جدیدی با همون شماره ثبت بشه چطوری این شماره رو بصورت دستی وارد کنیم؟)

SYNDROME
شنبه 28 اردیبهشت 1387, 20:58 عصر
اگر شما لیست کلیه شماره ها را در یک جدول داشته باشید می توانید بزرگترین عدد و یا عدد خالی بین آنها را برای کاربر انتخاب کنید و همان دستوری هم که در بالا نوشتم جلو ایجاد پیغام ناخواسته را می گیرد و می تواند خطا را مدیریت کنید.
موفق باشید