PDA

View Full Version : سوال: حذف رکوردهای درون تیبل



Mask
دوشنبه 30 فروردین 1389, 19:37 عصر
با سلام
با دستور زیر رکورد های درون یک تیبل رو پاک میکنم.
اما چون از حلقه استفاده شده و برنامه باید به اولین رکورد برگردد خیلی سرعت پایین هست .
کافیه مثلا 500 رکورد وجود داشته باشه دیگه برای پاکسازی باید حدود 30 ثانیه زمان ببره.
از دوستا سوالم اینه چه روشی رو برای حذف کلی رکوردهای یک تیبل پیشنهاد میکنند که خیلی سریع باشه؟
ممنون از جوابتون.

procedure TForm1.Button1Click(Sender: TObject);
var i:integer;
begin
ADOTable1.First;
for i:=1 to ADOTable1.RecordCount do begin
ADOTable1.Delete;
ADOTable1.Next;
end;
end;

pezhvakco
دوشنبه 30 فروردین 1389, 19:49 عصر
درود :
چرا از دستورات Sql استفاده نمی کنی .

DELETE FROM Table1
فکر خوش .

Felony
دوشنبه 30 فروردین 1389, 20:11 عصر
از شئ ADOQuery استفاده کنید و با دستور SQL رکوردها رو حذف کنید ( من تست کردم 1000 رکورد را در کمتر از 1 ثانیه حذف کرد ) :


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

Modernidea
دوشنبه 30 فروردین 1389, 22:26 عصر
بله همینجور که دوستان گفتن بهترین راه استفاده از کد SQL است اما اگر AdoTable به اشیایی مثل DBGrid متصل نباشه سرعت حذف به این صورت پایین نمیاد.
درضمن در کدی که نوشتین نیاز به Next نیست.

موفق باشید.

Felony
دوشنبه 30 فروردین 1389, 22:49 عصر
بله همینجور که دوستان گفتن بهترین راه استفاده از کد SQL است اما اگر AdoTable به اشیایی مثل DBGrid متصل نباشه سرعت حذف به این صورت پایین نمیاد.
سرعت ربط چندانی به وصل بودن به DBGrid یا وصل نبودن نداره ، شما یک بار با DBGrid و یک بار بدون DBGrid تست کن ، فرقشون 2 ثانیه هم نیست .

Modernidea
دوشنبه 30 فروردین 1389, 23:45 عصر
سرعت ربط چندانی به وصل بودن به DBGrid یا وصل نبودن نداره ، شما یک بار با DBGrid و یک بار بدون DBGrid تست کن ، فرقشون 2 ثانیه هم نیست .

حق با شماست. حدودا 2-3 ثانیه فرق میکرد.
من استنباطم بر این بود که وقتی رکورد ها حذف میشن برای نمایش اون Table در DBGrid با حذف هر رکورد پردازشی انجام داده میشه و همین باعث صرف زمان بیشتری برای انجام عملیات حذف و اظافه میشه.

اگه اشتباه نکنم هرچقدر تعداد کامپوننت های متصل به ADO ای که عملیات حذف رو انجام میدیم بیشتر باشه زمان بیشتری میگیره :متفکر:

به هر حال ممنون از یادآوریتون.

Mask
سه شنبه 31 فروردین 1389, 01:39 صبح
با سلام.
با راهنمایی دوستان برنامه زیر رو نوشتم.
در این برنامه ابتدا روی دکمه del کلیک کنید و سپس add میبینید که خطا میده.
میشه بگید مشکل چیه؟

Mahmood_M
سه شنبه 31 فروردین 1389, 11:07 صبح
با سلام.
با راهنمایی دوستان برنامه زیر رو نوشتم.
در این برنامه ابتدا روی دکمه del کلیک کنید و سپس add میبینید که خطا میده.
میشه بگید مشکل چیه؟
بعد از ExecSQL باید دوباره ADOQuery رو Open کنید ، مثال :
if ADOQuery1.RecordCount <> 0 then
begin
ADOQuery1.SQL.Clear;
ADOQuery1.SQL.Append('Delete * From Table1');
ADOQuery1.ExecSQL;
ADOQuery1.SQL.Clear;
ADOQuery1.SQL.Add('Select * From Table1');
ADOQuery1.Open;
end;
موفق باشید ...

pezhvakco
سه شنبه 31 فروردین 1389, 17:17 عصر
درود :

ADOQuery1.Insert;
ADOQuery1.FieldByName('nam').AsString:=Edit1.Text;
ADOQuery1.Post;
بهتره برای برقرای ارتباط با بانک ها از ADOQuery استفاده نکنی و به جای اون از ADOTable یا ADODataSet استفاده کنی که برای این کار طراحی شده اند .

ADOQuery بیش تر برای انجام درخواست ها استفاده میشه و به همین خاطر مجبوری دوباری مقدار دهیش کنی .
بهتره از Query ( پرس و جو ) برای انجام درخواست ها استفاده کنی و نه برای ارتباط دائمی با جداول .
SQL = Structured "Query" Language ( زبان پرس و جوى ساختارى )

فکر خوش.

Mask
سه شنبه 31 فروردین 1389, 17:46 عصر
درود :

بهتره برای برقرای ارتباط با بانک ها از ADOQuery استفاده نکنی و به جای اون از ADOTable یا ADODataSet استفاده کنی که برای این کار طراحی شده اند .

ADOQuery بیش تر برای انجام درخواست ها استفاده میشه و به همین خاطر مجبوری دوباری مقدار دهیش کنی .
بهتره از Query ( پرس و جو ) برای انجام درخواست ها استفاده کنی و نه برای ارتباط دائمی با جداول .
SQL = Structured "Query" Language ( زبان پرس و جوى ساختارى )

فکر خوش.
میشه بیشتر توضیح بدید.

pezhvakco
سه شنبه 31 فروردین 1389, 18:15 عصر
یه پایگاه داده Sql داریم و یه زبان برنامه نویسی که برای کار با پایگاه داده استفاده میشه .

Query ترجمه فارسیش میشه " پرسش " که در اصل از خود Sql گرفته شده : Structured "Query" Language
در برنامه نویسی پایگاه داده از این امکان برای کار ( پرسش ها و درخواست ها ) با پایگاه داده استفاده میشه و بعد از انجام کار مقدارش صفر میشه تا دستور بعدی .
به همین خاطر بهتره به از اونی استفاده کنی که برای اون طراحی شده .

البته برای راحتی کاربر امکانات دیگری ( مانند استفاده شما : برقرای ارتباط دائم با بانک اطلاعاتی ) نیز دارد .

ADOTable طراحی شده برای برقرای ارتباط دائم با بانک است .
ADODataset هم برای برقرای ارتباط و هم پرسش از بانک .

راهنمای بیش تر در کتاب دلفی ، استادان عزیز و پرسش (Query) ...

فکر خوش .

Mask
سه شنبه 31 فروردین 1389, 18:28 عصر
ممنون از راهنماییتون.
بنده از access استفاده میکنم.
این موارد برای اکسس هم صدق می کنه.

pezhvakco
سه شنبه 31 فروردین 1389, 19:34 عصر
درود :
زبان پرس و جوش (Sql) برای هر پایگاه دادهای کار میکنه .
فکر خوش .