PDA

View Full Version : مشکل در جستجوی پیشرفته!



soroush_k12
شنبه 17 اسفند 1392, 12:42 عصر
با سلام خدمت دوستان و اساتید گرامی
در نمونه پیوست از لیست باکس جهت جستجوی همزمان نام و آدرس استفاده میشود و درست هم کار میکند.
مشکل اینجاست که اگر در جدول اصلی نام یا آدرس اصلا وارد نشده باشدیا null باشد در لیست باکس ظاهر نمیشود.
مثلا ردیفهای 2 و3 و 7 جدول در لیست باکس نمی آید در صورتی که من میخواهم همه رکوردها جستجو شوند.
چه تغییری در query1 باید داده شود؟
http://uploadkon.ir/?file=Search4.rar

soroush_k12
یک شنبه 18 اسفند 1392, 12:52 عصر
دوستان یه عنایتی بفرمایند
توضیح:تعداد رکوردهای لیست باکس باید برابر تعداد رکوردهای جدول باشدکه متاسفانه نیست؟!

alirezabahrami
یک شنبه 18 اسفند 1392, 18:27 عصر
با سلام خدمت دوستان و اساتید گرامی
در نمونه پیوست از لیست باکس جهت جستجوی همزمان نام و آدرس استفاده میشود و درست هم کار میکند.
مشکل اینجاست که اگر در جدول اصلی نام یا آدرس اصلا وارد نشده باشدیا null باشد در لیست باکس ظاهر نمیشود.
مثلا ردیفهای 2 و3 و 7 جدول در لیست باکس نمی آید در صورتی که من میخواهم همه رکوردها جستجو شوند.
چه تغییری در query1 باید داده شود؟
http://uploadkon.ir/?file=Search4.rar
سلام
به آخر هر دو شزط در کوئری مربوطه Or Is Null اضافه کن!
یا علی

soroush_k12
یک شنبه 18 اسفند 1392, 22:35 عصر
سلام
به آخر هر دو شزط در کوئری مربوطه Or Is Null اضافه کن!
یا علی
ضمن عرض سلام و تشکر فراوان خدمت استاد بهرامی عزیز
مثل همیشه خیلی مختصر و مفید بود

soroush_k12
دوشنبه 19 اسفند 1392, 14:38 عصر
سلام مجدد خدمت آقای بهرامی عزیز و سایر دوستان
یک مشکل جدید!!!
بعد از اضافه کردن عبارت OR IS NULL به شرط کوری تعداد رکورد های لیست باکس جستجو و جدول مربوطه یکی شد . یعنی در حالتی که هنوز هیچ عبارتی جهت جستجو وارد نشده همه چیز درست است .ولی وقتی مثلا عبارت "تقی" در باکس نام وارد میشود علاوه بر رکورد مربوطه که شامل عبارت "تقی" است دو رکورد دیگر که مقدار نام آنها null است نیز در نتیجه جستجو وارد میشود. (مجموعا 3 کورد لیست میشود که در واقع باید فقط یکی باشد)
در واقع هدف من این است که مثلا وقتی عبارتی در باکس نام وارد میشود دیگر رکوردهایی که نام آنها null است نباید لیست شوند ولی در عوض تمام رکورد هایی که آدرس آنها چه null باشد چه نباشد باید لیست شوند و بلعکس
در واقع اگر در باکسی مثلا نام ، عبارتی تایپ شد or is null برای اون فیلد باید غیر فعال شود و فقط برای فیلدهای دیگر عمل کند تا عمل جستجو به درستی صورت گیرد.

امید وارم منظورم را رسانده باشم
باز هم از توجه شما ممنونم

