PDA

View Full Version : سوال: چگونه بصورت انتخابی همه رکوردهای جداول یک فایل را حذف نماییم ؟



narpco
جمعه 14 آذر 1399, 00:00 صبح
سلام دوستان
فایلی داریم با چند جدول که به هم مرتبط هستند و رابطه پدر فرزندی دارند و قواعد حذف رکوردهای بین پدر و فرزند باید رعایت شود یعنی اول باید فرزند پاک شود بعد پدر

اول همه فرم ها و جداول بسته شود بجز فرم مورد نظر ما ...که داریم در اون عملیات انجام میدیم .
هدف ما اینه که در فرم تعبیه شده در فایل –و لیست باکس -لیست جداول رو ببینیم
نحوه نمایش چیزی شبیه به عکس زیر باشد که بتوان جدول مورد نظر رو انتخاب کرد
بعد بتوانیم جدول مورد نظر را انتخاب کنیم یا گزینه select all داشته باشیم و بتوانیم همه جداول رو انتخاب کنیم
و با زدن کلید پایین صفحه بتواینم جداول انتخاب شده را خالی کنیم
نکته اینه که اگر جدول پدر بود اول باید مشخص کنه که ابتدا جدول فرزندش که مثلا جدول x هست باید پاک بشه
میخواهیم در لیست باکس جلوی نام هر جدول تعداد رکوردهای جدول را هم بتونیم ببینیم

نکته مهم در این فایل استفاده از کدهایی استکه جناب eb_1345 زحمت کشیدن نوشتن در پست مرتب سازی شماره های id و aoutonumber که اینجا به شدت نیاز هست که بعد از اینکه رکوردها پاک شد شماره ای مرتب سازی بشه در صورت نیاز ....که دوباره از شماره 1 برای id شروع کنه برای رکورد های جدید .......

در این مسیر اگر پیشنهادی برای بهتر شدن عملکرد این توالی دارید بسیار خوشحال میشم بفرمایید یا نکته ای که من فراموش کردم بگم ...این موضوع تو ذهن من یک ایده هست و شاید کمی خام باشه که با کمک شما دوستان نتیجه قطعا عالی خواهد شد.

ولی در برنامه هایی که تعداد جدول هاش زیاده واقعا نیاز هست ....که فرمی باشه که این عملیات رو کنترل کنه ..

با سپاس----از اینکه در این بحث مشارکت میکنید از شما ممنونم....با مشارکت در بحث ها همه ما بیشتر چیز یادمی گیریم ....

عکس نمونه لیست باکس که باید چیزی شبیه به این باشه یا نزدیک به این مدلهای مختلف گذاشتم برای ایده گرفتن
https://s16.picofile.com/file/8416262384/zab.jpg


فایل تمرین
https://s16.picofile.com/file/8416262326/del_table.rar.html

padide55
جمعه 14 آذر 1399, 11:27 صبح
به نظرم
کوئری حذف جداول درست کنید
به ترتیب مورد نظر شماره گذاری کنید
بعد با یک باتن .به ترتیب شماره کد کوئری رو بدین که اجرا بشه .
دونه دونه همه حذف بشه .
فقط اتونامبرها صفر نمیشه .

سوال اول شما

لیست جداول رو در یک لیست باکس با دو ردیف بیاره .
این رو اگر جستجو کنید به راحتی پیدا میکنید.
اما اینکه ترتیبش چجوری باشه و بر اساس ریلیشن مرتب کنه مبحث دیگری است .

narpco
جمعه 14 آذر 1399, 12:08 عصر
لیست جداول رو در یک لیست باکس با دو ردیف بیاره .


سلام ممنون لطف میکنید کدش رو یا لینک بدین من خیلی گشتم ...


بیشتر مثالها و منابع در مورد ارتباط یک لیست باکس به جدول خاص یا نشان دادن جداول در کومبو باکس و بعد مشاهده رکورد های ان در لیست باکس است که هیچ کدام هدف ما نیست اینکه بتوانیم رکوردهای داخل جداول رو ابتدا در لیست باکس دیگری ببینم ایده خوبیه منتها هدف کلی ابتدا دیدن لیست جداول است که قطعه کدی که درست نشون بده من چیزی پیدا نکردم ......نکته مهم دیگه این که این عملیات باید داخل فایل جاری ه باز هست و داریم داخلش کار می کنیم انجام بده و ادرس فیزیکی فایل اکسس رو باید خودش بدست بیاره .........که در اکثر منابع این بحث هست که باید ادرس رو دستی بدین و اینکه فایل مورد نظرتون بسته باشه ...

