PDA

View Full Version : سوال: شمردن فیلد با شرایط خاص ضمنا هرچی سرچ کردم چیزی پیدا نکردم



akbar4028
یک شنبه 31 خرداد 1394, 00:36 صبح
با سلام خدمت همه اساتید محترم بنده به یه مشکلی مواجه شدم که حل اون برام حائز اهمیته من می خوام طبق تصویر تعداد یک فیلد رو جوری بشمارم که نتایج عکس ذیل حاصل بشه ضمنا تواین کوئری فیلد id
ندارم و نمی تونم داشته باشم 132455

mazoolagh
یک شنبه 31 خرداد 1394, 10:56 صبح
هر خروجی که مورد نیاز باشه حتما متناظر با یک مسئله در دنیای واقعی هست.

الان این نوع شمارش خاص کاربردی هم داره یا فقط یا مسئله انتزاعی هست؟ چیزی شبیه به آزمون توانایی کدنویس!

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

شاگرد آرام
یک شنبه 31 خرداد 1394, 12:23 عصر
سلام دوست عزیز
برای اینکار شما دوراه دارید
قسمت اول برای هر دو راه مشترکه و اون اینه که یک ستون در کوئری بسازید که مقدار اون ستون از خروجی یک تابع بدست بیاد

راه اول استفاده از آرایه ها در تابع مورد نظره که چون vba در استفاده از آرایه های داینامیک کمی اذیت میکنه من استفاده نمی کنم . ولی اگه شما بتونید استفاده کنید قطعا بهینه تر از راه دومه

راه دوم اینه که شما یک جدول موقت خالی بسازید و دو فیلد برای اون قرار بدین مثل شکل
132467

بعد یک کوئری بسازید شامل دو ستون که سورس اون کوئری همون کوئری مورد نظر شما در شکلی که دادین هست و ستون اول فیلد کوئری شما و ستون دوم ارجاع فیلد یک به یک تابع مثل شکل
132468

متن تابع رو هم براتون میزارم

Function td(nm As String) As Integer

Dim rs As Recordset
Dim rs1 As Recordset

Set rs = CurrentDb.OpenRecordset("table2")
rs.AddNew
rs!fld_temp = nm
rs.Update

Set rs1 = CurrentDb.OpenRecordset("SELECT Count(Table2.id) AS CountOfid, Table2.fld_temp FROM Table2 WHERE Table2.fld_temp = '" & nm & "' GROUP BY Table2.fld_temp")
td = rs1!CountOfid

End Function

دقت کنید که قبل از اجرای کوئری باید مطمئن شید که جدول موقت شما حتما خالی بشه با دستور دلیت

حالا یه توضبحی در مورد تابع بهتون بدم و اون اینه که این تابع به ازای هر رکورد جدول شما یک بار اجرا میشه مقدار فیلد شما رو در جدول موقت قرار میده و بعد تو جدول موقت تعدادی از اون فیلد رو میشمره و جواب رو به تابع میده
به زبان ساده شما در رکورد اول یک علی دارید نام علی در جدول موقت ذخیره میشه . تعداد علی ها در جدول موقت شمرده میشه که جوابش میشه یک و مقدار رو برمیگردونه در رکورد دوم یک علی دیگر در جدول موقت ذخیره میشه و تعداد علی ها میشه 2 و همینطور الی آخر

