PDA

View Full Version : سوال: سابفرم



hildar
یک شنبه 29 فروردین 1389, 10:18 صبح
سلام دوستان
اول یه خواهش داشتم از مدیرای سایت می خوام که اگه این موضوع از نظر اونا تکراری بود اونو حذف نکنن چون من خیلی دنبال جوابم تو تاپیکها گشتم اما پیدا نکردم.:گیج:
من یه مشکل در رابطه با پایگاه داده ای که طراحی کردم دارم :
این پایگاه داده باید بتونه کلیه اطلاعات پرسنل رو مثله:نام،نام خانوادگی،شماره پرسنلی(کلید اصلی)،مدیریت،اداره،شهر محل سکونت،میزان تحصیلات در جدولی ذخیره کنه
وباید لیست یه سری دوره های آموزشی رو هم در یه جدول دیگه ذخیره کنه:نام دوره،کد دوره(کلید اصلی)،نوع دوره(تخصصی و...)،مدت دوره
و یه جدول هم برای پرسنل/دوره طراحی کردم که بتونه اطلاعات آموزشی افراد رو ثبت کنه که شامل:کد پرسنلی(کلید اصلی)،کد دوره،تاریخ شروع دوره(کلید اصلی)،تاریخ پایان دوره،نمره
که جدول آخری یک سری اطلاعاتش رو از دو جدول بالا می گیره
مشکل من در رابطه با فرمیه که قراره اطلاعات آموزشی رو ثبت کنه که در اون فرم اطلاعات دوره یکبار ثبت بشه و بتونه برای اون دوره اطلاعات چند نفر رو ثبت کنه
که من اینو با فرم و ساب فرم طراحی کردم
اما چون این فرم و ساب فرم اطلاعاتشونو از دو یا سه جدول می گیرن در مورد فیلد کلید اصلی در فرم و ساب فرم error می گیره
از دوستان می خوام که منو راهنمایی کنن:تشویق:

moalla
یک شنبه 29 فروردین 1389, 14:57 عصر
نمیدونم سوالتون رو درست متوجه شدم یا نه اما جواب:
وقتی ساب فرم رو هم به یک جدول دیگه وصل میکنید توی همون تب data باید به خصوصیت linkmasterfield و خصوصیت link child fields برید و کلیدهای اصلی رو توش مشخص کنید. اگه سوالتون غیر از اینه لطفا فایلتون رو ضمیمه کنید

hildar
یک شنبه 29 فروردین 1389, 15:32 عصر
نمیدونم سوالتون رو درست متوجه شدم یا نه اما جواب:
وقتی ساب فرم رو هم به یک جدول دیگه وصل میکنید توی همون تب data باید به خصوصیت linkmasterfield و خصوصیت link child fields برید و کلیدهای اصلی رو توش مشخص کنید. اگه سوالتون غیر از اینه لطفا فایلتون رو ضمیمه کنید


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

moalla
یک شنبه 29 فروردین 1389, 16:39 عصر
این عکس چیزی رو نشون نمیده که بشه راهنمایی کرد
احتمال میدم کلید اصلیتون رو autonumber نذاشتید
اگه اینطوریه پاکش کنید و اون رو autonumber قرار بدید.
بازم پیشنهاد میکنم پروژه رو بذارید اینجا تا اصلاح بشه چون باز فکر کنم به مشکل دیگه بخورید

dadsara
یک شنبه 29 فروردین 1389, 21:01 عصر
سلام
دوست عزیز ، در عکس نمونه ای که قرار داده اید بنظر می آید مشخصات پرسنلی که ثابت هستند باید در Header فرم قرار بگیرند و سایر اطلاعات مربوط به دوره در سابفرم ( البته از نوع DataSheet ) قرار بگیرند

hildar
دوشنبه 30 فروردین 1389, 10:36 صبح
سلام
دوست عزیز ، در عکس نمونه ای که قرار داده اید بنظر می آید مشخصات پرسنلی که ثابت هستند باید در Header فرم قرار بگیرند و سایر اطلاعات مربوط به دوره در سابفرم ( البته از نوع DataSheet ) قرار بگیرند


ممنون از راهنماییهای شما دوستان
نه اینجوری نیست، مشخصات دوره باید ثابت بمونه و به ازای ورود اطلاعات هر یک دوره،باید بشه نمره n کارمند رو ثبت کرد

