PDA

View Full Version : سوال: چک کردن با رکورد ست



majidosmani
جمعه 13 آذر 1394, 07:24 صبح
سلام خدمت اساتید محترم میگم من یک کاری کردم که وقتی فرم لود میشه با توجه به مقادری که در جدول 7 وجود دارد به روش رکوردست یکه فرم مشخص را برام باز کنه کدها را در زیر آوردم


Private Sub Form_Load()
Dim chek As Boolean
Me.Text14 = GetIPAddresses
'HideAccess

Dim db As Database
Dim rst As Recordset
Set db = CurrentDb
Set rst = db.OpenRecordset("Table7")

chek = False
If chek = False Then
Do While rst.EOF = False
If rst![ip] = [Text14] And rst![User] = [Text2] & 1 Then
DoCmd.OpenForm "f1", acNormal
Form_f1.Command48.Visible = True
majid = True
chek = True
DoCmd.Close acForm, "form1"
Exit Sub
End If
rst.MoveNext
Loop


ElseIf chek = False Then
Do While rst.EOF = False
If rst![ip] = [Text14] And rst![User] = [Text2] & 2 Then
DoCmd.OpenForm "f3", acNormal
Form_f3.Command25.Visible = True
Forms![f3]![t] = rst![User]
majid = True
chek = True
DoCmd.Close acForm, "form1"
Exit Sub
End If
rst.MoveNext
Loop


ElseIf chek = False Then
Do While rst.EOF = False
If rst![ip] = [Text14] And rst![User] = [Text2] & 3 Then
DoCmd.OpenForm "f3", acNormal, , , acFormReadOnly
Form_f3.Command25.Visible = True
Forms![f3]![t] = rst![User]
majid = True
chek = True
DoCmd.Close acForm, "form1"
Exit Sub
End If
rst.MoveNext
Loop


End If

End Sub



حالا نمی دونم چرا قسمت اول کار میکنه

chek = False
If chek = False Then
Do While rst.EOF = False
If rst![ip] = [Text14] And rst![User] = [Text2] & 1 Then
DoCmd.OpenForm "f1", acNormal
Form_f1.Command48.Visible = True
majid = True
chek = True
DoCmd.Close acForm, "form1"
Exit Sub
End If
rst.MoveNext
Loop


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

majidosmani
جمعه 13 آذر 1394, 21:43 عصر
سلام خدمت اساتید محترم الان من کدها را یخورده تغییر دادم ولی باز مشکل حل نشد من می خواهم وقتب فرم یک باز میشه اطلاعات جدول 7 را به روش رکورد ست بخونه و با توجه به اطلاعات جدول فرم مربوطه را باز بکنه
من این کد را در رویدار لود شدن فرم نوشتم ولی نمی دونم برای چی کار نمیکنه

Private Sub Form_Load()
Dim chek As Boolean
Me.Text14 = GetIPAddresses

Dim db As Database
Dim rst As Recordset
Set db = CurrentDb
Set rst = db.OpenRecordset("Table7")


chek = False



If chek = False Then
Do While rst.EOF = False
If rst![ip] = [Text14] And rst![User] = [Text2] & 1 Then
DoCmd.OpenForm "f1", acNormal
Form_f1.Command48.Visible = True
majid = True
chek = True
DoCmd.Close acForm, "form1"
Exit Sub
End If
rst.MoveNext
Loop
End If



If chek = False Then
Do While rst.EOF = False
If rst![ip] = [Text14] And rst![User] = [Text2] & 2 Then
DoCmd.OpenForm "f3", acNormal
Form_f3.Command25.Visible = True
Forms![f3]![t] = rst![User]
majid = True
chek = True
DoCmd.Close acForm, "form1"
Exit Sub
End If
rst.MoveNext
Loop
End If



If chek = False Then
Do While rst.EOF = False
If rst![ip] = [Text14] And rst![User] = [Text2] & 3 Then
DoCmd.OpenForm "f3", acNormal, , , acFormReadOnly
Form_f3.Command25.Visible = True
Forms![f3]![t] = rst![User]
majid = True
chek = True
DoCmd.Close acForm, "form1"
Exit Sub
End If
rst.MoveNext
Loop
End If



End Sub



چون نمونه ام را تغییر دادم نمونه جدیدم را می فرستم لطفا نگاه کنید

amp_1356
شنبه 14 آذر 1394, 07:26 صبح
سلام مجید جان
شما در اولین شرط که نوشتید متغیر chek رو برابر با True قرار دادید و در شرط های دوم و سوم گفتید اگر chek=false باشه شرط رو اجراکن. خوب مسلما تا متغیر chek برابر با true نباشد شرط اجرا نمی شود

majidosmani
شنبه 14 آذر 1394, 08:07 صبح
سلام مجید جان
شما در اولین شرط که نوشتید متغیر chek رو برابر با True قرار دادید و در شرط های دوم و سوم گفتید اگر chek=false باشه شرط رو اجراکن. خوب مسلما تا متغیر chek برابر با true نباشد شرط اجرا نمی شود
سلام و با تشکر خوب من بعد از دستور if متغییر chek را true کردم چون می خواستم اگر شرط درست باشد و فرم مربوط باز شد دیگه فرم دیگه ای باز نشه ولی اگر شرط نادرست بود که نباید متغییر chek من true بشه و باید if بعدی اجرا بشه مگه همین طور نیست ؟؟

