PDA

View Full Version : DLookUp و برگشت چند نتیجه که شرط را ارضا می کنند



قله بلند
دوشنبه 04 فروردین 1393, 21:28 عصر
با عرض سلام
این رو می دونم که تابع DLookUp، اولین رکورد رو بر می گردونه که شرط رو ارضا می کنه.
وقتی من کلید جستجو رو در فرم می زنم، سه تا رکورد، شرط رو ارضا می کنند که باید برای کاربر قابل رویت باشند ولی DlookUp، اولین رکورد رو بر می گردونه.
چه کاری باید انجام بدم تا بتونم بیش از یک نتیجه رو دریافت کنم؟

Access2013
دوشنبه 04 فروردین 1393, 21:54 عصر
سلام

لیست باکس ایجاد کنید

قله بلند
دوشنبه 04 فروردین 1393, 22:22 عصر
من اون چیزی که می خواهم طراحی کنم، در قایل ضمیمه آورده ام.
خروجی DlookUp در نتیجه اول جستجو می آید ولی نتیجه دوم جستجو، خالی است در حالیکه دو رکورد در بانک می تونه شرط رو ارضا کنه.
مثلاً اگر کاربر، نام رو A وارد کنه، دو رکورد باید برگرده اما با DLookUp، فقط یک رکورد بر می رگده.

قله بلند
سه شنبه 05 فروردین 1393, 13:52 عصر
سلام
دوستان، من فهمیدم که باید از این روش استفاده کرد ولی خطا می ده و کد، اجرا نمی شه. باید چه کار کنم؟



Private Sub Command6_Click()

Dim RS As DAO.Recordset
Dim SQL As String
SQL = "SELECT Table1.[name], Table1.[family] FROM Table1 WHERE (((Table1.[name]) Like " * " & [Me.Text4] & " * "))"
Set RS = CurrentDb.OpenRecordset(SQL)
Do While Not RS.EOF
Me!Text0 = Me!Text0 & RS("Text0") & " "
RS.MoveNext
Loop
RS.Close
Set RS = Nothing

End Sub

Abbas Amiri
سه شنبه 05 فروردین 1393, 15:35 عصر
سلام
دوستان، من فهمیدم که باید از این روش استفاده کرد ولی خطا می ده و کد، اجرا نمی شه. باید چه کار کنم؟



Private Sub Command6_Click()

Dim RS As DAO.Recordset
Dim SQL As String
SQL = "SELECT Table1.[name], Table1.[family] FROM Table1 WHERE (((Table1.[name]) Like " * " & [Me.Text4] & " * "))"
Set RS = CurrentDb.OpenRecordset(SQL)
Do While Not RS.EOF
Me!Text0 = Me!Text0 & RS("Text0") & " "
RS.MoveNext
Loop
RS.Close
Set RS = Nothing

End Sub





سلام

کد مربوط به عبارت SQL را مطابق زیر تغییر دهید:

SQL = "SELECT Table1.[name], Table1.[family] FROM Table1 WHERE Table1.[name]) Like '*" & [Me.Text4] & "*'"

قله بلند
سه شنبه 05 فروردین 1393, 22:05 عصر
سلام
آقای امیری، ضمن تشکر از توجه شما
مشکل حل نشد. باز هم ایراد می گیرد و برنامه اجرا نمی شود.:متفکر:

Abbas Amiri
سه شنبه 05 فروردین 1393, 22:19 عصر
سلام
آقای امیری، ضمن تشکر از توجه شما
مشکل حل نشد. باز هم ایراد می گیرد و برنامه اجرا نمی شود.:متفکر:

یک پرانتز اضافه وجود داشت

SQL = "SELECT Table1.[name], Table1.[family] FROM Table1 WHERE Table1.[name] Like '*" & [Me.Text4] & "*'"

قله بلند
سه شنبه 05 فروردین 1393, 22:55 عصر
سلام
با این، بخش اول خطا رفع شد (براکت ها رو هم برداشتم)




SQL = "SELECT Table1.[name] FROM Table1 WHERE Table1.[name] Like '*" & Me.Text4 & "*'"

ولی حالا از این قسمت ایراد می گیره. نمی دونم چی بگذارم.




Me.Text0 = RS.Fields("me.text4")

