PDA

View Full Version : حذف تمام ركورد هاي يك جدول بانك اكسس



hatefsoltani
پنج شنبه 10 اردیبهشت 1388, 16:24 عصر
با سلام

من يك جدول temp دارم كه هر بار براي باز سازي گزارش بايد ازش استفاده كنم . مي خوام هر بار كه داده هاي جديد توي اين جدول مي ريزم قبل از اون تمامي اطلاعات قبلي پاك بشه . البته الان با يك روش ابتكاري اين كار رو انجام مي دم ولي آيا كد خاصي هست ؟

با تشكر

xxxxx_xxxxx
پنج شنبه 10 اردیبهشت 1388, 20:22 عصر
"DELETE * FROM TableName"

vbhamed
پنج شنبه 10 اردیبهشت 1388, 23:56 عصر
سلام

دوست عزيز اين كار شما مشكلي هم داره
اونم اينكه به صورت پيش فرض اندازه بانك فقط بزرگ ميشه، يعني با اضافه كردن اطلاعات بانك بزرگ ميشه و با پاك كردن اونها سايز فايل ديتابيس كوچك نميشه
حالا كافيه يه مدت شما از برنامتون گزارش بگيريد اونوقت مي بينيد كه سايز فايلتون به صورت باور نكردني بزرگ ميشه كه اين خودش باعث مشكلاتي از قبيل كاهش سرعت و مشكلات Backup گيري و ... ميشه

اما 2 تا راه داريد
1 - بانك رو با دستور CompactDatabase فشرده كنيد (منظور مثل zip نيست، يعني از بين بردن فضاهايي كه استفاده نمي شوند)
2 - يك ديتابيس خالي ديگه كه توش جدول گزارش تعريف شده درست كنيد و هر بار ازش يك كپي بگيريد و اطلاعات رو تو اون بريزيد و چاپ كنيد و بعد هم پاكش كنيد، اينطوري ديگه نياز به پاك كردن اطلاعات جدول هم نيست

xxxxx_xxxxx
جمعه 11 اردیبهشت 1388, 00:08 صبح
سلام
اگر با TRUNCATE Table محتويات جدول رو پاك كنيم باز هم همين مشكل وجود داره؟ (حجم اضافي)
اگر DROP Table كنيم چطور؟

vbhamed
جمعه 11 اردیبهشت 1388, 00:49 صبح
سلام

فرقي نمي كنه
چون Compact كردن بانك مخصوصا براي اطلاعات زياد كار وقت گيري هست، معمولا سيستم به صورت اتوماتيك اين كار رو انجام نمي ده چون سرعت برنامتون اگر قرار باشه اين كار دائما انجام بشه خيلي پايين مياد

كامپكت كردن يه طورايي مثل Defrag هارد ديسك مي مونه
سيستم اين كار رو به كاربر مي سپره
شما به عنوان برنامه نويس مي تونيد اول يا آخر برنامه اين كار رو انجام بدين كه البته آخر برنامه بهتره

hatefsoltani
یک شنبه 13 اردیبهشت 1388, 19:45 عصر
با تشكر از اساتيد گرامي

كد "DELETE * FROM TableName" چه مشكلي داره ؟ فرض كنيد من 100 تا ركورد رو توي اين بانك خالي مي ريزم بعد از گزارش گيري اونو با اين دستور پاك كنم .و اطلاعات جديد مثلا 120 تا ركورد بريزم توش . چه مشكلي (‌ اضافه شدن حجم ديتابيس و . . . ) پيش مياد ؟

با تشكر