alirezabahrami
سه شنبه 20 اسفند 1392, 09:49 صبح
سلام مجدد خدمت آقای بهرامی عزیز و سایر دوستان
یک مشکل جدید!!!
بعد از اضافه کردن عبارت OR IS NULL به شرط کوری تعداد رکورد های لیست باکس جستجو و جدول مربوطه یکی شد . یعنی در حالتی که هنوز هیچ عبارتی جهت جستجو وارد نشده همه چیز درست است .ولی وقتی مثلا عبارت "تقی" در باکس نام وارد میشود علاوه بر رکورد مربوطه که شامل عبارت "تقی" است دو رکورد دیگر که مقدار نام آنها null است نیز در نتیجه جستجو وارد میشود. (مجموعا 3 کورد لیست میشود که در واقع باید فقط یکی باشد)
در واقع هدف من این است که مثلا وقتی عبارتی در باکس نام وارد میشود دیگر رکوردهایی که نام آنها null است نباید لیست شوند ولی در عوض تمام رکورد هایی که آدرس آنها چه null باشد چه نباشد باید لیست شوند و بلعکس
در واقع اگر در باکسی مثلا نام ، عبارتی تایپ شد or is null برای اون فیلد باید غیر فعال شود و فقط برای فیلدهای دیگر عمل کند تا عمل جستجو به درستی صورت گیرد.

امید وارم منظورم را رسانده باشم
باز هم از توجه شما ممنونم
سلام
موضوع يك كم پيچيده شد. ولي هر معمائي بايد يك راه حلي داشته باشد.
الآن در محل كارم هستم و سرم خيلي شلوغ است ، انشاءالله شب رسيدم منزل سعي مي كنم راه حلي براي برطرف شدن اين مشكل پيدا كنم .
يا علي

soroush_k12
سه شنبه 20 اسفند 1392, 13:43 عصر
سلام
موضوع يك كم پيچيده شد. ولي هر معمائي بايد يك راه حلي داشته باشد.
الآن در محل كارم هستم و سرم خيلي شلوغ است ، انشاءالله شب رسيدم منزل سعي مي كنم راه حلي براي برطرف شدن اين مشكل پيدا كنم .
يا علي
با سلام
از این که برای پاسخگویی سوالات ما وقت میگذارید ممنونیم

alirezabahrami
سه شنبه 20 اسفند 1392, 21:01 عصر
سلام
موضوع يك كم پيچيده شد. ولي هر معمائي بايد يك راه حلي داشته باشد.
الآن در محل كارم هستم و سرم خيلي شلوغ است ، انشاءالله شب رسيدم منزل سعي مي كنم راه حلي براي برطرف شدن اين مشكل پيدا كنم .
يا علي
سلام
نمونه شمارا اصلاح کردم آنهم با چندین خط کد نویسی که اصلاً فکرش را نمی کردم .
البته استفاده از کدهای فوق باعث چپ چین شدن لیست باکس می گردد که برای راست چین شدن آن نیاز به بکار بردن ترفندهائی است که نیاز به کد نویسی های زیادی دارد ولی بنده شخصاً برای اینگونه موارد بجای لیست باکس از سابفرم استفاده می کنم .
متاسفانه قادر به آپلود فایل از طریق مدیریت ضمیمه ها و از طریق سایت های دیگرنیستم .
لذا کدها را در اینجا قرار میدهم و شما عیناً تمام این کدها را کپی و آن را جایگزین کدهای برنامه خودت کن!


