PDA

View Full Version : سوال: اشكال "تكراري بودن primary key را ميدهد"



manzare
چهارشنبه 23 مرداد 1387, 11:24 صبح
سلام
من با استفاده از ado command مقاديري را در دو جدول وارد ميكنم
اشكال كارم:
در هر بار اجرا مقادير درست وارد ميشه اما در يك اجرا اگر دو دفعه بخواهم مقادير را وارد كنم اشكال "تكراري بودن primary key را ميدهد"
چطور بايد رفعش كنم؟

Hsimple11
چهارشنبه 23 مرداد 1387, 12:02 عصر
ایندکس Primary Key کارش همین است که مقادیر بصورت یکتا و Unique باشند. در طراحی جدول خود دقت لازم را بکنید.

amin_alexi
چهارشنبه 23 مرداد 1387, 14:10 عصر
می تونی قبلش چک کنی اگه وجود داشت insert نکنی !

SYNDROME
چهارشنبه 23 مرداد 1387, 20:11 عصر
سلام
من با استفاده از ado command مقاديري را در دو جدول وارد ميكنم
اشكال كارم:
در هر بار اجرا مقادير درست وارد ميشه اما در يك اجرا اگر دو دفعه بخواهم مقادير را وارد كنم اشكال "تكراري بودن primary key را ميدهد"
چطور بايد رفعش كنم؟
اگر منطورتان Handel خطا با دلفی است که می توانید از Try...Except و یا یک جستجو بر اساس فیلد کلید استفاده کنید.
ولی اگر منظورتان ندادن چنین پیغامی و ذخیره اطلاعات است که باید PK از روی فیلدهایتان بردارید و سپس یک فیلد دیگر را به عنوان فیلد PK انتخاب کنید.
موفق باشید

daffy_duck376
چهارشنبه 23 مرداد 1387, 23:26 عصر
از دستور LOCATE برای چک کردن تکراری نبودن مقدار وارد شده استفاده کن
table1.locate("feild name",مقداز موردنظر,[])
اگخ نتیجه TRUE باشه مقدار تکراری هست مگر مه INSERT کن

SYNDROME
پنج شنبه 24 مرداد 1387, 07:21 صبح
از دستور LOCATE برای چک کردن تکراری نبودن مقدار وارد شده استفاده کن
table1.locate("feild name",مقداز موردنظر,[])
اگخ نتیجه TRUE باشه مقدار تکراری هست مگر مه INSERT کن
دوست عزیز
به این نکته توجه کنید که Locate فقط رکوردهای داخل DataSet را جستجو می کند و اگر بعد از آخرین Refresh رکوردی اضافه شود مقدار آن در Locate جستجو نمی شود.(در برنامه های چند کاربر)
اگر هم می خواهید از Locate استفاده کنید قبل از آن حتماً ADO را Close و Open کنید.
موفق باشید

zman123456
پنج شنبه 24 مرداد 1387, 08:47 صبح
دوستان، به نظر من این مطالب که اینجا نوشتید خیلی خوب هستن و به کار این دوست عزیز میاد ولی بخشی از کارشه که فکر کنم زیاد تو این بحث مشکلی نداشته.
البته من فکر میکنم که مشکل این دوست عزیز اینه که :
می خواد یک اطلاعات رو دوبار وارد کنه ولی پیغام میده.
پس یا باید به قول دوست عزیز pk رو از روی فیلد برداره(خب اگه لازم نداشت که اینطوری طراحی نمی کرد)
یا باید خودش pk رو در ورود اطلاعاتش تولید کنه(خب باید بزرگترین عدد رو پیدا کنه و یک واحد اضافه کنه)
یا رو فیلد مورد نظر identity رو فعال کنه و در ورود اطلاعات دیگه بهش کاری نداشته باشه.
مطالب فقط در جهت تکمیل و وضوح بیشتر گفته های عزیزان ارسال شد.

manzare
پنج شنبه 24 مرداد 1387, 12:58 عصر
سلام مرسي كه كمك ميكنيد همونطور كه zaman جان فرمودند
یا باید خودش pk رو در ورود اطلاعاتش تولید کنه(خب باید بزرگترین عدد رو پیدا کنه و یک واحد اضافه کنه)

من اين كد را نوشتم اما بازم اشكال گرفت
ADOCommand1.Parameters.Items[0].Value:= Int(ADOTable1.FieldByName('qcode').Value +1)

21816

SYNDROME
پنج شنبه 24 مرداد 1387, 19:28 عصر
برای به دست آوردن بزرگترین عدد:


ADO.SQL.Text := 'Select Max(ID) ID From Tbl_Test';
ADO.Open.
ADO.FieldByName('ID').Asinteger + 1

موفق باشید