PDA

View Full Version : جستجو ترکیبی در ویژال بیسیک



pesare_matin2005
چهارشنبه 17 تیر 1383, 09:04 صبح
چگونه می توانم جستجو ترکیبی بنویسم اگر میشود خواهش کنم یک مثال با or , And برایم بنویسید.




:) با تشکر.

کم حوصله
چهارشنبه 17 تیر 1383, 09:41 صبح
SELECT * FROM TBL1 WHERE FLD1=1 AND FLD2='A'

واضح تر بگو چی می خواهی :roll:

pesare_matin2005
چهارشنبه 17 تیر 1383, 10:03 صبح
منظورم اینه که اگر من در فرم جستجو 4 تا text box داشته باشم چگونه می توانم با پر کردن text box هاو ترکیب اطلاعات انها به رکورد مورد نظر خود برسم .




لطفا کمکم کنید

pesare_matin2005
چهارشنبه 17 تیر 1383, 10:09 صبح
منظورم اینه که اگر من در فرم جستجو 4 تا text box داشته باشم چگونه می توانم با پر کردن text box هاو ترکیب اطلاعات انها به رکورد مورد نظر خود برسم .




لطفا کمکم کنید

jannati
چهارشنبه 17 تیر 1383, 10:30 صبح
خوب دوست عزیز از checkboxاستفاده کنید به جای textbox.بعد روی رویداد کلیک هر کدوم از checkboxها یک متغییر مقدار دهی کنید .مثل عکس زیر.
حالا فرض کن کاربر چک باکس ((نام خانوادگی))رو کلیک کرد.(یعنی سرچ بر اساس نام خانوادگی باشه)در رویداد کلیک چک باکس اون اضافه میکنی:


If Check1.Value = 1 Then
Text1.Visible = True
na1 = 1
Else
Text1.Visible = False
na1 = 0
End If

بعدش وقتی داری sqlمینویسی یک شرط بذار به شکل زیر:


SQL = "select * from faslname where"
If na1 = 1 Then
SQL = SQL + " name='" & Trim(Text1.Text) & "' and"
End If

برای همه به همین ترتیب عمل کن .

pesare_matin2005
چهارشنبه 17 تیر 1383, 11:21 صبح
حالا اگر مثلا در همان تصویر با لا طرف 2 تا check box را کلیک کرد و اطلاعات را در هر دو text box - check box ها وارد کر و خواست بر مبنای محتویات دو text box رکورد را بیابد باید چه کرد ( جستجو ترکیبی )

من واقعا معذرت می خوام میدونم که مبتدی هستم امید وارم از سوالا ت من خسته نشده باشین . بازم معذرت می خوام

با تشکر

jannati
چهارشنبه 17 تیر 1383, 13:04 عصر
خوب حالا فرض کن هم نام خانوادگی رو چک بزنه و هم سمت رو.اول در رویداد کلیک چک باکس ((سمت))یک متغییر تعریف میکنیم و مثل قبلی (که na1بود)مقدار دهی میکنیم.فرض کنیم اسم این متغییر semat باشه .حالابرای sql مینویسیم.:


SQL = "select * from faslname where"
If na1 = 1 Then
SQL = SQL + " name='" & Trim(Text1.Text) & "' and"
End If
If semat = 1 Then
SQL = SQL + " semat='" & Trim(Text2.Text) & "' and"
End If

و برای بقیه هم به همین منوال.حالا در آخر یک andاضافه میاریم با استفاده از کد زیر اونو حذف میکنیم:


SQL = Left$(SQL, n - 3)

خوب حالا فقط باید این sql رو به پایگاهت نسبت بدی.ok?
در ضمن من اصلا هم خسته نشدم و خوشحال میشم اگه بتونم کمک کنم. :oops:

کم حوصله
پنج شنبه 18 تیر 1383, 10:15 صبح
چرا اینقدر طولانی

میشه با چک کردن مقدار تکست خالی بودن یا نبودن آن را چک کرد


DIM S AS STRING
IF TRIM(TEXT1.TEXT)<>"" TEHN
S=" FLDNAME='"& TRIM( TEXT1.TEXT) & "'"
END IF

برای موارد بعدی هم همین گونه عمل کنید
در این صورت دیگر نیازی به گرفتن متغییر های فراوان و چک باکس ها نیست
در ضمن با استفاده از همان چک باکس ها هم میشود کار کرد نیازی به گرفتن متغییر اضافه ای نیست :roll:

pesare_matin2005
پنج شنبه 18 تیر 1383, 11:15 صبح
ممنونم خانم جنتی و اقای کم حوصله ولی اقای کم حوصله میشه کاملتر توضیح دهید؟؟؟/ :roll:

کم حوصله
شنبه 20 تیر 1383, 11:34 صبح
ببینید شما زمانی که می خواهید چیزی را جستجو کنید باید در ابتدا شرط خود را بسازید بعد بر مبنای شرط جستجو عملیات خود را انجام دهید
خوب برای اینکار طبق فرمایشات استاد عزیزمون خانم جنتی از همان روش بسیار عالی میشه استفاده کرد اما من یکم ساده ترش کردم
یعنی خانم جنتی برای اینکه بفهمند شرطی در نظر گرفته شده یا نه هم از چک باکس استفاده کردند هم از متغییر در صورتی که میشود اصلا بدون نیاز به این موارد این کار را کرد
بدین صورت که شما با چک کردن خالی بودن یا نبودن خود تکست می توان در نظر گرفته شدن یا نشدن آن را فهمید

خوب پس یک متغییر از نوع STRING بگیرید بعد با چک کردن تکست باکس هایتان آن را مقدار دهی کند