Dim MyDatabase As Database
Dim MyQueryDef As QueryDef
Dim sql As String
Private Sub Searching()
Set MyDatabase = CurrentDb()
Set MyQueryDef = MyDatabase.QueryDefs("Query1")
If (Not IsNull(Form!search2) Or search2 <> "") And (IsNull(Form!search21) Or search21 = "") Then
sql = "SELECT T1.ID, T1.adres, T1.nam FROM t1 WHERE (((T1.adres) Like ""*"" & [Forms]![Search]![Search21] & ""*"" Or (T1.adres) Is Null) AND ((T1.nam) Like ""*"" & [Forms]![Search]![Search2] & ""*"" and (T1.nam) Is Not Null));"
ElseIf (Not IsNull(Form!search21) Or search21 <> "") And (IsNull(Form!search2) Or search2 = "") Then
sql = "SELECT t1.ID, t1.adres, t1.nam FROM t1 WHERE (((t1.adres) Like ""*"" & [Forms]![Search]![Search21] & ""*"" and (t1.adres) Is Not Null) AND ((t1.nam) Like ""*"" & [Forms]![Search]![Search2] & ""*"" Or (t1.nam) Is Null));"
ElseIf (Not IsNull(Form!search21) Or search21 <> "") And (Not IsNull(Form!search2) Or search2 <> "") Then
sql = "SELECT t1.ID, t1.adres, t1.nam FROM t1 WHERE (((t1.adres) Like ""*"" & [Forms]![Search]![Search21] & ""*"" and (t1.adres) Is Not Null) AND ((t1.nam) Like ""*"" & [Forms]![Search]![Search2] & ""*"" Or (t1.nam) Is Not Null));"
End If
MyQueryDef.sql = sql
MyQueryDef.Close
QuickSearch.RowSource = ""
QuickSearch.RowSource = "Query1"
Me.QuickSearch.Requery
Text10 = QuickSearch.ListCount
End Sub
Private Sub Command5_Click()
Me.search = ""
Me.search2 = ""
Me.search1 = ""
Me.search21 = ""
Form_Load
End Sub
Private Sub Form_Load()
Set MyDatabase = CurrentDb()
Set MyQueryDef = MyDatabase.QueryDefs("Query1")
sql = "SELECT t1.ID, t1.adres, t1.nam FROM t1;"
MyQueryDef.sql = sql
MyQueryDef.Close
QuickSearch.RowSource = ""
QuickSearch.RowSource = "Query1"
QuickSearch.Requery
Text10 = QuickSearch.ListCount
End Sub
Private Sub Search_Change()
Dim vSearchString As String
vSearchString = search.Text
search2.Value = vSearchString
Searching
End Sub
Private Sub search_KeyDown(KeyCode As Integer, Shift As Integer)
Set MyDatabase = CurrentDb()
Set MyQueryDef = MyDatabase.QueryDefs("Query1")
If (IsNull(Form!search2) Or search2 = "") And (IsNull(Form!search21) Or search21 = "") Then
sql = "SELECT t1.ID, t1.adres, t1.nam FROM t1;"
MyQueryDef.sql = sql
MyQueryDef.Close
QuickSearch.RowSource = ""
QuickSearch.RowSource = "Query1"
Me.QuickSearch.Requery
Text10 = QuickSearch.ListCount
End If
End Sub
Private Sub search_KeyUp(KeyCode As Integer, Shift As Integer)
Set MyDatabase = CurrentDb()
Set MyQueryDef = MyDatabase.QueryDefs("Query1")
If (IsNull(Form!search2) Or search2 = "") And (IsNull(Form!search21) Or search21 = "") Then
sql = "SELECT t1.ID, t1.adres, t1.nam FROM t1;"
MyQueryDef.sql = sql
MyQueryDef.Close
QuickSearch.RowSource = ""
QuickSearch.RowSource = "Query1"
Me.QuickSearch.Requery
Text10 = QuickSearch.ListCount
End If
End Sub
Private Sub search1_Change()
Dim vSearchString As String
vSearchString = search1.Text
search21.Value = vSearchString
Searching
End Sub
Private Sub search1_KeyDown(KeyCode As Integer, Shift As Integer)
Set MyDatabase = CurrentDb()
Set MyQueryDef = MyDatabase.QueryDefs("Query1")
If (IsNull(Form!search2) Or search2 = "") And (IsNull(Form!search21) Or search21 = "") Then
sql = "SELECT t1.ID, t1.adres, t1.nam FROM t1;"
MyQueryDef.sql = sql
MyQueryDef.Close
QuickSearch.RowSource = ""
QuickSearch.RowSource = "Query1"
Me.QuickSearch.Requery
Text10 = QuickSearch.ListCount
End If
End Sub
Private Sub search1_KeyUp(KeyCode As Integer, Shift As Integer)
Set MyDatabase = CurrentDb()
Set MyQueryDef = MyDatabase.QueryDefs("Query1")
If (IsNull(Form!search2) Or search2 = "") And (IsNull(Form!search21) Or search21 = "") Then
sql = "SELECT t1.ID, t1.adres, t1.nam FROM t1;"
MyQueryDef.sql = sql
MyQueryDef.Close
QuickSearch.RowSource = ""
QuickSearch.RowSource = "Query1"
Me.QuickSearch.Requery
Text10 = QuickSearch.ListCount
End If
End Sub




یا علی