amp_1356
شنبه 14 آذر 1394, 09:04 صبح
سلام
البته شما خودتون استاد هستید و بهتر از من می دونید، ولی چیزی که من متوجه شدم اینه که باید طوری کد ها رو تغییر بدید که شرط دیگه ای رو بررسی کنه تا شرط های دوم و سوم اجرا بشه.
ان شالله موفق باشید.

Rasool-GH
شنبه 14 آذر 1394, 12:52 عصر
سلام
نکته اول اینکه اساسا وقتی داخل شرط خودتون از Exit Sub استفاده کردین دیگه متغیر Check مورد نیاز نیست و هیچ کاری برای شما انجام نمیده . ثانیا در اصلاح شرطی که برای If دوم قرار دادین اقدام کنید چون مشخصه که شرط اول شما برقرار هست که فرم باز میشه و به بررسی شرط دوم نمیرسه

majidosmani
شنبه 14 آذر 1394, 14:09 عصر
سلام و با تشکر من متغیر chek را برداشتم و کد من به صورت زیر شد


Private Sub Form_Load()
Me.Text14 = GetIPAddresses

Dim db As Database
Dim rst As Recordset
Set db = CurrentDb
Set rst = db.OpenRecordset("Table7")


Do While rst.EOF = False
If rst![ip] = [Text14] And rst![User] = [Text2] & 1 Then
DoCmd.OpenForm "f1", acNormal
Form_f1.Command48.Visible = True
majid = True

DoCmd.Close acForm, "form1"
Exit Sub
End If
rst.MoveNext
Loop




Do While rst.EOF = False
If rst![ip] = [Text14] And rst![User] = [Text2] & 2 Then
DoCmd.OpenForm "f3", acNormal
Form_f3.Command25.Visible = True
Forms![f3]![t] = rst![User]
majid = True
DoCmd.Close acForm, "form1"
Exit Sub
End If
rst.MoveNext
Loop



Do While rst.EOF = False
If rst![ip] = [Text14] And rst![User] = [Text2] & 3 Then
DoCmd.OpenForm "f3", acNormal, , , acFormReadOnly
Form_f3.Command25.Visible = True
Forms![f3]![t] = rst![User]
majid = True
DoCmd.Close acForm, "form1"
Exit Sub
End If
rst.MoveNext
Loop


End Sub

ولی باز مشکل من حل نشد یعنی وقتی شرط زیر برقرار نیست


If rst![ip] = [Text14] And rst![User] = [Text2] & 1 Then

ولی شرط بعدی برقرار است


If rst![ip] = [Text14] And rst![User] = [Text2] & 2 Then

دیگه کار نمی کنه ولی اگر شرط اولی برقرار باشد کار میکنه

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


Private Sub Form_Load()
Me.Text14 = GetIPAddresses

Dim db As Database
Dim rst As Recordset
Set db = CurrentDb
Set rst = db.OpenRecordset("Table7")


Do While rst.EOF = False
If rst![ip] = [Text14] And rst![User] = [Text2] & 1 Then
DoCmd.OpenForm "f1", acNormal
Form_f1.Command48.Visible = True
majid = True
DoCmd.Close acForm, "form1"


ElseIf rst![ip] = [Text14] And rst![User] = [Text2] & 2 Then
DoCmd.OpenForm "f3", acNormal
Form_f3.Command25.Visible = True
Forms![f3]![t] = rst![User]
majid = True
DoCmd.Close acForm, "form1"


ElseIf rst![ip] = [Text14] And rst![User] = [Text2] & 3 Then
DoCmd.OpenForm "f3", acNormal, , , acFormReadOnly
Form_f3.Command25.Visible = True
Forms![f3]![t] = rst![User]
majid = True
DoCmd.Close acForm, "form1"
Exit Sub
End If
rst.MoveNext
Loop


End Sub

majidosmani
شنبه 14 آذر 1394, 14:10 عصر
سلام
نکته اول اینکه اساسا وقتی داخل شرط خودتون از Exit Sub استفاده کردین دیگه متغیر Check مورد نیاز نیست و هیچ کاری برای شما انجام نمیده . ثانیا در اصلاح شرطی که برای If دوم قرار دادین اقدام کنید چون مشخصه که شرط اول شما برقرار هست که فرم باز میشه و به بررسی شرط دوم نمیرسه

من این قسمت حرف شما را متوجه نشدم

ثانیا در اصلاح شرطی که برای If دوم قرار دادین اقدام کنید چون مشخصه که شرط اول شما برقرار هست که فرم باز میشه و به بررسی شرط دوم نمیرسه

Rasool-GH
شنبه 14 آذر 1394, 16:55 عصر
سلام
منظورم این شرط هست


If rst![ip] = [Text14] And rst![User] = [Text2] & 1 Then

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

majidosmani
شنبه 14 آذر 1394, 18:33 عصر
سلام
منظورم این شرط هست


If rst![ip] = [Text14] And rst![User] = [Text2] & 1 Then

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

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

Rasool-GH
شنبه 14 آذر 1394, 21:37 عصر
سلام متاسفانه با گوشی امکان تست نمونه رو نداشتم . به همین دلیل در مورد کد نظر دادم

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