برای مثال شما در نظر بگیرید ما دو فیلد نان و نام خانوادگی داریم و می خواهیم براساس آنها جستجو کنیم


DIM STRSQL AS STRING

STRSQL=""

IF TRIM(TEXT1.TEXT)<>"" THEN
STRSQL="FNAME='" & TEXT1.TEXT & "'"
END IF

IF TRIM(STRSQL)<>"" THEN STRSQL=TRIM(STRSQL) & " AND "

IF TRIM(TEXT2.TEXT)<>"" THEN
STRSQL=STRSQL & "LNAME='" & TEXT2.TEXT & "'"
END IF

MM_Mofidi
چهارشنبه 31 تیر 1383, 11:52 صبح
میتونی یک Sql Command نیمه تمام بنویسی و با اضافه یا کم شدن هر چک باکس یک and اضافه یا کم کنی و در آخر روی کلید جستجو Sql Command را کامل کنی.( پرانتز ها را ببندی و ; بگذاری و ...)

star
شنبه 10 مرداد 1383, 08:09 صبح
سلام
ببخشید که این طوری سوالمو میپرسم :oops: راستش خیلی عجله دارم (و کم حوصله تر از کم حوصله عزیز)
من جستجوی ترکیبی رو که شما راهنمائی کردید خوندم حالا سوالم اینه که پس نمی خواد توی command ؛یه query برای sql بنویسیم یا واضح تر بگم من از dataenvironment استفاده می کنم پس اونجا دستور select پارامتری نمی خواد ؟
:roll: لطفا کمکم کنید .
متشکرم

jannati
شنبه 10 مرداد 1383, 13:47 عصر
پس نمی خواد توی command ؛یه query برای sql بنویسیم یا واضح تر بگم من از dataenvironment استفاده می کنم پس اونجا دستور select پارامتری نمی خواد
نه عزیز اونجا کافیه یه sqlساده بذاری.دیگه پارامتر نمیخواد.توی pm برات توضیح دادم. :wink:

کم حوصله
جمعه 23 مرداد 1383, 22:56 عصر
توی pm برات توضیح دادم.
میشه اون توضیحات را به اینجا هم منتقل کنید تا ما هم فیض ببریم ؟؟ :)

jannati
شنبه 24 مرداد 1383, 08:09 صبح
کم حوصله جان
اون چیز هایی که در pmبرای دوستمون توضیح دادم شما خیلی وقته بلدید.خواستم اینجا دوباره کاری نشه.توضیح من این بود که در dataenviromentکافیه یه sqlبدون در نظر گرفتن پارامتر بذاری.فقط اسم جدول مورد نظر رو اضافه میکنیم.مثلاselect * from table.بعد در کد نویسی مثل کد بالا که گذاشتم پارامتر رو اضافه میکنیم و با این sqlکه پارامتر داره datareportرا بازمیکنیم.متوجه شدی؟ :)

AminSobati
یک شنبه 25 مرداد 1383, 01:10 صبح
سلام به همه دوستان،
عذر میخوام که از میون بحث وارد میشم. چون صحبت از ساختن String برای Search بود، به نظرم اومد این نکته شاید براتون جالب باشه.
زمانی که از طریق Command در ADO یک دستور (مانند Select) به SQL Server ارسال میکنیم در حالیکه قسمتی از اون دستور رو User به عنوان پارامتر جایگزین کرده (مثل همین مورد که بحث بود User عبارت مورد نظر برای Search رو وارد میکنه)، حتما مقدار وارد شده توسط User رو قبلش کنترل میکنیم تا خدایی نکرده غرض ورزی در کار User نباشه!
این مثال ساده رو در نظر بگیرید:
در اینجا یک String ساده برای جستجو داریم که قسمت مورد Search توسط User در TextBox تایپ میشه.


strSQL="SELECT * FROM BankAccounts WHERE AccountID='" & Text1.Text & "'"

قراره که کاربر برنامه (یا کاربر وب سایت) شماره حساب خودش رو وارد کنه تا اطلاعات مربوط به اون رو دریافت کنه. اما اگر کاربر تایپ کنه:

' or 1=1--
در این حالت، strSQL برابر خواهد بود با:


SELECT * FROM BankAccounts WHERE AccountID='' or 1=1--'

حالا چه اتفاقی میفته؟! تمام اطلاعات جدول BankAccounts استخراج و به کاربر نمایش داده میشه! علتش اینه که کاربر با عبارتی که وارد کرده در حقیقت کوتیشن رو بسته و یک شرطی وارد کرده که همیشه صحیحه (1=1). بعد از علامت -- هر کاراکتری خنثی و بی اثر تلقی میشه.
این یکی از راههای هک کردن SQL Server هستش که راههای دیگرش بماند (بد آموزی داره! )...
در این مواقع به جای اینکه مقدار وارد شده توسط User رو بدون قید و شرط در Command قرار بدیم، حتما با تابع Replace کاراکترهای زایدش رو حذف میکنیم.

موفق باشید،
امین ثباتی MCSD

jannati
یک شنبه 25 مرداد 1383, 07:47 صبح
از تذکر به جاتون خیلی ممنون :تشویق:

کم حوصله
یک شنبه 25 مرداد 1383, 22:22 عصر
خانم جنتی قصد جسارت نداشتم !! :idea:
گفتم اولا شاید یک چیزی جدیدی یاد بگیرم دوما دوستان دیگه ای که بلد نیستند از راهنمایی های شما بی بهره نمونند
ممنون از اینکه لطف کردید و اطلاعاتتون را در اختیار ما گذاشتید :)