PDA

View Full Version : فیلتر کردن بر اساس فیلد کلیدی



Batman
دوشنبه 15 مرداد 1386, 13:07 عصر
با سلام
فیلدها
نام و نام خانوادگی, شماره فاکتور (فیلد کلیدی)
بانک access
مراجعه کنند: درخواست گردش حساب شخصی
حالا ممکنه که یه نفر نام و نام خانوادگیش "x" باشه و در جدول مبالغ نقدی 5 تا شماره فاکتور داشته باشه
چجوری میشه این جدول رو بر اساس 5 تا شماره فاکتور فیلتر کرد
امیدوارم که منظورم رو رسونده باشم

SYNDROME
دوشنبه 15 مرداد 1386, 14:16 عصر
با سلام

با سلام
فیلدها
نام و نام خانوادگی, شماره فاکتور (فیلد کلیدی)
بانک access
مراجعه کنند: درخواست گردش حساب شخصی
حالا ممکنه که یه نفر نام و نام خانوادگیش "x" باشه و در جدول مبالغ نقدی 5 تا شماره فاکتور داشته باشه
چجوری میشه این جدول رو بر اساس 5 تا شماره فاکتور فیلتر کرد
امیدوارم که منظورم رو رسونده باشم
فکر کنم منظورتان این است:


'Select * From Tbl_Factor Where FactorNo=1 OR FactorNo=2 OR FactorNo=3'

موفق باشید

Batman
دوشنبه 15 مرداد 1386, 16:43 عصر
با سلام متقابل
جناب syndrome این یعنی اسم جدول و بعد هم اسم فیلد (tbl_factor)
خوب ما که نمیدونم طرف چند تا شماره فاکتور داره ممکنه 5 یا 10 یا ... باشه

SYNDROME
دوشنبه 15 مرداد 1386, 17:45 عصر
با سلام

با سلام متقابل
جناب syndrome این یعنی اسم جدول و بعد هم اسم فیلد (tbl_factor)
خوب ما که نمیدونم طرف چند تا شماره فاکتور داره ممکنه 5 یا 10 یا ... باشه
خوب پس شما در هر فاکتور مشخص می کنید که این فاکتور برای کدام کاربر است . مثلا کد آن کاربر را در فاکتور ذخیره کرده اید.
حالا با دستور زیر لیست فاکتورهای کاربر مورد نظر را می آورید.


Select *
From Tbl_Factor
Where User = Value

با کد بالا لیست کلیه فاکتورهای این کاربر را در که در جدول فاکتور است می آورید.
حالا می توانید نتیجه را با جدول نقدی Joinکنید.


Select *
From Tbl_Factor
Inner Join Tbl_Neghdi
ON Tbl_Factor.NoFactor = Tbl_Neghdi.NoFactor
Where User = Value

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

Batman
سه شنبه 16 مرداد 1386, 09:35 صبح
با سلام
جناب syndrome عزیز
فکر کنم منظورم رو نگرفتی
ببین یه نفر به اسم x میاد این فرد توی جدول فروش (sell) ممکنه n بار جنس خریده باشه
و توی جدول نقدی (paymen) و چک (cheque) مبالغی رو پرداخت کرده باشه
با دستوری که شما نوشتید اگه طرف جنس خریده باشه و چک داده باشه (یعنی پول نقدی نداده باشه) یه رکورد خالی چاپ میشه وبرعکس
ببینید من تمام فیلدها رو نمیخوام من فقط شماره فاکتورهایی رو میخوام که توی جدول
فروش (sell) باشه و در ضمن توی جدول نقدی (payment) یا چک(cheque) هم ممکنه باشه
امیدوارم منظورم رو گرفته باشی
دو صد بدرود

