PDA

View Full Version : جستجو بر اساس فیلد



dankoob
جمعه 03 بهمن 1399, 10:47 صبح
با سلام
من یک جدول با چند فیلد دارم به عنوان مثال فیلد 1 و 2 و 3 و 4 و بر اساس آن یک کوئری ساختم
می خواهم یک فرم درست کنم که در آن یک کمبوباکس باشد و در این کمبوباکس اسامی فیلدها باشد و با انتخاب هر کدوم فقط نتایج آن فیلد را ببنیم
مثلا اگر از کمبوباکس 3 را انتخاب کنم وقتی کوئری باز می شود فقط اطلاعات فیلد 3 را نشان دهد و سایر فیلدها نمایش داده نشوند

padide55
جمعه 03 بهمن 1399, 13:47 عصر
سلام
اولین مطلب این هست که لیست فیلدهای جدول رو داخل لیست باکس بیارید .
برای این منظور مطابق فایل نمونه (https://barnamenevis.org/attachment.php?attachmentid=152577&d=1607164733) .
اول لیست فیلدهای جدول مورد نظر رو به لیست باکس اضافه کنید .
و یا لیست فیلدها رو دستی در لست باکس بیاورید.
جواب نهایی اینجاست
نهایتا باید یک کد select با sql درست کنید .که کوئری شما رو بسازه و اجرا کنه .
اون هم سخت نیست .
این کد را در دابل کلیک لیست باکس بگذارید براتون کوئری میسازه





'ایجاد متن کوئری
strSQL = "SELECT " & selectedfield & " FROM [" & tablename & "]"

'---------Delete the query if it already exists
DoCmd.DeleteObject acQuery, "queryname"


Set qdf = CurrentDb.CreateQueryDef("queryname", strSQL) ' ایجاد کوئری
DoCmd.OpenQuery qdf.Name ' باز کردن کوئری

'release memory
qdf.Close 'i changed qdef to qdf here and below
Set qdf = Nothing

padide55
شنبه 04 بهمن 1399, 10:09 صبح
نمونه اصلاح شده نهایی
کوئری خود را بساز
انتخاب فیلدهای مورد نظر از جدول و ایجاد و اجرای کوئری بر اساس فیلدهای انتخابی. با کد بیسیک

dankoob
یک شنبه 05 بهمن 1399, 15:25 عصر
با تشکر و سپاس از جناب Padide55:
در نمونه فایل زیر هدف من این است که وقتی در فرم ranking از کومبوباکس Parameter هر کدوم از گزینه های p1 یا p2 یا p3 را که انتخاب کنم در ساب فرم فقط همون فیلد نمایش داده بشه

padide55
یک شنبه 05 بهمن 1399, 23:14 عصر
سلام .
مشکل شما
تغییر کوئری لینک شده به ساب فرم هست .

فعلا راهی که به نظرم میرسه .خارج از روال کد نویسی بیسیک .
ایجاد کوئری append
و انتقال داده های مورد نظر به یک جدول لینک شده به ساب فرم هست .
قبل از انتقال هم باید جدول لینک شده خالی بشه با یک delete query

mazoolagh
دوشنبه 06 بهمن 1399, 16:20 عصر
با تشکر و سپاس از جناب Padide55:
در نمونه فایل زیر هدف من این است که وقتی در فرم ranking از کومبوباکس Parameter هر کدوم از گزینه های p1 یا p2 یا p3 را که انتخاب کنم در ساب فرم فقط همون فیلد نمایش داده بشه

راهنمایی جناب PADIDE55 در پست 2 کافی بنظر میاد.

اول موارد زیر رو درست کنین:
1- اسامی مثل YAER, MONTH برای اکسس معنی دار هست، نباید اونها رو بعنوان اسم فیلد بکار ببرین.
همچنین مقادیر تاریخ باید عدد ذخیره بشن.
2- فیلدهایی مثل شهر، استان، وضعیت استخدام، و ... باید از یک جدول دیگه و براساس کد عددی (نه مقدار حرفی) گرفته بشن.
3- در فرم جستجو موارد ردیف 2 باید بر اساس کد جستجو بشن.

بعد از درست کردن همه اینها، سابفرم نتایج رو UNBOUND کنین ولی اسامی فیلدها رو بر اساس کوئری که خواهید نوشت مشخص کنین.
حالا کافی هست از کدی شبیه کد زیر استفاده کنین:

Const SQL = "SELECT CITYID , @PX AS PX FROM TASK WHERE YYYY=@YEAR AND MM=@MM"
SET qtask_subform.FORM.RECORDSET=CURRENTDB.OPENRECOTDS ET(replace(replace(replace(SQL , "@MM" , MM) , "@YEAR" , YYYY) , "@PX", parameter))


با فرض این که YYYY کمبو انتختب سال و MM کمبو انتخاب ماه و PX و CITYID فیلدهای سابفرم هستن.

padide55
دوشنبه 06 بهمن 1399, 20:34 عصر
مشکل شما با همان روش ایجادsql حل شد .
کمی در کدها دقت کنید .
متن sql با رعایت تمامی فاصله ها و کاما و سایر موارد باید ایجاد بشه .
در نهایت باید با کد ارتباط کوئری فرم را تغییر داد تا کوئری جدید به ساب فرم معرفی بشه

نکته
چون کوئری به سابفرم ارتباط داره .قابل حذف و ویرایش نیست .به همین منظور ابتدا فرم به کوئری خودتون ارتباط داده میشه .
پس از ایجاد کوئری جدید. سابفرم به کوئری جدید متصل میشه .

dankoob
سه شنبه 07 بهمن 1399, 22:32 عصر
سپاس فراوان :تشویق::تشویق::تشویق:

padide55
چهارشنبه 08 بهمن 1399, 00:08 صبح
میتونستید سه تا کوئری درست کنید و با هر کد Parameter
یک کوئری به ساب فرم لینک بشه .
و نیازی به کد نویسی جهت sql نباشه.