PDA

View Full Version : فیلتر دو فلید همزمان



Valadi
شنبه 06 مرداد 1386, 00:37 صبح
در یک پروژه دو فلید داریم یک فلید ماه های سال (فروردین - اردیبهشت ..... اسفند ) و دیگری سال کاری (1386 - 1387 .... ) حالا می خواهیم جدول را بر اساس این دو فلید فلیتر کند
مثلا مرداد - 1385
ضمنا برای ماه و سال از ComboBox استفاده کردم

Valadi
شنبه 06 مرداد 1386, 01:13 صبح
کسی از دوستان نمی تونه جواب سوالم را بده
نیاز فوری دارم به پاسخ این سوال

علامت سوال
شنبه 06 مرداد 1386, 01:16 صبح
SELECT * FROM Table_Name WHERE mah='+''''+ComboBox1.Text+''''+' AND sal='+''''+ComboBox2.Test+''''

Valadi
شنبه 06 مرداد 1386, 01:23 صبح
بانک من DBISAM است
این کد را هم استفاده کردم اما جواب نمی ده

علامت سوال
شنبه 06 مرداد 1386, 01:28 صبح
کدی که شما تست کردی دقیقا همینه؟ اسم فیلد ها رو توی دستور بالا عوض کردی؟
این دستور بستگی به نوع بانک نداره یه دستور استاندارد هست
غیر ممکنه که جواب نده مگه یه مشکل دیگه وجود داشته باشه
ببین برای یکی از ماه یا سال جواب میده یا فقط برای هر دو فیلتر باهم جواب نمیده

SYNDROME
شنبه 06 مرداد 1386, 02:02 صبح
با سلام
دستور دوستمان را اینجوری استفاده کن.


SELECT * FROM Table_Name WHERE mah='''+ComboBox1.Text+''' AND sal='''+ComboBox2.Text+''''

موفق باشید

Valadi
شنبه 06 مرداد 1386, 08:21 صبح
ممنون از راهنماییتان
جناب علامت سوال و جناب SYNDROME کد های که هر دوی شما نوشته هر کدام به نوع ارور می دهد
کدی که من نوشته این است بررسی کنید درست است ؟