Hamid.Kad
سه شنبه 16 مرداد 1386, 10:47 صبح
اگه درست متوجه شده باشم (یعنی طرف یا پول نقد بده یا چک)
Select Factor_No from Sell_Tbl Where Factor_No IN
Select Factor_No from Paymen_Tbl )
UNION
(Select Factor_No From cheque_Tbl

Batman
سه شنبه 16 مرداد 1386, 11:56 صبح
خوب ببینید من از این کد استفاده کردم

ADOQuery1.Close;
ADOQuery1.SQL.Clear;
ADOQuery1.SQL.Add('Select * from Sell Where (family=:family) and Factor IN (Select Factor from Paymen UNION Select Factor From cheque)');
ADOQuery1.Parameters.ParamByName('family').Value:= Edit1.Text;
ADOQuery1.Open;
اما خطای زیر رو میده
this operation is not allowed in subqueries

Hamid.Kad
سه شنبه 16 مرداد 1386, 13:21 عصر
من این دستور رو اجرا کردم اروری نداد. یه بار توی Query Analyzer اجرا کنید ببینید درست جواب میده

Batman
سه شنبه 16 مرداد 1386, 17:01 عصر
بازم error داره

Hamid.Kad
سه شنبه 16 مرداد 1386, 17:27 عصر
اگه با دستور
Select * from Sell Where Factor IN (Select Factor from Paymen UNION Select Factor From cheque(
بازم Error میده، دستور داخل پرانتز رو توی Query Analyzer اجرا کن ببین Error داره یا نه. احتمالاً نوع فیلد Factor در جدولها یکی نیست.

Batman
سه شنبه 16 مرداد 1386, 17:34 عصر
آقا حمید بازم همون error پست 7 رو میده

SYNDROME
سه شنبه 16 مرداد 1386, 17:38 عصر
با سلام
جناب syndrome عزیز
فکر کنم منظورم رو نگرفتی
ببین یه نفر به اسم x میاد این فرد توی جدول فروش (sell) ممکنه n بار جنس خریده باشه
و توی جدول نقدی (paymen) و چک (cheque) مبالغی رو پرداخت کرده باشه
با دستوری که شما نوشتید اگه طرف جنس خریده باشه و چک داده باشه (یعنی پول نقدی نداده باشه) یه رکورد خالی چاپ میشه وبرعکس
ببینید من تمام فیلدها رو نمیخوام من فقط شماره فاکتورهایی رو میخوام که توی جدول
فروش (sell) باشه و در ضمن توی جدول نقدی (payment) یا چک(cheque) هم ممکنه باشه
امیدوارم منظورم رو گرفته باشی
دو صد بدرود
خوب عزیز ، می توانی با یک Unionمشکل را حل کنی.
این دستور را چک کن.(من در دستور زیر نام کاربر را شرط نگذاشتم اگر خواستی خودتان قرار بدهید)


[code]
Select *
From Tbl_Factor
Where NoFactor IN
(Select NoFactor
From paymen
Where User = Value
)
Union
Select *
From Tbl_Factor
Where NoFactor IN
(Select NoFactor
From cheque
Where User = Value
)

اول کلیه فاکتورهایی که در جدول Pament آورده شده اند را می آورد و سپس کلیه رکوردهایی که در جدول Chequeآمده اند را لیست می کند.
موفق باشید

Batman
سه شنبه 16 مرداد 1386, 17:46 عصر
جناب syndrome منظورتون از user و value چیه؟

SYNDROME
پنج شنبه 18 مرداد 1386, 22:22 عصر
با سلام

جناب syndrome منظورتون از user و value چیه؟
User:نام فیلدی است که نام خریدار شما در آن قرار می گیرد.
Value:مقدار فیلد است که به فیلد Userداده می شود.
البته نمی دانم این فیلد را (User) در کدام جدول قرار داده اید ولی هدف این بود که شماره فاکتور را با توجه به نام کاربر فیلتر کنم.
موفق باشید

Batman
جمعه 19 مرداد 1386, 07:00 صبح
با سلام
اولا کمال تشکر رو جناب syndrome به خاطر راهنمایی های شما دارم
دوست عزیز کد رو به این شکل نوشتم

Select * from sell Where (family=:family) and Factor IN (Select Factor From payment Where sell.factor=payment.factor) Union
(Select * From sell Where Factor IN (Select Factor From cheque Where sell.factor=cheque.factor

اگر بعد از and بقیه کدها رو توی پرانتز بذارم خطای زیر رو میده اینم خطاش

syntax error(missing operator) in query expression '(family=?) and (factor in(select factor from payment where sell.factor=payment.factor) union select * from sell where factor in (select factor from cheque where sell.factor=cheque.factor))'
اما اگر بعد از and پرانتز نذارم تمام فیلدهای جدول فروش (sell) رو نشون میده
با تشکر ازشما

SYNDROME
جمعه 19 مرداد 1386, 07:55 صبح
با سلام
کاربر عزیز دستور شما اشکال دارد.من برای این که بتوانم کمکتان کنم نیاز است بدانم جدول شما به چه شکل طراحی شده است.
مگه شما نمی خواهید لیست کل فاکتورهایی را که یک کاربر خریده است(چک یا قسط)بیاورید.پس شرط کاربر را کجا قرار می دهید تا لیست کلیه فاکتورهای این کاربر را نمایش دهد؟(فیلد کاربر در کدام جدول قرار دارد)
طراحی جداول را قرار دهید(یا در اینجا یا در پیغام خصوصی)(اگر هم خواستید بانک خود را قرار دهید)
موفق باشید

Batman
جمعه 19 مرداد 1386, 08:34 صبح
با سلام

(sell) جدول فروش

factor:number شماره فاکتور
family:string نام و نام خانوادگی
disk:string شرح کالا
num:number تعداد
price:number مبلغ واحد
d:string تاریخ ثبت

(payment) جدول نقدی

factor:number شماره فاکتور
price:number مبلغ نقدی پرداختی
d:string تاریخ ثبت

(cheque) جدول چک ها

factor:number شماره فاکتور
numch:price شماره چک
price:number مبلغ چک
dcollection:string تاریخ وصول چک
status:string وضعیت چک
d:string تاریخ ثبت

SYNDROME
جمعه 19 مرداد 1386, 11:25 صبح
باسلام
حالا دستور را به شکل زیر بنویس.


Select *
from sell
Where (family=:family1)
and Factor IN (
Select Factor
From payment )
Union
Select *
from sell
Where (family=:family2)
and Factor IN (
Select Factor
From cheque )

فقط قبل از Trueکردن ADOمقدار Family1و Family2را پاس کن(باید مقادیر یکی باشد)
البته می توانید به جای پارامتر مستقیماً مقدار را قرار دهی.
موفق باشید

Batman
جمعه 19 مرداد 1386, 13:01 عصر
با سلام
جناب syndrome هنوز هم مشکل حل نشده
کدی رو که دادید نوشتم اما فقط از جدول sell اطلاعات رو نشون میده و اطلاعات جدول نقدی و چک رو نشون نمیده
ببنید یه مثال ساده
نام و نام خانوادگی : موسوی سعید
مبلغ نقدی پرداختی : 5000 تومان
تاریخ پرداخت : 19/05/1386
چک : ممکن است نداده باشد و یا نداده باشد و برای مبلغ نقدی هم همینگونه است
جناب syndrome زمانی که طرف نام و نام خانوادگی رو وارد میکنه از جدول sell موارد خریدش نشون داده میشه با فاکتورهای مختلف
خوب حالا یه دونه label گذاشتم به اسم مبالغ نقدی
وقتی اونو میزنه میخوام تمام شماره فاکتورهایی که در جدول sell بوده اگر مبالغ نقدی پرداخت کردند نشون بده و گرنه پیغام مناسب رو بده
مثال
آقای موسوی سعید با شماره فاکتور 123 مبلغ 3000 تومان پرداخت کرده و همین آقا با فاکتور 456 مبلغ 5000 تومان پرداخت کرده
و یه label دیگه به اسم چک های پرداختی هستش که اگر این آقا با همین شماره فاکتورها چک هم داده است نمایش داده شود
امیدوارم منظورم رو گرفته باشید
متشکرم از اینکه با صبر و حوصله منت بر بنده میذارید

SYNDROME
جمعه 19 مرداد 1386, 14:11 عصر
با سلام
ببخشبد شاید من درست متوجه منظور شما نشودم.
شما می خواهید بدانید کلیه خریدهایی را که آقای محمدی با چک انجام داده و کلیه خریدهایی که نقد پرداخت کرده را مشخص کنید.
برای نمایش کلیه خریدها به صورت نقدی انجام داده.


Select *
from sell
Inner Join payment
On sell.Factor = payment.Factor
Where (family=:family2)

برای نمایش کلیه خریدها به صورت چک انجام داده.


Select *
from sell
Inner Join cheque
On sell.Factor = cheque .Factor
Where (family=:family2)

موفق باشید

Batman
جمعه 19 مرداد 1386, 20:41 عصر
با سلام
دست گلت درد نکنه حل شد
پیر شی آقا

ا:تشویق::تشویق::تشویق::تشویق: :تشویق::تشویق::تشویق::تشویق: