PDA

View Full Version : مشکل با جست و جو در محدوده ی تاریخ (از تاریخ تا تاریخ)



hamid-nic
پنج شنبه 05 آذر 1388, 12:29 عصر
با سلام دوستان گرامی :
من به یک مشکلی در برگرداندن اطلاعات از روش از تاریخ تا تاریخ برخوردم .
2تا جدول داریم :

1- جدولی که شامل اطلاعات شخضی افراد است ( به نام main ) شامل فیلد های زیر :
کد پرسنلی
نام
نام خانوادگی
نام پدر
شماره شناسنامه

2- جدولی که شامل اطلاعات فیش های پرداختی افراد است ( به نام fish ) شامل فیلد های زیر :
کد پرسنلی
شماره فیش
تاریخ پرداخت
مبلغ پرداختی
توضیحات

در حالت کلی و بدون محدودیت تاریخ برای گزارش گرفتن به روش Master/Details عمل می کنم . به این صورت که جدول Main به عنوان Master و جدول fish به عنوان Details ( از طریق فیلد کد پرسنلی )
که در گزارش به ازای هر شخص موجود در جدول main تعداد یکی یا بیشتر رکورد از جدول fish وجود دارد .

اما مشکل :
موقعی که بخواهیم در بازه ی تاریخ اطلاعات را گزارش بگیریم موقعی که از کد زیر برای بازگرداندن اطلاعات استفاده می کنم چطور باید به جدول main ارتباط برقرار کند که چیزی شبیه روش master/Details قسمت قبل شود .



Select * from fish
Where Data between Data1 and Data2

هنگام اجرای دستور فوق رکورد های مابین 2 تاریخ را بر می گرداند (که شامل فیلد های جدول fish است) اما چطور به جدول Main ارتباط دهم که موقع گزارش گرفتن بتوان اطلاعات شخصی آنها نیز در گزارش بیاید .
* هر شخص ممکن است بیش از 1 فیش داشته باشد .
خروجی چیزی شبیه زیر شود :

کد پ نام نام خانوادگی نام پ ش ش ش فیش تاریخ مبلغ توضیحات
-------------------------------------------------------------------------------------------------------------------------------
1001 علی علیزاده محمد 515252

101020 20/05/1388 200000 ندارد
504050 16/06/1388 350000 فاکس شده
1002 محمد محمدی علی 32025

114525 15/05/1388 450000 ندارد
1003 غلام غلامی حسن 512

845252 20/08/1388 500000 ندارد

benyaminrahimi
پنج شنبه 05 آذر 1388, 13:06 عصر
به دلفی ربطی نداره ولی

select * from master_table where id in(select master_id from detail_table where Data between Data1 and Data2) o

hamid-nic
شنبه 07 آذر 1388, 11:20 صبح
به دلفی ربطی نداره ولی

select * from master_table where id in(select master_id from detail_table where Data between Data1 and Data2) o

دوست عزیز ممنون از راهنمایی تان .
اما یک مشکل :
اگر یک شخصی تعداد 3 تا فیش در سیستم ثبت کرده باشه و ما در جست و جوی محدوده ی تاریخ یکی از آن 3 تا فیش در محدوده ی تاریخ قرار بگیره حالا برای گزارش گرفتن به چه شکلی عمل کنم ؟
اگر با Master/Details اجرا کنم که هر 3 تا فیش را نشون می ده ؟
خیلی واضح تر بگم یعنی اینکه چه طوری گزارش را بگیرم که فقط همون تعداد فیشی که در جست و جو یافت شده در گزارش بیاید .
* گزارش ها را با Quick می گیرم .

merced
شنبه 07 آذر 1388, 12:07 عصر
چه طوری گزارش را بگیرم که فقط همون تعداد فیشی که در جست و جو یافت شده در گزارش بیاید .


گزارش را به همون Dataset ي كه نتايج جستجو برمي گرداند متصل كنيد

