سلام
من با استفاده از ado command مقاديري را در دو جدول وارد ميكنم
اشكال كارم:
در هر بار اجرا مقادير درست وارد ميشه اما در يك اجرا اگر دو دفعه بخواهم مقادير را وارد كنم اشكال "تكراري بودن primary key را ميدهد"
چطور بايد رفعش كنم؟
سلام
من با استفاده از ado command مقاديري را در دو جدول وارد ميكنم
اشكال كارم:
در هر بار اجرا مقادير درست وارد ميشه اما در يك اجرا اگر دو دفعه بخواهم مقادير را وارد كنم اشكال "تكراري بودن primary key را ميدهد"
چطور بايد رفعش كنم؟
ایندکس Primary Key کارش همین است که مقادیر بصورت یکتا و Unique باشند. در طراحی جدول خود دقت لازم را بکنید.
می تونی قبلش چک کنی اگه وجود داشت insert نکنی !
خواستن ، توانتستن است !!!
از دستور LOCATE برای چک کردن تکراری نبودن مقدار وارد شده استفاده کن
table1.locate("feild name",مقداز موردنظر,[])
اگخ نتیجه TRUE باشه مقدار تکراری هست مگر مه INSERT کن
دوست عزیز
به این نکته توجه کنید که Locate فقط رکوردهای داخل DataSet را جستجو می کند و اگر بعد از آخرین Refresh رکوردی اضافه شود مقدار آن در Locate جستجو نمی شود.(در برنامه های چند کاربر)
اگر هم می خواهید از Locate استفاده کنید قبل از آن حتماً ADO را Close و Open کنید.
موفق باشید
دوستان، به نظر من این مطالب که اینجا نوشتید خیلی خوب هستن و به کار این دوست عزیز میاد ولی بخشی از کارشه که فکر کنم زیاد تو این بحث مشکلی نداشته.
البته من فکر میکنم که مشکل این دوست عزیز اینه که :
می خواد یک اطلاعات رو دوبار وارد کنه ولی پیغام میده.
پس یا باید به قول دوست عزیز pk رو از روی فیلد برداره(خب اگه لازم نداشت که اینطوری طراحی نمی کرد)
یا باید خودش pk رو در ورود اطلاعاتش تولید کنه(خب باید بزرگترین عدد رو پیدا کنه و یک واحد اضافه کنه)
یا رو فیلد مورد نظر identity رو فعال کنه و در ورود اطلاعات دیگه بهش کاری نداشته باشه.
مطالب فقط در جهت تکمیل و وضوح بیشتر گفته های عزیزان ارسال شد.
سلام مرسي كه كمك ميكنيد همونطور كه zaman جان فرمودندمن اين كد را نوشتم اما بازم اشكال گرفتیا باید خودش pk رو در ورود اطلاعاتش تولید کنه(خب باید بزرگترین عدد رو پیدا کنه و یک واحد اضافه کنه)ADOCommand1.Parameters.Items[0].Value:= Int(ADOTable1.FieldByName('qcode').Value +1)
code.rar
برای به دست آوردن بزرگترین عدد:
ADO.SQL.Text := 'Select Max(ID) ID From Tbl_Test';
ADO.Open.
ADO.FieldByName('ID').Asinteger + 1
موفق باشید