PDA

View Full Version : چگون میتوان یک فیلد چند مقداری داشت؟



ESG_Esfahan
سه شنبه 11 بهمن 1384, 00:30 صبح
برای اینکه مطلب روشن بشه مشکل که خودم بهش برخورد کردم را مطرح میکنم.

من یک برنامه حسابداری مینویسم و می خواهم داخل این برنامه یک دفتر اسناد دریافتی داشته باشم.

شکل دفتر اسناد دریافتی به صورت زیر است

شماره دفتر / تاریخ / پرداخت کننده / مشخصات سند / دریافت کننده / تاریخ دریافت

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


ممنون میشم اگه من را ارهنمایی کنید :متفکر:

شاپرک
سه شنبه 11 بهمن 1384, 07:33 صبح
ببخشید من متوجه نشدم خوب مشکل چیه ؟ یا کد بانک ذخیره میشه یا کد مشتری .....خوب؟

ehsan_ansaripoor
سه شنبه 11 بهمن 1384, 23:53 عصر
دوست عزیز به نظر من:

شماره دفتر=Long
تاریخ= String
پرداخت کننده اگر کد است =Long اگر نام است = String
مشخصات سند = Memo
دریافت کننده = Long
تاریخ دریافت=String

برای این مشکلی هم که دارید به نظر من شما باید برای مشتری و بانک دو تا سرفصل کد مشخص قرار دهید مثلا:
کد 10 = بانکها
کد 101= بانک ملی
و ...
کد 20=اشخاص
کد 2002= احسان
و ...

با این کار شما می تونید برای گزارشگیری به این صورت عمل کنید که اونهایی که سمت چپ کدش برابر 1 است باشه بانک و اونهایی که سمت چپ کدش برابر 2 است حساب مشتری

ESG_Esfahan
چهارشنبه 12 بهمن 1384, 02:02 صبح
دوست عزیز به نظر من:

شماره دفتر=Long
تاریخ= String
پرداخت کننده اگر کد است =Long اگر نام است = String
مشخصات سند = Memo
دریافت کننده = Long
تاریخ دریافت=String

برای این مشکلی هم که دارید به نظر من شما باید برای مشتری و بانک دو تا سرفصل کد مشخص قرار دهید مثلا:
کد 10 = بانکها
کد 101= بانک ملی
و ...
کد 20=اشخاص
کد 2002= احسان
و ...

با این کار شما می تونید برای گزارشگیری به این صورت عمل کنید که اونهایی که سمت چپ کدش برابر 1 است باشه بانک و اونهایی که سمت چپ کدش برابر 2 است حساب مشتری

از راهنمایی شما متشکرم :چشمک:

این مطالبی که گفتی درست . ولی مشکل من هنوز حل نشده.
در فیلد دریافت کننده کد بانک یا شخص قرار میگرد و موقع گزارش گیریها اگر مقدار فیلد کد شخص باشد
باید این table با table مشتریان join بشه و در گزارش نام مشتری را نمایش دهد و اگر فیلد حاوی کد بانک بود باید با table بانکها join بشه .
حالا چطوری میشه یه دستور Select نوشت که لیست کامل(گزارش اسناد دریافتی) را به ما نشون بده یعنی اگر فیلد دریافت کننده حاوی کد بانک بود نام بانک را نشون بده و اگر حاوی کد شخص بود اسم شخص را نمایش بده.

ehsan_ansaripoor
چهارشنبه 12 بهمن 1384, 21:36 عصر
از راهنمایی شما متشکرم :چشمک:

این مطالبی که گفتی درست . ولی مشکل من هنوز حل نشده.
در فیلد دریافت کننده کد بانک یا شخص قرار میگرد و موقع گزارش گیریها اگر مقدار فیلد کد شخص باشد
باید این table با table مشتریان join بشه و در گزارش نام مشتری را نمایش دهد و اگر فیلد حاوی کد بانک بود باید با table بانکها join بشه .
حالا چطوری میشه یه دستور Select نوشت که لیست کامل(گزارش اسناد دریافتی) را به ما نشون بده یعنی اگر فیلد دریافت کننده حاوی کد بانک بود نام بانک را نشون بده و اگر حاوی کد شخص بود اسم شخص را نمایش بده.

دوست عزیز شما برای این کار می تونید به صورت زیر عمل کنید:
در صورتی که کد بانک شما 10 و مشتری 20 باشد



Select * from Table where left(filed,2)=10


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

البته اگر گزارشات شما از چند جدول است پیشنهاد می کنم که اطلاعات این جدول مثلا اطلاعات بانکها را داخل یک Table فرعی بریزید و بعد به Table2 متصل کنید.

ESG_Esfahan
پنج شنبه 13 بهمن 1384, 01:22 صبح
سلام

اگر میشه یه توضیحی درباره قسمت آخر دستور Select که نوشته ای بده.منظورم در مورد Left است.:خجالت:

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

ehsan_ansaripoor
پنج شنبه 13 بهمن 1384, 23:33 عصر
سلام

اگر میشه یه توضیحی درباره قسمت آخر دستور Select که نوشته ای بده.منظورم در مورد Left است.:خجالت:

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

دوست عزیز تابع Left در واقع به این صورت است که می گوید قسمت سمت چپ فیلد به مقدار 2 کارکتر برابر با مقدار 10 باشد به بیان دیگر
انتخاب کن از داخل جدول اونهایی که (مثلا 1002) سمت چپ عدد به میزان 2 کارکتر است که همان عدد 10 می شود.

ESG_Esfahan
جمعه 14 بهمن 1384, 01:08 صبح
از راهنمایی شما خیلی ممنونم . کمک بزرگی به من کردی.

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


SELECT tb1.id, tb2.name, tb1.price)
FROM tb1 INNER JOIN tb2 ON tb1.id = tb2.id where left(tb1.id,2)=10)
UNION (SELECT tb1.id, tb3.name, tb1.tt
FROM tb1 INNER JOIN tb3 ON tb1.id = tb3.id where left(tb1.id,2)=20);

با این فرض که tb1 جدول اسناد دریافتی و tb2 جدول بانکها و tb3 جدول مشتریان باشد.

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