دنبال ایجاد یک همچین چیزی هستم در لیست باکس
https://s17.picofile.com/file/8416299418/S2S2S2S.png

eb_1345
جمعه 14 آذر 1399, 14:18 عصر
سلام دوستان
فایلی داریم با چند جدول که به هم مرتبط هستند و رابطه پدر فرزندی دارند و قواعد حذف رکوردهای بین پدر و فرزند باید رعایت شود یعنی اول باید فرزند پاک شود بعد پدر

اول همه فرم ها و جداول بسته شود بجز فرم مورد نظر ما ...که داریم در اون عملیات انجام میدیم .
هدف ما اینه که در فرم تعبیه شده در فایل –و لیست باکس -لیست جداول رو ببینیم
نحوه نمایش چیزی شبیه به عکس زیر باشد که بتوان جدول مورد نظر رو انتخاب کرد
بعد بتوانیم جدول مورد نظر را انتخاب کنیم یا گزینه select all داشته باشیم و بتوانیم همه جداول رو انتخاب کنیم
و با زدن کلید پایین صفحه بتواینم جداول انتخاب شده را خالی کنیم
نکته اینه که اگر جدول پدر بود اول باید مشخص کنه که ابتدا جدول فرزندش که مثلا جدول x هست باید پاک بشه
میخواهیم در لیست باکس جلوی نام هر جدول تعداد رکوردهای جدول را هم بتونیم ببینیم

نکته مهم در این فایل استفاده از کدهایی استکه جناب eb_1345 زحمت کشیدن نوشتن در پست مرتب سازی شماره های id و aoutonumber که اینجا به شدت نیاز هست که بعد از اینکه رکوردها پاک شد شماره ای مرتب سازی بشه در صورت نیاز ....که دوباره از شماره 1 برای id شروع کنه برای رکورد های جدید .......

در این مسیر اگر پیشنهادی برای بهتر شدن عملکرد این توالی دارید بسیار خوشحال میشم بفرمایید یا نکته ای که من فراموش کردم بگم ...این موضوع تو ذهن من یک ایده هست و شاید کمی خام باشه که با کمک شما دوستان نتیجه قطعا عالی خواهد شد.

ولی در برنامه هایی که تعداد جدول هاش زیاده واقعا نیاز هست ....که فرمی باشه که این عملیات رو کنترل کنه ..

با سپاس----از اینکه در این بحث مشارکت میکنید از شما ممنونم....با مشارکت در بحث ها همه ما بیشتر چیز یادمی گیریم ....

عکس نمونه لیست باکس که باید چیزی شبیه به این باشه یا نزدیک به این مدلهای مختلف گذاشتم برای ایده گرفتن
https://s16.picofile.com/file/8416262384/zab.jpg


فایل تمرین
https://s16.picofile.com/file/8416262326/del_table.rar.html



سلام
خوشم میاد، آقای ناصریان همیشه با یک تیر چند نشون میزنند . در یک سؤال چند سؤال دیگر هم می پرسند. :لبخندساده:
سؤالات پرسیده شده در این تاپیک :
1- بسته شدن کلیه فرم ها و جداول به جز فرم فعال(فرم جاری)
2- ایجاد لیست جداول
3- ایجاد گزینه SelectAll یا UnselectAll برای انتخاب همه یا از انتخاب خارج کردن همه انتخاب ها
4- حذف کلیه رکوردهای جداول انتخاب شده در لیست باکس
5- قبل از اقدام به حذف و خالی کردن جدول اعلام شود که ابتدا رکوردهای جدول فرزند باید حذف شود
6- درج تعداد رکورد هر جدول در مقابل نام آنها
7- ریست شدن فیلد اتونامبر جداول خالی شده

پاسخ به همه این سوالات در یک تاپیک شاید خارج از حوصله بیشتر دوستان( البته معمولاً دو تا دوست :لبخندساده:) باشد و بهتر است هرکدام از این سؤالها در یک تاپیک جداگانه پرسیده شود
علی ایحال انجام تمام موارد ذکر شده مقدور و قابل پیاده شدن میباشد.
فقط یک سؤال :
پرسیده ای که قبل از حذف رکوردهای جدول پدر رکورد های جدول فرزند باید حذف شود . چه دلیلی برای اینکار در برنامه شما وجود دارد ؟ ضمن اینکه یک گزینه برای حذف رکورد از جدول فرزند بطور اتوماتیک بعد از حذف رکورد از جدول پدر وجود دارد ( گزینه سوم قسمت Edit Relationships)
ضمناً آیا میخواهید لیست تمام جداول در لیست باکس درج گردد یا فقط جداولی که با هم در ارتباط هستند ؟