Form4.DBISAMTable2.Filtered:=false;
Form4.DBISAMTable2.Filter:='sal='''+form1.ComboBox 1.Text+''''AND 'month='''+ form1.ComboBox2.Text+'''';
Form4.DBISAMTable2.Filtered:=true;
Form4.QuickRep1.Preview;


ضمنا پیغام خطایی که می ده (این فیلتر دو قسمت است ) در قسمت اول مشکلی نداره اما قسمت دوم را مشکل دارد (هر چند که قسمت دوم هم مانند قسمت اول هست )
این پیغام خطا که میده
[Error] Unit1.pas(62): Operator not applicable to this operand type
[Fatal Error] Project1.dpr(8): Could not compile used unit 'Unit1.pas'


اطلاعات برنامه :
ComboBox1: سال (عدد integer )
:ComboBox2 : ماه (رشته یا string)
دو تا جدول داریم که باهم ارتباط دارند
جدول اولی : مشخصات شناسنامه ای master
جدول دوم : مشخصات کاری (این فیلتر بالا هم برای جدول دو است ) detli
آیا در جدول masetr / detli (شاید املایی درست نباشیه ) جدول دوم فیلتر شود جدول شماره یک هم فیلتر می شود ؟
اگر بخواهیم این کار انجام شود چه کار کنیم (یعنی هم از جدول اول فیلتر و هم از جدول دوم با اطلاعات فیلتری بالا ) ؟

موفق و موید باشید

SYNDROME
شنبه 06 مرداد 1386, 08:47 صبح
با سلام
اینو تست کن.


Form4.DBISAMTable2.Filter:='sal='+form1.ComboBox1. Text+' AND month='''+ form1.ComboBox2.Text+'''';

برای فیلتر کردن 2 تاجدول آنها را با هم Joinکن و سپس فیلتر را انجام بده تا رکوردهایی که شرایط شما را دارند نمایش داده شوند
موفق باشی

Valadi
شنبه 06 مرداد 1386, 08:53 صبح
جواب می دهد اما کلمه AND باید طبق دستورات دلفی (کلمات رزو شده ) باید هایلایت بشود و نمی شود مشکلی نداره ؟

امکان داره که بیشتر توضیح بدی یا یک مثالی کوچکی قرار بدی

برای فیلتر کردن 2 تاجدول آنها را با هم Joinکن و سپس فیلتر را انجام بده تا رکوردهایی که شرایط شما را دارند نمایش داده شون

موفق و موید باشی

Batman
شنبه 06 مرداد 1386, 09:00 صبح
با سلام
با اجازه از استاد syndrome
دستور join برای ترکیب دو جدول استفاده میشه
خوب پس از ترکیب دو جدول حالا ما یه جدول داریم با فیلدهایی که در هر دو تا جدول هستش
و خوب حالا با یه فیلتر ساده رو جدول سوم به هدف میرسیم

Valadi
شنبه 06 مرداد 1386, 09:05 صبح
یا یک مثالی کوچکی قرار بدی
چون من در دیتا بیس اطلاعات زیادی ندارم

دستور join برای ترکیب دو جدول استفاده میشه
خوب پس از ترکیب دو جدول حالا ما یه جدول داریم با فیلدهایی که در هر دو تا جدول هستش
و خوب حالا با یه فیلتر ساده رو جدول سوم به هدف میرسیم

Batman
شنبه 06 مرداد 1386, 09:35 صبح
با سلام
جناب valadi عزیز این فایل رو آپلود کن
همه چی داره
موفق باشی

Valadi
شنبه 06 مرداد 1386, 10:02 صبح
جناب Batman
این برای SQL است اما بانک من DBISAM (یعنی شبیه Paradox 7 است )
مثال تو مایه های Paradox نداری

علامت سوال
شنبه 06 مرداد 1386, 10:18 صبح
من تست کردم جواب داد
اینم برنامه ای که تست کردم روی بانک DBDEMOS بانک paradox
درضمن دستورات filter ربطی به نوع دیتابیس نداره
مگه اینکه این کنترلی که استفاده کردید DBISAMTable2 از قواعد دیگه ای تبعیت کنه که بعید میدونم

Valadi
شنبه 06 مرداد 1386, 13:23 عصر
جناب علامت سوال
در برنامه که زحمت کشیدی مطلبی بدرد خور نبود و شما در این پروژه فقط یک بانک است و همین !!!
در صورتی که من دستور join برای ترکیب دو جدول می خواستم
آن اطلاعاتی را که دادم خواستم دوستان برنامه نویس بدانند اطلاعات بیشتری از جزئیات داشته باشند

علامت سوال
شنبه 06 مرداد 1386, 16:20 عصر
جناب علامت سوال
در برنامه که زحمت کشیدی مطلبی بدرد خور نبود و شما در این پروژه فقط یک بانک است و همین !!!
در صورتی که من دستور join برای ترکیب دو جدول می خواستم

اصلا زحمتی نبود همه چیز آماده حتی بانک اطلاعاتی DBDEMOS
این مثال فقط برای کاربرد filter بود
ولی حاصل Join هم فقط یک جدول هست نه بیشتر
شما join رو بگیر بعد فیلترش کن اگه میخای قبل از Join فیلتر کنی جریان چیز دیگس و من پیشنهاد میکنم با WHERE یا HAVING در SQL فیلتر رو انجام بدی

Valadi
شنبه 06 مرداد 1386, 21:34 عصر
اگر ما جدول اول را به جدول دوم ارتباط بدیم و جدول دوم را به اول از این روش برای Join کردن استفاده کرد ؟
از دیگران هم خواهش می کنم اگر اطلاعاتی دارند در این زمینه پاسخ به ما بدهند

SYNDROME
شنبه 06 مرداد 1386, 22:19 عصر
با سلام

اگر ما جدول اول را به جدول دوم ارتباط بدیم و جدول دوم را به اول از این روش برای Join کردن استفاده کرد ؟
از دیگران هم خواهش می کنم اگر اطلاعاتی دارند در این زمینه پاسخ به ما بدهند
Joinکردن دو جدول یا بیشتر ارتباط آنها به وسیله یک فیلد است.
مثلاً:من دو تا جدول دارد وفیلدهای آنها به شرح زیر است.
Table1 : AutoNumber , Name , Family
Table2 : Head , Address , Tel
در حدول اول برای هر کس یک رکور ایجاد می شود و نام و نام خانوادگی آن در آن قرار می گیرد و در جدول دوم برای هر کس ممکن است 1 تا n آدرس ایجاد شود.(فیلد Head مقدار AutoNumber جدول اول را برا ارتباط نگه می دارد)
مثلاً:


Table1 : AutoNumber , Name , Family
1 , Mohammad , Mohammadi
2, Ali , Ahmadi
Table2;Head , Address , Tel
1 , Iran , 234
2 , China , 134

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


Select AutoNumber , Name , Family , Head , Address , Tel
From Table1
Inner Join Table2
On Table1.AutoNumber = Table2.Head

جواب دستور بالا این می شود.


AutoNumber , Name , Family,Head , Address , Tel
1 , Mohammad , Mohammadi , 1 , Tehran , 123
1 , Mohammad , Mohammadi , 1 , Iran , 234
2, Ali , Ahmadi , 2 , China , 134

حالا می بینی که این جواب را می شد با یک جدول هم به دست آورد ولی اگز در یک جدول همه اطلاعات قرار گیرید برای رکورد اول نام و نام خانوادگی 2 با تکرار شده و باعت افزونگی می شد.
موفق باشی

Valadi
یک شنبه 07 مرداد 1386, 12:51 عصر
کسی از دوستان مثالی از پارادوکس یا DBISAM نداره

SYNDROME
یک شنبه 07 مرداد 1386, 14:52 عصر
با سلام

اگر ما جدول اول را به جدول دوم ارتباط بدیم و جدول دوم را به اول از این روش برای Join کردن استفاده کرد ؟
از دیگران هم خواهش می کنم اگر اطلاعاتی دارند در این زمینه پاسخ به ما بدهند
فایل SQLرا یک نگاه بکن.
موفق باشی