PDA

View Full Version : جلوگیری از حذف اطلاعات موجود جدول با شرط عدم همخوانی



iransim
یک شنبه 07 اسفند 1401, 07:34 صبح
سلام دوستان
من با استفاده از کدهای زیر اطلاعات موجود از فایل اکسل رو ( با شرط حذف اطلاعات قبلی ) به بانک اکسس برنامه اضافه میکنم

Dim f As Object
Dim strFile As String
Dim strFolder As String
Dim varItem As Variant
Set f = Application.FileDialog(3)
f.AllowMultiSelect = True


If f.Show Then
For Each varItem In f.SelectedItems
strFile = Dir(varItem)
DoCmd.SetWarnings False
DoCmd.RunSQL "DELETE FROM tblTak"
DoCmd.TransferSpreadsheet acImport, acSpreadsheetTypeExcel12Xml, "tbltak", strFile, True
Me.Requery
DoCmd.SetWarnings True
Next
"اطلاعات از فایل اکسل دریافت شد" msgbox
End If
حال میخوام شرطی بزارم که اگر فیلدهای موجود در جدول اکسل با جدول TblTak اکسس همخوانی نداشته باشد ( Error 2391 ) یک پیام خطا صادر و از حذف اطلاعات موجود در جدول جلوگیری کنه
اگر لطف کنید و راهنمائی کنید ممنون میشم

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


Problem:
If Err.number = 2391 Then
"فیلدهای جدول مبدا و مقصد همخوانی ندارد" msgbox
Exit Sub
End If

amirzazadeh
یک شنبه 07 اسفند 1401, 08:38 صبح
سلام
پیشنهاد می کنم قبل از حذف اطلاعات جدول، با دستور CopyObject یک نسخه از اون رو کپی کنید که در صورت موفق نبودن عملیات می تونید جدول اصلی رو حذف و جدول کپی رو به جای جدول اصلی Rename بکنید.(به نوعی عملیات RollBack شبیه سازی میشه).
..................
موفق باشید

iransim
یک شنبه 07 اسفند 1401, 23:04 عصر
سلام
پیشنهاد می کنم قبل از حذف اطلاعات جدول، با دستور CopyObject یک نسخه از اون رو کپی کنید که در صورت موفق نبودن عملیات می تونید جدول اصلی رو حذف و جدول کپی رو به جای جدول اصلی Rename بکنید.(به نوعی عملیات RollBack شبیه سازی میشه).
..................
موفق باشید

سلام عرض ادب
ضمن تشکر از راهنمائی و توصیه شما ، امکانش هست زحمت ی نمونه رو بکشید ؟

amirzazadeh
دوشنبه 08 اسفند 1401, 07:10 صبح
سلام عرض ادب
ضمن تشکر از راهنمائی و توصیه شما ، امکانش هست زحمت ی نمونه رو بکشید ؟

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

iransim
دوشنبه 08 اسفند 1401, 09:40 صبح
لطفا شما نمونه خودتون رو بارگذاری کنید.تا روی اون نمونه اصلاحات انجام بشه.

سلام و تشکر
نمونه برنامه خدمت شما فقط توضیح اینکه :
1 - فایل اکسل TblProject با بانک اطلاعاتی برنامه همخوانی دارد
2 - فایل اکسل TblProject_new با بانک اطلاعاتی همخوانی ندارد

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

amirzazadeh
دوشنبه 08 اسفند 1401, 12:24 عصر
سلام و تشکر
نمونه برنامه خدمت شما فقط توضیح اینکه :
1 - فایل اکسل TblProject با بانک اطلاعاتی برنامه همخوانی دارد
2 - فایل اکسل TblProject_new با بانک اطلاعاتی همخوانی ندارد

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

iransim
دوشنبه 08 اسفند 1401, 21:16 عصر
سلام، یک فرم به نمونه شما اضافه کردم کنترل کنید ببینید مشکل حل شده.

سلام مجدد و عرض سپاس و تشکر دوست عزیز ، مشکل حذف شدن اطلاعات حل شد
فقط با عرض پوزش ، چنانچه با این دکمه فایل اکسل که حاوی اطلاعات موجود در جدول هست رو مجددا فراخوانی کنیم ( هر دو جدول همخوانی و اطلاعات یکسانی دارند ) به علت تکراری بودن اطلاعات اون رو یک جدول ناهمخوان در نظر گرفته و همان پیام " جداول مبدا و مقصد همخوانی ندارند " را صادر میکند .
امکانش هست راهنمائی کنید چطور در صورت فراخوانی جداول همخوان و با اطلاعات تکراری پیام مناسب اون صادر بشه ؟ ( مثلا پیام " اطلاعات جدول مبدا و مقصد یکسان یا تکراری می باشد . " )