eb_1345
جمعه 14 آذر 1399, 16:40 عصر
بنظرم بلحاط جذاب بودن بجای استفاده از لیست باکس از یک فرم ادامه دار (Continuous Forms) استفاده شود خیلی بهتر است . در Continuous Forms میتوان ستون ها رو راست چین کرد ، برای انتخاب هر ردیف یک چک باکس در آن قرار داد(همانند تصویری که قرار داده بودید) و برای حذف ردیف هائی که چک باکس آنها تیک دار شده است را انتخاب کرد . و در کل در Continuous Forms نسبت به لیست باکس آزادی عمل بیشتری میتوان داشت
راستی یک کار جذاب دیگر هم میتوان انجام داد . بجای نمایش نام اصلی جداول که بصورت انگلیسی است نام فارسی آنها رو به نمایش گذاشت . برای اینکار باید در قسمت Veiw Properties جدول نام فارسی جدول مربوطه را وارد کرد و با کد نویسی نام فارسی را در یک ستون جدول اضافه نمود

narpco
جمعه 14 آذر 1399, 17:33 عصر
سلام روز بخیر و ممنون از دقت نظر شما برای اینکه این همه نکته از نوشته های بنده استخراج می کنید که بنده اینو به فال نیک میگیرم و اینکه شما یا دقت مسئله رو مورد مطالعه قرار میدین .....

خیلی ادعای برنامه نویسی ندارم ...اینو دیگه باید تا بحال متوجه شده باشید ولی چون مرتب در حال برنامه نوشتن هستم و چون منبع اموزشی مناسبی هم نداریم الحمدلله باید با ازمون و خطا جلو برم .....سئوالاتی برای م پیش میاد که سعی میکنم اول در منابع فارسی یا انگلیسی بگردم و درنهایت تلاش اگر بجایی نرسیدم از دوستان میپرسم

در هر حال سئوالات من جنبه استفاده عملی تو یک پروزه داره ممکنه برای بعضی مهم باشه بعضی هم نه ....که این مسئله ما نیست ولی بالاخره یک تلاش اولیه بوده که در مسیرش به این سئوال رسیدیم .

اما شما بعنوان یک کننده کار میدونید که وقتی میخواهید به هدفی برسید باید چند روال رو طی کنید تا بهش برسید من هدف برام مهمه و بیان میکنم حالا اگر خودم تونستم مسئله رو حل میکنم نتونستم مزاحم شما میشم ....و اگر سئوالی اینجا مطرح می کنم قطعا بدونید اگر خودم میتونستم ..انجام میدادم و نمی پرسیدم ....اما نکته مهمی که وجود داره اینه که من معتقدم طرح مسئله هم باید بین جمع باشه و نظرات چند نفر دیگه رو هم شنید شاید دیگران راه های بسیار کوتاه تر و عاقلانه تری به دلیل تجربه بیشتر به ما ارائه بدن ...

اما بخاطر این کل موضوع رو یک تاپیک کردم که تجمیعی به آموزش و بررسی چند مطلب مزتبط بهم بپردازیم ....حالا اگر شدنی هست ادامه بدیم ..اگرهم نه که .....حتما خیری توش هست

موضوع لیست باکس که فرمودین رو من خیلی اتفاقی بهش برخوردم .....اصلا نمیدونم چطوری درست میشه لیست باکس + چک باکس ولی گویا ACTIVE X هست که من بلد نیسیتم باهاش کار کنم ....

دلیل خاصی هم برای انتخاب لیست باکس نیست هر چیزی میتونه جایگزینش باشه بشرطی که هدف رو دنبال کنه

و اینکه فرمودین چرا رابطه رو کنترل کنه ...فقط بخاطر کاربر بی اطلاع که نزنه اطلاعات رو بترکونه :)) حداقل پیامی بده که این جدول با جدول دیگری در ارتباط هست مثلا جدول AAA بیشتر داستان اخطار دادن هست اگر فکر میکنید نمیشه حذف می کنیم ...

اول هم عرض کردم این موضوع تو ذهن من یک ایده اولیه بود با بیانش به شما تا حالا 6 مورد ایده جدید شکل گرفته و من از همین لذت میبرم .......حداقل اگر نشد میدونم که راه های دیگری هم برای رسیدن به خدا هست ....

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

و درمورد اون یکی سئوالتون هدف نمایش همه جداول هست با رابطه یا بی رابطه

نام انگلیسی-فارسی -تعداد رکورد و حتی نمایش رکوردهای داخل جدول در یک لیست باکس مجزا اینا همش ایده های عالی هستن ..... بسیار هم ممنونم از دقت نظر شما .....


یک جمله هم اضافه کنم که فرمودین :

پاسخ به همه این سوالات در یک تاپیک شاید خارج از حوصله بیشتر دوستان( البته معمولاً دو تا دوست
https://barnamenevis.org/images/smilies/yahoo/106.gif
) باشد و بهتر است هرکدام از این سؤالها در یک تاپیک جداگانه پرسیده شود



...مگر دیگران سئوال میپرسن ما اعتراض می کنیم و میگیم این از حوصله ما خارج است ؟!؟!!!! اگر حوصله نداریم که نباید برنامه نویسی کنیم ...این سایت بستر گفتگو هست حالا هر کی مجازه تاپیکی ایجاد کنه و هر کی هم دلش خواست میاد تو بحث ...بقیه هم تشویق میکنن .....مثل همیشه ...دیگه مشکلی فک نکنم باشه .....:)))) در مورد حوصله خودم اینقدر بگم که از صبح یک عملیات DLOOKUP انجام نمیشه و من تا یک ساعت پیش درگیر بودم یعنی از 7 صبح تا 5 عصر بدون اغراق تافهمیدم یک حرف C ناقابل در تایپ اشتباه شده و بالااخره موضوع حل شد ....شما هم که سالها شغلتون این بوده که اختلاف یک ریال رو تو حسابها پیدا کنید مثل من ......پس میریم جلو امید به خدا ...همین امروز که کنار هم هستیم غنیمت شمریم ....
:قلب:

eb_1345
جمعه 14 آذر 1399, 18:19 عصر
سلام روز بخیر و ممنون از دقت نظر شما برای اینکه این همه نکته از نوشته های بنده استخراج می کنید که بنده اینو به فال نیک میگیرم و اینکه شما یا دقت مسئله رو مورد مطالعه قرار میدین .....

خیلی ادعای برنامه نویسی ندارم ...اینو دیگه باید تا بحال متوجه شده باشید ولی چون مرتب در حال برنامه نوشتن هستم و چون منبع اموزشی مناسبی هم نداریم الحمدلله باید با ازمون و خطا جلو برم .....سئوالاتی برای م پیش میاد که سعی میکنم اول در منابع فارسی یا انگلیسی بگردم و درنهایت تلاش اگر بجایی نرسیدم از دوستان میپرسم

در هر حال سئوالات من جنبه استفاده عملی تو یک پروزه داره ممکنه برای بعضی مهم باشه بعضی هم نه ....که این مسئله ما نیست ولی بالاخره یک تلاش اولیه بوده که در مسیرش به این سئوال رسیدیم .

اما شما بعنوان یک کننده کار میدونید که وقتی میخواهید به هدفی برسید باید چند روال رو طی کنید تا بهش برسید من هدف برام مهمه و بیان میکنم حالا اگر خودم تونستم مسئله رو حل میکنم نتونستم مزاحم شما میشم ....و اگر سئوالی اینجا مطرح می کنم قطعا بدونید اگر خودم میتونستم ..انجام میدادم و نمی پرسیدم ....اما نکته مهمی که وجود داره اینه که من معتقدم طرح مسئله هم باید بین جمع باشه و نظرات چند نفر دیگه رو هم شنید شاید دیگران راه های بسیار کوتاه تر و عاقلانه تری به دلیل تجربه بیشتر به ما ارائه بدن ...

اما بخاطر این کل موضوع رو یک تاپیک کردم که تجمیعی به آموزش و بررسی چند مطلب مزتبط بهم بپردازیم ....حالا اگر شدنی هست ادامه بدیم ..اگرهم نه که .....حتما خیری توش هست

موضوع لیست باکس که فرمودین رو من خیلی اتفاقی بهش برخوردم .....اصلا نمیدونم چطوری درست میشه لیست باکس + چک باکس ولی گویا ACTIVE X هست که من بلد نیسیتم باهاش کار کنم ....

دلیل خاصی هم برای انتخاب لیست باکس نیست هر چیزی میتونه جایگزینش باشه بشرطی که هدف رو دنبال کنه

