View Full Version : سوال: مشکل در انجام Delete با ado dataset
shivana64
یک شنبه 16 تیر 1387, 18:27 عصر
سلام دوستان
من دو پارامتر aو b برای Adodataset تعریف کردم که مقدار آنها به ترتیب
edit1.text , edit2.text می باشد
دستوری که نوشتم دستور زیر :
delete from table1 where shomare_daneshamozi=(select shomare_daneshamozi from table2 where nam=:a and name_khanevadegi=:b
)
ولی هنگام اجرا با error زیر مواجه میشم
parameter object is improperty defined inconsistent or incomplete information was provided
نمی دونم مشکل کجاست من پارا»ترهامو تعریف کردم
ممنون میشم کمکم کنید
SYNDROME
یک شنبه 16 تیر 1387, 19:51 عصر
چطوری پارامترها را مقدار دهی می کنی؟
بر روی Parameters مربوط به aDO دابل کلیک کن ببین پارامترها آنجا با همان نام تعریف شده اند.
دستور را هم به شکل زیر تغییر دهید.
delete from table1 where shomare_daneshamozi IN (select shomare_daneshamozi from table2 where nam=:a and name_khanevadegi=:b)
موفق باشید
shivana64
دوشنبه 17 تیر 1387, 15:54 عصر
پارامتر ها رو با دستور مقدار دهی کردم
adodataset1.parametres.parametrbyname('a').value:= edit1.text
البته بعد از اینکه اونارو بصورت دستی هم مقدار دهی کردم
error تغییر کرد
حالا errorجدید اینه
command text dose not return a result set
نمی دونم آخه دستور پاک کردن که نباید چیزیرو برگردونه!!!
از IN هم بجای مساوی استفاده کردم تغییری نکرد
SYNDROME
دوشنبه 17 تیر 1387, 21:16 عصر
command text dose not return a result set
شما ADO را بعد از نوشتن دستورات فوق Open می کنید.
زمانی که عمل Open انجام شود نیازمند این است که نتیجه عملیات به aDO شما برگردد.
ولی چون دستور شما نتیجه ای ندارد پس به جای Open دستور ADO.ExecSQL را اجرا کنید تا خطای شما برطرف شود.
برای عملیات Insert و Updateهم باید همین دستور را اجرا کنید.
موفق باشید
shivana64
دوشنبه 24 تیر 1387, 18:01 عصر
سلام
ولی مشکل اینجاست که
برای ADodataset ما ADOdataset.ExecSQL نداریم
اون برای Ado table هست نه ADodataset
Loveski
دوشنبه 24 تیر 1387, 18:45 عصر
برای برطرف کردن مشکلت می تونی از ADO Command استفاده کنی چون Execute داره ولی راه بهتر اینه که بیایی درون Store Procedure این کد را بنویسی
delphiprog3000
دوشنبه 24 تیر 1387, 19:00 عصر
با سلام.
دوست من Adodataset خاصیت Commandtext داره که میتوانید دستورات خود را به آن پاس دهید.
از Adoquery میتوانید استفاده کنید.
و Adocommand نیز مورد مناسبیست.
در ضمن اگر قصد استفاده از Store procedure رو دارید میتوانید از شی AdostoredProc استفاده نمایید.
موفق باشید.........................
shivana64
شنبه 05 مرداد 1387, 19:57 عصر
با سلام من از ADO Commend هم استفاده کردم ولی جواب نگرفتم
در ضمن من جایی خوندم که دستور Select و Delete رو اگه بخواهیم با هم بکار ببریم که در مورد کار من لازمه فقط می شه از ADo dataset استفاده کرد
میشه یکی بگی چطوری میتونم دستور Deletamo اجرا کنم
از اون store هم که دوستان گفتن بلد نیستم استفاده کنم
خواهشن جوابمو بدین :ناراحت:من دیگه وقت زیادی ندارم:اشتباه:
shivana64
سه شنبه 08 مرداد 1387, 12:55 عصر
میشه لطفا یکی جواب بده
یعنی یکی نیس که با ADo dataset کار کرده باشه؟؟؟؟؟؟؟؟؟؟؟
:عصبانی++:
mms_4004
سه شنبه 08 مرداد 1387, 15:21 عصر
1. هدف شما از پاک کردن چیه؟؟ یعنی چرا می خواید از ADO Dataset استفاده کنید؟؟ لطفاً هدفتون رو از این کار بگید شاید استفاده از ADO Query و حتی ADO Table راحتر از این باشه که شما بخواید اونجوری پاک کنید.
mms_4004
سه شنبه 08 مرداد 1387, 15:32 عصر
سلام دوستان
من دو پارامتر aو b برای Adodataset تعریف کردم که مقدار آنها به ترتیب
edit1.text , edit2.text می باشد
دستوری که نوشتم دستور زیر :
delete from table1 where shomare_daneshamozi=(select shomare_daneshamozi from table2 where nam=:a and name_khanevadegi=:b
)
ولی هنگام اجرا با error زیر مواجه میشم
parameter object is improperty defined inconsistent or incomplete information was provided
نمی دونم مشکل کجاست من پارا»ترهامو تعریف کردم
ممنون میشم کمکم کنید
شما می تونید از ADO Query استفاده کنید یا از ADO Table اگر می خواید از ADO Table استفاده کنید اول براساس Edit1 و Edit2 جستجو رو انجام دهید بعد از اینکه این رکورد پیدا شود با استفاده از دستور
َADOTable1.Delete;
به همین سادگی از توی بانکتون حذفش کنید
در ضمن این روش خوبی نموتونه واسه حذف یک دانش آموز باشه چون شما ممکنه چند دانش آموز مثلاً با یک نام و نام خانوادگی داشته باشید. بهتره نام پدر رو هم اضافه کنید یا اینکه شماره شناسنامه یا شماره ملی.
پس ممکنه که توی این کوئری که می نویسید چند شماره دانش آموزی برگشت داده بشه.
mms_4004
سه شنبه 08 مرداد 1387, 15:38 عصر
در ضمن دستور بالا رکوردی رو حذف می کنه که توی ADO Table فعاله یعنی در واقع اشاره گر ما روی اون قرار داره، برای نمایش بهتر می تونید از DB Grid هم استفاده کنید و به کاربرتون اجازه بدید که مثلاً زمانی که جستجو کرد اسم و فامیل رو اگه چند تا اسم و فامیل یکسان داشته باشه کابر بتونه خودش یکی رو انتخاب کنه.
در ضمن به این نکته توجه داشته باشید که شما نمی تونید فیلدی که کلید اصلی هست رو حذف کنید اگر مثلاً توی Table2 شما که می خواید شماره دانش آموزیتون رو از توی اون حذف کنید نمی تونه کلید اصلی باشه اگر بخواهید اونو پاک کنید باید کل رکورد پاک بشه که بالا ذکر شد.
mms_4004
سه شنبه 08 مرداد 1387, 15:41 عصر
ADOTable1.Locate(';fiel name;;;',vararrayof([edit1.text,edit2.Text,edit3.Text,edit4.Text,edit5. Text]),[])
برای جستجو در ADo Table هم از این دستور استفاده کنید.
mms_4004
سه شنبه 08 مرداد 1387, 15:48 عصر
برای استفاده از ADO Query هم می تونید توی همون فرمی که Edit هاتون قرار داره هم از این فرمت برای جستجو و یا حذف رکوردتون استفاده کنید ولی دقت کنید که رکورد رو می تونید حذف کنید نه فیلد حاوی کلید اصلی.
ADOQuery1.Active:=false;
with ADOQuery1.SQL do
begin
Clear;
add('select shomare_daneshamozi fromTable2 where name='+Edit1.Text+' and family='+edit2.text);
end;
ADOQuery1.Active:=true;
به این فرمت استفاده کنید. اگر یکم تلاش کنید فکر کنم مشکلتون حل بشه البته اگه پافشاری روی استفاده از ADO Dataset نداشته باشید.
mms_4004
سه شنبه 08 مرداد 1387, 15:49 عصر
امیدوارم که مشکلتون حل بشه، با آرزوی موفقیت.
delphiprog3000
سه شنبه 08 مرداد 1387, 16:50 عصر
ADOQuery1.Active:=false;
with ADOQuery1.SQL do
begin
Clear;
add('select shomare_daneshamozi fromTable2 where name='+Edit1.Text+' and family='+edit2.text);
end;
ADOQuery1.Active:=true;
بعد از add دستور open برای جستجو و برای ورود یا حذف و یا ویرایش Execsql را استفاده نمایید.
در ضمن نیازی به Active هم نمیباشد زمانی که دستور شما open یا execsql بشه.
موفق باشید....................
shivana64
شنبه 12 مرداد 1387, 22:43 عصر
من از روشی که در مورد Ado Query گفته بودید استفاده کردم
ولی روی دستور AdoQuery1.delete با Error زیر مواجه شدم
Insufficient key column information for updating or refreshing
ظاهرا این مشکل مربوط به کلید اصلی روی جدول هست
همنطور که گفته بودین ولی من که فیلد کلید رو پاک نمی کنم فقط
می خوام کل اون رکورد پاک بشه
و از روشی که گفته بودینم استفاده کردم
حالا نمی دونم این error برای چیه
و کجای کار اشتباه ِ
shivana64
دوشنبه 14 مرداد 1387, 17:28 عصر
ممنون از دوستان
بخصوص mms_4004
مشکلم حل شد
vBulletin® v4.2.5, Copyright ©2000-1404, Jelsoft Enterprises Ltd.