PDA

View Full Version : سوال: نحوه کنترل یه فیلد با توجه به محدوده مقادیر ثبت شده در فیلد دیگر



hf.farhadi
دوشنبه 27 شهریور 1391, 23:49 عصر
با سلام و عرض ارادت خدمت تمامی دوستان و اساتید محترم
من یه فیلدی دارم که سری ساخت محصول رو در اون ثبت میکنم

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

ممنون میشم دوستان راهنمایی بفرماین که اینگونه موارد رو با چه روشی باید کنترل کرد (در نمونه پیوست در فرم SUubOrginal توضیحات لازم خدمت دوستان گرامی ارائه شده است)

Abbas Amiri
سه شنبه 28 شهریور 1391, 00:52 صبح
از کد زیر استفاده کنید



If InStr(0, CodeOrginal, CodeSubOrginal, vbTextCompare) Then
' Right
Else
' Wrong
End If

hf.farhadi
سه شنبه 28 شهریور 1391, 15:25 عصر
ممنونم جناب امیری بابت پاسختون
من کد شما رو به شکل زیر استفاده کردم ولی Error تصویر ضمینه رو برمیگردونه
جسارتاً یه سئوال:
آیا هدف استفاده از تابع InStr اینه که رشته موجود در فیلد CodeSubOrginal رو در فیلد CodeOrginal جستجو بکنه و در صورت موجود بودن مقدار اون رو برگردونه . (تا جایی که من اطلاع دارم اینگونه کاربردی داره)
اگه به این شکل است تکلیف مقادیری که در مابین دو مقدار قرار دارن ولی ثبت نشده اند چه میشود

مثلاً در ID شماره 255 سریال محصول با کد C/001 شروع میشه و با کد C/005 خاتمه پیدا میکنه . اما در این بین کدهای C/002-C/003-C/004 قرار دارن که ثبت نشده اند اما باید تحت کنترل قرار بگیرن (فقط جهت کنجکاوی)
سپاس فراوان

Private Sub CodeSubOrginal_BeforeUpdate(Cancel As Integer)
If InStr(0, CodeOrginal, CodeSubOrginal, vbTextCompare) Then
Exit Sub
Else
MsgBox "ãÛÇíÑ ÈÇ ãÍÏæÏå ÊÚííä ÔÏå"
Cancel = True
End If
End Sub

Abbas Amiri
سه شنبه 28 شهریور 1391, 18:04 عصر
با سلام درتابع InStr که با فرمت زیر قابل استفاده است اگر رشته دوم در رشته اول موجود باشد مکان آنرا را برمیگرداند.چنانچه start مشخص شده باشد ، جستجو از آ«کاراکتر به بعد انجام میشود . چنانچه پیدا نشد مقدار صفر برمیگردد

InStr([start, ]string1, string2[, compare])

دلیل خطا اینست که start حداقل بایستی برابر یک باشد

hf.farhadi
سه شنبه 28 شهریور 1391, 22:22 عصر
جناب امیری عزیز
منکه هر چقدر با این کد ور رفتم از پس Error های اون بر نیومدم

میشه لطف کنین زحمت اصلاح اون رو بکشین

Abbas Amiri
سه شنبه 28 شهریور 1391, 23:12 عصر
باسلا همانطور که عرض کردم مقدار start حداقل یک باشد ودراینصورت میتوانید آنرا ننویسید


'If InStr(1, CodeOrginal, CodeSubOrginal, vbTextCompare) Then
If InStr(CodeOrginal, CodeSubOrginal, vbTextCompare) Then
Exit Sub
Else
MsgBox "Not found"
Cancel = True
End If
End Sub



البته مدیریت Null بودن متغیرها با خودتان

hf.farhadi
سه شنبه 28 شهریور 1391, 23:32 عصر
با سلام

منکه هر چقدر با این کد ور رفتم از پس Error های اون بر نیومدم هر چند این روش رو هم تست کرده بودم اما مجدداً از کدی که زحمت کشیده بودین در رویداد BeforeUpdate فیلد مورد نظر استفاده کردم مجدداً پیغام تصویر زیر ظاهر شد


البته مدیریت Null بودن متغیرها با خودتان این قسمت از منظورتون ر و متوجه نشدم . شاید اشکال کارم همین قسمت باشد .آ یا در نمونه ارائه شده فوق متغیری برابر با نول قرار میگرد؟

Abbas Amiri
سه شنبه 28 شهریور 1391, 23:37 عصر
از کد خط اول استفاده کنید If InStr(1, CodeOrginal, CodeSubOrginal, vbTextCompare) Then

hf.farhadi
سه شنبه 28 شهریور 1391, 23:49 عصر
خیلی جالبه جناب امیری
من همین روش رو هم تست کرده بودم ولی با خطا مواجه شدم . اما وقتی شما این کد رو ارائه فرمودین مشکل حل شد و دیگه خطا نگرفت (فکر کنم توابع هم استاد خودشونو میشناسن و به اونها بهتر جواب میدن :چشمک:)
از وقتی که گذاشتین بسیار ممنون و سپاسگذارم