PDA

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



Rasool-GH
شنبه 05 آذر 1390, 10:51 صبح
سلام
چطور ميشه يك كمبو داشت كه به طور مثال در ليست خودش اسامي كالا رو نمايش بده و با انتخاب اون كالا قيمت يا كد كالا ذخيره بشه و در گزارش گيري هم به جاي كد نام كالا درج بشه

mehdi_fiz
شنبه 05 آذر 1390, 21:28 عصر
سلام دوست عزیز
نمونه فایلتون رو بذارید تا دوستان بهتر بتونند راهنمایی کنند
موفق باشید

Rasool-GH
سه شنبه 08 آذر 1390, 17:54 عصر
داشتم نمونه رو اماده میکردم که اینجا بزارم که برام یک سوال پیش اومده لطفا راهنمایی کنید
من در یک جدول لیست کالاها و قیمت اونها رو دارم و در یک جدول هم اسامی مشتری ها و کدهای شناسایی اونها رو حالا در جدول سوم میخوام خریدهای هر مشتری رو ذخیره کنم و در نهایت بتونم گزارشی بگیرم که فاکتور خرید مشتری باشه
ضمنا نیاز دارم که در فرم ثبت هم نام مشتری و نام کالا نمایش داده بشه

حالا برای انجام این کار پیشنهاد میکنید که در جدول 3 اسامی مشتری ها و کد کالا رو ذخیره کنم و در هنگام گزارش اسامی اونها رو لود کنم
یا اینکه نام مشتری و نام کالا رو ذخیره کنم و در هنگام نمایش در فرم اسامی اونها رو لود کنم

Abbas Amiri
سه شنبه 08 آذر 1390, 19:29 عصر
نه دوست عزیز ، اصلا. یکی از مزایای دیتابیس ها عدم نیاز به تکرار داده ها به دلیل اسفاده از رابطه هاست . شما درجدول 3 کافیست کد مشتری ، کد کالا ومشخصات خرید را داشته باشید . وبعد هم یا در جدول3 این دوفیلد را در قسمت Lookup جهت نمایش نام اصلاح کنید ویا پس ازاینکه فرم را ایجادکردید فیلدهای مربوطه رابه کمبوباکس تبدیل کنید و کوئری لازم جهت نمایش نام را برای آنها تنظیم کنید

Rasool-GH
دوشنبه 14 آذر 1390, 23:43 عصر
سلام

من یک فایل پیوست کردم که برای محاسبات نیاز به یک تابع دارم ولی چون مقادیر در 3 جدول پراکنده ثبت شده نمیدونم با چه کدی اونهارو به تابع معرفی میکنم
داخل کوئری مقادیر مورد نظر رو از جداول به تابع مورد نظر ارسال کردم ولی داخل تابع باید جریان معادل C1 ,J1 و C2,J2 رو از جدول Cable مشخص کنم و در رابطه قرار بدم . مشکل من اینه که به چه صورت این مقدار رو از جدول Cable لود کنم .

Rasool-GH
دوشنبه 14 آذر 1390, 23:45 عصر
به دلایلی امکان تجمیع این جداول وجود نداره
ببخشید اگه یه مقدار بد گفتم یه مقدار هنگ کردم

Abbas Amiri
سه شنبه 15 آذر 1390, 00:11 صبح
این "معادل C1 ,J1 و C2,J2 رو از جدول Cable " درجدول موردنظر چه چیزی متناظر بااینهاست

Abbas Amiri
سه شنبه 15 آذر 1390, 00:35 صبح
تابع موردنظرتان اصلاح شد



Function TCFL(R, S, T, C1, C2, j1, j2) As Integer

Ac1 = DLookup("amperaj", "cabl", "size='" & C1 & "' AND jens='" & j1 & "'")
Ac2 = DLookup("amperaj", "cabl", "size='" & C2 & "' AND jens='" & j2 & "'")
TCFL = (GMax(R, S, T) / IIf((Nz(Ac1, 0) + Nz(Ac2, 0)) = 0, 1, Nz(Ac1, 0) + Nz(Ac2, 0))) * 100
End Function


البته درخط 5 درمخرج عبارت چنانچه مقدار صفر شود ، یک درنظر گرفته خواهدشد.
درضمن اگر نام جدول در اصل برنامه cable است ، درتابع تصحیح کنید

Rasool-GH
سه شنبه 15 آذر 1390, 08:41 صبح
ممنون برادر
لطف کردین . شرمنده که یه مقدار بد نوشته بودم
لطف کنید در مورد کد زیر توضیح کوتاهی بدین .

Ac1 = DLookup("amperaj", "cabl", "size='" & C1 & "' AND jens='" & j1 & "'")

کد بالا یعنی مقدار فیلد امپراژ از جدول کابل که فیلد سایز اون برابر C1 و فیلد جنس اون برابر J1 باشه در متغیر Ac1 قرار بگیره
همونطور که متوجه شدید مشکل من در نوشتن شرط برای DLookUp بود . ممنون میشم که در مورد نحوه به کار گیری علائم شرطی که استفاده شده توضیح بدین " ' &


ضمنا به نظر دوستان روش بهتری برای انجام این کار وجود داره یا نه

یه مورد دیگه اینکه به جای این کد IIf((Nz(Ac1, 0) + Nz(Ac2, 0)) = 0, 1, Nz(Ac1, 0) + Nz(Ac2, 0))) میشه از کد زیر استفاده کرد ؟