soroush_k12
سه شنبه 20 اسفند 1392, 23:13 عصر
با سلام و عرض خسته نباشد
واقعا دکمه تشکر به تنهایی به هیچ وجه نمیتواند ذره ای از زحمات و وقتی را که برای این کار صرف نمودید را توصیف کند
کد ها را عینا کپی کردم ولی هر جا که این عبارت و یا شبیه این عبارت وجود دارد:
<span class="ku3l9bp8i" id="ku3l9bp8i_4">String</span>
کد به رنگ قرمز شده و ارور های فراوانی هنگام باز شدن میدهد.

soroush_k12
چهارشنبه 21 اسفند 1392, 12:18 عصر
با سلام و عرض خسته نباشد
واقعا دکمه تشکر به تنهایی به هیچ وجه نمیتواند ذره ای از زحمات و وقتی را که برای این کار صرف نمودید را توصیف کند
کد ها را عینا کپی کردم ولی هر جا که این عبارت و یا شبیه این عبارت وجود دارد:
<span class="ku3l9bp8i" id="ku3l9bp8i_4">String</span>
کد به رنگ قرمز شده و ارور های فراوانی هنگام باز شدن میدهد.
با عر ض معذرت. همه چی درست شد و کاملا همان چیزی است که من میخواستم .فکر کنم اشکال در کپی و پیست کردنم بود
باز هم ممنون جناب بهرامی
اصلا به قیافه این سوال نمیومد همچین جواب پر دردسری داشته باشه:متعجب::لبخندساده:
تازه مشکل اصلی این جاست که در نمونه اصلی که در برنامه ام ازش استفاده میکنم این جسیتجو روی 8 فیلد انجام میشه نه 2 تا!!!
با این روش شما که فکر نمیکنم بشه کد رو به بیشتر از 2 فیلد بسط داد؟؟!!

alirezabahrami
چهارشنبه 21 اسفند 1392, 17:17 عصر
با عر ض معذرت. همه چی درست شد و کاملا همان چیزی است که من میخواستم .فکر کنم اشکال در کپی و پیست کردنم بود
باز هم ممنون جناب بهرامی
اصلا به قیافه این سوال نمیومد همچین جواب پر دردسری داشته باشه:متعجب::لبخندساده:
تازه مشکل اصلی این جاست که در نمونه اصلی که در برنامه ام ازش استفاده میکنم این جسیتجو روی 8 فیلد انجام میشه نه 2 تا!!!
با این روش شما که فکر نمیکنم بشه کد رو به بیشتر از 2 فیلد بسط داد؟؟!!
سلام
البته ناگفته نماندکه بنده با عجله ازاین روش استفاده کردم ؛ شاید با بررسی بشتر بتوان روشی آسانتر را بکار بست . راستش خودم هم یک کم کنجکاو شدم که برای فیلدهای بشتر ازچه روشی باید استفاده کرد ولذا بدم نمی آید با فایل اصلی شما یک کم کلنجار برم و راهی برای آن پیدا کنم .
یا علی

soroush_k12
چهارشنبه 21 اسفند 1392, 22:26 عصر
سلام
البته ناگفته نماندکه بنده با عجله ازاین روش استفاده کردم ؛ شاید با بررسی بشتر بتوان روشی آسانتر را بکار بست . راستش خودم هم یک کم کنجکاو شدم که برای فیلدهای بشتر ازچه روشی باید استفاده کرد ولذا بدم نمی آید با فایل اصلی شما یک کم کلنجار برم و راهی برای آن پیدا کنم .
یا علی
سلام
بسیار ممنون
http://www.uplooder.net/cgi-bin/dl.cgi?key=b5d129a0d1cfcf73a168e561d3bc4fb9