akbar4028
یک شنبه 31 خرداد 1394, 22:53 عصر
باتشکر از حسن همکاری شما حقیقت شما که غریبه نیستید بنده می خوام از هر علی فقط 15 تای اول نمایش داده بشه و به تبع اون حسن هم همینطور.چیزی به ذهنم نرسید جز اینکه اینجوری بشمارمشون و بعد فیلتر کمتر از 15 رو اعمال کنم ولی با تفاسیر فوق چون جدول واقعی من سنگینه احتمالا کند اجرا شه.حالا دوستان اگه راه حل بهتری برای این موردی که گفتم سراغ دارید لطفا راهنمایی کنید اصلا نمی دونم شما تابع large(arrey;k اکسل رو رویت کردید و عملکرد اونو میدونید؟ اگه یه تابعی شبیه این تابع تو اکسس باشه که بیاد n مقدار از بیشترین رو که عدد هست به شرط علی و حسن فیلتر کنه مشکل من حل میشه این روهم بگم تاپ ولیو 15 تای اول رو فیلتر می کنه که مورد نظر من نیست

AbbasSediqi
پنج شنبه 04 تیر 1394, 02:51 صبح
برادر عزیز در خود اکسس در هنگام ساخت کوییری در کوییری ویزارد اگه نگاه کنی و بخونی نوشته که کوییری بر اساس تکراری


خوی برادر از اون استفاده کن


چرا خودت رو عذاب میدی




بعد هم حضرات وقتی میخواهید به کسی کمک کنید اگه نمیدونید چیزی نگید چون گمراهی رو بیشتر میکنه



برادر من کوییری بلد نیستید بگیرید چرا لقمه رو دور سرتون میچرخونید

خسته شدم از بس ملت بی جهت جواب میدن


شرمنده ولی واقعا اعصابم خورد شده . چون هر وقت یه سری زدم به این سایت از جواب های بیخود اعصابم خورد شده



باز خدا خیر بده مدیرای بخش و استادان بهرامی و پیروز مهر و چند تای دیگه رو که واقعا راهنمایی میکن



یا حق

Abbas Amiri
پنج شنبه 04 تیر 1394, 14:58 عصر
برادر عزیز در خود اکسس در هنگام ساخت کوییری در کوییری ویزارد اگه نگاه کنی و بخونی نوشته که کوییری بر اساس تکراری


خوی برادر از اون استفاده کن


چرا خودت رو عذاب میدی




بعد هم حضرات وقتی میخواهید به کسی کمک کنید اگه نمیدونید چیزی نگید چون گمراهی رو بیشتر میکنه



برادر من کوییری بلد نیستید بگیرید چرا لقمه رو دور سرتون میچرخونید

خسته شدم از بس ملت بی جهت جواب میدن


شرمنده ولی واقعا اعصابم خورد شده . چون هر وقت یه سری زدم به این سایت از جواب های بیخود اعصابم خورد شده



باز خدا خیر بده مدیرای بخش و استادان بهرامی و پیروز مهر و چند تای دیگه رو که واقعا راهنمایی میکن



یا حق

سلام جناب صدیقی ،
از اینکه هر از گاهی به پرسش های کاربران جواب می دهید از طرف همان ها تشکر می کنم اما در خصوص پست بالا :
اولا هر دو بزرگواری که فبل از شما پست گذاشته اند در توانایی و تبحرشان شکی نیست ، کافیست در پست هایی که قبلا گذاشته اند کنکاش کنید تا متوجه شوید .
ثانیا اینجا یک سایت رایگان است به این معنی که گارانتی جهت جوابهای ارائه شده وجود ندارد و کاربران در صورت نرسیدن به جواب مجددا ارائه سوال و یا مشکل می کنند تا بالاخره به جواب برسند .
ثالثا در همین فروم بسیاری از کاربران با ارائه جوابهای دست و پاشکسته ، چون مجبور به تحقیق و آزمایش شدند ، کم کم در این راه مجرب و توانا شدند .
رابعا فرضا به زعم من و شما به اشتباه رفته اند ویا ناقص و غیر ضروری راه حل داده اند ، خیلی راحت و بدون بی احترامی فقط و فقط با ارائه راه حل صحیح آنها را به اشتباه خودشان آگاه کنید.

امیدوارم بیشتر به این فروم سر بزنید و به دوستانی که مشکلی ارائه می کنند ، راهنمایی کنید.
موفق و موید باشید.

akbar4028
جمعه 05 تیر 1394, 00:14 صبح
سلام من از دوستان خواهش می کنم متن کامل پست ها رو مطالعه کنند تا منجر به اتلاف وقت دوستان نشه همونطور که فرمودید بنده طبق عکس ذیل تا اونجایی که دابلیکیت کوئری باید بگیرم مشکلی ندارم اما ظاهرا توفیلد بعدی کوئری من از فیلد 2 باید رنگتین بر اساس اسم تهیه بشه چون من 3 تا از رکورد اول علی و 3 تا رکورد اول حسین بر اساس فیلد 2 نیاز دارم و مابقی می بایست فیلتر بشه این هم عکس
132601

شاگرد آرام
جمعه 05 تیر 1394, 16:15 عصر
کاربر گرامی AbbasSediqi
صورت مسئله رو دقت کنید
نگفتن تعداد هر کدوم رو می خوام
گفتن لیست افراد رو می خواه ولی از هر اسمی فقط 15 تای اول
دقت کنید دوست عزیز

akbar4028
جمعه 05 تیر 1394, 20:48 عصر
آقا خواهشا یک نفر جواب بده؟

AbbasSediqi
دوشنبه 15 تیر 1394, 08:45 صبح
دوست عزیز بنده از تکه دوم که گفتید چیزی نفهمیدم


اما بر اساس اول تاپیک منظور شما این هست که از هر کدام یک از موارد فقط یک علی و یک حسین نشان داده شده و تعداد اون هم ذکر بشه:

اول در دابلیکیت کوییری دقت کنید که فقط یک فیلد برای بررسی قرار بگیره و گذشته از اون ازDISTINCT در ابتدای کوییری استفاده هم کنید فقط یک مورد از هر کدام رو نمایش میده

دوم ممکنه مشکل در تایپ موارد ذکر شده است . به طور مثال بین "علی" و " علی" در کوییری تفاوت وجود داره چون در ابتدای دومی یک space زده شده


در کل اگر مشکل رفع شد فبح المراد در غیر این صورت دقیق تر بیان کنید که به دنبال چه هستید و نمونه هم قرار بدید بهتره




یا حق ‍

alirezabahrami
دوشنبه 15 تیر 1394, 15:53 عصر
با سلام خدمت همه اساتید محترم بنده به یه مشکلی مواجه شدم که حل اون برام حائز اهمیته من می خوام طبق تصویر تعداد یک فیلد رو جوری بشمارم که نتایج عکس ذیل حاصل بشه ضمنا تواین کوئری فیلد id


132455
سلام
قطعاً خواسته شما عملی است !

موفق باشید

akbar4028
چهارشنبه 17 تیر 1394, 08:47 صبح
اساتید محترم سلام نمی دونم چرا بااین که عکس گذاشتم هر کس یه برداشتی داره اما با این حال من دو تا فیلد دارم که یکی حاوی اسم علی و حسین هست دومی جلوش عدد از زیاد به کم سورت شده (عکس #7 (http://barnamenevis.org/showthread.php?499167-%D8%B4%D9%85%D8%B1%D8%AF%D9%86-%D9%81%DB%8C%D9%84%D8%AF-%D8%A8%D8%A7-%D8%B4%D8%B1%D8%A7%DB%8C%D8%B7-%D8%AE%D8%A7%D8%B5-%D8%B6%D9%85%D9%86%D8%A7-%D9%87%D8%B1%DA%86%DB%8C-%D8%B3%D8%B1%DA%86-%DA%A9%D8%B1%D8%AF%D9%85-%DA%86%DB%8C%D8%B2%DB%8C-%D9%BE%DB%8C%D8%AF%D8%A7-%D9%86%DA%A9%D8%B1%D8%AF%D9%85&p=2232743&viewfull=1#post2232743) ) و اینجوری هست علی 300 و علی 280 و علی 270 و... حسین 400و حسین 370 و حسین 320 و... البته فایل اصلی من علی و حسین ممکنه بیشتر از 100 تا بشه اما بنده از از علی که با فیلد عدد سورت شده 15 تای اول رو می خوام و از حسین هم به همین شکل 15 تای اول ناگفته نباشه علی و حسین در این فایل مثاله ممکنه تعداد تکست من زیاد شه ساده گفتم شاید حل شه ممنون

alirezabahrami
شنبه 20 تیر 1394, 15:55 عصر
سلام
قطعاً خواسته شما عملی است !

موفق باشید



اساتید محترم سلام نمی دونم چرا بااین که عکس گذاشتم هر کس یه برداشتی داره اما با این حال من دو تا فیلد دارم که یکی حاوی اسم علی و حسین هست دومی جلوش عدد از زیاد به کم سورت شده (عکس #7 (http://barnamenevis.org/showthread.php?499167-%D8%B4%D9%85%D8%B1%D8%AF%D9%86-%D9%81%DB%8C%D9%84%D8%AF-%D8%A8%D8%A7-%D8%B4%D8%B1%D8%A7%DB%8C%D8%B7-%D8%AE%D8%A7%D8%B5-%D8%B6%D9%85%D9%86%D8%A7-%D9%87%D8%B1%DA%86%DB%8C-%D8%B3%D8%B1%DA%86-%DA%A9%D8%B1%D8%AF%D9%85-%DA%86%DB%8C%D8%B2%DB%8C-%D9%BE%DB%8C%D8%AF%D8%A7-%D9%86%DA%A9%D8%B1%D8%AF%D9%85&p=2232743&viewfull=1#post2232743) ) و اینجوری هست علی 300 و علی 280 و علی 270 و... حسین 400و حسین 370 و حسین 320 و... البته فایل اصلی من علی و حسین ممکنه بیشتر از 100 تا بشه اما بنده از از علی که با فیلد عدد سورت شده 15 تای اول رو می خوام و از حسین هم به همین شکل 15 تای اول ناگفته نباشه علی و حسین در این فایل مثاله ممکنه تعداد تکست من زیاد شه ساده گفتم شاید حل شه ممنون
سلام
مثلاً تصمیم گرفته بودم برای همیشه برنامه نویسی را کنار بگذارم ، ولی....
نمونه ضمیمه را بررسی کن
یا علی

akbar4028
دوشنبه 22 تیر 1394, 23:24 عصر
سلام دوستان لطفا به خواسته بنده دقت بفرمایید اصلا بنده فیلد ای دی ندارم :عصبانی++:

alirezabahrami
سه شنبه 23 تیر 1394, 07:06 صبح
ضمنا تواین کوئری فیلد id
ندارم و نمی تونم داشته باشم



اما با این حال من دو تا فیلد دارم که یکی حاوی اسم علی و حسین هست دومی جلوش عدد از زیاد به کم سورت شده (عکس #7 (http://barnamenevis.org/showthread.php?499167-%D8%B4%D9%85%D8%B1%D8%AF%D9%86-%D9%81%DB%8C%D9%84%D8%AF-%D8%A8%D8%A7-%D8%B4%D8%B1%D8%A7%DB%8C%D8%B7-%D8%AE%D8%A7%D8%B5-%D8%B6%D9%85%D9%86%D8%A7-%D9%87%D8%B1%DA%86%DB%8C-%D8%B3%D8%B1%DA%86-%DA%A9%D8%B1%D8%AF%D9%85-%DA%86%DB%8C%D8%B2%DB%8C-%D9%BE%DB%8C%D8%AF%D8%A7-%D9%86%DA%A9%D8%B1%D8%AF%D9%85&p=2232743&viewfull=1#post2232743) ) و اینجوری هست علی 300 و علی 280 و علی 270 و... حسین 400و حسین 370 و حسین 320 و... البته فایل اصلی من علی و حسین ممکنه بیشتر از 100 تا بشه اما بنده از از علی که با فیلد عدد سورت شده 15 تای اول رو می خوام و از حسین هم به همین شکل 15 تای اول ناگفته نباشه علی و حسین در این فایل مثاله ممکنه تعداد تکست من زیاد شه ساده گفتم شاید حل شه ممنون

سلام
حداقل بخاطر تهیه فایل نمونه که وقت زیادی برای نوشتن کدهایش از من گرفت یک تشکر خشک و خالی برای دلگرمی می کردی !
دوست عزیز! شما در کدام پست عنوان کرده اید که اصلاً فیلد id ندارید ؛ در پست اول فقط اشاره کرده اید که در این کوئری فیلد id ندارید و نمی توانید داشته باشید و اشاره ای نداشتید به اینکه در جدول هم فیلد id ندارید . بعد هم در پست شماره 12 عنوان کرده اید که دو تا فیلد دارید یکی جهت اسم و یکی هم جهت سورت نمودن اسامی

در نمونه ارائه شده هم بنده دقیقاً همین کار را انجام داده ام . دو فیلد یکی برای اسامی و یکی هم جهت ایجاد ردیف برای هر گروه از اسامی و سورت نمودن آنها را مهیا دیده ام ، و نام این فیلد را id گذاشته ام و شما میتوانید بجای این نام ، نام دیگری برای آن انتخاب کنید ، چرا که این فیلد نقش فیلد id بعنوان primary key ایفا نمی کند و خللی در روابط جداول شما ایجاد نمی نماید.

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

abdoreza57
چهارشنبه 24 تیر 1394, 16:37 عصر
با سلام خدمت دوست خوبم جناب بهرامی

نت نداشتم ، همین امروز شارژ کردم و متوجه حضورتون شدم . خوشحالم از حضور دوبارتون تو تالار ولی نمیدونم چرا بازم همه در و پنجره های ارتباطی تون را با دنیای مجازی بستید ؟!!!!

خواستم یه سلامی تو پیغام خصوصی بزارم که دیدم قفل کردید !!! مجبور شدم پست خلاف بزنم

در هر صورت قلبا از حضورتون تشکر میکنم و امیدوارم موفق باشید

اون قفل پیامتون را هم اگه دوست دارید ، بگذارید باشه . شوخی کردم هر طور راحتید

موفق باشید خدا نگهدار

akbar4028
چهارشنبه 24 تیر 1394, 21:51 عصر
جناب alirezabahrami (http://barnamenevis.org/member.php?90573-alirezabahrami) سلام و خسته نباشید ضمن تشکر از شما قصد جسارت نداشتم همانطور که می بینید سوال بنده در عین پیچیدگی بسیار ساده است این هم نمونه133287 در این فایل اگه توجه نمایید دو ستون وجود داره یکی اسم و دومی تعداد که ترتیب خواصی نداره و هر عددی می تونه باشه حالا من چطور می تونم 3 تا از بیشترین ستون تعداد علی و همینطور 3 تا از بیشترین ستون تعداد حسن رو تو یه کوئری داشته باشم و به تبع اون بتونم اونو چاپ کنم. خروجی تو ریپورت مهمه یعنی باید n رکورد اول بیشترین علی و n رکورد اول بیشترین حسن چاپ بشه مقدار n برای علی و حسن یکسانه. در نهایت از حسن همکاری شما کمال تشکر را دارم شاید رسوندن مطلب از جانب این جانب یه مقدار سخته و حق با حضرت عالیست این رو هم بگم این سوال با سوال دیگه من با عنوان
صرف نظر کردن از چاپ بیشتر از n رکورد (http://barnamenevis.org/showthread.php?500084-%D8%B5%D8%B1%D9%81-%D9%86%D8%B8%D8%B1-%DA%A9%D8%B1%D8%AF%D9%86-%D8%A7%D8%B2-%DA%86%D8%A7%D9%BE-%D8%A8%DB%8C%D8%B4%D8%AA%D8%B1-%D8%A7%D8%B2-n-%D8%B1%DA%A9%D9%88%D8%B1%D8%AF) دقیقا یک نتیجه رو داره حالا هر کدوم زود تر حل شه دعا گوی شما خواهم بود