PDA

View Full Version : سوال: مشکل در حذف کل رکوردها



farzadkamali
جمعه 18 اسفند 1391, 12:40 عصر
سلام بر دوستان
قصد من حذف کل رکوردها از جدوله.
از یک حلقه استفاده کردم ولی سرعت پایینه. (23000 رکورد در 30 ثانیه)
این شد که رفتم سراغ کوئری و از دستور زیر استفاده کردم



adoquery1.Close;
adoquery1.SQL.Text:='delete * from table1';
adoquery1.Active:=true;
adoquery1.Open;


که سرعت خوبه و کل رکوردهارو حذف میکنه

مشکل اینجاست که آخرش یه ارور هم میده. دوستان میتونن بگن این ارور مال چیه؟

101104

دستور زیر رو هم استفاده کردم ولی همچنان ارور میده



ADOQuery1.SQL.Add('Delete * From Table1');

ADOQuery1.ExecSQL;



ممنون

سعید صابری
جمعه 18 اسفند 1391, 12:49 عصر
* اضافی هست.

adoquery1.SQL.Text:='delete from table1';
ADOQuery1.ExecSQL

farzadkamali
جمعه 18 اسفند 1391, 12:53 عصر
ممنون درست شد.

حالا دلیل این ارور چی هست؟

Felony
جمعه 18 اسفند 1391, 13:04 عصر
متد Open رو وقتی که Dataset قراره چیزی برگردونه باید استفاده کنید ، وقتی رکوردها رو دارید حذف میکنید مگه داره چیزی برگشت داده میشه ؟ منظور از برگشت کوئری هایی مثل Select هست .

بعدش هم متد Active به نوعی معادل Open هست ، وقتی یکیشون رو صدا میزنید دیگه نیازی به صدا زدن اون یکی نیست .

morteza147
یک شنبه 04 فروردین 1392, 13:35 عصر
سلام بر دوستان
قصد من حذف کل رکوردها از جدوله.
از یک حلقه استفاده کردم ولی سرعت پایینه. (23000 رکورد در 30 ثانیه)
این شد که رفتم سراغ کوئری و از دستور زیر استفاده کردم



adoquery1.Close;
adoquery1.SQL.Text:='delete * from table1';
adoquery1.Active:=true;
adoquery1.Open;


که سرعت خوبه و کل رکوردهارو حذف میکنه

مشکل اینجاست که آخرش یه ارور هم میده. دوستان میتونن بگن این ارور مال چیه؟

101104

دستور زیر رو هم استفاده کردم ولی همچنان ارور میده



ADOQuery1.SQL.Add('Delete * From Table1');

ADOQuery1.ExecSQL;



ممنون


with adoquery1 do
begin
with SQL do
begin
Clear;
Add('Delete table');
end;
ExecSQL;
end;

farzadkamali
یک شنبه 18 فروردین 1392, 11:22 صبح
سلام خدمت دوستان

از دستور زیر استفاده کردم برای حذف کل رکوردهای جدول که جواب هم داد ولی وقتی دوباره روی button کلیک میکنم تا مجدداً جدول خالی بشه ارور میده.



adoquery1.SQL.add('delete from table1)';
ADOQuery1.ExecSQL


102460


برای اولین بار که کلیک میکنم درسته و کل رکوردها پاک میشه. حالا اگه جدول رو دوباره پر کنم و روی button کلیک کنم دیگه کل رکوردها پاک نمیشه و ارور بالا رومیده. مگه اینکه برنامه رو ببندم و مجددا باز کنم.
مشکل از کجاست؟

ولی با استفاده از دستور زیر همچین مشکلی پیش نمیاد. چرا؟




adoquery2.SQL.Text:='delete from billreport';
adoquery2.ExecSQL;

morteza147
یک شنبه 18 فروردین 1392, 11:42 صبح
سلام خدمت دوستان

از دستور زیر استفاده کردم برای حذف کل رکوردهای جدول که جواب هم داد ولی وقتی دوباره روی button کلیک میکنم تا مجدداً جدول خالی بشه ارور میده.



adoquery1.SQL.add('delete from table1)';
ADOQuery1.ExecSQL


102460


برای اولین بار که کلیک میکنم درسته و کل رکوردها پاک میشه. حالا اگه جدول رو دوباره پر کنم و روی button کلیک کنم دیگه کل رکوردها پاک نمیشه و ارور بالا رومیده. مگه اینکه برنامه رو ببندم و مجددا باز کنم.
مشکل از کجاست؟

ولی با استفاده از دستور زیر همچین مشکلی پیش نمیاد. چرا؟




adoquery2.SQL.Text:='delete from billreport';
adoquery2.ExecSQL;







دلیلش اینکه کوری را clear نکردی


adoquery2.sql.clear;
adoquery2.SQL.Text:='delete from billreport';
adoquery2.ExecSQL;

یوسف زالی
یک شنبه 18 فروردین 1392, 12:58 عصر
سلام.
پیشنهاد می کنم اگر دیتابیست SQL هست هیچ وقت همچین کاری رو در UI نکنی.
یک SP بساز و اون رو کال کن.
امکاناتی که در SQL درونی دلفی هست به گرد پای SQL واقعی نمی رسه. دلیل هم داره. ضعف نیست.
در مورد Syntax بکار رفته،
دستور Delete نیازی به From هم نداره.
Delete TBL
همین!
اما دستور Truncate Table TBL سریعتر هست و Identity هاتون رو هم ریست می کنه.
باز هم قویا توصیه می کنم این کار رو با SP انجام بدید.

alaveh
دوشنبه 19 فروردین 1392, 00:06 صبح
adoquery1.SQL.add('delete from table1)';
ADOQuery1.ExecSQL

توی کد بالا نوشتی ADD و لی توی کد پایین add ننوشتید و فقط مقدار رو مساوی مقدار جدید گذاشتید که کد پایین باعث میشه هر دفعه مقدار قبلی پاک بشه و با مقدار جدید جایگزین بشه ولی کد بالا هر بار delete from table1 رو به محتویات adoquery1 اضافه میکنه .



adoquery2.SQL.Text:='delete from billreport';
adoquery2.ExecSQL;