View Full Version : سوال: درخواست راهنمایی در پیاده سازی یک قسمت از برنامه کاربردی
alfredo
چهارشنبه 22 آبان 1387, 08:44 صبح
باسلام. من تجربه برنامه نویسی کاربردی نداشتم در حد تهیه query با sql و ترکیب آن با اکسس و اکسل کار کردم اما جهت تهیه گزارش نه ساخت اینترفیس و برنامه کاربردی. در حال حاضر یک برنامه کاربردی را دارم می نویسم اما در یک قسمت همچنان راهکار ضعیفی دارم برای همین مزاحم دوستان و اساتید شدم. اینکار با اینکه در اکسس هست اما چون نیاز به کد نویسی داره در این بخش مطرح کردم
اما مشکل :
در یک قسمت از یک برنامه من نیاز دارم که برای مدت 48 ساعت وضعیت هر دقیقه را مشخص کنم و هر دقیقه میتونه چند حالت را داشته باشه (فعلا 7 حالت هست). چه راهی به نظر شما مناسب هست برای پیاده سازی این کار؟ کاری که خودم انجام دادم این هست که برای هر دقیقه یک خط کوچیک با قطر یک دهم کشیدم و برای هر status یک رنگ گذاشتم و از کنار هم چیندن این خطوط رنگی وضعیت قابل نمایش هست. البته این دستی هست و هنوز تبدیل به کد نکردم که ببینم مشکل داره یانه. با همین ابزارهای اکسس وقتی من برای 12 ساعت را ایجاد کردم مشکل در تعداد اشیاء در یک فرم پیش آمد فکر کنم محدودیتی داره تعداد اشیائی که در یک فرم میتونه قرار بگیره. یک تصویر برای انتقال بهتر منظورم در پایین میذارم.
نکته ای هم اضافه کنم که هر تغییر حالت یا تغییر رنگی که حاصل از تغییر فیلد مربوط به وضعیت دقیقه بخصوصی هست در صفحه باید امکان این را پیاده کنم که اطلاعات اضافی را در صورتی که کلیک کرد نمایش بده. روی خط های رنگی هم که ایجاد کردم نمیشه event تعریف کرد برای این هم من به ازای هر نیم ساعت یک command button گذاشتم اما دقیق نمیشه (این مورد در شکل مشخص هست) آیا راه کار بهتری به ذهن کسی میرسه؟
اگر مبهم هست بفرمایید بیشتر توضیح بدم
f.nabavi
چهارشنبه 22 آبان 1387, 09:05 صبح
سلام. اول اینکه تصویر رو نذاشتی... دوم اینکه محدودیتی برای اشیا روی فرم وجود نداره. فقط اگر تعداد زیاد باشه مرتب سازیشون و نمایش درستشون ممکن نیست. یعنی از لحاظ مساحت جا نمیشن. یه مطلب دیگه اینه که میخوای وضعیت هر فیلد رو در طی 48 ساعت نشون بدی؟ یا همون طور که نوشتی وضعیت هر دقیقه رو که در این صورت منظورت رو از وضعیت دقیقه نمی فهمم. زمان که وضعیت نداره...
alfredo
چهارشنبه 22 آبان 1387, 09:27 صبح
سلام. اول اینکه تصویر رو نذاشتی... دوم اینکه محدودیتی برای اشیا روی فرم وجود نداره. فقط اگر تعداد زیاد باشه مرتب سازیشون و نمایش درستشون ممکن نیست. یعنی از لحاظ مساحت جا نمیشن. یه مطلب دیگه اینه که میخوای وضعیت هر فیلد رو در طی 48 ساعت نشون بدی؟ یا همون طور که نوشتی وضعیت هر دقیقه رو که در این صورت منظورت رو از وضعیت دقیقه نمی فهمم. زمان که وضعیت نداره...
با تشکر از پاسخ سریع شما :خجالت:
تصویر یادم نرفته بود اینترنت سرعتش کند بود متن را فرستادم و تصویر را هم تازه آلان ارسال شد اضافه میکنم. این هم تصویر
http://i36.tinypic.com/23pvh0.jpg
در مورد محدودیت اشیاء من عمل میکنم پیغامی که میده را میزارم. شاید موضوع چیز دیگه ای باشه. از لحاظ مساحت به راحتی جا میشه در هز یک از دکمه های بالا که نیم ساعت را پوشش میده خطوط بالای از 30 خط کوچک به هم چسبیده تشکیل شده. بطور مثال قسمت قرمز که یکی از حالتهای وضعیت هست قبل از ساعت 16 شروع شده و تا قبل از 16:30 ادامه داره.
در واقع خط بالا از ساعت 12:00 تا 23:59 هست و به ازای هر دقیقه یک خط کشیده شده (البته فعلا بدون کد اما اینکار باید توسط کد انجام بشه یعنی ابتدا وضعیت این دقیقه از فیلد مربوطه خوانده میشه و سپس بر اساس مقدار این فیلد یکی رنگ خط مشخص میشه و خط در جایگاه مربوط به خودش یعنی دقیقه بخصوص باید رسم بشه)
من وضعیت هر دقیقه را برای مدت 48 ساعت میخوام روی صفحه نمایش بدم. این عکس بالا بطور مثال 12 ساعت را نمایش میده و همین شکل 3 بار دیگه در فرم باید ایجاد کنم تا 48 ساعت بشه.
این وضعیت هر دقیقه توسط کاربران متفاوتی که یکی از این وضعیت ها را انتخاب میکنند در بانک و فیلد مربوطه نوشته میشه و در event مربوط به به روز شدن شی مربوط به این فیلد باید کشیدن خط با رنگ وضعیت مربوطه را پیاده کنم.
اگر مبهم هست بیشتر باز توضیح میدم.
f.nabavi
چهارشنبه 22 آبان 1387, 09:59 صبح
راستشو بخوای خیلی مبهم مینویسی....
در واقع خط بالا از ساعت 12:00 تا 23:59 هست و به ازای هر دقیقه یک خط کشیده شده
وقتی میگی به ازای هر دقیقه یک خط کشیده شده، من باید کلی خط ببینم. ولی فقط یکی هست. و دوباره سوالم رو میپرسم... وضعیت چی رو باید هر دقیقه نشون بدی؟ و بعد اینکه کلیت پروژه رو تعریف کن. کلا چی تو دیتابیس می ریزی و کاربران چه وضعیت رو انتخاب میکنن. کلا توضیح بده ... در مورد اینترفیس نگران نباش، به زودی درست میشه.
alfredo
چهارشنبه 22 آبان 1387, 10:36 صبح
با عرض معذرت سعی میکنم واضح بگم اما نمی دونم چطور. توضیحات اضافه تر :
خوب دیتابیس من SQL هست که از طریق یک فایل پروجکت اکسس متصل میشم. موضوع هم مربوط میشه به وضعیت یک هواپیما. وضعیت یعنی حالتی که هواپیما داره مثلا روی زمین / تو آسمون/ تعمیرات / تاخیر و.... هر یک از این وضعیت ها یک id گذاشتم از 1 تا 7 فعلا شایدم زیاد بشه.
روی فرم وضعیت یک هواپیما در طی 48 ساعت به صورت خطوط رنگی میخوام دیده بشه که البته من فعلا 12 ساعت آن را تو تصویر گذاشتم.
(منظور همان نوار رنگی هست که بالای دکمه هایی که اعداد ساعت داخلشون هست، این نوار از خط کوچک به هم چسبیده تشکیل شده یعنی مثلا از کنار هم قرار گرفتن همچنین حالتی |||||||||||||||||| البته بدون فاصله در نتیجه مثل یک نوار یکدست دیده میشه اما در واقع خطوط ریزی هست که به هم چسبیدن. پس برای نمایش یک ساعت من 60 تا خط کوچیک نیاز دارم و برای 12 ساعت این عدد ضرب 12 میشه یعنی 720 خط کوچک! (اینجا منظورم از زیاد شدن اشیاء مشخص میشه)
حالا تو فرم dataEntry توسط یک کاربر در زمان (ساعت ودقیقه) مشخصی وضعیت از روی زمین بودن تغییر میکنه به وضعیت در آسمان. وقتی چنین حالتی شد فیلد وضعیت این هواپیما در دیتا بیس تغییر میکنه (مثلا روی زمین id یک را داره و تو آسمان id شماره دو را داره).
برای هر وضعیت هم رنگی تعیین کردم برای مثال روی زمین آبی روی آسمان سبز
در نتیجه وقتی کاربر وضعیت را از زمین به آسمان تغییر داد در زمان مشخص من باید در این نوار رنگی خط مربوط به این زمان را از آبی به سبز تغییر بدم که نشون بده هواپیما در آسمان هست. (البته یک خط سبز به دلیل اینکه زمان پرواز بیش از یک دقیقه هست ادامه تا زمانی که وضعیت آن از آسمان به زمین تبدیل بشه که از آنجا دوباره آبی میشه که این قسمت آخر توضیح اضافی بود)
f.nabavi
چهارشنبه 22 آبان 1387, 10:48 صبح
ممنون خیلی کامل بود. حالا چند تا سوال دارم...
1- تعداد هواپیما ها متغیره یا ثابت؟
2- میخوای به صورت تصویری وضعیت دوتا هواپیما رو مقایسه کنی یا نمایش تک تک آنها هم کافیه؟
3-فرض کن هواپیمای i به مدت 1 ساعت تو وضعیت آبی قرار داره. بعد یک ساعت قرمز و دوباره 1ساعت آبی. این وضعیت های آبی رو با هم جمع میکنی؟ یه بار آبی رو ثبت میکنی یا به تعدادی که در وضعیت آبی بوده؟
4- تو اینترفیس زدن چقدر تازه کاری؟
alfredo
چهارشنبه 22 آبان 1387, 13:24 عصر
با تشکر از پاسخ های سریع شما :لبخندساده:
1- تعداد هواپیما تغییر میکنه
2- به صورت تصویری میخوام وضعیت هواپیما را نشون بدم هدف مقایسه نیست. اول میخوام یک هواپیما را نمایش بدم در مرحله بعدی کل هواپیماها را وضعیتشون را نمایش بدم
3- وضعیت های 48 ساعتی که گفتم دقیقا نشانگر سابقه هست و نیازی به جمع کردن نیست. البته اگر هم قرار بر این باشد از محل دیگری این کار قابل گزارش گیری هست. در این نمایشگر خطوطی هدفم نمایش آخرین وضعیت هست نه جمع بندی و گزارش گیری. وضعیت پیش فرض من در ابتدا برای هر هواپیما بصورت ناشناس هست که خاکستری میزارم برای این 48 ساعت و به ترتیب که اطلاعاتی از کاربران دریافت شد دقایق متناظر با این را به نوع وضعیت انتخاب شده باید تغییر بدم یعنی این نوار رنگی به روزترین وضعیت را نمایش میده. کلیدهای کامندی که در زیر این نوار آبی گذاشتم برای این هست که وقتی کلیک کردن در این بازه زمانی تغییرات اعمال شده را نمایش بده.
البته اضافه کنم چون این وضعیت از جاهای مختلف وارد میشه و هواپیما ها هم چندتا هست 4 تا جدول 12 ساعتی وضعیت مختص اینکار تو طراحی در نظر دارم. چون نمیخوام برای نمایش وضعیت 48 ساعتی برای کاربری که تازه به برنامه وارد میشه بره کلی دیتا از بانک بخونه و جمع بندی کنه بلکه به راحتی با مراجعه به این 4 جدول آخرین وضعیت را به راحتی میتونه ببینه.
4- تو اینترفیس زدن تازه کارم چیزی که الان ساختم چندتا کامبو باکس و لیس باکس و تکست باکس هست که سایر اطلاعات را انتخاب و وارد میکنن. اما اگر جایی گیر کنم از مطالب انگلیسی و اینترنت میتونم استفاده کنم. مشکل اصلی الان تو اینکه چطور این بخش را پیاده کنم.
f.nabavi
چهارشنبه 22 آبان 1387, 14:35 عصر
فرض کن قراره 1 هواپیما رو نشون بدی با وضعیتش تو این 12 ساعت اخیر. پس یه نوار 12 ساعته داریم.
(720 دقیقه) من برات یه مثال میذارم.
For i = 1 To 10
Call Controls.Add("VB.Line", "L" & CStr(i))
Load line1(i)
Set line1(i).Container = Picture1
line1(i).Visible = True
line1(i).Left = line1(i - 1).Left + line1(i - 1).Width
line1(i).Top = 30
If (i Mod 2) = 0 Then
line1(i).FillColor = vbBlue
End If
Next i
این کد رو تو برنامه بذار و به جای n تعداد وضعیت یک هواپیما رو که تا حالا ثبت شده ، از بانک بخون و بذار... وقتی اجرا شد وارد مرحله بعدی میشیم
alfredo
پنج شنبه 23 آبان 1387, 11:28 صبح
من به شکلهای مختلف سعی کردم اما نشد
در مورد خط دوم یعنی Call Controls.Add("VB.Line", "L" & CStr(i)) یک توضیح بدید ممنون میشم. این زیر مجموعه add اصلا توی control نیست چهار تا آیتم بود اما این یکی نبود در فرم. در ویژوال بیسیک هم امتحان کردم نداشت.
در مورد خط سوم و چهارم هم لطف کنید توضیح کوتاهی بدید. در خطهای 5 و 6 و 7 که از عبارت line1(1) استفاده کردید منظور چی هست؟
کل این خطوط را کارش را بگید ممنون میشم. چون کد نویسی vb کار نکردم با قابلیت ها و محدودیت هاش هم آشنایی ندارم.
آیا راهی هست که بشه اشیاء را داخل یک حلقه خصوصیات مورد نظر را تغییر داد؟ در قطعه کد بالا به نظرم این کار میخواد انجام بشه اما نمیشه به همون خط دوم و گذاشتن متغیر حلقه جلوی Line1 خطا میگیره
alfredo
سه شنبه 28 آبان 1387, 14:35 عصر
اگر از اساتید کسی روش استفاده از اشیاء داخل حلقه را میدونه یه مثال ساده ای بزنه. یا راهکار دیگه اگر میشه پیاده کرد راهنمایی کنید.
منظورم از اشیاء فرض کنید 20 تا خط روی فرم کشیدم حالا با یه حلقه میخوام این 20 تا خط را رنگش را تغییر بدم یا هر یک از خصوصیات این خط را بشه تغییرداد.
alfredo
شنبه 02 آذر 1387, 13:20 عصر
از قرار معلوم یا صورت مسئله ما اشکال داره یا ما رو تحویل نمی گیرن ببینید این روش که میگم چطور هست. آیا عملی هست یا نه. اگر عملی هست لطف کنید مثالی بزنید برای اینکه بتونم مثلا خصوصیت border Color برای 30 خط کشیده شده روی فرم را با هم در یک حلقه تغییر بدم میشه یک آرایه 30 تایی از ثابت ها تعریف کنم و این ثابت ها همان خصوصیت مورد نظر من برای این 30 خط باشه و با یک حلقه مقدار این 30 آرایه را تغییر بدم و خصوصیت رنگ خطوط در صفحه عوض بشه (منظور همون رنگ خطوط عوض بشه) ممنون میشم راهنمایی کنید.
vBulletin® v4.2.5, Copyright ©2000-1404, Jelsoft Enterprises Ltd.