فایلو میزارم،لطفا بگید اشکال کجاست

hildar
دوشنبه 30 فروردین 1389, 10:40 صبح
این عکس چیزی رو نشون نمیده که بشه راهنمایی کرد
احتمال میدم کلید اصلیتون رو autonumber نذاشتید
اگه اینطوریه پاکش کنید و اون رو autonumber قرار بدید.
بازم پیشنهاد میکنم پروژه رو بذارید اینجا تا اصلاح بشه چون باز فکر کنم به مشکل دیگه بخورید

دوست عزیز نمیشه کلیدهارو autonumber بذارم
نگاهی به فایل بکنید
من از سه جدول کمک گرفتم و به وسیله کوئری savabegh که به فرم اختصاص دادم این فرمو اونطوری که می خوام باشه در آوردم،ولی مشکل اینجاست که هر کدوم از سه جدول که در کوئری شرکت کردن خودشون دارای یک یا دو کلید اصلین و اینه که در ورود اطلاعات من مشکل بوجود میاره

hoshy345
دوشنبه 30 فروردین 1389, 20:16 عصر
با سلام خدمت شما دوست گرامی
من فایل شما رو با سلیقه خودم دستکاری کردم فکر کنم خواسته شما رو بر اورده کنه با ارزوی موفقییت

hildar
سه شنبه 31 فروردین 1389, 10:03 صبح
با سلام خدمت شما دوست گرامی
من فایل شما رو با سلیقه خودم دستکاری کردم فکر کنم خواسته شما رو بر اورده کنه با ارزوی موفقییت

سلام دوست عزیز
ممنون از کمکتون،خیلی لطف کردین
اما این فایلی که شما گذاشتید چند تا اشکال داره
1- شما جدول tbdore رو از کوئری savabegh حذف کردین که در این صورت نام دوره از کجا باید اخذ بشه؟؟؟:متفکر:
*******************
2- مشخصات دوره یکبار باید تایپ شه(کد دوره،تاریخ شروع،تاریخ پایان همچنین نام دوره و مدت اونم که از جدول tbdore باید اخذ بشه ) و به ازای یکبار تایپ مشخصات دوره،n کارمند با نمره هاشون باید ثبت بشه یعنی هر بار مجبور به تایپ شروع و پایان دوره نباشم:افسرده:
*******************
3-با اضافه کردن فیلد ID به جدول tbpersonel/dore (به عنوان کلید اصلی)برای هر کارمند دوره های تکراری ثبت میشه که این اتفاق نباید بیفته:لبخند:
********************
4- ببخشید اگه یه کم پیچیده شد:گیج:

hoshy345
چهارشنبه 01 اردیبهشت 1389, 09:30 صبح
با عرض پوزش از شما دوست خوبم من متوجه منظور شما نشدم .شما در فرم کد دوره را یک بار از کامبو باکس انتخاب کنید نام دوره ومدت دوره و نوع دوره از جدولtbdore در فرم شما نشان داده میشود حال در سابفرم با وارد کردن شماره پرسنلی هر فرد مشخصات ان فرد مشاهده و شما کافیست که تاریخ شروع دوره را وارد کنید تاریخ پایان دوره را سیستم محاسبه و ثبت میکند و با کلیک روی دکمه بعدی میتوانید مشخصات فرد دیگری را که در همان دوره ثبت نام کرده وارد کنید بعد از پایان کار به جدول مراجعه کرده و نتیجه را ببینید
در مورد ثبت تکراری که فرمودید ایا کارمندان شما فقط حق اشتراک در یک دوره را دارند؟ ایا امکان ندارد که کارمندی در دو یا چند دوره ثبت نام کند؟

hildar
چهارشنبه 01 اردیبهشت 1389, 13:55 عصر
سلام دوست عزیز
ممنون از راهنماییتون و از فایلی که گذاشتید
سیستم باید طوری طراحی بشه که برای یک کارمند چند دوره با شروع دوره یکسان ثبت نشه(البته میشه این محدودیتو کنار گذاشت)،در ضمن مدت دوره ها بر حسب ساعته نه روز،
من برنامتون رو تو design view بررسی کردم اما متوجه نشدم وقتی فیلدهای فرم اصلی unbound هستن از کجا اطلاعاتشونو می گیرن( فیلدهای نام دوره،نوع دوره و....)؟؟؟:گیج:
اگه از تکنیک خاصی استفاده کردین لطفاَ برام توضیح بدین.
بعد می خوام فرم یه جوری باشه که لازم نباشه برای هر کارمند تاریخ شروع و تاریخ خاتمه رو تایپ کنم و فقط شماره پرسنلی و نمره رو تایپ کنم.:خجالت:

