View Full Version : مبتدی: جستجو در جدول و نمایش اطلاعات درخواست شده برای کاربر
mehdiqwerty
سه شنبه 30 آبان 1402, 19:05 عصر
با سلام و احترام
من یه جدول از اطلاعات دارم
حالا میخوام که با جستجو کردن کد ملی، در صورتی که کد ملی در جدول وجود داشت،اطلاعات کامل فرد به کاربر نمایش داده بشه،
نمونه فایل آپلود کردم155063
eb_1345
چهارشنبه 01 آذر 1402, 05:13 صبح
سلام
کدهای زیر رو در رویداد AfterUpdate تکست باکس وارد کن:
If DCount("melli", "data", "[melli]=" & Me.Text2 & "") = 0 Then Exit Sub
MsgBox " نام :" & DLookup("nam", "data", "[melli]=" & Me.Text2 & "") & vbCrLf & _
"نام خانوادگي : " & DLookup("[nam kh]", "data", "[melli]=" & Me.Text2 & "") & vbCrLf & _
"تاريخ تولد : " & DLookup("[tavalod]", "data", "[melli]=" & Me.Text2 & "") & vbCrLf & _
"کد ملي : " & DLookup("[melli]", "data", "[melli]=" & Me.Text2 & "")
mehdiqwerty
شنبه 04 آذر 1402, 19:40 عصر
سلام
ممنون از راهنمایی
مثلا آقای مهدی حقیقی در سال سه بار و در تاریخهایی مختلف در جدول وجود داره، حالا وقتی کد ملی مهدی حقیقی در باکس وارد کردیم و اینتر زدیم، هر 3 تاریخ مختلف نمایش داده شود
به صورت عکس زیر در فرم نمایش داده بشه
و آیا برای 60000 رکورد به راحتی جستجو انجام میشه یا با کندی انجام میشه و به مشکل میخورم
فایل هم اپلود کردم
155062
eb_1345
شنبه 04 آذر 1402, 22:29 عصر
برای انجام اینکار شما باید یک فرم اختصاصی که حاوی اطلاعات هر فرد است تهیه نمائید و از فرم دیگر با وارد کردن کد ملی اطلاعات فرم فوق رو نمایش دهید
نمونه ضمیمه که برگرفته از اطلاعات جدول پست قبلی خودتان است امتحان بفرمائید
mehdiqwerty
شنبه 04 آذر 1402, 23:56 عصر
برای انجام اینکار شما باید یک فرم اختصاصی که حاوی اطلاعات هر فرد است تهیه نمائید و از فرم دیگر با وارد کردن کد ملی اطلاعات فرم فوق رو نمایش دهید
نمونه ضمیمه که برگرفته از اطلاعات جدول پست قبلی خودتان است امتحان بفرمائید
الان اوکی شده، فقط زمانی که ابتدا کد ملی 222 جستجو میشه و بعد از آن کد ملی 111 جستجو میشه، همه رکوردها در فرم نمایش داده نمیشه .
اسکرین گرفتم فرستادم
155066
باز هم ممنون از شما
eb_1345
یک شنبه 05 آذر 1402, 10:00 صبح
فقط زمانی که ابتدا کد ملی 222 جستجو میشه و بعد از آن کد ملی 111 جستجو میشه، همه رکوردها در فرم نمایش داده نمیشه .
همه رکوردها نمایش داده میشن منتها چون وقتی کد اولی رو وارد می کنی اندازه فرم با توجه به تعداد رکوردهای اون کد تنظیم میشه وکد دومی که وارد می کنی اندازه فرم با توجه به تعداد رکورد های کد دوم همچنان ثابته همه رکوردها دیده نمیشن
برای رفع این مشکل باید در هر بار جستجوی کد ملی فرم جستجو اگه بازه بسته بشه
کد زیر رو در فرم Form1 قبل از اون یک خط کد وارد کن !
If CurrentProject.AllForms("frmSearch").IsLoaded = True Then DoCmd.Close acForm, "frmSearch"
با این کد اگر فرمی که رکوردها رو نمایش میده اگه باز باشه بسته میشه
mehdiqwerty
دوشنبه 06 آذر 1402, 15:24 عصر
سلام
من یه دکمه جستجو هم براش تعبیه کردم، ولی اگر مقدار باکس خالی باشه خطای زیر رو میده
از دستور شرطی if استفاده کردم ولی خطا داد
اگه مقدار باکس خالی بود به کاربر پیام بده کد ملی را وارد کنید
eb_1345
دوشنبه 06 آذر 1402, 17:52 عصر
سلام
از کدهای زیر استفاده کن:
If CurrentProject.AllForms("frmSearch").IsLoaded = True Then DoCmd.Close acForm, "frmSearch"
If Not IsNull(TmelliCode) Or TmelliCode <> "" Then
If DCount("melli", "data", "melli=" & TmelliCode & "") > 0 Then
DoCmd.OpenForm "frmSearch", , , "[melli] = " & TmelliCode & ""
Else
MsgBox "کد ملي وارده يافت نشد"
TmelliCode.SetFocus
End If
Else
MsgBox "کد ملي وارد نگرديده"
TmelliCode.SetFocus
End If
mehdiqwerty
پنج شنبه 09 آذر 1402, 14:59 عصر
سلام
من برا سرعت بیشتر یه کد به خط اول دکمه جستجو اضافع کردم که کد ملی کپی شده توسط کاربر به باکس جستجو پیست کنه
ولی خطا میزنه
این کد اضافه کردم
Me.TmelliCode.SetFocus
DoCmd.RunCommand acCmdPaste
Me.TmelliCode.SetFocus
DoCmd.RunCommand acCmdPaste
If CurrentProject.AllForms("frmSearch").IsLoaded = True Then DoCmd.Close acForm, "frmSearch"
If Not IsNull(TmelliCode) Or TmelliCode <> "" Then
If DCount("melli", "data", "melli=" & TmelliCode & "") > 0 Then
DoCmd.OpenForm "frmSearch", , , "[melli] = " & TmelliCode & ""
Else
MsgBox "˜Ï ãáí æÇÑÏå íÇÝÊ äÔÏ"
TmelliCode.SetFocus
End If
Else
MsgBox "˜Ï ãáí æÇÑÏ äÑÏíÏå"
TmelliCode.SetFocus
End If
eb_1345
پنج شنبه 09 آذر 1402, 17:38 عصر
سلام
با درج عبارت On Error Resume Next در ابتدای کدها از خطا چشم پوشی کن
On Error Resume Next
Me.TmelliCode.SetFocus
DoCmd.RunCommand acCmdPaste
Me.Refresh
If CurrentProject.AllForms("frmSearch").IsLoaded = True Then DoCmd.Close acForm, "frmSearch"
If Not IsNull(TmelliCode) Or TmelliCode <> "" Or Len(TmelliCode) > 0 Then
If DCount("melli", "data", "melli=" & TmelliCode & "") > 0 Then
DoCmd.OpenForm "frmSearch", , , "[melli] = " & TmelliCode & ""
Else
MsgBox "کد ملي وارده يافت نشد"
TmelliCode.SetFocus
End If
Else
MsgBox "کد ملي وارد نگرديده"
TmelliCode.SetFocus
End If
mehdiqwerty
پنج شنبه 09 آذر 1402, 21:27 عصر
سلام
با درج عبارت On Error Resume Next در ابتدای کدها از خطا چشم پوشی کن
On Error Resume Next
Me.TmelliCode.SetFocus
DoCmd.RunCommand acCmdPaste
Me.Refresh
If CurrentProject.AllForms("frmSearch").IsLoaded = True Then DoCmd.Close acForm, "frmSearch"
If Not IsNull(TmelliCode) Or TmelliCode <> "" Or Len(TmelliCode) > 0 Then
If DCount("melli", "data", "melli=" & TmelliCode & "") > 0 Then
DoCmd.OpenForm "frmSearch", , , "[melli] = " & TmelliCode & ""
Else
MsgBox "کد ملي وارده يافت نشد"
TmelliCode.SetFocus
End If
Else
MsgBox "کد ملي وارد نگرديده"
TmelliCode.SetFocus
End If
سلام
این اوکی شد
حالا اگه بخوام در تکست باکس فقط 1- اعداد پیست بشه و 2- فقط اعداد تایپ بشه، باید چه کاری کنیم؟
من از این کد استفاده کردم ولی نتونستم در فرم اجرایی کنم
الان فقط اعداد تایپ میکنه ولی اگه حروفی کپی شده باشه در هنگام پیست کردن دیگه تشخیص نمیده که حروف هست یا اعداد و همونو پیست میکنه .
راهی هست که قبل از پیست کردن بررسی بشه که متن مورد نظر حروف هست یا اعدد، اگه عدد بود پیست بشه و اگه حروف بود کاری انجام نشه
فکر کنم یه کم سخت شد
If (KeyAscii > 57 Or KeyAscii < 48) And KeyAscii <> 8 And KeyAscii <> 127 Then
KeyAscii = 0
End If
eb_1345
جمعه 10 آذر 1402, 01:29 صبح
از کد اسکی (KeyAscii) زمانی استفاده میشود که بخواهید کلیدی از کیبورد رو فشار دهید . از این کد معمولا در رویداد KeyPress یک کنترل استفاده میشود .
برای تشخیص نوع مقدار وارده باید از تابع IsNumeric استفاده کنی
بصورت زیر:
If Not IsNumeric(TmelliCode) Then
MsgBox "فقط عدد تايپ شود"
TmelliCode.SetFocus
Exit Sub
End If
ولی به احتمال زیاد با یک مشکل دیگه هم مواجه خواهی شد و اون اینکه چون کد DoCmd.RunCommand acCmdPaste در ابتدای کدها قرار داده ای اگه در حافظه یا Clipboard مقداری وجود داشته باشه هر مقداردیگه ای وارد کنی بازهم همون مقداری که در Clipboard وجود داره وارد میشه.
برای رفع این مشکل در هنگام دستی وارد کردن مقدار مورد نظر از طریق فشار دادن کلیدهای کیبورد باید حافظه خالی یا پاک بشه
برای پاک کردن Clipboard در یک ماژول عمومی کدهای زیر رو وارد کن :
Public Declare Function OpenClipboard Lib "user32" (ByVal hwnd As Long) As Long
Public Declare Function EmptyClipboard Lib "user32" () As Long
Public Declare Function CloseClipboard Lib "user32" () As Long
Public Declare Function CountClipboardFormats Lib "user32" () As Long
Public Sub ClearClipboard()
OpenClipboard (0&)
EmptyClipboard
CloseClipboard
End Sub
بعد ماژول ClearClipboard در رویداد KeyDown تکست باکس کد ملی فراخوانی کن
mehdiqwerty
جمعه 10 آذر 1402, 09:58 صبح
از کد اسکی (KeyAscii) زمانی استفاده میشود که بخواهید کلیدی از کیبورد رو فشار دهید . از این کد معمولا در رویداد KeyPress یک کنترل استفاده میشود .
برای تشخیص نوع مقدار وارده باید از تابع IsNumeric استفاده کنی
بصورت زیر:
If Not IsNumeric(TmelliCode) Then
MsgBox "فقط عدد تايپ شود"
TmelliCode.SetFocus
Exit Sub
End If
ولی به احتمال زیاد با یک مشکل دیگه هم مواجه خواهی شد و اون اینکه چون کد DoCmd.RunCommand acCmdPaste در ابتدای کدها قرار داده ای اگه در حافظه یا Clipboard مقداری وجود داشته باشه هر مقداردیگه ای وارد کنی بازهم همون مقداری که در Clipboard وجود داره وارد میشه.
برای رفع این مشکل در هنگام دستی وارد کردن مقدار مورد نظر از طریق فشار دادن کلیدهای کیبورد باید حافظه خالی یا پاک بشه
برای پاک کردن Clipboard در یک ماژول عمومی کدهای زیر رو وارد کن :
Public Declare Function OpenClipboard Lib "user32" (ByVal hwnd As Long) As Long
Public Declare Function EmptyClipboard Lib "user32" () As Long
Public Declare Function CloseClipboard Lib "user32" () As Long
Public Declare Function CountClipboardFormats Lib "user32" () As Long
Public Sub ClearClipboard()
OpenClipboard (0&)
EmptyClipboard
CloseClipboard
End Sub
بعد ماژول ClearClipboard در رویداد KeyDown تکست باکس کد ملی فراخوانی کن
سلام
روز جمعه خوبی داشته باشید
در این برنامه کاربر کد ملی از سامانه دیگری کپی میکنه و در تکست باکس پیست میکنه و جستجو انجام میشه
هدف من جلوگیری از پیست شدن غیر از کد ملی یا اعداد هست،
چطور میشه تشخیص داد که متن پیست شده در تکست باکس عدد هست یا متن؟اگه متن بود که تکست باکس خالی بشه و اگه عدد بود به کار خودش ادامه بده
یه چنین کدی منظورم هست
If TmelliCode.Value = IsNumeric Then
اجرای کدهای برنامه
Else
TmelliCode.Value = Empty
End If
یا چنین دستوری
If TmelliCode.Value <> IsNumeric Then
TmelliCode.Value = Empty
Else
اجرای کدهای برنامه
End If
mehdiqwerty
جمعه 10 آذر 1402, 11:51 صبح
فراخوانی کدهای زیر در ماژول نتونستم انجام بدم
اگه ممکنه از فایل قبل نمونه بفرستید
Public Declare Function OpenClipboard Lib "user32" (ByVal hwnd As Long) As Long
Public Declare Function EmptyClipboard Lib "user32" () As Long
Public Declare Function CloseClipboard Lib "user32" () As Long
Public Declare Function CountClipboardFormats Lib "user32" () As Long
Public Sub ClearClipboard()
OpenClipboard (0&)
EmptyClipboard
CloseClipboard
End Sub
eb_1345
جمعه 10 آذر 1402, 12:15 عصر
فراخوانی کدهای زیر در ماژول نتونستم انجام بدم
اگه ممکنه از فایل قبل نمونه بفرستید
حدس زدم:لبخندساده:
mehdiqwerty
جمعه 10 آذر 1402, 12:28 عصر
سلام
خطا میزنه
ویندوز من 64 بیتی هست و خطا میده
این پست هم مشکل توضیح داده
https://barnamenevis.org/showthread.php?491505-%D8%AD%D9%84-%D9%85%D8%B4%DA%A9%D9%84-%D9%85%D8%A7%DA%98%D9%88%D9%84-%D9%87%D8%A7-%D8%AF%D8%B1-64-%D9%88-32-%D8%A8%DB%8C%D8%AA%DB%8C
155088
eb_1345
جمعه 10 آذر 1402, 12:55 عصر
سلام
خطا میزنه
ویندوز من 64 بیتی هست و خطا میده
کدهای زیر رو جایگزین کدهای قبلی که رنگشون قرمز شده کن
#If Win64 Then
Public Declare PtrSafe Function OpenClipboard Lib "user32" (ByVal hwnd As Long) As Long
Public Declare PtrSafe Function EmptyClipboard Lib "user32" () As Long
Public Declare PtrSafe Function CloseClipboard Lib "user32" () As Long
Public Declare PtrSafe Function CountClipboardFormats Lib "user32" () As Long
#Else
Public Declare Function OpenClipboard Lib "user32" (ByVal hwnd As Long) As Long
Public Declare Function EmptyClipboard Lib "user32" () As Long
Public Declare Function CloseClipboard Lib "user32" () As Long
Public Declare Function CountClipboardFormats Lib "user32" () As Long
#End If
mehdiqwerty
جمعه 10 آذر 1402, 14:35 عصر
سلام
الان همه چی اوکی شده
فقط نوار زرد رنگ بالای برنامه میاد که باید فعال کنیم
چطور باید همراه با اجرا شدن فرم با کد نویسی فعال شه که کاربر احتیاج به فعال کردن نداشته باشه
155089
هدف این هست که کاربر نتونه به قسمت privary option وارد بشه و پنل نویگیشن را فعال کند.
155090
فایل زیر پیدا کردم
حالا چطور با باز شدن فرم اکسس این فایل هم اجرا بشه
vBulletin® v4.2.5, Copyright ©2000-1403, Jelsoft Enterprises Ltd.