hamid-nic
شنبه 07 آذر 1388, 12:16 عصر
گزارش را به همون Dataset ي كه نتايج جستجو برمي گرداند متصل كنيد
دوست عزیز نتایج جست و جو فقط اطلاعات جدول Main است که شامل اطلاعات شخصی افراد است . در گزارش باید هم اطلاعات شخصی اونها به همراه فیش های جست و جو شده باشد . اگر جواب جست و جو را به عنوان master بگیرم و فیش ها را به عنوان Details باز تمام فیش های اون شخص را نشون می ده در صورتی که در محدوده ی تاریخ معین شده همه ی اون فیش ها وجود ندارد . !!

hamid-nic
شنبه 07 آذر 1388, 16:28 عصر
دوستان
کسی نیست راهنمایی کند . . . .
یا پیشنهادی ؟

Tiam121
یک شنبه 08 آذر 1388, 17:39 عصر
بنظر اگر از join استفاده كني بهتر باشه و مشكلت هم حل شه

select * from main inner join fish on main.cod=fish.cod where data between data1 and data2

benyaminrahimi
یک شنبه 08 آذر 1388, 18:16 عصر
دوستان
کسی نیست راهنمایی کند . . . .
یا پیشنهادی ؟

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

1 با عملگر in رکوردهای مستر رو لود می کنی و وقتی خواستی دیتیل رو لود کنی برای هر رکورد مستر جستجو رو رو اون هم اعمال کنی تا فقط رکورد های شامل شرط لود شن معمولا این کد رو data change مستر می نویسن یعنی

select * from detail_table where Data between Data1 and Data2

2 می تونی با join یک ویو بسازی و select رو ی view داشته باشی که همه ی فیلدای دوتا جدول رو داشته باشه

hamid-nic
یک شنبه 08 آذر 1388, 19:43 عصر
درسته شما می تونی یکی از دو روش زیرو انجام بدی

1 با عملگر in رکوردهای مستر رو لود می کنی و وقتی خواستی دیتیل رو لود کنی برای هر رکورد مستر جستجو رو رو اون هم اعمال کنی تا فقط رکورد های شامل شرط لود شن معمولا این کد رو data change مستر می نویسن یعنی

select * from detail_table where Data between Data1 and Data2

2 می تونی با join یک ویو بسازی و select رو ی view داشته باشی که همه ی فیلدای دوتا جدول رو داشته باشه

دوست عزیز ممنون که همکاری می کنید .
فکر کنم روش اول بهتر باشه هم برای گزارش گیری و هم اینکه اگر مثلا یک شخص 2 یا چند تا از فیش هایش جزء دامنه ی تاریخ ماباشه دیگه تکرار اطلاعات شخصی را نداریم هنگام گزارش گیری (درمورد روش دوم منظورمه)
اگه میشه یکمی درمورد روش اول و اینکه چطوری پیاده سازی کنم توضیح بدهید خیلی ممنون می شوم .

benyaminrahimi
سه شنبه 10 آذر 1388, 23:37 عصر
دوست عزیز ممنون که همکاری می کنید .
فکر کنم روش اول بهتر باشه هم برای گزارش گیری و هم اینکه اگر مثلا یک شخص 2 یا چند تا از فیش هایش جزء دامنه ی تاریخ ماباشه دیگه تکرار اطلاعات شخصی را نداریم هنگام گزارش گیری (درمورد روش دوم منظورمه)
اگه میشه یکمی درمورد روش اول و اینکه چطوری پیاده سازی کنم توضیح بدهید خیلی ممنون می شوم .

من که توضیح دادم برات کجاش گنگ؟؟؟؟؟؟؟؟

hamid-nic
چهارشنبه 11 آذر 1388, 22:28 عصر
من که توضیح دادم برات کجاش گنگ؟؟؟؟؟؟؟؟
منظورم قسمت data change است . این قسمت مربوط به کجاست و من کد این قسمت را کجا باید پیاده سازی کنم . و مواردی از این قبیل .
ممنون

benyaminrahimi
دوشنبه 16 آذر 1388, 21:31 عصر
بسته به نوع کنترل باید دنبال event on record change بگردین

یا میتونی رو ondata change دیتا سورس مستر بنویسی