xxxxx_xxxxx
یک شنبه 13 اردیبهشت 1388, 22:55 عصر
بله.
اون اطلاعاتي كه از ديتابيس حذف كرديد، حذف ميشن اما همچنان حجمي كه داشتند روي بانك مي مونه و ازش كم نميشه. و با اضافه شدن حجم بانك باز متوجه اين موضوع نميشيد تا زماني كه حجم بانك بيشتر از وقتي بشه كه اطلاعاتشو حذف كرديد.
خب مشكلاتي هم كه پيش مياد رو vbhamed (http://barnamenevis.org/forum/member.php?u=10624) تو پست سوم گفتند.

vbhamed
یک شنبه 13 اردیبهشت 1388, 23:25 عصر
سلام

سيستم بانك اطلاعاتي به نحوي هست كه سگمنت سگمنت به حجم اضافه مي كنه
اگر هر سگمنت رو 65 كيلوبايت در نظر بگيريم (كه ممكنه اين عدد با توجه به ورژن بانك متفاوت باشه)
در ابتدا كه بانك ايجاد ميشه 65 كيلوبايت هست، اگر فضاي لازم براي تعريف جداول و Query و فرم و ساير اشياء بانك بيشتر از اين باشه، 65 كيلوبايتهاي بعدي هم اضافه ميشه

به زبان ساده ابتدا 65 كيلوبايت اختصاص داده ميشه
اگر كافي بود كه هيچ،
اگر زياد بود، فضاي اضافي براي داده ها استفاده ميشه
اگر هم كم بود 65 كيلوبايت ديگه داده ميشه

مثل اينك شما قراره ليست يك سري افراد رو روي كاغذ بنويسيد
1 برگ به شما مي دن، اگر كافي بود كه هيچ
اگر زياد هم باشه فضاي سفيد كاغذ باقي مي مونه و بريده نميشه
اما اگر فضا حتي به مقدار نوشتن نام 1 نفر كم بود، 1 برگ كامل ديگه به شما مي دن نه مثلا يك سانتي متر كاغذ


بانك اطلاعاتي هم بايت به بايت بزرگ نميشه، به خاطر همين وقتي يك بانك رو ساختيد و مقداري اطلاعات به اون اضافه كنيد حجم بانك ممكنه بزرگ نشه، مادامي كه به 65 كيلو يا ضرائب اون برسه
اگر حجم بانك دقيقا 65 كيلو بود و يك ركورد اضافه كرديد، اونموقع 65 كيلو ديگه به بانك اضافه ميشه يعني در كل ميشه 130 كيلو، و باز تا پر شدن 65 كيلو دوم همين داستان ادامه داره

در مورد حذف اطلاعات هم فقط ركوردها به عنوان پاك شده علامت مي خورن ولي واقعا پاك نميشن
چنانچه عمل حذف و اضافه زياد استفاده بشه، بانك پر ميشه از فضاهايي كه به عنوان پاك شده علامت خوردن ولي ديگه نمي تونيد اونجا چيزي بنويسيد

براي همين دستور CompactDatabse اين مشكل رو حل ميكنه و فضاهاي اضافي رو پاك مي كنه و اين كار باعث ميشه بانك تا حد ممكن كوچك بشه

MMR_1344
دوشنبه 14 اردیبهشت 1388, 04:43 صبح
اگر فايل رو در برنامه حذف کنيم (اون رو از هارد پاک کنيم) و مجددآً اون رو بسازيم آيا اين مشکل باز هم وجود خواهد داشت ؟

vbhamed
دوشنبه 14 اردیبهشت 1388, 09:43 صبح
سلام

در پست 3 توضيح رو دادم كه چه كاري انجام دهيد

اما 2 تا راه داريد
1 - بانك رو با دستور CompactDatabase فشرده كنيد (منظور مثل zip نيست، يعني از بين بردن فضاهايي كه استفاده نمي شوند)
2 - يك ديتابيس خالي ديگه كه توش جدول گزارش تعريف شده درست كنيد و هر بار ازش يك كپي بگيريد و اطلاعات رو تو اون بريزيد و چاپ كنيد و بعد هم پاكش كنيد، اينطوري ديگه نياز به پاك كردن اطلاعات جدول هم نيست

hatefsoltani
سه شنبه 15 اردیبهشت 1388, 23:41 عصر
از همه سروران و اساتيد بزرگوار ممنونم

M.T.P
شنبه 26 تیر 1389, 09:48 صبح
با سلام ، آیا این موضوع برای بانک های Sql هم هست (یعنی نیاز به CompactAndRepair) یا فقط اکسس اینطوریه؟

xxxxx_xxxxx
یک شنبه 27 تیر 1389, 04:28 صبح
با سلام ، آیا این موضوع برای بانک های Sql هم هست (یعنی نیاز به CompactAndRepair) یا فقط اکسس اینطوریه؟
دیتابیس های Access به خاطر ساختار و نحوه داده هایی که ذخیره می کنند به عملیات Compact and Repair نیاز دارند. اما در SQL به هیچ عنوان ساختار ذخیره داده ها مشابه Access نیست. ولی با این حال اگر هدف از Compact and Repair کردن دیتابیس این باشه که جداول دیتابیس رو به نحوی Reset کرده باشید و لاگ هاش هم حذف بشه می تونید از دستور Truncate استفاده کنید.

فکر می کنم اگر این سؤال رو در بخش SQL مطرح کنید، جواب کامل تر و دقیق تری خواهید گرفت.

موفق باشید/

M.T.P
یک شنبه 27 تیر 1389, 11:29 صبح
با تشکر از مدیر محترم.
میشه شکل صحیح دستور Truncate رو عنوان کنید.!؟
سوال دیگه اینکه دستور Truncate دقیقا همون کار compact and repair رو انجام میده؟

mostafag
یک شنبه 27 تیر 1389, 19:34 عصر
سلام دوستان
آیا با کدنویسی هم میشه این عمل Compact and Repair رو انجام داد؟ :متفکر:
اگه میشه لطفا یه نمونه بزارید
با سپاس :لبخندساده:

M.T.P
یک شنبه 27 تیر 1389, 19:45 عصر
آیا با کدنویسی هم میشه این عمل Compact and Repair رو انجام داد؟ :متفکر:
آره میشه:
اول از References گزینه Microsoft Jet and Replication Object رو تیک بزن.



Dim JRO As New JRO.JetEngine
db1 = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\db1.mdb"
db2 = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\db2.mdb;Jet OLEDB:Engine Type=5"
JRO.CompactDatabase db1 , db2

این کد رو جناب Hosna.Soft (http://barnamenevis.org/forum/member.php?u=48204) :قلب: زحمتش رو کشیدند.

xxxxx_xxxxx
دوشنبه 28 تیر 1389, 07:05 صبح
سلام

میشه شکل صحیح دستور Truncate رو عنوان کنید.!؟
Syntax دستور Truncate به شکل زیر هست:

Truncate Table TableName

سوال دیگه اینکه دستور Truncate دقیقا همون کار compact and repair رو انجام میده؟
در سطح جداول، بله. اما کل دیتابیس خیر.

saeid989
سه شنبه 02 آذر 1395, 22:10 عصر
سلام میشه یه نمونه از حذف کامل یک فرم بگذارید ممنون

isaac23
شنبه 06 آذر 1395, 10:19 صبح
سلام میشه یه نمونه از حذف کامل یک فرم بگذارید ممنون

حذف کامل یک فرم ؟؟؟؟؟؟؟ منظورتون چیه از فرم ابجکت های روی فرم رو میگید.؟