و اینکه فرمودین چرا رابطه رو کنترل کنه ...فقط بخاطر کاربر بی اطلاع که نزنه اطلاعات رو بترکونه :)) حداقل پیامی بده که این جدول با جدول دیگری در ارتباط هست مثلا جدول AAA بیشتر داستان اخطار دادن هست اگر فکر میکنید نمیشه حذف می کنیم ...

اول هم عرض کردم این موضوع تو ذهن من یک ایده اولیه بود با بیانش به شما تا حالا 6 مورد ایده جدید شکل گرفته و من از همین لذت میبرم .......حداقل اگر نشد میدونم که راه های دیگری هم برای رسیدن به خدا هست ....

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

و درمورد اون یکی سئوالتون هدف نمایش همه جداول هست با رابطه یا بی رابطه

نام انگلیسی-فارسی -تعداد رکورد و حتی نمایش رکوردهای داخل جدول در یک لیست باکس مجزا اینا همش ایده های عالی هستن ..... بسیار هم ممنونم از دقت نظر شما .....



اول تصویر ضمیحه رو ملاحظه بفرما
من الآن جداولی که در برنامه شما با هم در ارتباط هستند با کد نویسی استخراج و در لیست باکس فوق قرار دادم
ادامه در پست بعدی .....

eb_1345
جمعه 14 آذر 1399, 21:11 عصر
ازتابع زیر در هرکجای برنامه برای درج نام جداول در لیست باکس یا کمبو باکس میتوانید استفاده کنید
RowSourceType لیست باکس یا کمبوباکس باید در حالت Value List باشد
فراخوانی این تابع هم بصورت Me.Combo1.RowSource = GetTableList است :
فرض بر اینست که نام کمبو باکس شما Combo1 باشد



Function GetTableList() As String
Dim db As Database
Dim tdf As TableDef
Dim strList As String
Set db = CurrentDb
For Each tdf In db.TableDefs
If Left(tdf.Name, 4) <> "MSys" Then
strList = strList & tdf.Name & ";"
End If
Next tdf
GetTableList = strList
Set tdf = Nothing
db.Close
Set db = Nothing
End Function


برای نمایش نام جداول در یک کوئری از کد اسکیول زیر استفاده کن


SELECT MSysObjects.Name AS table_name FROM MSysObjects WHERE (((Left([Name],1))<>"~") AND ((Left([Name],4))<>"MSys") AND ((MSysObjects.Type) In (1,4,6)) AND ((MSysObjects.Flags)=0)) order by MSysObjects.Name

همین کد رو هم میتوانید مستقیماً در RowSource لیست باکس و کمبو باکس وارد کنید
RowSourceType لیست باکس یا کمبوباکس باید در حالت Table/Query باشد

eb_1345
جمعه 14 آذر 1399, 21:44 عصر
موضوع لیست باکس که فرمودین رو من خیلی اتفاقی بهش برخوردم .....اصلا نمیدونم چطوری درست میشه لیست باکس + چک باکس ولی گویا ACTIVE X هست که من بلد نیسیتم باهاش کار کنم ....




لیست ویوو ..............

narpco
شنبه 15 آذر 1399, 08:05 صبح
سلام و ممنون از راهنمایی های شما ...صبحتون بخیر روزتون هم مبارک ......15 آذر روز حسابدار بر همه همکاران خوبم مبارک ...

padide55
شنبه 15 آذر 1399, 14:06 عصر
سلام

مجموعه ای از لیستها
لیست جداول موجود در فایل
لیست فیلدهای هر جدول
انتخاب از لیست فیلدها

برای آموزش . من جمله خودم .

eb_1345
شنبه 20 دی 1399, 20:16 عصر
اول تصویر ضمیحه رو ملاحظه بفرما
من الآن جداولی که در برنامه شما با هم در ارتباط هستند با کد نویسی استخراج و در لیست باکس فوق قرار دادم
ادامه در پست بعدی .....
سلام آقای ناصریان !
پیرو پیام خصوصی ، متاسفانه موفق به پیدا کردن فایل قبلی که آماده کرده بودم نشدم . ان شاءالله طی چند روز آینده نمونه ای دیگر براتون آماده و خدمتتون ارسال می کنم
یا علی

