ورود

View Full Version : حذف رکورد با ADOQuery



داوود
دوشنبه 26 دی 1384, 12:02 عصر
من برای حذف تعدادی رکورد با فیلد مشخص از یک جدول با ADOQuery کد زیر را نوشته ام


ADOQuery2.Active:=false;
ADOQuery2.SQL.Clear;
ADOQuery2.SQL.Add('DELETE ');
ADOQuery2.SQL.Add('FROM Table1');
ADOQuery2.SQL.Add('WHERE (Field1 ='+DBEdit1.Text+')');
ADOQuery2.ExecSQL;
ADOQuery2.Active:=TRUE;

اما بعد از اجرای آخرین دستور با پیغام زیر مواجه می شوم
command text dose not return result set
جالب اینجاست که ضمن دادن پیغام بالا رکوردهای مورد نظر حذف می شوند.

Touska
دوشنبه 26 دی 1384, 12:21 عصر
ADOQuery2.Active:=false;
ADOQuery2.SQL.Clear;
ADOQuery2.SQL.Add('DELETE FROM TABLE1 WHERE (Field1 ='+DBEdit1.Text+')');
ADOQuery2.Active:=TRUE;


ببخشید من اصلن حواسم نبود.

بجای Adoquery از AdoCommand استفاده کنید.



AdoCommand1.Commandtext := 'DELETE FROM TABLE1 WHERE Field1 ='+QuotedStr(DbEdit1.text) ;
Adocommand1.Executenonequery;

mzjahromi
دوشنبه 26 دی 1384, 13:39 عصر
اما بعد از اجرای آخرین دستور با پیغام زیر مواجه می شوم
command text dose not return result set

خط آخر رو دیگه نباید بنویسی


ADOQuery2.Active:=TRUE;

این کد کافیه


ADOQuery2.Active:=false;
ADOQuery2.SQL.Clear;
ADOQuery2.SQL.Add('DELETE ');
ADOQuery2.SQL.Add('FROM Table1');
ADOQuery2.SQL.Add('WHERE (Field1 ='+DBEdit1.Text+')');
ADOQuery2.ExecSQL;

delete یک دستور اجرائی هست و فقط باید Execute بشه

sun
دوشنبه 26 دی 1384, 18:09 عصر
من یه adoquery دارم وصل به دیتا بیس از نوع access با provider از نوع jet 4 ولی نمیدونم چرا رکوردام نمیتونم update , insert کنم البته با دستور ; adoquery.insert
و adoquery.edit

mzjahromi
دوشنبه 26 دی 1384, 19:44 عصر
من یه adoquery دارم وصل به دیتا بیس از نوع access با provider از نوع jet 4 ولی نمیدونم چرا رکوردام نمیتونم update , insert کنم البته با دستور ; adoquery.insert
و adoquery.edit
اینجوری که نمیشه
کدهائی که نوشتی رو بنویس

delphi developer
دوشنبه 26 دی 1384, 20:03 عصر
داوود جان مشکل شما این است که فرمان DELETE هیچ دادهای برنمیگردونه و ADOQuery نیاز داره که وقتی Open میشه یه مجموعه داده تو خودش داشته باشه.
و این ربطی به خط اخر کددت نداره،شما باید به آخر Queryت یک دستور مثل SELECT اضافه کنی تا یک مجموعه داده برگردونه یا از TADOCommand استفاده کنی که مجموعه داده ای رو تو خودش نگه نمیداره.

همدانی
سه شنبه 27 دی 1384, 02:00 صبح
سلام
adoquery.execute

داوود
سه شنبه 27 دی 1384, 07:08 صبح
با تشکر از همه دوستان عزیز که منو راهنمایی کردند
خیلی خیلی ممنونم

mzjahromi
سه شنبه 27 دی 1384, 08:49 صبح
و این ربطی به خط اخر کددت نداره،شما باید به آخر Queryت یک دستور مثل SELECT اضافه کنی تا یک مجموعه داده برگردونه.
ولی لازم نیست Select آخر Query بنویسه همون ExecSQL کارش رو انجام می ده

sun
سه شنبه 27 دی 1384, 12:19 عصر
مثلا فرض کنید من dbgride دارم که به adoquery وصل کردم و تمام رکوردهایی را که با adoquery انتخاب کردم مطابق دستور زیر
adocommand.commandtext:='select * from db1'
adoquery.recordset:=adocommand.execut;
را نمایش میده حالا میخام از از توی گرید مقدار یک فیلد رکورد را تغییر بدم ولی نمیشه به نظر شما مشکل چیه؟؟؟؟؟

jahani1148
سه شنبه 27 دی 1384, 14:41 عصر
با سلام .- دستور حذف در کوئری بسته اجرا نمی شود . پس باید حتما خاصیت active آن true باشد .
ADOQuery2.Active:=true ;

ADOQuery2.SQLtext :='DELETE from table1 where fiel1='+''''+edit1.text+''''
ADOQuery2.ExecSQL;