hoshy345
چهارشنبه 01 اردیبهشت 1389, 21:48 عصر
با سلام مجدد
ببینید اگه شما از کد پرسنلی به عنوان کلید اصلی استفاده کنید هر کارمند فقط در طول مدت اشتغال خود فقط یک بار حق شرکت در فقط یک دوره از کلاس های را خواهد داشت و این تا حدی نامعقول بنظر میرسه
2- فرم بوسیله کد نویسی اطلاعات را از جدول دریافت میکنه
فایل جدید ضمیمه طبق خواسته شما اصلاح شد

hildar
شنبه 04 اردیبهشت 1389, 14:11 عصر
سلام دوست عزیز
خیلی لطف کردین، فایلتون خیلی بدردم خورد و مشکلمو حل کرد،البته اگه کاربر حواسش نباشه و برا یه نفر دوبار شماره پرسنلی و نمره وارد کنه سیستم error نمی ده و این ایراد فرم محسوب میشه،
در ضمن اگه نام دوره به صورت combo box باشه بهتره
به هر حال ممنونم
اما یه مشکل دیگه که تازه بهش بر خوردم اینه که وقتی تو محیط کد نویسی اکسس میرم فقط فرم ها رو تو قسمت project explorer می بینم و گزارشها اونجا دیده نمیشن برا همین اگه بخوام مثلاَ برای گزارشهام کد نویسی کنم(مثلا برای یکی از event های گزارش (report )کد بنویسم) اکسس بهم این اجازرو نمی ده :ناراحت::گیج:
ممنون میشم اگه بازم منو راهنمایی کنید.:خجالت:

مهدی قربانی
شنبه 04 اردیبهشت 1389, 20:14 عصر
سلام
احتمالاً خصوصيت Has Module گزارشات شما روي No تنظيم شده اگر به Yes تغييرشون بديد مشكل حل ميشه .

hildar
یک شنبه 05 اردیبهشت 1389, 09:07 صبح
سلام آقای قربانی عزیز
وقتی خصوصیت has module رو yes می کنم پیغام زیر رو میده:
If your database is on a network drive,check your network connectionTand then try again.
در صورتیکه دیتابیس من تحت شبکه نیست.!!!:گیج:

مهدی قربانی
یک شنبه 05 اردیبهشت 1389, 09:12 صبح
سلام
فايلتون رو در يك دستگاه ديگه تست كنيد .

hildar
دوشنبه 06 اردیبهشت 1389, 16:30 عصر
سلام آقای قربانی
این کارو کردم ولی باز هم همون error رو داد
یکی از دوستام گفتن شاید اونایی که گزارشاشون تو vb می یاد
از crystal report استفاده کردن
شما چی فکر می کنین؟
:متفکر:

مهدی قربانی
دوشنبه 06 اردیبهشت 1389, 17:50 عصر
سلام
اگر بتونيد فايلتون رو اينجا بذاريد بهتر ميشه موضوع رو بررسي كرد چون معمولاً ايراداتي از اين دست رو بلحاظ عدم آگاهي از وضعيت و مشكلات موجود نميشه با احتمالات و حدسيات ريشه يابي كرد .

hildar
سه شنبه 07 اردیبهشت 1389, 08:54 صبح
سلام
ممنون از کمکهاتون
اینم نمونه فایل که فرموده بودید
یکی از گزارشهای پروژه منه

مهدی قربانی
سه شنبه 07 اردیبهشت 1389, 12:37 عصر
سلام
به مدد نمونه شكل مشخص شد ، شما اگر نام گزارش رو كه الان فارسي هست به لاتين تغيير بديد مشكل برطرف خواهد شد .