eb_1345
شنبه 20 دی 1399, 20:41 عصر
سلام آقای ناصریان !
پیرو پیام خصوصی ، متاسفانه موفق به پیدا کردن فایل قبلی که آماده کرده بودم نشدم . ان شاءالله طی چند روز آینده نمونه ای دیگر براتون آماده و خدمتتون ارسال می کنم
یا علی
ضمناً برای تشخیص بهتر کاربر در حذف رکورد جداول مد نظر ، بنظر من بهتر است بجای نمایش نام لاتین جداول از نام فارسی آنها در لیست باکس یا سابفرم (ترجیحاً) استفاده شود.
بنابراین اگر اینکار رو لازم میدانی مطابق تصویر ضمیمه اسم فارسی هر کدام از جداول را در قسمت Description آن درج کن و فایل تکمیلی را در اینجا قرار بده

narpco
یک شنبه 21 دی 1399, 00:09 صبح
سلام چشم در حال تهیه هستم ولی همون نام انگلیسی جداول کفایت می کنه .....ولی بازم چشم من امر شما رو انجام میدم

لینک نمونه فایل با درج table_description

https://s17.picofile.com/d/8420774076/152936b5-0e67-4179-aa43-131cf600756d/DEL_TABLES_new.rar

با سپاس از حمایت شما

eb_1345
یک شنبه 21 دی 1399, 19:39 عصر
[QUOTE=narpco]
مورد اخیر در مورد حذف رکوردهای داخل جداول به این دلیل هست که شما میخوای برنامه تون ببرین جایی نصب کنید و میخواهید جداول رو خالی کنید که اماده استفاده مجدد باشه و به ذهن من رسید که چطور می تونیم کل اطلاعات داخل جداول رو با انتخاب حذف کنیم که مجبور نباشیم که دونه دونه بگردیم تو 200 تا جدول یک برنامه ..مخصوصا اینکه در جداول 30000 رکورد باشه که قطعا پاک کردن دونه دونه با کلیدهای کنترلی روی فرم معنی نداره .......و باید کل جدول رو یکجا پاک کرد....حالا یا ما فرمی داریم که این کار رو اتوماتیک انجام میده یا باید دستی انجام بدیم ......اینه که مزاحم شما شدم برای این سئوال ...


سلام
برای حذف اطلاعات در چهارحالت زیر کد وجود دارد :
1- حذف تکی هر رکوردی یا رکوردهائی خاص در یک جدول
2- حذف رکورد یا رکوردهائی خاص در یک یا چند جدول مد نظر
3- حذف کلی رکوردهای یک یا چند جدول خاص
4-حذف کلی همه رکوردها در همه جداول دیتابیس

انجام هر کدام از موارد فوق نیاز به سه یا چهار خط کد نویسی دارد
میتوان در برنامه یک منو به منو های برنامه تحت عنوان «حذف کلی اطلاعات دیتابیس» اضافه کرد و در این منو بدون اجرای هیچ فرمی و صرفاً از طریق تائید توسط یک مسیج باکس نسبت به حذف کل اطلاعات جداول دیتابیس اقدام نمود.

padide55
یک شنبه 21 دی 1399, 20:07 عصر
سلام در مورد ایتم ۴ داریم

کد جهت حذف تمام اطلاعات جداول در دیتابیس . تست شد


Private Sub Command11_Click()
On Error GoTo Error_TruncateTables

Dim DB As DAO.Database
Dim TDF As DAO.TableDef
Dim strSQL_DELETE As String

Set DB = CurrentDb()

For Each TDF In DB.TableDefs

If Not (TDF.Name Like "MSys*" Or TDF.Name Like "~*" Or Len(TDF.Connect) > 0) Then
strSQL_DELETE = "DELETE FROM " & TDF.Name
DB.Execute strSQL_DELETE

End If
Next

MsgBox "Tables have been truncated", vbInformation, "TABLES TRUNCATED"
DB.Close

Exit_Error_TruncateTables:
Set TDF = Nothing
Set DB = Nothing
Exit Sub

Error_TruncateTables:
Select Case Err.Number
Case 3376
Resume Next 'Ignore error if table not found
Case 3270 'Property Not Found
Resume Next
Case Else
MsgBox Err.Number & amp, ": " & amp, Err.Description
Resume Exit_Error_TruncateTables
End Select
End Sub





در مورد ایتم سوم
حالا فرض بر این است که ما یک سری جداول ثابت داریم و متاسفانه در زمان نام گذاری جداول از اختصار خاصی هم استفاده نکرده ایم که مثلا در همان شرط درون کد بنویسیم
اگر نام جدول شامل مثلا tbllist باشد .
وما جداولی با نامهایی مثلا
tbllistsity
tbllistmarakez
tbllistostanha