alirezabahrami
پنج شنبه 22 اسفند 1392, 10:08 صبح
سلام
البته ناگفته نماندکه بنده با عجله ازاین روش استفاده کردم ؛ شاید با بررسی بشتر بتوان روشی آسانتر را بکار بست . راستش خودم هم یک کم کنجکاو شدم که برای فیلدهای بشتر ازچه روشی باید استفاده کرد ولذا بدم نمی آید با فایل اصلی شما یک کم کلنجار برم و راهی برای آن پیدا کنم .
یا علی
سلام
کاری که با عجله انجام شود نتیجه اش بهتر از این نمی شود .
سروش عزیز ! برنامه را با حداقل کد اصلاح کردم ؛ البته در نمونه اصلاح شده بنده بجای استفاده از لیست باکس از سابفرم استفاده کردم . همانطور که قبلاً عرض کردم استفاده از لیست باکس مشکلاتی دارد که یکی از آنها چپ چین شدن ستون ها به هنگام Requery لیست باکس می باشد .
ضمناًپیشنهاد می کنم نمای سابفرم را به حالت Continuous Forms قرار بدهید ( در این نما شما می توانید اندازه ستون های سابفرم را بصورت ثابت مساوی فیلدهای که برای سرچ انتخاب کرده اید قرار بدهیدو آن را شکیلتر کنید .
نمونه را امتحان کن و اگر مشکلی داشت بفرما تا انشاءالله برطرف نمایم.
و یک مطلب دیگر اینکه من در نمونه فوق فیلدهای ID و TIC را در دستور جستجو منظور نکردم چون احساس کردم استفاده از آنها درجستجو خیلی مهم نیست و چنانچه خواستی از این دو فیلد هم استفاده کنید کافی است در اولین و بالاترین کد آنها را نیز همانند فیلد های دیگر اضافه کنید .
نمونه را از لینک زیر دریافت کن !
http://s5.picofile.com/file/8116648300/search1_8field.rar.html
یا علی

soroush_k12
پنج شنبه 22 اسفند 1392, 12:32 عصر
سلام
کاری که با عجله انجام شود نتیجه اش بهتر از این نمی شود .
سروش عزیز ! برنامه را با حداقل کد اصلاح کردم ؛ البته در نمونه اصلاح شده بنده بجای استفاده از لیست باکس از سابفرم استفاده کردم . همانطور که قبلاً عرض کردم استفاده از لیست باکس مشکلاتی دارد که یکی از آنها چپ چین شدن ستون ها به هنگام Requery لیست باکس می باشد .
ضمناًپیشنهاد می کنم نمای سابفرم را به حالت Continuous Forms قرار بدهید ( در این نما شما می توانید اندازه ستون های سابفرم را بصورت ثابت مساوی فیلدهای که برای سرچ انتخاب کرده اید قرار بدهیدو آن را شکیلتر کنید .
نمونه را امتحان کن و اگر مشکلی داشت بفرما تا انشاءالله برطرف نمایم.
و یک مطلب دیگر اینکه من در نمونه فوق فیلدهای ID و TIC را در دستور جستجو منظور نکردم چون احساس کردم استفاده از آنها درجستجو خیلی مهم نیست و چنانچه خواستی از این دو فیلد هم استفاده کنید کافی است در اولین و بالاترین کد آنها را نیز همانند فیلد های دیگر اضافه کنید .
نمونه را از لینک زیر دریافت کن !
http://s5.picofile.com/file/8116648300/search1_8field.rar.html
یا علی
سلام جناب بهرامی
عالی بود.از وقت و زحمتی که صرف کردید بینهایت ممنونم

alirezabahrami
پنج شنبه 04 اردیبهشت 1393, 20:29 عصر
سلام
کاری که با عجله انجام شود نتیجه اش بهتر از این نمی شود .
سروش عزیز ! برنامه را با حداقل کد اصلاح کردم ؛ البته در نمونه اصلاح شده بنده بجای استفاده از لیست باکس از سابفرم استفاده کردم . همانطور که قبلاً عرض کردم استفاده از لیست باکس مشکلاتی دارد که یکی از آنها چپ چین شدن ستون ها به هنگام Requery لیست باکس می باشد .
ضمناًپیشنهاد می کنم نمای سابفرم را به حالت Continuous Forms قرار بدهید ( در این نما شما می توانید اندازه ستون های سابفرم را بصورت ثابت مساوی فیلدهای که برای سرچ انتخاب کرده اید قرار بدهیدو آن را شکیلتر کنید .
نمونه را امتحان کن و اگر مشکلی داشت بفرما تا انشاءالله برطرف نمایم.
و یک مطلب دیگر اینکه من در نمونه فوق فیلدهای ID و TIC را در دستور جستجو منظور نکردم چون احساس کردم استفاده از آنها درجستجو خیلی مهم نیست و چنانچه خواستی از این دو فیلد هم استفاده کنید کافی است در اولین و بالاترین کد آنها را نیز همانند فیلد های دیگر اضافه کنید .
نمونه را از لینک زیر دریافت کن !
http://s5.picofile.com/file/8116648300/search1_8field.rar.html
یا علی
سلام سروش عزیز!
می گم در نمونه فوق تا حالا به مشکلی بر نخورده اید ؟
من در هنگام جستجو از طریق هرکدام از تکست باکس ها متوجه مشکل کوچکی شدم که قابل برطرف شدن است ؛ خواستم ببینم شما هم متوجه مشکلی شده اید یا نه؟
یا علی

soroush_k12
پنج شنبه 04 اردیبهشت 1393, 22:22 عصر
سلام سروش عزیز!
می گم در نمونه فوق تا حالا به مشکلی بر نخورده اید ؟
من در هنگام جستجو از طریق هرکدام از تکست باکس ها متوجه مشکل کوچکی شدم که قابل برطرف شدن است ؛ خواستم ببینم شما هم متوجه مشکلی شده اید یا نه؟
یا علی
سلام جناب بهرامی
من البته خودم کاربر اصلی برنامه نیستم. ولی مواردی رو که خودم بصورت نمونه تست کردم مشکل خاصی نداشت و کاملا درست کار میکرد.
تنها مشکل برمیگرده به همون مشکل حروف "ی" و "ک" که بسته به لی اوت کیبرد شما ممکنه اون کلمات رو پیدا نکنه که اون هم فکر کنم با کد نویسی قابل حل باشه.
خدا نگه دار

alirezabahrami
پنج شنبه 04 اردیبهشت 1393, 22:42 عصر
سلام جناب بهرامی
من البته خودم کاربر اصلی برنامه نیستم. ولی مواردی رو که خودم بصورت نمونه تست کردم مشکل خاصی نداشت و کاملا درست کار میکرد.
تنها مشکل برمیگرده به همون مشکل حروف "ی" و "ک" که بسته به لی اوت کیبرد شما ممکنه اون کلمات رو پیدا نکنه که اون هم فکر کنم با کد نویسی قابل حل باشه.
خدا نگه دار
با سلام مجدد
مثلاً در در تکست باکس نام مشترک نام فاطمه سندی را بطور کامل جهت جستجو تایپ کن و نتیجه را ببین!
می بینی بین اسامی ای که مرکب است ( از دو یا چند کلمه تشکیل شده ) فاصله ایجاد نمی شود .
درسته ؟
یا علی

soroush_k12
پنج شنبه 04 اردیبهشت 1393, 23:12 عصر
با سلام مجدد
مثلاً در در تکست باکس نام مشترک نام فاطمه سندی را بطور کامل جهت جستجو تایپ کن و نتیجه را ببین!
می بینی بین اسامی ای که مرکب است ( از دو یا چند کلمه تشکیل شده ) فاصله ایجاد نمی شود .
درسته ؟
یا علی
کاملا درسته .من به این مورد دقت نکرده بودم.کلا کلید space کار نمیکند!!

alirezabahrami
جمعه 05 اردیبهشت 1393, 00:29 صبح
با سلام مجدد
مثلاً در در تکست باکس نام مشترک نام فاطمه سندی را بطور کامل جهت جستجو تایپ کن و نتیجه را ببین!
می بینی بین اسامی ای که مرکب است ( از دو یا چند کلمه تشکیل شده ) فاصله ایجاد نمی شود .
درسته ؟
یا علی

کاملا درسته .من به این مورد دقت نکرده بودم.کلا کلید space کار نمیکند!!

اما راه چاره :
کدهای زیر را جایگزین کدهای رویداد Change هر کدام از تکست باکس ها کن !


Dim strSearch As String
Dim vSearchString As String
vSearchString = s1.Text
strSearch = vSearchString
cmdfilter
s1 = strSearch
DoCmd.GoToControl "S1"
s1.SelStart = s1.SelLength



ضمناً بجای s1 نام تکست باکس مربوطه را جایگزین کن!
یا علی