ورود

View Full Version : چگونه datagrid را بر اساس چند فيلد فيلتر كنيم؟



abbaspour
دوشنبه 26 اسفند 1387, 09:00 صبح
با سلام خدمت دوستان محترم
من يه ديتابيس access دارم و يه برنامه با vb نوشتم.
مي خوام براساس 4 فيلد ديتاهامو فيلتر كنم و توي dfatagrid نمايش بدم. اگه 4 تا فيلدم رو توي يه دستور sql بذارم بايد حتما هر 4 فيلد براي جستجو وارد بشه چون بين فيلدهام از عملگر and استفاده مي كنم. در صورتي كه ممكنه بخوام براساس 2 يا 3 يا حتي 1 فيلد query بگيرم.
لطفا راهنمايي كنيد.
با تشكر

m_vb1386
دوشنبه 26 اسفند 1387, 09:31 صبح
یک case تعریف کن و دستورات sql رو بصورت مجزا برای هرکدوم تعریف کن و در نهایت رکورد ست رو ایجاد کن

abbaspour
دوشنبه 26 اسفند 1387, 10:10 صبح
با تشكر
يعني 16 حالت تعريف كنم؟ راه حل ديگه اي نداره؟

kh-hamid
دوشنبه 26 اسفند 1387, 15:11 عصر
سلام میتونید یک حلقه تکرار تعریف کنید و فیلد هاتون رو برای انتخاب که آیا در فیلتر شرکت داشته باشند یا نه با استفاده از چک باکس مشخص کنید و این چک باکس ها هم یک آرایه باشند و این آرایه را با استفاده از یک متغیر نوع ثابت تعریف کنید .
من در حال حاضر چون خیلی وقته پروژه کار نکردم دقیقا یادم نیست آرایه و تعریف نوع ثابت چطوریه ولی اصولش اینطور هست .
در مرحله اول یک آرایه از چک باکس ها بر روی شی بوجود میاریم که این کار با کپی اولین چک باکس و بازنشانی آن از حافظه امکان پذیر است . که بعد از این کار شما برای مثال 5 تا چک باکس با یک نام دارید که فقط index اون ها از 0 تا 4 خواهد بود .
حالا باید نوع ثابت خود را تعریف کنید که آن باید 5 پارامتر و هر پارامتر را نام فیلد مورد نظر قرار بدید فرض می کنیم نوع ثابت شما با نام m باشد .
خوب حالا کافیه بجای چندین if این کار رو بکنید .

"datasoure="select * from table1
a=0
for i=0 to 4
if (check(i)=true) and (a=0) then
datasoure=datasoure & " where " & m(i) & "= " & val(text1(i)) m
a=1
else
datasoure=datasoure & " and " & m(i) & "= " & val(text1(i)) m
end if
next i

مثال بالا برای فیلد های عددی درسته که شما برای غیر عدد باید از فرمول تبدیل تکست باکس به متن که حتما بلدید استفاده کنید در ضمن باید آرایه ای از تکست باکس هم درست کنید مثلا اگرشما 5 تا فیلد دارید و می خواهید یک جستجو کنید که هر 5 تا در اون دخیل هستند باید برای تایپ 5 پارامتر مورد نظرتون 5 تا تکست باکس داشته باشید .
فقط میمونه نوع تعریف شده ثابت که اگر خودتون می دونید بگید تا من هم یاد گرفته باشم چون الان به کتاب دسترسی ندارم که براتون بنویسم و اگر نمیدونید کافیه که برای کار راه اندازی فعلا یک متغیر از نوع آرایه تعریف کنید و اون رو در فرم لود مقدار دهی کنید .
dim m(5) as string