داریم که نباید پاک بشه .
اگر نام گذاری خاصی داشته باشیم
در شرط مربوط به حذف اعلام میکنیم از جداولی به این شکل هم صرف نظر کن
همانگونه که میگوئیم از جداول ،sysو ~ صرف نظر کن.

حالا یک راه حل میخوایم
......................
چرا یک جدول ایجاد نکنیم شامل جداولی که باید خالی شوند .به ترتیب .
و در فرمول بالا گنجانده شود که بجای جستجو و حذف اطلاعات تمام جداول .
فقط جداول موجود در جدول به ترتیب خالی بشوند ؟
ضمنا میتوان لیست جداول را بر اساس پست ۷ تهیه کرد و در جدولی ذخیره نمود .با چک باکس تعیین کرد که پاک شود .یا پاک نشود .
مثال جدول لیست جداول قابل حذف
کد جدول. نام جدول. نوع جدول. پاک شود
۱. لیست شهرها. والد . no
2. جدول پرسنل. والد . yes
۳.جدول کارکرد. فرزند. yes

حالا با یک کلیک طبق جدول تمام موارد yes خالی بشه
اینجوری دیگه هم از قبل موارد قابل حذف مشخص شده و هم ممکنه فایل رو به واحدی بدیم که پرسنل رو نخواد پاک کنه . اونجا فقط بره فرم تعیین موارد حذف. رو باز کنه و پرسنل رو noقرار بده و ذخیره . ونهایتا اجرای خالی نمودن دیتابیس .
و اتونامبر ها هم صفر بشه با این کد .
کد صفر کردن اتونامبر



DoCmd.RunSQL "ALTER TABLE " & "tablename" & " ALTER COLUMN " & "autoIdfileldname" & " COUNTER(1,1); "


در مورد ایتم ۱ و ۲
در کد حذف جداول با تغییر خط زیر میتوان محدوده حذف جدول رو هم تعیین کرد .


strSQL_DELETE = "DELETE FROM " & TDF.Name

DB.Execute strSQL_DELETE