بازم ممنون و سپاسگزارم

amirzazadeh
سه شنبه 09 اسفند 1401, 07:51 صبح
سلام مجدد و عرض سپاس و تشکر دوست عزیز ، مشکل حذف شدن اطلاعات حل شد
فقط با عرض پوزش ، چنانچه با این دکمه فایل اکسل که حاوی اطلاعات موجود در جدول هست رو مجددا فراخوانی کنیم ( هر دو جدول همخوانی و اطلاعات یکسانی دارند ) به علت تکراری بودن اطلاعات اون رو یک جدول ناهمخوان در نظر گرفته و همان پیام " جداول مبدا و مقصد همخوانی ندارند " را صادر میکند .
امکانش هست راهنمائی کنید چطور در صورت فراخوانی جداول همخوان و با اطلاعات تکراری پیام مناسب اون صادر بشه ؟ ( مثلا پیام " اطلاعات جدول مبدا و مقصد یکسان یا تکراری می باشد . " )

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

iransim
سه شنبه 09 اسفند 1401, 11:22 صبح
سلام و صبح به خیر
این خطا به خاطر این هست که شما در جدول TblProject فیلد ID رو از نوع اتونامبر و به شکل کلید اصلی در نظر گرفتید، برای این مورد پیشنهاد من کنترل رکورد به رکورد هست یعنی اینکه اول باید فایل اکسل باز بشه بعد فیلد ID استخراج و از جدول چک بشه در صورت موجود بودن افزودن اتفاق نمیفته و به رکورد بعدی منتقل میشه.سعی میکنم یه نمونه براتون آماده کنم.

سلام و وقت بخیر
سپاس از لطف و پیگیری و قبول زحمت

amirzazadeh
سه شنبه 09 اسفند 1401, 11:22 صبح
سلام و وقت به خیر
نمونه رو براتون آماده کردم، روال کار به این شکل هست که بعد از انتخاب فایل اکسل و باز کردن اون تعداد فیلدهای فایل اکسل با تعداد فیلدهای جدول مقایسه میشه اگر برابر بود روال ادامه پیدا میکنه در غیر اینصورت متوقف میشه.
برای بروز رسانی ابتدا رکوردها از فایل اکسل خونده میشه اگر در جدول اکسس وجود داشت (کنترل بر اساس فیلد ID) رد میشه وگرنه به لیست باکس اضافه میشه. وقتی لیست باکس تکمیل شد با زدن دکمه بروز رسانی رکورد های استخراج شده به جدول اضافه میشه(با استفاده از رکوردست) فقط توجه داشته باشید چون کدهای ارائه شده با تکنولوژی ADO نوشته شده باید این کتابخانه رو به رفرنس برنامه اصلی خودتون اضافه کنید.

iransim
سه شنبه 09 اسفند 1401, 21:34 عصر
سلام و وقت به خیر
نمونه رو براتون آماده کردم، روال کار به این شکل هست که بعد از انتخاب فایل اکسل و باز کردن اون تعداد فیلدهای فایل اکسل با تعداد فیلدهای جدول مقایسه میشه اگر برابر بود روال ادامه پیدا میکنه در غیر اینصورت متوقف میشه.
برای بروز رسانی ابتدا رکوردها از فایل اکسل خونده میشه اگر در جدول اکسس وجود داشت (کنترل بر اساس فیلد ID) رد میشه وگرنه به لیست باکس اضافه میشه. وقتی لیست باکس تکمیل شد با زدن دکمه بروز رسانی رکورد های استخراج شده به جدول اضافه میشه(با استفاده از رکوردست) فقط توجه داشته باشید چون کدهای ارائه شده با تکنولوژی ADO نوشته شده باید این کتابخانه رو به رفرنس برنامه اصلی خودتون اضافه کنید.

سلام ، شبتون بخیر
بسیار سپاسگزارم ، خیلی زحمت کشیدید ، دستتون درد نکنه