Nz(Ac1, 1) + Nz(Ac2, 1)

Abbas Amiri
سه شنبه 15 آذر 1390, 13:56 عصر
برای انتساب و مقایسه عبارات رشته ای در VB (ونه در محیط کوئری دیزاین) بایستی مقدار موردنظر داخل کوتیشن ویا دبل کوتیشن قرار گیرد . '& و +' هم برای اتصال دو رشته بکار میروند ودر مورد بعد تنهادلیل بخاطر عدم وقوع خطای تقسیم برصفر بوده ، شما بایستی بنابر ملاحظات محاسباتی فرمول خود ، عبارت مناسب را بنویسید.

Abbas Amiri
سه شنبه 15 آذر 1390, 14:02 عصر
از لینک زیر می توانید استفاده کنید
http://msdn.microsoft.com/en-us/library/bb258154%28v=office.12%29.aspx

Abbas Amiri
سه شنبه 15 آذر 1390, 14:18 عصر
با توجه به اینکه برای برنامه تان خیلی زحمت می کشید شاید بد نباشد یک نکته را تذکر دهم و آن اینکه شمار درطراحی جداولتان اصول رارعایت نمیکنید واطلاعات تکرار میشوند ، به عنوان مثال کمی تغییر جداول Cable & Shenasname ایجاد کردم ببینید چقدر حجم کمتر واستفاده ازآن آسانتر می شود

Rasool-GH
سه شنبه 15 آذر 1390, 17:48 عصر
توجه شما نسبت به این برنامه لطف شما رو میرسونه . خیلی ممنون
در مورد تغییراتی که ایجاد کردین چند مورد رو متذکر میشم که باعث ایجاد این فرمت در جداول شده . در فرم ورود اطلاعات شناسنامه برای اینکه کمبو بوکس ثبت کابل بیش از حد شلوغ نشه مجبور شدم که سایز کابل و جنس کابل رو از هم جدا کنم . حالا اگر بخوام دو فیلد وارد شده رو با هم ترکیب کنم و در شناسنامه ثبت کنم اولا تعداد ردیفهای کمبو 28 تا میشه که احتمال اشتباه در ثبت زیاد میشه و در مرحله بعد برای استخراج جریان کابل از جدول مربوطه در محاسبات هم به مشکل بر میخورم .
بهترین چیزی که به نظرم رسید این بود که داخل جدول شناسنامه جریان معادل اون کابلی که انتخاب میشه رو ذخیره کنم که کار خیلی راحت میشد ولی به دلیل اینکه در نمایش اطلاعات در هنگام مرور رکوردها نتونستم سطح مقطع کابل رو نمایش بدم (به دلیل عدم اشنایی کافی با برنامه نویسی) فعلا از این روش صرف نظر کردم . البته به لطف شما دارم روش کار میکنم و به زودی به نتیجه میرسه .

Rasool-GH
سه شنبه 15 آذر 1390, 18:13 عصر
بابت لینک مطلبی که معرفی کردین ممنون اطلاعات خوبی داده خیلی مفید بود استفاده کردم
در مورد تابع CInt که استفاده کردین یه مقدار توضیح بدین از help چیز زیادی دستگیرم نشد .

یه مورد دیگه اینکه به دلیل ریلیشنی که بین جداول برقرار کردین با Nz([cabl_1.amperaj];0) کد مقدار جریان کابل به دست میاد ؟

Abbas Amiri
سه شنبه 15 آذر 1390, 22:26 عصر
تابع CInt مقدار داخل پرانتز را به یک عدد صحیح گرد می کند.
درمورد دوم بله . اگر ریلیشن برقرارنباشد باید از تابع DLookup استفاده کنیم که درآن صورت برای حجم رکورد بالا سرعت پایینتر خواهدبود

Rasool-GH
سه شنبه 15 آذر 1390, 22:52 عصر
کمک های شما خیلی برای من مفید بوده با اینکه خیلی برنامه سنگین شده ولی دارم کل ساختار برنامه رو بازسازی میکنم .
با این بازسازی مشکلات زیادی داره حل میشه . همچنین برنامه داره سبکتر میشه

این مشکلات در اثر ضعف من در طراحی و برنامه نویسی ایجاد شده . باز هم ممنون از لطف و همکاری شما

یه سوال :
در شرایط برقراری ریلیشن بین جداول مقایسه بر چه اساس صورت میگیره ؟
یعنی فرمت اون فیلد مرکب داخل جدول شناسنامه مهمه که به چه شکل باشه یا نه . یه مقدار برام نامفهومه

Abbas Amiri
سه شنبه 15 آذر 1390, 23:12 عصر
برای درک بهتر کوئری را درحالت SQL قرار بده وکد آن را ببین بهتر درک خواهی کرد البته از یک کوئری رابطه ای ساده شروع کن. اساسا مقدار برگشتی این کوئریها براساس فیلد(ها) مشترکی است که درهر دو (چند) جدول وجود دارد یعنی فقط رکوردهای برگردانده می شود که فیلدهای دارای ریلیشن آنها مقدار مشترک داشته باشند. البته دونوع دیگر Right Inner Join و Left Inner join هم هست که که باکمی تحقیق باآنها هم آشناخواهی شد.