سلام
لطفا من را رهنمایی کنید من میخواهم دیتابیسم را بر اساس چند آیتم فیلتر کنم
مثلا بر اساس تاریخ و نام خانوادگی
از چه کدی باید استفاده کنم
(بانک اطلاعاتیم با اکسس است)
با تشکر از اساتید محترم
کمی عجله دارم:خجالت:
Printable View
سلام
لطفا من را رهنمایی کنید من میخواهم دیتابیسم را بر اساس چند آیتم فیلتر کنم
مثلا بر اساس تاریخ و نام خانوادگی
از چه کدی باید استفاده کنم
(بانک اطلاعاتیم با اکسس است)
با تشکر از اساتید محترم
کمی عجله دارم:خجالت:
سلام دوست عزیز .
کوئری زیر جدول YourTableName رو بر اساس تاریخ مشخص ( از تاریخ... تا تاریخ... ) و با نام... فیلتر می کند .
RS.Open "SELECT * FROM YourTableName WHERE YourDateField>='" & txtDate1.Text & "' AND YourDateField<='" & txtDate2.Text & "' AND YourNameField='" & txtName.Text & "'"موفق باشید .
سلام
در عبارت
چطور میتوان شرط را بگونه ای در نظر گرفت که وقتی تکست باکس خالی شد و بر روی گمه اجرا کننده دستور sql کلیک کردیم کلیه رکوردها به حالت اولیه برگردد و از فیلتر خارج شودنقل قول:
RS.Open "SELECT * FROM YourTableName WHERE YourDateField>='" & txtDate1.Text & "' AND YourDateField<='" & txtDate2.Text & "' AND YourNameField='" & txtName.Text & "'"
OR YourDateField is null
ممنون و متشکر
سلام دوست عزیز .
کافیه با یک شرط خالی بودن TextBox رو بررسی کنید و بعد تصمیم گیری کنید .
If Text1.Text = vbNullString Thenموفق باشید .
RS.Open "SELECT * FROM YourTableName"
Else
'....
End If
سلام
من میخوام در بانکم یک جستجوی تودرتو انجام بدمنقل قول:
کافیه با یک شرط خالی بودن TextBox رو بررسی کنید و بعد تصمیم گیری کنید .
باید همه دستورات در یک عبارت sql بگنجد
فرض کنید من میخوام از تمام رکوردهام نام تمام افرادی که
نامشان علی است
قد آنها بالای 180 سانت است
و معدلشان 20 است
رو دربیارم
یک جستجوی ترکیبی است
معدلشان 20 است
نامشان علی است
قد آنها بالای 180 سانت است
پارامترهای جستجو اصلاً مشخص نیست
با سرچ اول 20 رکورد یافت میشود از 50 رکورد
با جستجوی دوم 10 رکورد از 20 رکورد
و با جستجوی سوم 3 رکورد از 10 رکورد باقی میماند
شاید هم جای بعضی از پارامترها خالی باشد که نباید تاثیری در جستجو بگذارد
فرض کنید طبق دستور شما در جستجوی دوم از سه جستجوی متوالی یک تکست باکس خالی باشد و :
If Text1.Text = vbNullString Then
RS.Open "SELECT * FROM YourTableName"
Else
'....
End If
دو مرتبه ما به تعداد رکوردهای اولیه برمیگردیم ، یعنی همان 50 رکورد ، که با این شرط ما دیگر یک جستجوی ترکیبی نداریم
اگر امکانش هست شرط خالی بودن تکست باکس را در یک عبار sql بیاورید
سلام .نقل قول:
سلام
نقل قول:
کافیه با یک شرط خالی بودن TextBox رو بررسی کنید و بعد تصمیم گیری کنید .
من میخوام در بانکم یک جستجوی تودرتو انجام بدم
باید همه دستورات در یک عبارت sql بگنجد
فرض کنید من میخوام از تمام رکوردهام نام تمام افرادی که
نامشان علی است
قد آنها بالای 180 سانت است
و معدلشان 20 است
رو دربیارم
یک جستجوی ترکیبی است
معدلشان 20 است
نامشان علی است
قد آنها بالای 180 سانت است
پارامترهای جستجو اصلاً مشخص نیست
با سرچ اول 20 رکورد یافت میشود از 50 رکورد
با جستجوی دوم 10 رکورد از 20 رکورد
و با جستجوی سوم 3 رکورد از 10 رکورد باقی میماند
شاید هم جای بعضی از پارامترها خالی باشد که نباید تاثیری در جستجو بگذارد
فرض کنید طبق دستور شما در جستجوی دوم از سه جستجوی متوالی یک تکست باکس خالی باشد و :
کد:
If Text1.Text = vbNullString Then
RS.Open "SELECT * FROM YourTableName"
Else
'....
End If
دو مرتبه ما به تعداد رکوردهای اولیه برمیگردیم ، یعنی همان 50 رکورد ، که با این شرط ما دیگر یک جستجوی ترکیبی نداریم
اگر امکانش هست شرط خالی بودن تکست باکس را در یک عبار sql بیاورید
Dim strQuery As String
Dim blnS As Boolean
strQuery = "SELECT * FROM YourTableName"
If txtName.Text <> vbNullString Then
strQuery = strQuery & " WHERE YourNameField='" & txtName.Text & "'"
blnS = True
End If
If txtHeight.Text <> "" Then
If blnS Then
strQuery = strQuery & " AND YourHeightField>" & Val(txtHeight.Text)
Else
strQuery = strQuery & " WHERE YourHeightField>" & Val(txtHeight.Text)
blnS = True
End If
End If
If txtAverage.Text <> "" Then
If blnS Then
strQuery = strQuery & " AND YourAverageField=" & Val(txtAverage.Text)
Else
strQuery = strQuery & " WHERE YourAverageField=" & Val(txtAverage.Text)
blnS = True
End If
End If
If blnS = True Then rs.Open strQuery, cn, adOpenStatic, adLockBatchOptimistic
موفق باشید .
باسلام
دوستان در نمونه زیر یک پروژه بانک اطلاعاتی ساده قرار دادم که میخوام درش با استفاده از فیلد های مختلف جستجوهای تودرتو یا پله ای انجام دهم
بطوریکه نتیجه جستجوی یک آیتم منبعی برای جستجوی آیتم بعدی باشه و هرکدام از این فیلد ها مستقل از فیلد دیگر باشد
در ضمن خواهشاً عملیات جستجو بگونه ای باشد که اگر جستجو بر اساس یک فیلد صورت گرفت و بعد آن تکسکت باکس رو خالی کردیم رکوردها به حالت اولیه خود برگردد
مهمتر از همه اینکه تمام عملیات جستجوی فیلدها مستقل از هم هست و جستجوهای پله ای و ترکیبی است
بعد از پایان جستجو هم بتونم نتایج باقی مونده در دیتا گرید رو در یک ریپورت نمایش بدم(گزارش)
امکانش هست که تمام عملیات جستجو در یک عبارت sql نوشت
(پس هر تکست باکس و کمبو باکس دوحالت دارد ، خالی و پر)
دوستان برای اینکه منظورم رو واضح گفته باشم یک نمونه پروژه با اکسس درست کردم که دقیقاً منظورم درش نشون دادم
فایل اکسس رو باز کنید و به کوئری Table1 Query در حالت sql view نگاه بندازید
دقیقاً یک همچین چیزی در vb و در پروژه ضمیمه میخوام
خیلی خیلی از لطفتون ممنون و متشکرم
یاعلی
ali190 عزیز سلام،
سورس کد شما رو دیدم و به مشکلاتی که داشتین تا حدودی واقف شدم.
من اینجا همکاری دارم که مثل شما به Access مسلطه و با Access کدهاشو میزنه همیشه به شوخی بهش می گم دید انتظاعی :قهقهه: (البته جسارت نشه خدمتتون)
اول اینکه شما مشکل فونت عربی (حرف ی و پ) رو تو بانکتون دارین اول اونو اصلاح کنین (تو انجمن ها زیاد دربارش نوشتن) من برای اینکه بتونم کد رو بنویسم قسمت تحصیلات رو لاتین زدم.
دوم اینکه در رابطه با خالی کردن تکست باکس و حساب نکردن اون تو سرچ SQL شما می تونید از عبارت Like استفاده کنین (تو کد براتون با توضیحات زدم) وقتی که از Like استفاده می کنین و تکست باکستون خالیه، میاد اون تکست باکس خالی رو به منزله همه چی (*) در نظر می گیره.
منتها برای تاریخ تولد که باید میان دو تا تاریخ بگرده تنها راهی که به نظرم میرسه اینه که از Between استفاده کنین تو کد غیر فعالش کردم آخه اگه تاریخ رو دقیق بهش ندین نمی تونه نتیجه ای براتون بیاره و اگرم فیلد از تاریخ یا تا تاریخ رو خالی بذارین باز هم به همین صورت چیزی نشونتون نمیده (چون Like نیست نتیجه ای تو سرچ SQL پیدا نمی کنه)
برای کمبو باکس تحصیلات هم دو حالت داره یا از Like استفاده کنی که اونوقت اگه دنبال دیپلمه ها بگردی فوق دیپلم ها هم نشون میده، یا باید برداری از (=) استفاده کنی که به مشکل خالی کردن تکست باکس و نشان ندادن نتیجه تو جستجو می خوری
یه نگاهی به سورس کدی که براتون ضمیمه کردم کنید شاید به دردتون بخوره :خجالت:
سلام
تشکر میکنم از دوست بسیار عزیزم جناب kitcat_m18 که آموزش خیلی خوبی به بنده در خصوص مقوله سرچ دادند
واقعاً ممنون
اما در فایل اصلاح بازهم مشکل دارم
فرض کنید در بین 1000000 رکورد میخواهید افرادی را که نامشان فقط "علی" است را بیرون بکشید (مثلاً فرض کنید تولد حضرت علی است و میخواهند به افرادی که نامشان علی است و یک سری خصوصیات دیگر دارند (سایر پارامترهای جستجو که تقدم و تاخرشان مشخص نیست)جایزه بدهند)
با این سرچ که دوستمون درست کردند چون از دستور Like استفاده میکنند رکوردهای مشابه رو هم بیرون میکشد مثل علیرضا ، امیر علی و... و هر رکوردی کلمه علی در اون هست
اما در اکسس این کار براحتی میسر هست ، با دستور زیر:
SELECT Table1.as, Table1.ass
FROM Table1
WHERE (((Table1.as)=[Forms]![form1]![Text0] Or [Forms]![form1]![Text0] Is Null));
البته این دستور فقط برای یک فیلد است و برای تعداد فیلدهای بیشتر این دستور پیچیده تر میشود
نکته مهم در عبات بالا استفاده از دستور Is Null هست
[Forms]![form1]![Text0] هم همون تکستی هست که در فرم vb هست که در اکسس تکست باکس هر فرم رو اینطوری نشون میدن (هیچ فرقی با هم نمیکنه)
در عبارت بالا هر رکورد از جدول که مساوی با text0بود انتخاب میشود و اگر هم text0 خالی باشد تاثیری در عملیات جستجو نمیگذارد
با این کار دقیقاً کلمه هدف مورد استخراج قرار میگیرد
من تعجم از این هست که اکثر دوستان متفق القول بر این قضضیه پا فشاری میکنند که vb6 در زمینه بانک اطلاعاتی دارای امکاناتی بمراتب بیشتر از خود اکسس هست ، این کار در اکسس به راحتی در عرض چند ثانیه (طبق این نمونه ) قابل انجامه ولی در vb هر کاری کردم نشد که نشد
از اساتید خواهشمندم بنده رو در این زمینه راهنمایی بفرمائید
ممنون ومتشکر از لطف همه عزیران
یاعلی
سلام .
ابتدا از این که کمی دیر پاسخ دادم عذر میخوام . متاسفانه دسترسیم به نت فوقالعاده کم شده .
ali190 من منظور شما رو در همان ابتدا فهمیدم و راهنماییتون کردم، اگه به کد هایی که در پست 6 دادم خدمتتون توجه کرده بودید مشکلاتان حل شده بود !
به هر حال با روشی که در پست 6 به آن اشاره کردم نمونه ای برای شما ضمیمه کردم ، با این روش می تونید N شرط رو در جستجو دخیل کنید .
در ضمن بانکتون هم مشکل نا هماهنگی فونت با برنامه رو داره !
موفق و پیروز باشید .
جناب butterfly8528 گرامی
دیدگاه من با شما رو این مسئله کمی تفاوت داشته، من می خواستم با Where Close بیان کنم شما زودتر زحمتش رو کشیدین :لبخندساده:
مهارت شما تو کد زدن خیلی بیشتر از منه با تشکر از راهنماییتون. :خجالت:
سلام دوست عزیز .
خواهش می کنم، این نظر لطف شماست .
مهم اینه که تاپیک و دوستمون به نتیجه رسیدند .
موفق باشید .