PDA

View Full Version : Findnext یا تابعی مشابه آن برای همه نوع داده



hamid-nice
شنبه 14 دی 1392, 15:01 عصر
با سلام
یک فرم دارم با یک سابفرم با فیلد هایی با انواع Data Type های مختلف
یک تکست باکس به نام Text1 و یک دگمه روی فرم اصلی
چه تابع یا کدی استفاده کنم که وقتی روی فیلدی از سابفرم کلیک کردم و عبارتی متناسب با نوع داده فیلد کلیک شده در Text1 نوشتم و دکمه را زدم مانند دستور .Findnext به رکوردهایی در سابفرم که برابر با عبارت نوشته شده در TXT1 هست یکی یکی برود
با تشکر

Abbas Amiri
شنبه 14 دی 1392, 23:03 عصر
با سلام
یک فرم دارم با یک سابفرم با فیلد هایی با انواع Data Type های مختلف
یک تکست باکس به نام Text1 و یک دگمه روی فرم اصلی
چه تابع یا کدی استفاده کنم که وقتی روی فیلدی از سابفرم کلیک کردم و عبارتی متناسب با نوع داده فیلد کلیک شده در Text1 نوشتم و دکمه را زدم مانند دستور .Findnext به رکوردهایی در سابفرم که برابر با عبارت نوشته شده در TXT1 هست یکی یکی برود
با تشکر

این تابع برای منظور شما می تواند مفید باشد .


Sub FindNextRecord(frm As Form, fldName As String, Optional ParentForm As Form)
'تکست باکس و یا کمبوها به پیشوند "txt" ونام فیلدمورد نظر در فرم اصلی نامگذاری شوند
Dim rs As DAO.Recordset, txtSearch As String
txtSearch = "txt" & fldName
If IsMissing(ParentForm) Then
txtSearch = frm.Controls(txtSearch)
Else
txtSearch = ParentForm.Controls(txtSearch)
End If
frm.Visible = False
Set rs = frm.Recordset
rs.Bookmark = frm.Bookmark
rs.FindNext fldName & "=" & VarByDataType(rs, fldName, txtSearch)
frm.Bookmark = rs.Bookmark
frm.Visible = True
End Sub
End Function

Private Function VarByDataType(rs As DAO.Recordset, fld As String, value As String) As String
Dim dType As DataTypeEnum
dType = rs.Fields(fld).Type
Select Case dType
Case dbDate
VarByDataType = "#" & value & "#"
Case dbText, dbMemo
VarByDataType = "'" & value & "'"
Case Else
VarByDataType = value
End Select
End Function


مثال :

Private Sub cmdSearch_Click()
FindNextRecord Me.CostsSubform.Form, "sDate", Me
End Sub

hamid-nice
یک شنبه 15 دی 1392, 23:32 عصر
با سلام
جناب امیری عزیز
نشد از تابعتان استفاده کنم !
لطفا به ضمیمه نگاه کنید و اگر هم لطف کنید نیاز به پیشوند txt را هم از بین ببرید و فایل را اصلاح فرمایید
با تشکر

Abbas Amiri
یک شنبه 15 دی 1392, 23:38 عصر
با سلام
جناب امیری عزیز
نشد از تابعتان استفاده کنم !
لطفا به ضمیمه نگاه کنید و اگر هم لطف کنید نیاز به پیشوند txt را هم از بین ببرید و فایل را اصلاح فرمایید
با تشکر

فرض کنیم شما فیلد a را می خواهید جستجو کنید . کدهای زیر را جایگزین کنید

Sub FindNextRecord(frm As Form, fldName As String, Optional ParentForm As Form)
'ʘÓÊ ÈÇ˜Ó æ ?Ç ˜ãÈæåÇ Èå ?ÔæäÏ "txt" æäÇã Ý?áÏãæÑÏ äÙÑ ÏÑ ÝÑã ÇÕá? äÇãÐÇÑ? ÔæäÏ
Dim rs As DAO.Recordset, txtSearch As String
txtSearch = "trs"
If IsMissing(ParentForm) Then
txtSearch = frm.Controls(txtSearch)
Else
txtSearch = ParentForm.Controls(txtSearch)
End If
frm.Visible = False
Set rs = frm.Recordset
rs.Bookmark = frm.Bookmark
rs.FindNext fldName & "=" & VarByDataType(rs, fldName, txtSearch)
frm.Bookmark = rs.Bookmark
frm.Visible = True
End Sub

Private Sub cmdSearch_Click()
FindNextRecord Me.CostsSubform.Form, "a", Me
End Sub

hamid-nice
یک شنبه 15 دی 1392, 23:56 عصر
چند مورد باقی است و آنکه
1-اگر در سابفرم بر روی رکوردی کلیک کرده باشیم که مقداری را که می خواهیم سرچ کنه قبل از آن رکورد در سابفرم موجود باشد ، عمل نمی کند
2- وقتی به رکورد آخری می رسد دوباره از اول شروع نمی کند و به اولین رکورد با مقدار خواسته شده بر نمی گردد
3- اگه وقتتان را زیاد نمی گیره این امکان وجود داشته باشه که با کلیک بر روی فیلد مورد نظر ، در همان فیلد جستجو کنه ، و در واقع نام فیلد را اتوماتیک تشخیص بده ( وگرنه همین موارد 1 و 2 را اصلاح بفرمایید)
با تشکر

Abbas Amiri
دوشنبه 16 دی 1392, 00:49 صبح
چند مورد باقی است و آنکه
1-اگر در سابفرم بر روی رکوردی کلیک کرده باشیم که مقداری را که می خواهیم سرچ کنه قبل از آن رکورد در سابفرم موجود باشد ، عمل نمی کند
2- وقتی به رکورد آخری می رسد دوباره از اول شروع نمی کند و به اولین رکورد با مقدار خواسته شده بر نمی گردد
3- اگه وقتتان را زیاد نمی گیره این امکان وجود داشته باشه که با کلیک بر روی فیلد مورد نظر ، در همان فیلد جستجو کنه ، و در واقع نام فیلد را اتوماتیک تشخیص بده ( وگرنه همین موارد 1 و 2 را اصلاح بفرمایید)
با تشکر

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