-
نقل قول: خارج از دستور - پرسشهایی از جنس دیگر
بنده قبلا بیشتر از اکتیوایکس CommandBars ، CommandBarsDesigner و SkinFramework و چندمورد دیگر در برنامه هایم استفاده می کردم .
واقعاً کامپوننت های codejoke در نوع خودش بی نظیر هستند
کاربرانی که دنبال منوهای زیبا و پیشرفته و جذاب نمودن محیط برنامه خود هستند تمایلی شدیدی به استفاده از این کامپوننت های codejoke دارند .
ولی با این وجود با تمام جذابیت هائیکه که از استفاده از کامپوننت های Codejock مشاهده کرده ام اعتقاد دارم در محیط اکسس تاجائی که اجباری در کارنباشد از امکانات داخلی اکسس استفاده شود بهتراست . به هر حال استفاده از اکتیوایکس ها هم مشکلات و دردسرهای خاص خودش رو دارد .
-
نقل قول: خارج از دستور - پرسشهایی از جنس دیگر
نقل قول:
نوشته شده توسط
eb_1345
اعتقاد دارم در محیط اکسس تاجائی که اجباری در کارنباشد از امکانات داخلی اکسس استفاده شود بهتراست . به هر حال استفاده از اکتیوایکس ها هم مشکلات و دردسرهای خاص خودش رو دارد .
کاملا موافقم، بخصوص در آفیس 64 بیت.
من از شما سخت گیر ترم، تا حد امکان از توابع api هم دوری میکنم و معتقدم اگر برای رسیدن به یک خواسته نیاز به وصله پینه زیادی به اکسس باشه یعنی اکسس انتخاب خوبی نیست و باید دنبال ابزار مناسبتری رفت.
-
1 ضمیمه
Unbound Master-Detail Form
هدف پیدا کردن روش مؤثر یا پاسخ قطعی امکان ساخت فرم unbound روی 2 جدول مرتبط بصورت master-detail هست.
1- برای یکسان بودن شرایط و جلوگیری از پراکندگی بحث، دیتا نمونه پیوست شده و عملکرد و ظاهر فرم های unbound باید دقیقا کپی فرم های bound این دیتابیس باشد.
2- چنانچه شدنی است، توضیح کدها و آوردن آن در متن پست با تگ مناسب شایسته است!
3- چنانچه اینکار را نشدنی میدانید، توضیح مستدل نیاز است.
-
نقل قول: خارج از دستور - پرسشهایی از جنس دیگر
دوستان ببخشید من میام وسط بحث شما این موضوع codejoke رو میشه توضیح بیشتر بفرمایید و اینکه در اکسس چطوری میشه دانلود و استفاده کرد ایا عکسی از نمونه کاربردهاش دارید ؟
تو گوگل که بیشتر برای محیط های غیر اکسس--
Visual Studio-- من مطلب دیدم ....ممنون
-
نقل قول: خارج از دستور - پرسشهایی از جنس دیگر
در همین تالار پیشتر چندین بار دیدم در مورد اکتیوایکس codejoke بحث شده و حتی آموزش هم گذاشته بودن.
جستجو رو از همینجا شروع میکردین احتمالا جواب گرفته بودین.
اونها که شما دیدین کمپوننت های دات نت از همین شرکت بودن.
هر موقع دیدین میزان خواسته هایی که اکسس مستقیما نمیتونه برآورده کنه از 2-3 تا رد شد، درجا برین سراغ راه حلی که اونها رو براحتی و بی دردسر انجام بده.
کل خاصیت اکسس در سادگی و سرعت ساخت برنامه است، اگر قرار باشه با وصله پینه و سنگین کردن کد و نیاز به رجیستر چند اکتیوایکس و برنامه نصب و ... همه اینها رو کنار بگذاریم، خب از همون اول اول میریم سراغ فرضا دات نت که خیلی سریعتر و راحتتر به خواسته مون میرسیم و تکنولوژی روز هم هست - برخلاف اکتیوایکس که سالهاست مرده محسوب میشه.
یک نمونه اش همین آخرین پرسشی هست که اینجا مطرح کردم و نشون میده که اکسس برای همه کاری حتی در زمینه دیتا الزاما ممکنه سریعترین و راحتترین راه نباشه!
-
نقل قول: خارج از دستور - پرسشهایی از جنس دیگر
نقل قول:
نوشته شده توسط
mazoolagh
در همین تالار پیشتر چندین بار دیدم در مورد اکتیوایکس codejoke بحث شده و حتی آموزش هم گذاشته بودن.
جستجو رو از همینجا شروع میکردین احتمالا جواب گرفته بودین.
اونها که شما دیدین کمپوننت های دات نت از همین شرکت بودن.
هر موقع دیدین میزان خواسته هایی که اکسس مستقیما نمیتونه برآورده کنه از 2-3 تا رد شد، درجا برین سراغ راه حلی که اونها رو براحتی و بی دردسر انجام بده.
کل خاصیت اکسس در سادگی و سرعت ساخت برنامه است، اگر قرار باشه با وصله پینه و سنگین کردن کد و نیاز به رجیستر چند اکتیوایکس و برنامه نصب و ... همه اینها رو کنار بگذاریم، خب از همون اول اول میریم سراغ فرضا دات نت که خیلی سریعتر و راحتتر به خواسته مون میرسیم و تکنولوژی روز هم هست - برخلاف اکتیوایکس که سالهاست مرده محسوب میشه.
یک نمونه اش همین آخرین پرسشی هست که اینجا مطرح کردم و نشون میده که اکسس برای همه کاری حتی در زمینه دیتا الزاما ممکنه سریعترین و راحتترین راه نباشه!
ممنون از توضیحات .....پس کلا موضوع خاصی برای کار در اکسس نیست و بهتره که حتی المکان از امکانات خود اکسس استفاده کنیم .....فک کنم استفاده از برنامه های بقول شما وصل پینه ای سرعت برنامه رو کاهش میده و حجم فایل رو هم افزایش میده .....در دات نت دیده بودم شبیه این codejoke رو که همه امکانات خود فرم ها رو در قالبی شکیل تر نشون میده .......به هر حال ممنون ....
-
نقل قول: Unbound Master-Detail Form
نقل قول:
نوشته شده توسط
mazoolagh
هدف پیدا کردن روش مؤثر یا پاسخ قطعی امکان ساخت فرم unbound روی 2 جدول مرتبط بصورت master-detail هست.
1- برای یکسان بودن شرایط و جلوگیری از پراکندگی بحث، دیتا نمونه پیوست شده و عملکرد و ظاهر فرم های unbound باید دقیقا کپی فرم های bound این دیتابیس باشد.
2- چنانچه شدنی است، توضیح کدها و آوردن آن در متن پست با تگ مناسب شایسته است!
3- چنانچه اینکار را نشدنی میدانید، توضیح مستدل نیاز است.
این پست فعلا اینجا میمونه تا یک کاربر باتجربه و دانش کافی پیدا بشه!
-
RECORDSET/QUERY PAGING
یک پرسش ساده تر مطرح میکنم که احتمالا نمونه کد آماده هم برای اون شاید پیدا بشه.
هدف این هست که نتایج یک جدول/رکوردست/کوئری رو صفحه بندی کنیم.
تعداد رکورد در هر صفحه پارامتر هست و شماره صفحه/صفحه قبل/صفحه بعد/صفحه اول/صفحه آخر باید پیاده بشه.
خروجی روی فرم پیوسته یا لیست باکس هر دو قابل قبول هست.
-
نقل قول: خارج از دستور - پرسشهایی از جنس دیگر
از جناب Mazoolagh خواهشمندم به برنامه بنده در تالار اکسس درباره مشکل در انتخاب فیلد از جدول و نمایش در لیست باکس نگاهی بندازن .
درصورت امکان خواهشمندم درستش کنین.
هرکار کردم نتونستم. کسی نتونسته هنوز برام درستش کنه.
خیلی خیلی ببخشین
-
نقل قول: خارج از دستور - پرسشهایی از جنس دیگر
نقل قول:
نوشته شده توسط
ssadegh1365
هرکار کردم نتونستم. کسی نتونسته هنوز برام درستش کنه.
دوست بزرگوار ! اینکه دوستان دیگری تا حالا به شما کمک نکرده اند دلیل بر این نیست که آنها هم توانائی انجام خواسته شما را نداشته باشند .
نمونه هائی تحت عنوان گزارش ساز در تالار موجوده .
موفق باشید
-
نقل قول: خارج از دستور - پرسشهایی از جنس دیگر
نقل قول:
نوشته شده توسط
ssadegh1365
از جناب Mazoolagh خواهشمندم به برنامه بنده در تالار اکسس درباره مشکل در انتخاب فیلد از جدول و نمایش در لیست باکس نگاهی بندازن .
درصورت امکان خواهشمندم درستش کنین.
هرکار کردم نتونستم. کسی نتونسته هنوز برام درستش کنه.
خیلی خیلی ببخشین
مشکلی نیست جناب صادق،
ولی راهنمایی کافی و وافی داده شده بود و باید قدری زحمت هم خودتون متحمل بشید یا اینکه صبر کنین دوستانی که راهنمایی کردن وقت آزاد داشته باشن.
-
نقل قول: خارج از دستور - پرسشهایی از جنس دیگر
نقل قول:
نوشته شده توسط
eb_1345
دوست بزرگوار ! اینکه دوستان دیگری تا حالا به شما کمک نکرده اند دلیل بر این نیست که آنها هم توانائی انجام خواسته شما را نداشته باشند .
نمونه هائی تحت عنوان گزارش ساز در تالار موجوده .
موفق باشید
حالا که زحمت کشیدین و تا اینجا اومدین خوشحال میشم روی paging هم نظر شما رو بدونم.
-
نقل قول: خارج از دستور - پرسشهایی از جنس دیگر
نقل قول:
نوشته شده توسط
mazoolagh
حالا که زحمت کشیدین و تا اینجا اومدین خوشحال میشم روی paging هم نظر شما رو بدونم.
سلام جناب mazoolagh !
راستش بنده تا حالا در خصوص کاربرد این موضوع (صفحه بندی نتایج یک جدول/رکوردست/کوئری) فکر نکرده ام
حالا اگر فکر می کنید این موضوع مهم وکاربردی است بفرمائید تا بر روی این موضوع تمرکز کنم .
فکر میکنم از طریق اسپلیت کردن تعداد رکورد برای هر صفحه بتوان به نتیجه رسید
-
1 ضمیمه
نقل قول: خارج از دستور - پرسشهایی از جنس دیگر
نقل قول:
نوشته شده توسط
eb_1345
سلام جناب
mazoolagh !
راستش بنده تا حالا در خصوص کاربرد این موضوع (صفحه بندی نتایج یک جدول/رکوردست/کوئری) فکر نکرده ام
حالا اگر فکر می کنید این موضوع مهم وکاربردی است بفرمائید تا بر روی این موضوع تمرکز کنم .
فکر میکنم از طریق اسپلیت کردن تعداد رکورد برای هر صفحه بتوان به نتیجه رسید
با سلام مجدد
نمونه ضمیمه رو بررسی بفرمائید !
فقط ببخشین ! دیگر حال نداشتم توضیح کدها و متن آنها را در پست درج کنم:لبخندساده:
-
نقل قول: خارج از دستور - پرسشهایی از جنس دیگر
-
نقل قول: خارج از دستور - پرسشهایی از جنس دیگر
نقل قول:
نوشته شده توسط
eb_1345
با سلام مجدد
نمونه ضمیمه رو بررسی بفرمائید !
فقط ببخشین ! دیگر حال نداشتم توضیح کدها و متن آنها را در پست درج کنم:لبخندساده:
سلام و روز خوش
... time
-
1 ضمیمه
نقل قول: خارج از دستور - پرسشهایی از جنس دیگر
سلام
یک تغییر جزئی در کدها اعمال کردم
البته در کل بازهم امکان بهبودی و جمع و جور کردن کدها وجوددارد
-
نقل قول: خارج از دستور - پرسشهایی از جنس دیگر
نقل قول:
نوشته شده توسط
eb_1345
سلام
یک تغییر جزئی در کدها اعمال کردم
البته در کل بازهم امکان بهبودی و جمع و جور کردن کدها وجوددارد
سلام و روز خوش
برنامه بروز شده رو الان دیدم.
چون اینجا هدف کلی اشتراک دانسته ها و یادگیری از همدیگر هست، بنابراین بیان مواردی که به ذهن میرسه به معنای خرده گیری نیست، و به همین سیاق پرسش درباره چرایی روش ها و راهکارها هم نشانه ناآگاهی نیست.
اونجور که دیده میشه شما دو فیلد به جدول اضافه کردین؛ یکی برای شماره صفحه و یکی هم برای شماره ردیف در هر صفحه.
روش رو بر این مبنا گذاشتین که یکبار کل جدول رو پیمایش و این دو فیلد رو محاسبه میکنین و بعد بر اساس این مقادیر، رکوردست فرم رو مشخص میکنین.
اول از همه اینکه این روش کار میکنه، ولی چند مورد هست که مطرح میکنم:
1- نیاز به انجام تغییرات در جدول داره.
2- هنگام باز شدن فرم، محاسبه شماره صفحه پروسه زمانبری هست (با توجه به اینکه معمولا PAGING رو برای تعداد رکوردهای زیاد انجام میدیم)
3- انعطاف پذیری نداره و HARD-CODE هست، یعنی برای یک جدول دیگه نیاز به کدنویسی مجدد داریم
4- باحتمال زیاد پیاده سازی اون روی کوئری از جداول جوین شده، کار سخت و پیچیده ای خواهد بود.
الف- بنظرم اگر فقط با جدول سروکار داشته باشیم، بدون تغییر در طراحی اون و محاسبه اولیه هم میتونیم PAGING رو پیاده کنیم.
این مورد رو تست میکنم و سعی میکنم به جواب برسم.
ب- اونچه از پرسش مد نظر من هست یک روش کلی و ژنریک بدون نیاز به دانستن ساختار کوئری هست و برای همین هم به مورد الف فکر نکرده بودم.
-
نقل قول: خارج از دستور - پرسشهایی از جنس دیگر
مورد بعدی اینکه paging واقعا یک نیاز و روش مفید هست و یک مسئله انتزاعی یا چالش توانایی کدنویسی نیست:
هم سرعت لود شدن فرم رو بالا میبره و هم نیاز به اسکرول رو فقط که تعداد رکوردها زیاد هست مرتفع میکنه.
برای همین هم بیشتر database-engine این رو در نظر دارن، هم providerها و گاهی در سطح کنترل هایی مثل grid هم پیاده میشه.
-
1 ضمیمه
نقل قول: خارج از دستور - پرسشهایی از جنس دیگر
نقل قول:
نوشته شده توسط
eb_1345
البته در کل بازهم امکان بهبودی و جمع و جور کردن کدها وجوددارد
نقل قول:
نوشته شده توسط
mazoolagh
اول از همه اینکه این روش کار میکنه، ولی چند مورد هست که مطرح میکنم:
1- نیاز به انجام تغییرات در جدول داره.
2- هنگام باز شدن فرم، محاسبه شماره صفحه پروسه زمانبری هست (با توجه به اینکه معمولا PAGING رو برای تعداد رکوردهای زیاد انجام میدیم)
3- انعطاف پذیری نداره و HARD-CODE هست، یعنی برای یک جدول دیگه نیاز به کدنویسی مجدد داریم
4- باحتمال زیاد پیاده سازی اون روی کوئری از جداول جوین شده، کار سخت و پیچیده ای خواهد بود.
الف- بنظرم اگر فقط با جدول سروکار داشته باشیم، بدون تغییر در طراحی اون و محاسبه اولیه هم میتونیم PAGING رو پیاده کنیم.
این مورد رو تست میکنم و سعی میکنم به جواب برسم.
ب- اونچه از پرسش مد نظر من هست یک روش کلی و ژنریک بدون نیاز به دانستن ساختار کوئری هست و برای همین هم به مورد الف فکر نکرده بودم.
سلام
فایل نمونه پست 67 برای شروع کار و براساس خواسته اولیه جنابعالی که بدون شرط مطرح کرده بودید تهیه شده بود .
نمونه جدید رو بررسی بفرمائید !
در نمونه جدید فرض بر این است که تمام جداولی که بر اساس این روش نتایج رکوردست آنها صفحه بندی شود دارای یک فیلد ID که مقادیر آن متوالی است میباشد. بنا بر این فرض اگر فیلد فوق از نوع اتونامبر میباشد و رکوردی حذف میشود فیلد فوق قبل از عملیات صفحه بندی رکوردها باید ریست شود و اگر از نوع نامبر هم است باز هم بعد از حذف باید شماره گذاری مجدد صورت گیرد.
-
نقل قول: خارج از دستور - پرسشهایی از جنس دیگر
نقل قول:
اون تاپیک خارج از دستور در واقع دون پاشی برای دوستانی مثل شما هست که به اونجا بیان و بتونم از دانسته هاشون بهره ببرم - البته به پیشگیری از آلزایمر هم بیربط نیست!
خاطرم هست که در چند مورد شما من رو از اشتباه درآوردین و خوشحال میشم هنوز هم به این کار ادامه بدین و من جزو اون گروه ناشایست که اشاره کردین نباشم.
هیچ مبحث بسته شده ای اونجا نیست و خوبیش اینه که اختلاف دیدگاه بین کسانی که صحبت هم رو میفهمن به راه های جدید منجر میشه و نه کدورت.
سلام mazoolagh
چوب کاری نفرمایید دوست من .
اختلاف نظرم با شما بر سر کلیات پست 55 هستش
ولی به دلایل ذیل در مبحث شرکت نکردم
1 – ممکن بود به اشتباه این شبه ایجاد بشه که قصد مقایسه اکسس با دیگر محیطهای توسعه وجود داره
2 – در خصوص مبحث اکتیو ایکس ها هم از اونجایی که نمی خواهم که شبه ای در خصوص ذی نفع بودنم در ذهن متبادر بشه , بر همین اساس ورود نکردم
البته قبلا در پستهایی مجزا در این خصوص مطالبی درج شده بود که به همونها استناد میکنم .
موفق باشید
-
نقل قول: خارج از دستور - پرسشهایی از جنس دیگر
نقل قول:
نوشته شده توسط
eb_1345
سلام
فایل نمونه پست 67 برای شروع کار و براساس خواسته اولیه جنابعالی که بدون شرط مطرح کرده بودید تهیه شده بود .
نمونه جدید رو بررسی بفرمائید !
در نمونه جدید فرض بر این است که تمام جداولی که بر اساس این روش نتایج رکوردست آنها صفحه بندی شود دارای یک فیلد ID که مقادیر آن متوالی است میباشد. بنا بر این فرض اگر فیلد فوق از نوع اتونامبر میباشد و رکوردی حذف میشود فیلد فوق قبل از عملیات صفحه بندی رکوردها باید ریست شود و اگر از نوع نامبر هم است باز هم بعد از حذف باید شماره گذاری مجدد صورت گیرد.
سلام و روز خوش
خب این نمونه بمراتب بهتر از نمونه اولیه هست (قطعا هم همینجور درسته و کارها بتدریج انجام میشه) و همچنین استفاده از id هم انتخاب کاملا منطقی و بجایی هست.
یک مورد هست که: فکر کنم الزامی نباشه نگران این باشین که همه idها بدون جاافتادگی باشن (البته اینجوری راحتتره) و فقط یکتا بودنش کفایت میکنه، البته در کد نیاز به تغییرات داره.
من هم یک نمونه آماده کردم که برای نظرخواهی همینجا پیوست میکنم (طبق عادت با عکس و تفصیلات)،
و بعد اگر مایل باشین این بخش رو ببندیم و بریم سراغ روش ژنریک و عمومی.
-
نقل قول: خارج از دستور - پرسشهایی از جنس دیگر
نقل قول:
نوشته شده توسط
New Account
سلام mazoolagh
چوب کاری نفرمایید دوست من .
اختلاف نظرم با شما بر سر کلیات پست 55 هستش
ولی به دلایل ذیل در مبحث شرکت نکردم
1 – ممکن بود به اشتباه این شبه ایجاد بشه که قصد مقایسه اکسس با دیگر محیطهای توسعه وجود داره
2 – در خصوص مبحث اکتیو ایکس ها هم از اونجایی که نمی خواهم که شبه ای در خصوص ذی نفع بودنم در ذهن متبادر بشه , بر همین اساس ورود نکردم
البته قبلا در پستهایی مجزا در این خصوص مطالبی درج شده بود که به همونها استناد میکنم .
موفق باشید
سلام و روز خوش
این لطف شماست که منو بعنوان دوست خطاب کردین هرچند که قبلا هم در عمل این موضوع رو نشون داده بودین.
و در مورد کلیات پست 55 هم اونچه آمده نظر شخصی من بود، کما اینکه از api function هم تا حد امکان استفاده نمیکنم.
همیجور هر نوع دستکاری در سیستم کاربر و حتی به قفل هم اعتقادی ندارم - کلا این روش من بوده و هست: This the way.
با این وجود استفاده از محصول آماده (اکتیوایکس/کمپوننت/کتابخانه/...) هم یک امر منطقی و متعارف و برخی موارد ناگریز هست،
و اگر کسی ابزار سودمندی رو در اختیار دیگران قرار میده (که خودشون دانش یا زمان کافی توسعه اون رو ندارن) جای تشکر و قدردانی داره و نه شک و شبهه.
باز هم ممنونم که پاسخ دادین و رفع ابهام شد.
کامیاب و کامروا باشین.
-
Data Paging
Option Compare Database
Option Explicit
Const SQL = "SELECT TOP @PAGE_SIZE * FROM (SELECT TOP @P1 * FROM Products)" & _
" WHERE ProductID NOT IN (SELECT TOP @P2 ProductID FROM Products)"
Private DataSource As String
Private Page_ As Integer
Private PagesCount As Integer
Private RecordsCount As Long
Private Sub Form_Open(Cancel As Integer)
RecordsCount = DCount("*", "Products")
PageSize = 15
PageSize_AfterUpdate
End Sub
Private Sub GO_FIRST_Click()
Page_ = 1
BIND
End Sub
Private Sub GO_PREVIOUS_Click()
Page_ = Page_ - 1
BIND
End Sub
Private Sub GO_NEXT_Click()
Page_ = Page_ + 1
BIND
End Sub
Private Sub GO_LAST_Click()
Page_ = PagesCount
BIND
End Sub
Private Sub BIND()
If Page_ = 1 Then
DataSource = "SELECT TOP @PAGE_SIZE * FROM Products"
Else
DataSource = Replace(SQL, "@P1", PageSize * Page_)
DataSource = Replace(DataSource, "@P2", PageSize * (Page_ - 1))
End If
DataSource = Replace(DataSource, "@PAGE_SIZE", PageSize)
Set Me.Recordset = CurrentDb.OpenRecordset(DataSource)
Me.GO_FIRST.Enabled = Page_ > 1
Me.GO_PREVIOUS.Enabled = Page_ > 1
Me.GO_NEXT.Enabled = Page_ < PagesCount
Me.GO_LAST.Enabled = Page_ < PagesCount
Me.Indicator.Caption = "page " & Page_ & " of " & PagesCount
Me.PageNumber = Page_
End Sub
Private Sub PageNumber_AfterUpdate()
Page_ = Me.PageNumber
BIND
End Sub
Private Sub PageSize_AfterUpdate()
PagesCount = RecordsCount / PageSize
If PagesCount * PageSize < RecordsCount Then PagesCount = PagesCount + 1
Me.PageNumber.RowSource = ""
Dim i As Integer
For i = 1 To PagesCount
Me.PageNumber.AddItem (i)
Next i
GO_FIRST_Click
End Sub
Private Sub PageSize_NotInList(NewData As String, Response As Integer)
Response = acDataErrContinue
Me.PageSize = 15
End Sub
Private Sub PageNumber_NotInList(NewData As String, Response As Integer)
Response = acDataErrContinue
Me.PageNumber = 1
End Sub
-
1 ضمیمه
RECORDSET/QUERY PAGING
-
نقل قول: خارج از دستور - پرسشهایی از جنس دیگر
سلام
سخت ترین فرمولی که من تا حالا نتونستم انجامش بدم و هربار به بن بست خوردم فرمول کاتینگ ورق برای برش طول و عرض های مورد نیاز بر اساس متریال ورق استاندارد موجود که کمترین پرت را داشته باشد - فقط یک شرکت هندی موفق شده این فرمول رو درست اجرا کنه
البته با توجه به نیاز بعد گرافیکی به اینکار ، در صورت کشف فرمول و ابعاد و اندازه نیازی به گرافیک نخواهد بود
-
ADO Recordset Paging
در ادامه بحث paging، الان که چند نمونه اولیه آورده شده و کلیت موضوع هم نشون داده شده، موقعیت مناسبی هست که روش اصولی رو معرفی و دنبال کنیم.
منظور از اصولی این هست که:
1- محاسبات paging رو از روی دوش خودمون برداریم و به دوش موتور دیتابیس یا provider بگذاریم (قطعا در اینها از هرنظر کدهای بهتری استفاده شده)
2- پیاده سازی اون راحت و ساده باشه و با عوض شدن دیتا نیاز به تغییراتی بیشتر از فیلدهای مورد نمایش نداشته باشیم (مثل هر فرم معمولی)
همونجور که در پست شماره 69 اشاره کرده بودم، بعضی providerها تمهیدات لازم رو برای اینکار آماده و کار ما رو راحت کردن.
در ado سه property برای رکوردست تعریف شده: PageSize , AbsolutePage , PageCount که در صورت تمایل میتونین مستندات اون رو بخونین.
-
ADO Recordset Paging
کوئری زیر رو درنظر بگیرین:
SELECT S.FullName AS Student, CT.CourseTitle AS Course, C.Year, C.Term, I.FullName AS Instructor, G.Final
FROM (((Courses AS C
INNER JOIN CourseTitles AS CT ON C.CourseTitleID = CT.CourseTitleID)
INNER JOIN Gradings AS G ON C.CourseID = G.CourseID)
INNER JOIN Instructors AS I ON C.InstructorID = I.InstructorID)
INNER JOIN Students AS S ON G.StudentID = S.StudentID
مشابه نمونه قبلی، اول یک فرم unbound با توجه به فیلدها میسازیم و کنترلهای paging رو هم اضافه میکنیم.
-
ADO Recordset Paging
Option Compare DatabaseOption Explicit
Private Page_ As Integer
Private PagesCount As Integer
Private RecordsCount As Long
Dim rs As ADODB.Recordset
Dim rsx As ADODB.Recordset
Private Sub Form_Close()
rs.Close
Set rs = Nothing
Set rsx = Nothing
End Sub
Private Sub Form_Open(Cancel As Integer)
Set rsx = New ADODB.Recordset
With rsx
.CursorLocation = adUseClient
.CursorType = adOpenKeyset
.LockType = adLockOptimistic
.Fields.Append "Row", adInteger, , adFldKeyColumn + adFldRowID
.Fields.Append "Student", adVarWChar, 100, adFldMayBeNull
.Fields.Append "Course", adVarWChar, 100, adFldMayBeNull
.Fields.Append "Instructor", adVarWChar, 100, adFldMayBeNull
.Fields.Append "Year", adInteger, , adFldMayBeNull
.Fields.Append "Term", adInteger, , adFldMayBeNull
.Fields.Append "Final", adInteger, , adFldMayBeNull
.ActiveConnection = Nothing
.Open
End With
PageSize = 15
Set rs = New ADODB.Recordset
rs.CursorLocation = adUseClient
rs.PageSize = PageSize
rs.Open "select * from Results", CurrentProject.Connection, adOpenDynamic, adLockOptimistic
RecordsCount = rs.RecordCount
PageSize_AfterUpdate
End Sub
Private Sub GO_FIRST_Click()
Page_ = 1
Bind
End Sub
Private Sub GO_PREVIOUS_Click()
Page_ = Page_ - 1
Bind
End Sub
Private Sub GO_NEXT_Click()
Page_ = Page_ + 1
Bind
End Sub
Private Sub GO_LAST_Click()
Page_ = PagesCount
Bind
End Sub
Private Sub Bind()
Set Me.Recordset = Nothing
Do While Not rsx.EOF
rsx.Delete
rsx.MoveFirst
Loop
rs.AbsolutePage = Page_
Dim i As Integer
For i = 1 To rs.PageSize
If rs.EOF Then Exit For
rsx.AddNew
rsx("Row") = rs.AbsolutePosition
rsx("Student") = rs("Student")
rsx("Course") = rs("Course")
rsx("Year") = rs("Year")
rsx("Term") = rs("Term")
rsx("Instructor") = rs("Instructor")
rsx("Final") = rs("Final")
rsx.Update
rs.MoveNext
Next
Set Me.Recordset = rsx
Me.GO_FIRST.Enabled = Page_ > 1
Me.GO_PREVIOUS.Enabled = Page_ > 1
Me.GO_NEXT.Enabled = Page_ < PagesCount
Me.GO_LAST.Enabled = Page_ < PagesCount
Me.PageNumber = Page_
End Sub
Private Sub PageNumber_AfterUpdate()
If Me.PageNumber > PagesCount Then Me.PageNumber = PagesCount
If Me.PageNumber < 1 Then Me.PageNumber = 1
Page_ = Me.PageNumber
Bind
End Sub
Private Sub PageSize_AfterUpdate()
rs.PageSize = PageSize
PagesCount = rs.PageCount
Me.PageNumber.RowSource = ""
Dim i As Integer
For i = 1 To PagesCount
Me.PageNumber.AddItem (i)
Next i
Me.Indicator.Caption = "of " & PagesCount
GO_FIRST_Click
End Sub
Private Sub PageSize_NotInList(NewData As String, Response As Integer)
Response = acDataErrContinue
Me.PageSize = 15
End Sub
Private Sub PageNumber_NotInList(NewData As String, Response As Integer)
Response = acDataErrContinue
Me.PageNumber = 1
End Sub
-
1 ضمیمه
ADO Recordset Paging
اگر دقت کنین برای نمایش شماره ردیف یک فیلد Row به فیلدهای کوئری اضافه کردیم که برخلاف dao ، اینکار در ado خیلی راحت و شدنی هست.
ضمیمه 153008
همچنین سرعت خوبی حتی در تعداد رکورد زیاد داریم.
-
1 ضمیمه
ADO Recordset Paging
اگر در برنامه نمونه پیوست دقت کنین در واقع پاسخ اولیه مبحث Unbound Master/Detail Form رو هم پیدا میکنین!
دوستانی که مایل باشن میتونن عملیات insert/delete/update رو به فرم اضافه و در صورت تمایل با دیگران هم به اشتراک بگذارن.
-
نقل قول: خارج از دستور - پرسشهایی از جنس دیگر
نقل قول:
نوشته شده توسط
ARData
سلام
سخت ترین فرمولی که من تا حالا نتونستم انجامش بدم و هربار به بن بست خوردم فرمول کاتینگ ورق برای برش طول و عرض های مورد نیاز بر اساس متریال ورق استاندارد موجود که کمترین پرت را داشته باشد - فقط یک شرکت هندی موفق شده این فرمول رو درست اجرا کنه
البته با توجه به نیاز بعد گرافیکی به اینکار ، در صورت کشف فرمول و ابعاد و اندازه نیازی به گرافیک نخواهد بود
سلام و روز خوش
البته برنامه آماده cutting optimizer زیاد هست که mdfکار ها و برشکارها (فلز، پارچه، ...) از اون استفاده میکنن و حتی راه پارچه یا چوب رو هم میشه مشخص کرد.
در هر صورت اکسس ابزار مناسب این کار نیست، ولی شاید با visio بتونین یک کارهایی انجام بدین چون مستقیما ابجکت های گرافیکی سروکار دارهو
همچنین میتونین از addon های آماده autocad هم استفاده کنین یا خودتون بنویسن.
-
نقل قول: خارج از دستور - پرسشهایی از جنس دیگر
-
1 ضمیمه
نقل قول: خارج از دستور - پرسشهایی از جنس دیگر
نقل قول:
نوشته شده توسط
eb_1345
..........
سلام جناب استاد mazoolagh عزیز!
هفته قبل تغییراتی بر روی نمونه ارزشمند جنابعالی در پست 81 همین صفحه ایجاد کردم . لطفاً بررسی بفرمائین ایرادی داره یا نه !
بالاخره آخرین فعالیت بنده در سایت برنامه نویس و در این تالار برمیگرده به 20 ماه پیش و بعد از این مدت احساس می کنم بخاطر عدم تمرین نسبت به گذشته تسلط کافی در زمینه کد نویسی نداشته باشم
یا علی
https://barnamenevis.org/images/stat...er-offline.png
-
نقل قول: خارج از دستور - پرسشهایی از جنس دیگر
نقل قول:
نوشته شده توسط
eb_1345
سلام mazoolagh عزیز!
هفته قبل تغییراتی بر روی نمونه ارزشمند جنابعالی در پست 81 همین صفحه ایجاد کردم . لطفاً بررسی بفرمائین ایرادی داره یا نه !
سلام ابراهیم خان گرامی
روز شما خوش
ممنون از این که چراغ اینجا رو روشن نگه میدارین.
چَشم، حتما - فقط چند روز فرصت بدین.
-
نقل قول: خارج از دستور - پرسشهایی از جنس دیگر
نقل قول:
نوشته شده توسط
eb_1345
سلام جناب استاد mazoolagh عزیز!
هفته قبل تغییراتی بر روی نمونه ارزشمند جنابعالی در پست 81 همین صفحه ایجاد کردم . لطفاً بررسی بفرمائین ایرادی داره یا نه !
بالاخره آخرین فعالیت بنده در سایت برنامه نویس و در این تالار برمیگرده به 20 ماه پیش و بعد از این مدت احساس می کنم بخاطر عدم تمرین نسبت به گذشته تسلط کافی در زمینه کد نویسی نداشته باشم
یا علی
https://barnamenevis.org/images/stat...er-offline.png
چقدر عالی!:تشویق:
-
نقل قول: خارج از دستور - پرسشهایی از جنس دیگر
سلام
بنظرم تاپیک ایجاد نویگیشن باتن جهت تغییر صفحات گزارش باید در اینجا ایجاد میشد . چون سوالی که در این تاپیک پرسیده شده واقعا از جنس دیگریست ومن مشابه این سوال و راهکاری که برای اون ارائه گردیده جائی ندیده ام
-
نقل قول: خارج از دستور - پرسشهایی از جنس دیگر
نقل قول:
نوشته شده توسط
atf1379
سلام
بنظرم تاپیک
ایجاد نویگیشن باتن جهت تغییر صفحات گزارش باید در اینجا ایجاد میشد . چون سوالی که در این تاپیک پرسیده شده واقعا از جنس دیگریست ومن مشابه این سوال و راهکاری که برای اون ارائه گردیده جائی ندیده ام
قطعا ارزش تاپیک مستقل رو داشته، اگر فقط اینجا بود بین پست های دیگه ممکن بود گم بشه.
همین لینکی هم که گذاشتین خوبه.
-
نقل قول: خارج از دستور - پرسشهایی از جنس دیگر
نقل قول:
نوشته شده توسط
eb_1345
هفته قبل تغییراتی بر روی نمونه پست 81 همین صفحه ایجاد کردم . لطفاً بررسی بفرمائین ایرادی داره یا نه !
قطعا خودتو همه چک ها رو انجام دادین، منهم موردی ندیدم و مثل بنز کار میکنه.
فقط کاش همراه برنامه کدهاتون رو هم پیوست و یک توضیح هم اضافه کنین که کدوم بخشهای کد اولیه اصلاح و احتمالا بهینه شدن.
خوبی پیوست کردن کدها این هست که اگر کسی با یک بخش کد هم جستجو کنه میتونه بهش برسه.
-
نقل قول: خارج از دستور - پرسشهایی از جنس دیگر
نقل قول:
نوشته شده توسط
mazoolagh
قطعا خودتو همه چک ها رو انجام دادین، منهم موردی ندیدم و مثل بنز کار میکنه.
فقط کاش همراه برنامه کدهاتون رو هم پیوست و یک توضیح هم اضافه کنین که کدوم بخشهای کد اولیه اصلاح و احتمالا بهینه شدن.
خوبی پیوست کردن کدها این هست که اگر کسی با یک بخش کد هم جستجو کنه میتونه بهش برسه.
سپاسگزارم استاد!
ممنون ازحسن نظرتون
در خصوص پیوست کردن کدها کاملاً درست میفرمائین ، متأسفانه این مورد جزء ایرادات همیشگی بنده بوده که در مورد کدهای استفاده شده توضیح نمیدم
علی ایحال اگه دوستان نسبت به هر بخش از کدها ابهامی داشتن اعلام بفرماین تا توضیح لازم ارائه بشه
-
3 ضمیمه
کوئری برای ساخت رشته اعداد در یک محدوده مشخص Query to create a range of numbers
هدف ساخت کوئری هست که 2 پارامتر از نوع long برای تعیین محدوده اعداد دریافت میکنه و خروجی اون همه اعداد در این محدوده است:
PARAMETERS Range_Start Long, Range_End Long;
SELECT ??? AS [Number]
FROM ???
WHERE ??? BETWEEN Range_Start AND Range_End;
- محدوده اعداد بین 1 تا 99999 است.
- اجازه استفاده از کد VBA نداریم!
- اجازه ساخت جدول حتی بصورت موقت نداریم!
ضمیمه 155048
ضمیمه 155049
ضمیمه 155050
-
نقل قول: کوئری برای ساخت رشته اعداد در یک محدوده مشخص Query to create a range of numbers
نقل قول:
نوشته شده توسط
mazoolagh
هدف ساخت کوئری هست که 2 پارامتر از نوع long برای تعیین محدوده اعداد دریافت میکنه و خروجی اون همه اعداد در این محدوده است:
PARAMETERS Range_Start Long, Range_End Long;
SELECT ??? AS [Number]
FROM ???
WHERE ??? BETWEEN Range_Start AND Range_End;
- محدوده اعداد بین 1 تا 99999 است.
- اجازه استفاده از کد VBA نداریم!
- اجازه ساخت جدول حتی بصورت موقت نداریم!
سلام استاد
یعنی برای ایجاد این کوئری جدول خاصی هم وجود نداره ؟
آیا انجام ساخت چنین کوئری ای بدون وجود جدول امکان پذیره ؟
البته با کد میشه یک جدول ایجاد کرد ولی اشاره کرده این که نه اجازه استفاده از کد VBA وجود داره نه اجازه ساخت جدول حتی بصورت موقت
-
نقل قول: خارج از دستور - پرسشهایی از جنس دیگر
نقل قول:
سلام
یعنی برای ایجاد این کوئری جدول خاصی هم وجود نداره ؟
آیا انجام ساخت چنین کوئری ای بدون وجود جدول امکان پذیره ؟
البته با کد میشه یک جدول ایجاد کرد ولی اشاره کرده این که نه اجازه استفاده از کد VBA وجود داره نه اجازه ساخت جدول حتی بصورت موقت
سلام و روز خوش
- شما از یک دیتابیس خالی Blank Database شروع میکنین،
- میتونین هرچند کوئری که لازم دارین قبلش آماده کنین (اگر نیاز هست - شاید نباشه!)،
ساختار کوئری خواسته شده همین هست که در پست قبلی آمده، کافی هست پیدا کنین به جای ??? ها چی باید باشه،
- ولی اجازه ساخت چیزی جز کوئری ندارین (جدول - شامل لینک شده هم میشه، فرم، گزارش، ماکرو، ماجول).
===========
با این وجود، جدولی رو که فکر میکنین نیاز دارین بگذارین تا در موردش بحث کنیم!
-
2 ضمیمه
پیدا کردن مسیر یک گره در یک ساختار پدر-فرزندی Path of a node in a hierarchical table
تا پاسخ پرسش قبلی رو پیدا میکنین روی این یکی هم فکر کنین:
دیتابیس پیوست یک لیست از تقسیمات کشوری هست که به شکل پدر-فرزند ساخته شده (سلسله مراتبی یا hierarchical)
و دارای 103682 رکورد در 5 سطح استان/شهرستان/بخش/شهر/روستا(آبادی) هست:
ضمیمه 155058
هدف ساختن یک فرم جستجو هست که با گرفتن نام یک "جا" (Location) ،
مسیر همه جاهایی که شامل اون هستن رو به دو شکل مسیر IDها (Path) و مسیر Loacationها ($Path) نشون بده:
ضمیمه 155059
دریافت دیتابیس (1.2 مگابایت)
روش حل این مسئله در MS SQL
-
2 ضمیمه
نقل قول: خارج از دستور - پرسشهایی از جنس دیگر
سلام و درود فراوان خدمت استادmazoolaghعزیز !
داده های دیتابیس شما رو در قالب treeview پیاده کردم
بخاطر زیاد بودن رکوردها تا حدودی با لود شدن اطلاعات بخصوص در هنگام باز شدن فرم مشکل دارم که سعی می کنم راهکاری براش پیدا کنم
در ضمن بلحاظ عدم مشارکت دوستان با اجازه شما فقط به ضمیمه نمودن دو تصویر از نمونه کار انجام شده اکتفا می کنم
-
نقل قول: خارج از دستور - پرسشهایی از جنس دیگر
شرح مسیرها رو از طریق node.FullPath ایجاد کردم وسپس با استفاده از تابع Split اقدام به جداکردن سطوح مسیر که با علامت اسلش به همدیگر متصل شده اند نموده ا م و در مرحله آخر هم فراخوانی کد مربوط به شرح هر سطح از جدول و چسپاندن اونها به ترتیب سطوح شرح مسیر
TxtTitel.Value = node.FullPath
Pathsplit1 = Split(TxtTitel.Value, "\")(0) & "\"
TxtTitel.Value = Replace(TxtTitel.Value, Pathsplit1, "")
TxtTitel.Value = Replace(TxtTitel.Value, "\", "/")
CountWord1 = Len(TxtTitel.Value) - Len(Replace(TxtTitel.Value, "/", ""))
If CountWord1 = 0 Then
Strcode1 = DLookup("id", "TblLocations", "Location='" & Split(TxtTitel.Value, "/")(0) & "'")
TxtOstanCode = Strcode1
ElseIf CountWord1 = 1 Then
Strcode1 = DLookup("id", "TblLocations", "Location='" & Split(TxtTitel.Value, "/")(0) & "'")
Strcode2 = DLookup("id", "TblLocations", "Location='" & Split(TxtTitel.Value, "/")(1) & "'")
TxtOstanCode = Strcode2 & "/" & Strcode1
ElseIf CountWord1 = 2 Then
Strcode1 = DLookup("id", "TblLocations", "Location='" & Split(TxtTitel.Value, "/")(0) & "'")
Strcode2 = DLookup("id", "TblLocations", "Location='" & Split(TxtTitel.Value, "/")(1) & "'")
Strcode3 = DLookup("id", "TblLocations", "Location='" & Split(TxtTitel.Value, "/")(2) & "'")
TxtOstanCode = Strcode3 & "/" & Strcode2 & "/" & Strcode1
ElseIf CountWord1 = 3 Then
Strcode1 = DLookup("id", "TblLocations", "Location='" & Split(TxtTitel.Value, "/")(0) & "'")
Strcode2 = DLookup("id", "TblLocations", "Location='" & Split(TxtTitel.Value, "/")(1) & "'")
Strcode3 = DLookup("id", "TblLocations", "Location='" & Split(TxtTitel.Value, "/")(2) & "'")
Strcode4 = DLookup("id", "TblLocations", "Location='" & Split(TxtTitel.Value, "/")(3) & "'")
TxtOstanCode = Strcode4 & "/" & Strcode3 & "/" & Strcode2 & "/" & Strcode1
ElseIf CountWord1 = 4 Then
Strcode1 = DLookup("id", "TblLocations", "Location='" & Split(TxtTitel.Value, "/")(0) & "'")
Strcode2 = DLookup("id", "TblLocations", "Location='" & Split(TxtTitel.Value, "/")(1) & "'")
Strcode3 = DLookup("id", "TblLocations", "Location='" & Split(TxtTitel.Value, "/")(2) & "'")
Strcode4 = DLookup("id", "TblLocations", "Location='" & Split(TxtTitel.Value, "/")(3) & "'")
Strcode5 = DLookup("id", "TblLocations", "Location='" & Split(TxtTitel.Value, "/")(4) & "'")
TxtOstanCode = Strcode5 & "/" & Strcode4 & "/" & Strcode3 & "/" & Strcode2 & "/" & Strcode1
End If
اگه بشه با ایجاد یک حلقه و استفاده از تعداد علامت های اسلش بکار رفته شده در شرح مسیر چند خط کد بالا رو به دوسه خط تبدیل کنم خیلی خوب میشه
مثلاً بصورت زیر:
For i = 0 To CountWord1
TxtOstanCode = DLookup("id", "TblLocations", "Location='" & Split(TxtTitel.Value, "/")(i) & "'")
Next
ولی ظاهراً یک شرطی باید در این حلقه اعمال کنم که نتیجه درست از آب دربیاد
فعلاً موضوعی دیگه ذهنم رو درگیر خودش کرده و نمیتونم درست و حسابی رو این موضوع تمرکز کنم
-
نقل قول: خارج از دستور - پرسشهایی از جنس دیگر
سلام
کاش استاد mazoolagh کدهائی که در قسمت MS SQL بکار برده ان در اینجا تبدیل به کد sql که قابل اجرا در محیط اکسس باشه میکردن !
منظورم کدهای زیره:
USE [Iran]
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE PROCEDURE [dbo].[GetParents]
@ID int
AS
BEGIN
SET NOCOUNT ON;
WITH All_Parents(ID) AS
(
SELECT ParentID FROM Locations WHERE ID=@ID
UNION ALL
SELECT L.ParentID
FROM All_Parents
INNER JOIN Locations AS L
ON All_Parents.ID=L.ID
)
SELECT L.ID, L.ParentID, L.[Location]
FROM All_Parents
INNER JOIN Locations AS L
ON All_Parents.ID = L.ID
END
GO
USE [Iran]
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE PROCEDURE [dbo].[GetParentsPath]
@ID int
AS
BEGIN
SET NOCOUNT ON;
WITH All_Parents(ID) AS
(
SELECT ParentID FROM Locations WHERE ID=@ID
UNION ALL
SELECT L.ParentID
FROM All_Parents
INNER JOIN Locations AS L
ON All_Parents.ID=L.ID
)
SELECT
STRING_AGG (RESULTS.ID , '/') AS [PATH],
STRING_AGG (RESULTS.[Location] , '/') AS [PATH$]
FROM
(SELECT L.ID AS ID, L.ParentID, L.[Location]
FROM All_Parents
INNER JOIN Locations AS L
ON All_Parents.ID = L.ID) AS RESULTS
END
GO
-
کوئری برای ساخت رشته اعداد در یک محدوده مشخص Query to create a range of numbers
نقل قول:
سلام و درود فراوان خدمت mazoolaghعزیز !
داده های دیتابیس شما رو در قالب treeview پیاده کردم
بخاطر زیاد بودن رکوردها تا حدودی با لود شدن اطلاعات بخصوص در هنگام باز شدن فرم مشکل دارم که سعی می کنم راهکاری براش پیدا کنم
در ضمن بلحاظ عدم مشارکت دوستان با اجازه شما فقط به ضمیمه نمودن دو تصویر از نمونه کار انجام شده اکتفا می کنم
نقل قول:
شرح مسیرها رو از طریق node.FullPath ایجاد کردم وسپس با استفاده از تابع Split اقدام به ایجاد کد مسیرها نمودم
سلام دوباره خدمت جناب بهرامی گرامی
و بسیار ممنون از این که در بحث ها شرکت میکنین و تجربه و دانش خودتون رو به اشتراک میگذارین.
به سهم خودم بابت همه چیزهایی که از شما یاد گرفتم سپاسگزارم.
طبق معمول همیشگی کارهای شما، یک طراحی و کدنویسی حرفه ای دیگه رو شاهد هستیم.
این که همه 103 هزار و اندی رکورد را گذاشتم 2 دلیل داشت:
1- دیتابیس کامل باشه شاید در جای دیگه ای نیاز کسی رو برآورده کنه.
2- بشه پرفورمنس و زمان پاسخ برنامه رو محک زد.
دیتابیس کامل (شامل Path و $Path های ساخته شده) رو خدمت شما و دیگر دوستان به پیوست تقدیم میکنم.
توجه داشته باشید که حجم فایل دانلودی 2.1 مگابایت هست که پس از بازکردن یک دیتابیس 86 مگابایتی خواهید داشت.
لطفا با این هم تست کنین .
دریافت دیتابیس کامل همراه با مسیرها
-
کوئری برای ساخت رشته اعداد در یک محدوده مشخص Query to create a range of numbers
نقل قول:
سلام
کاش mazoolagh کدهائی که در قسمت MS SQL بکار برده ان در اینجا تبدیل به کد sql که قابل اجرا در محیط اکسس باشه میکردن !
سلام و روز خوش
من هنوز برای حل این مساله در اکسس فکر نکردم!
فعلا جناب بهرامی 2 هیچ از همه ما جلوتر هستن.
-
کوئری برای ساخت رشته اعداد در یک محدوده مشخص Query to create a range of numbers
فرض کنید که یک جدول (یا کوئری)از همه اعداد مجاز long integer به اسم All_Numbers داشته باشیم:
minimum long integer = -(2^31) = -2,147,483,648
maximum long integer = 2^31 -1 = +2,147,483,647
البته منطقی نیست چون این جدول (یا کوئری) 4,294,967,296 رکورد خواهد داشت، ولی برای حل مسئله این فرض مشکلی ایجاد نمیکنه.
در اینصورت خیلی ساده کافی بود کوئری رو به شکل زیر میساختیم:
PARAMETERS Range_Start Long, Range_End Long;
SELECT N AS [Number]
FROM All_Numbers
WHERE N BETWEEN Range_Start AND Range_End;
که N اسم فیلد هست.
خب البته این کار شدنی نیست (منطقی و عملی) ،
ولی از ریاضی دبستان به یاد داریم که در سیستم شمارش دهدهی هر عددی را میتونیم با ارقام 0 تا 9 بسازیم،
به این صورت که دسته های یکی، ده تایی، سد تایی، هزار تایی، .... بسازیم (همون یکان، دهگان، سدگان، هزارگان، ...)
حالا کافی هست به جای یک جدول (کوئری) با بیش از 4 میلیارد رکورد،
برای هر دسته یک جدول (کوئری) فقط با 10 رکورد داشته باشیم. به عنوان مثال:
D با 10 رکورد از 0 تا 9
D10 با 10 رکورد از 0 تا 90
D100 با 10 رکورد از 0 تا 900
D1K با 10 رکورد از 0 تا 9000
D10K با 10 رکورد از 0 تا 90000
پس کوئری ما به شکل زیر میشه:
PARAMETERS Range_Start Long, Range_End Long;
SELECT (D.N + D10.N + D100.N + D1K.N + D10K.N) AS [Number]
FROM D,
D10,
D100,
D1K,
D10K
WHERE (D.N + D10.N + D100.N + D1K.N + D10K.N)
Between Range_Start And Range_End;
اما هنوز میتونیم کارها رو ساده تر کنیم،
به این صورت که فقط یک جدول(کوئری) D داشته باشیم ولی کوئری رو به شکل زیر بنویسیم:
PARAMETERS Range_Start Long, Range_End Long;
SELECT (D.N + 10*D10.N + 100*D100.N + 1000*D1K.N + 10000*D10K.N) AS [Number]
FROM D,
D AS D10,
D AS D100,
D AS D1K,
D AS D10K
WHERE (D.N + 10*D10.N + 100*D100.N + 1000*D1K.N + 10000*D10K.N)
BETWEEN Range_Start AND Range_End;