PDA

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



فایل زیر پیدا کردم
حالا چطور با باز شدن فرم اکسس این فایل هم اجرا بشه