PDA

View Full Version : Join کردن 2 جدول و جستجو از یک TextBox



alizanganeh
جمعه 02 خرداد 1393, 01:11 صبح
سلام دوستان
Join کردن و کلا Query گیری با SQL رو کامل بلدم . اما الان میخوام این کار رو توی VB انجام بدم و بجای مقایسه 2 فیلد از 2 جدول متفاوت از بانک ، میخوام فیلد هایی از بانک رو با مقادیری در TextBox هایی از داخل برنامه مقایسه کنم.
کاری که میخوام بکنم اینه که :
توی 2 تا تکس باکس بازه ی قیمتی یک قطعه رو بدم. مثلا بگم بین 10000 تا 20000 و بعد برنامه 2 جدول رو با هم Join کنه و کد هر رکورد از جدول اول رو با همان کد از جدول دوم که از قبل از توی بانک به هم متصل اند رو با هم مقایسه کنه و اگر فیلد قیمت رکوردی بین اون 2 مقدار تکس باکس ها بود ، بهم نمایش بده توی Query . ولی هرکاری میکنم نمیتونم کدی بنویسم که عملی باشه . کدهایی که نوشتم ارور نمیدن ولی درست هم کار نمیکنن . ینی یا هیچ رکوردی نشون نمیده و یا همه ی رکورد ها رو نشون میده . کدها رو پایین میذارم شاید بتونید با تغییر دادنشون درست کنید .

این کد اتصال به جدول هستش که توی لود صحه اجرا میشه که به هردو جدول با هم وصل شدم :
rs1.Open "select * from Sell,Piece", db, adOpenDynamic, adLockOptimistic

اینم کد جستجو هستش :
rs1.Open "select * from sell,piece where price > '" & text1 & "' AND price < '" & text2 & "'"

یک کدی هم از قبل هست برای جستجو بین 2 تاریخ که کاملا کار میکنه که اونم میذارم شاید کمک کنه :
rs1.Open "select * from sell where sdate between '" & date1 & "' AND '" & date2 & "'"


ممنون از همه :قلب:

vbhamed
جمعه 02 خرداد 1393, 07:48 صبح
سلام

اینطوری که شما نوشتید Join حساب نمیشه و جدولها ضرب دکارتی میشن و مثلا اگر جدول اول 1000 رکورد و جدول دوم هم 2000 رکورد داشته باشه Query شما 2000000 رکورد بر می گردونه که مطمئنا مورد نظر شما نیست

اگر جداول از طریق Relationships یا Diagram در بانک به هم متصل هستند راحت ترین راه اینه که تو خود بانک یک کوئری بر اساس دو جدول بسازید و سپس در ویژوال بیسیک از اون کوئری برای جستجو استفاده کنید که همه فیلدهای دو جدول رو داره، هر چند مستقیما در VB هم میشه کوئری رو نوشت ولی در بانک باشه بهتره، این هم یک نمونه کوئری که دو تا جدول رو Join میکنه البته لازم به ذکر هست که فیلد Table1_Id که در جدول Table2 قرار داره برابر فیلد Id در جدول Table1 هست که این فیلدها همون کلید خارجی و کلید اصلی هستند

SELECT * FROM Table1 INNER JOIN Table2 ON Table1.ID=Table2.Table1_Id;

alizanganeh
جمعه 02 خرداد 1393, 10:52 صبح
آره میدونم اینا رو و فکر خوبیه . من هردو جدول رو با کوئری ایجاد کردم و با کلید خارجی به هم متصل کردم .
فقط سوال اینکه وقتی کوئری رو توی بانک نوشتم و فایلشو ذخیره کردم ، بعد باید چطوری به ویژال بیسیک معرفی کنم ؟ و سوال دیگه اینکه اگر مثلا کوئری با sql 2012 بگیرم و کاربر از sql 2000 استفاده کنه ، باز هم اون فایل برای ویژال بیسیک قابل شناسایی هست ؟
ممنون

vbhamed
شنبه 03 خرداد 1393, 13:11 عصر
سلام

وقتی کوئری رو تو بانک ذخیره کردین می‌تونید در ویژوال بیسیک هر جا دستور sql دارید به جای نام جدول نام کوئری رو بزارید

در مورد دوم اگر Sql 2000 بتونه بانك اطلاعاتی رو باز کنه قاعدتا از کوئری های اونهم می‌تونه استفاده کنه ولی چون بانک Sql 2012 جدیدتره ممکنه لازم باشه بانک به 2000 تبدیل بشه، البته در هر صورت این موارد هیچ ارتباطی با ویژوال بیسیک نداره و موتور بانک اطلاعاتی مسئول این کارهاست