حالا هدف ایتم سوم هست .
تعیین لیست جداول قابل حذف که طبق
پست 11 (https://barnamenevis.org/showthread.php?563591-%DA%86%DA%AF%D9%88%D9%86%D9%87-%D8%A8%D8%B5%D9%88%D8%B1%D8%AA-%D8%A7%D9%86%D8%AA%D8%AE%D8%A7%D8%A8%DB%8C-%D9%87%D9%85%D9%87-%D8%B1%DA%A9%D9%88%D8%B1%D8%AF%D9%87%D8%A7%DB%8C-%D8%AC%D8%AF%D8%A7%D9%88%D9%84-%DB%8C%DA%A9-%D9%81%D8%A7%DB%8C%D9%84-%D8%B1%D8%A7-%D8%AD%D8%B0%D9%81-%D9%86%D9%85%D8%A7%DB%8C%DB%8C%D9%85-%D8%9F&p=2437590&viewfull=1#post2437590)کار سختی نیست .
ولی البته موضوع لیست نمودن به ترتیب فرزند و والد.و مشاهده در یک کانتینیوزفرم هست .

padide55
یک شنبه 21 دی 1399, 20:49 عصر
برای ایتم سوم
به نظرم بعد از لیست کردن جداول در یک جدول و مشاهده در یک فرم
بشه کد sal رو در یک رکوردست گذاشت
که به ترتیب .نام جدول رو در sqlقراربده و حذف کنه و بره به رکورد بعدی .

به این صورت در فرم مربوطه به لیست جداول موجود. تست شد
یک باتن میگذاریم با کد زیر




Dim rs As Recordset
Dim strSQL_DELETE As String
Set rs = Me.Form.Recordset
Dim aa As Integer
Dim i As Integer
aa = rs.RecordCount

rs.MoveFirst
For i = 1 To aa
If checkboxdell = True Then
strSQL_DELETE = "DELETE * FROM " & txttablname
Dim DB As DAO.Database
Set DB = CurrentDb()

DB.Execute strSQL_DELETE
'صفر کردن autonumber

'DoCmd.RunSQL "ALTER TABLE " & txttablname & " ALTER COLUMN " & "autoIdfileldname" & " COUNTER(1,1)"
End If

rs.MoveNext
Next

MsgBox " done"



ضمنا در فرم میشه نام فیلد اتونامبر که باید صفر بشه رو هم قرار داد .
چون ممکنه دربعضی موارد نام فیلد اتونامبر رو عوض کرده باشیم .
مثال

۱. لیست شهرها. والد . no.id
2. جدول پرسنل. والد . yes.idpersonel
۳.جدول کارکرد. فرزند. yes.id

.
یک سوال اساسی هم میمونه .اینکه اگر اتونامبر به صورت ریلیشن باشه هم صفر بشه .

narpco
یک شنبه 21 دی 1399, 23:39 عصر
[QUOTE=eb_1345]

سلام
برای حذف اطلاعات در چهارحالت زیر کد وجود دارد :
1- حذف تکی هر رکوردی یا رکوردهائی خاص در یک جدول
2- حذف رکورد یا رکوردهائی خاص در یک یا چند جدول مد نظر
3- حذف کلی رکوردهای یک یا چند جدول خاص
4-حذف کلی همه رکوردها در همه جداول دیتابیس

انجام هر کدام از موارد فوق نیاز به سه یا چهار خط کد نویسی دارد
میتوان در برنامه یک منو به منو های برنامه تحت عنوان «حذف کلی اطلاعات دیتابیس» اضافه کرد و در این منو بدون اجرای هیچ فرمی و صرفاً از طریق تائید توسط یک مسیج باکس نسبت به حذف کل اطلاعات جداول دیتابیس اقدام نمود.

----------
سلام و ممنون از توضیحات شما
هدف ما شماره 3 هست با این افزونه که بتوان در یک لیست انتخابشون کرد

هدفمون از اینکه پدر و فرزند رو مشخض کنه اینه که اکسس خطا نده که اول باید فرزند رو خالی کنید بعد پدر رو ....(دلیل)

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

به نظر من برنامه نویس باید به همه موارد و اگر و اما ها فکر کنه بعد فرم طراحی کنه


هدفم این بو.د که حالا که داریم وقت میزاریم فرم شکیل داشته باشیم با اطلاعات مشخص و حالت انتخاب برای کاربر ...

حالا در نهایت اگر این کار شدنی هست انجام بدیم و اگر فکر میکند وقت تلف کردنه که بهتره به بحث پایان بدیم ......
من هیچ اصراری ندارم اگر دوستان فکر میکنند که انجام این کار با این روش اشتباه است .....

بسیار هم ممنونم از زمانی که اختصاص دادید....

eb_1345
دوشنبه 22 دی 1399, 00:29 صبح
در ضمیمه تصویر AllTables.png نمایش دهنده کل جداول و تصویر RelatedTables.png نمایش دهنده جداولی که با هم در ارتباط هستند میباشد.
مشکلی که در ارتباط با حذف اطلاعات جدول فرزند قبل از حذف اطلاعات جدول پدر پیش می آید اینست که قاعدتاً عملیات حذف باید از طریق جدول AllTables که در آن نام جداول تکراری وجود ندارد انجام گردد در صورتیکه که در جدول RelatedTables نام جداول تکراری وجود دارد ( بعلت اینکه ممکن است یک جدول با چند جدول در ارتباط باشد). و در جدول AllTables در حالی که امکان مشخص کردن نوع جدول (از لحاظ پدر و فرزندی)ونسبت آن وجود دارد ولی در انجام عملیات حذف بصورت فوق مشکل ایجاد میشود .
بنظر بنده بهترین و منطقی ترین کار این است که وقتی برنامه شما کاملاً تکمیل شد نام جداولی که دارای اطلاعات ثابت و پایه میباشد را مشخص نموده و آنها را در عملیات خام نمودن اطلاعات قبلی از حلقه حذف خارج نمود.

eb_1345
دوشنبه 22 دی 1399, 05:02 صبح
برای خام کردن بانک اطلاعات میتوان به 2 روش زیر اقدام نمود:



حذف اطلاعات همه جداول به استثناء جداولی که دارای اطلاعات اولیه ای میباشند



روش دوم خام نمودن اطلاعات با بازیابی بانک اطلاعاتی خام

در این روش برای دفعه نخست قبل از استفاده از برنامه و ورود اطلاعات، یک فایل پشتیبان از بانک اطلاعاتی تهیه میشود . طبیعتا چون اطلاعاتی وارد بانک اطلاعاتی نشده است، این فایل پشتیبان خام است و اطلاعاتی در آن وجود ندارد. با این کار کاربر یا استفاده کننده از برنامه هرگاه بخواهد بانک اطلاعاتی برنامه را خام کند، می تواند به راحتی فایل پشتیبان را که فاقد اطلاعات هست، بازیابی نمایید.