قله بلند
چهارشنبه 06 فروردین 1393, 01:04 صبح
سام
دوستان، تا اینجا مشکلاتی که گفته بودم حل شد ولی اگر مثلاً دو تا رکورد، شرط رو ارضا می کنه، فقط رکورد آخر نشان داده می شه. من می خوام هر دو رکورد رو یکی پس از دیگری ببینم. برای همین، یک برچسب روی فرم گذاشتم تا وقتی کاربر، روش کلیک می کنه، فیلدهای فعلی پاک بشه تا رکورد بعدی که در شرط می گنجد نمایش داده شود ولی این اتفاق نمی افته. دیگه نمی دونم چه کار کنم.




Private Sub Command6_Click()

Dim RS As DAO.Recordset
Dim SQL As String

SQL = "SELECT Table1.[name], Table1.[family] FROM Table1 WHERE Table1.[name] Like '*" & Me.Text4 & "*'"
Dim counter
counter = 0
Set RS = CurrentDb.OpenRecordset(SQL)
Do While Not RS.EOF
If counter >= 1 Then
Me.Label26.Visible = True
Me.Label26.FontBold = True
End If
Me.Text0 = RS.Fields("name")
Me.Text2 = RS.Fields("family")
RS.MoveNext
counter = counter + 1

Loop
RS.Close
Set RS = Nothing

End Sub


Private Sub Label26_Click()
Me.Text0 = ""
Me.Text2 = ""
End Sub

قله بلند
پنج شنبه 07 فروردین 1393, 13:51 عصر
سلام
من این مشکل رو با بخش های پررنگ شده حل کردم. اما اگر روی فرم، دکمه ای باشه چی (مثلاً پخش دوباره فایل صوتی)؟ msgbox دیگه نمی گذاره دکمه پخش دوباره فایل صوتی کار کنه. ای کاش می شد با شیوه دیگه ای، رکوردهایی رو که شرط رو ارضا می کنند، یکی پس از دیگری مشاهده کرد.




Private Sub Command6_Click()

Dim RS As DAO.Recordset
Dim SQL As String

SQL = "SELECT Table1.[name], Table1.[family] FROM Table1 WHERE Table1.[name] Like '*" & Me.Text4 & "*'"




Dim counter, temp
temp = 2
Set RS = CurrentDb.OpenRecordset(SQL)

Do While Not RS.EOF


For counter = 0 To RS.RecordCount - 1
Next




Me.Text0 = RS.Fields("name")
Me.Text2 = RS.Fields("family")

RS.MoveNext

If RS.RecordCount >= temp Then
MsgBox "ÈÑÇí ãÔÇåÏå јæÑÏ ÈÚÏí ˜áí˜ ˜äíÏ", vbOKOnly, "ÇÚáÇä"
temp = temp + 1
End If

Loop
RS.Close
Set RS = Nothing

End Sub

قله بلند
پنج شنبه 07 فروردین 1393, 19:35 عصر
سلام
فعلاً این کد می تونه کار رو راه بندازه



Private Sub Command27_Click()
Dim RS As DAO.Recordset
Dim SQL As String
Dim counter As Integer

Me.Label26.Visible = False
SQL = "SELECT Table1.[name], Table1.[family] FROM Table1 WHERE Table1.[name] Like '*" & Me.Text4 & "*'"
Set RS = CurrentDb.OpenRecordset(SQL)
counter = 0
Do While Not RS.EOF
counter = counter + 1
If counter > 1 Then
Me.Label26.Visible = True
Exit Do
Else
Me.Text0 = RS.Fields("name")
Me.Text2 = RS.Fields("family")
End If
RS.MoveNext
Loop

RS.Close
Set RS = Nothing
End Sub








Private Sub Label26_Click()
SQL = "SELECT Table1.[name], Table1.[family] FROM Table1 WHERE Table1.[name] Like '*" & Me.Text4 & "*'"
Set RS = CurrentDb.OpenRecordset(SQL)
counter = 0
Do While Not RS.EOF

If counter = 0 Then
Else
Me.Text0 = RS.Fields("name")
Me.Text2 = RS.Fields("family")
End If
counter = counter + 1
RS.MoveNext
Loop

RS.Close
Set RS = Nothing
End Sub

قله بلند
پنج شنبه 07 فروردین 1393, 21:35 عصر
وقتی برنامه رو تست کردم متوجه شدم که این برنامه فقط برای دو رکورد کار می کنه چون حلقه while، سریع عمل می کنه و خودش رو به رکورد آخر می رسونه و رکوردهای میانی رو نشون کاربر نمی ده.
چه باید کرد؟

راه حل دیگه ای به ذهنم نمی رسه
:اشتباه:
ویرایش: فعلاً با گذاشتن یک برچسب دیگه و کد نویسی در بخش onclick() اون، مشکل حل شد ولی ای کاش راه حل دیگه ای هم براش پیدا بشه.