جعفر88
سه شنبه 07 اردیبهشت 1389, 15:01 عصر
سلام
ضمن تشكر از راهنمايي شما فكر نمي كنم فارسي بودن نام گزارش ايرادي بر امكان نوشتن كد براي آن را داشته باشه ولي احتمالاً دوست محترم (hildar) در ايجاد گزارش يه ايرادي رو براي vba اكسس درست كرده باشن در ضمن نمي دونم گزارش مذكور در اصل برنامه دوستمون به صورت پارامتري تهيه ميشه يا نه ولي پيشنهاد مي كنم براي جذابيت كار از ابجكت DAO.querydef براي تهيه گزارش با كمك يه فرم استفاده بكنن(البته شايد روش بهتري رو براي ساخت گزارش ايشون استفاده كرده باشن و براي سادگي دريافت پاسخشون فقط گزارش رو به صورت ساده اپلود كردن-به هر حال نظري بود كه به ذهنم رسيد)

مهدی قربانی
سه شنبه 07 اردیبهشت 1389, 15:57 عصر
سلام
ضمن تشكر از راهنمايي شما فكر نمي كنم فارسي بودن نام گزارش ايرادي بر امكان نوشتن كد براي آن را داشته باشه ولي احتمالاً دوست محترم (hildar) در ايجاد گزارش يه ايرادي رو براي vba اكسس درست كرده باشن در ضمن نمي دونم گزارش مذكور در اصل برنامه دوستمون به صورت پارامتري تهيه ميشه يا نه ولي پيشنهاد مي كنم براي جذابيت كار از ابجكت DAO.querydef براي تهيه گزارش با كمك يه فرم استفاده بكنن(البته شايد روش بهتري رو براي ساخت گزارش ايشون استفاده كرده باشن و براي سادگي دريافت پاسخشون فقط گزارش رو به صورت ساده اپلود كردن-به هر حال نظري بود كه به ذهنم رسيد)


سلام
دقيقاً مشكل به همين موضوع برميگرده ، پيغامي كه hildar در پستهاي قبلي اشاره كردن رو بنده هم وقتي نمونه فايلشون رو تست كردم دريافت شد يعني وقتي در نماي Design وارد برگه خصوصيات شدم و اقدام به Yes كردن خصوصيت Has Module كردم پيغام مذكور نمايش داده شد. اما بعد از اينكه نام گزارش رو كه فارسي بود لاتين كردم مشكل به كلي برطرف شد .
قبلاً هم بنده ساير دوستان در خلال تاپيكها و پستها تاكيد كرديم كه در نامگذاري اشياء و كنترلها از كاراكترهاي فارسي استفاده نشه چرا كه بعضاً مشكلاتي مشابه مشكل حاضر رو در پي خواهد داشت . موفق باشيد

hildar
چهارشنبه 08 اردیبهشت 1389, 09:30 صبح
سلام آقای قربانی ممنون از راهنماییتون
مشکل حل شد
اما یه مشکل دیگه ای که قبل از این مشکل وجود داشت اینه که گزارش چند صفحه ای تو صفحات فرد نشون داده میشه مثلاَ اگه گزارش دو ص باشه، گزارش تو ص 1 و ص3 نشون داده میشه،
متوجه نمیشم اشکال از کجاست:گیج::گیج:

hildar
چهارشنبه 08 اردیبهشت 1389, 09:36 صبح
سلام
ضمن تشكر از راهنمايي شما فكر نمي كنم فارسي بودن نام گزارش ايرادي بر امكان نوشتن كد براي آن را داشته باشه ولي احتمالاً دوست محترم (hildar) در ايجاد گزارش يه ايرادي رو براي vba اكسس درست كرده باشن در ضمن نمي دونم گزارش مذكور در اصل برنامه دوستمون به صورت پارامتري تهيه ميشه يا نه ولي پيشنهاد مي كنم براي جذابيت كار از ابجكت DAO.querydef براي تهيه گزارش با كمك يه فرم استفاده بكنن(البته شايد روش بهتري رو براي ساخت گزارش ايشون استفاده كرده باشن و براي سادگي دريافت پاسخشون فقط گزارش رو به صورت ساده اپلود كردن-به هر حال نظري بود كه به ذهنم رسيد)

سلام آقای جعفر 88
ممنون از راهنماییتون،
من از گزارشگیری به روش ویزارد استفاده کردم و بعد اونو یه کم دستکاری کردم،و چون اولین باره که دارم به صورت حرفه ای:لبخند: با اکسس کار می کنم،خیلی تو کار کردن با ابجکتها وارد نیستم و تا حالا هم کار نکردم.:گیج:

مهدی قربانی
چهارشنبه 08 اردیبهشت 1389, 15:13 عصر
اما یه مشکل دیگه ای که قبل از این مشکل وجود داشت اینه که گزارش چند صفحه ای تو صفحات فرد نشون داده میشه مثلاَ اگه گزارش دو ص باشه، گزارش تو ص 1 و ص3 نشون داده میشه،
متوجه نمیشم اشکال از کجاست:گیج::گیج:

سلام
اين مورد به موضوع اين تاپيك مرتبط نيست بنابراين لطف كنيد در تاپيك مجزا مطرح كنيد .

hildar
شنبه 11 اردیبهشت 1389, 09:35 صبح
سلام
مشکلم،حل شد فهمیدم مشکل از چی بود؟

در ضمن آقای قربانی من برای اینکه بتونم مشکلات پروژمو حل کنم ،همه رو در ادامه هم مطرح می کنم.

wolfstander
شنبه 11 اردیبهشت 1389, 10:28 صبح
سلام
البته من زیاد خودم وارد نیستم ولی به دلیل مشکلات بسیار زیادی که سابفرم برام به وجود آورده ، همیشه ازش فراری هستم
:D
من برای اینکه این مشکلات رو نداشته باشم و راحتی کار با ساب فرم رو هم در اختیار داشته باشم ، این کار رو انجام میدم
جدولم رو به صورت یک فرم درست میکنم
عین حالت عادی
بعدش تو قسمت From Header
میام و تعدادی تکست باکس به اندازه فیلدهام تعریف میکنم
یک کلید هم تعریف میکنم که اطلاعات تکست باکسم رو به محض اینکه زدم ، بریزه توی فیلدهای جدولم
یه کلید دیگه هم تعریف میکنم که اطلاعات تکست باکس هام رو پر کنه تا بتونم اطلاعات بعدی رو بریزم توش
حالا تو فرمم که مثلا مشخصات پرسنلیه و میخوام اطلاعات دوره های آموزشی هر فرد رو بهش اضافه کنم ، یک کلید اضافه می کنم
و به محض اینکه اون کلید زده شد، شماره پرسنلی فرد رو میریزم تو یه متغیر
و کدی رو که خود اکسس میده برای بازکردن فرم دیگر، با یکسان بوده شماره پرسنلی رو بهش اضافه میکنم
حالا بازدن دکمه ، فرم دوره های آموزشی باز خواهد شد
تو فرمی که اول تعریف کردم و دوره های آموزشی هست، این شماره پرسنلی رو فراخون میکنم و میندازمش تو تکست باکسی که قراره بعدا ً اطلاعات از توش بره بشینه تو جدول
البته غیر فعالش میکنم که کاربر نتونه توش دستکاری کنه ها
به محض اینکه کاربر اطلاعات رو بزنه ، با ذخیره اش، میشینه تو جدول
راحت و ساده
اینطوری هم اطلاعات غیر واقعی وارد نمیشه
هم اینکه مشکلی وجود نخواهد داشت در ورود اطلاعات
هم کنترل داده صورت میگیره
هم مشکلات ساب فرم رو از خودم دور میکنم
مبتدیانه است ، ولی جواب میده
البته اگه دوستان دیگه نظر بهتری داشته باشند ، استفاده از نظر اونها توصیه میشه
ولی در حالت مبتدی که گرفتن اشکال از بخشهای مختلف برنامه از حد اطلاعات کاربری مثل خودم خارجه ، این راه حل جواب میده
:بامزه:
دوستان سوار مرسدس بنز میشن، ما با ژیان میریم
تو ترافیک هر دوتا یک سرعت داریم
تو بزرگراهه که تفاوت ها معلوم میشه
مثال کاربر مبتدی و حرفه ای هم همینه
ماها یواش یواش حرکت میکنیم ، نیازهامون با همین مقدار حل میشه ولی باید تلاش کنیم که اطلاعات بیشتری رو کسب کنیم تا وقتی که یک مساله بزرگ رو بهش برخورد کردیم ، بتونیم عین دوستان بنز سوارمون ، گازشو بگیریم
:لبخند:

hildar
شنبه 11 اردیبهشت 1389, 10:57 صبح
سلام wolfstander
اتفاقاَ راه حل مبتکرانه ایه
برای من که جالب بود
ممنون