PDA

View Full Version : دستور if



look20
دوشنبه 20 اردیبهشت 1389, 10:59 صبح
با سلام و خسته نباشید ببخشید
من از دستور select استفاده میکنم برای جستجو توی رکوردها برای همین 5 تا تکس باکس قرار دادم که هر کدوم یه فیلد رو select میکنه کد به این شکله


Adodc1.RecordSource = "select * from Tabel where FIELDa like '%" & a.Text & "%' and FIELDb like '%" & b.Text & "% and FIELDc like '%" & c.Text & "%' and FIELDd like '%" & d.Text & "%' and FIELDe like '%" & e.Text & "%'"مشکل من:
من میخام تک تک هم بشه جستجو کرد یعنی فقط وقتی مثلا توی a.Text مقدار وارد کردم جستجو انجام بشه و برای سایر تکس باکس ها همین طور البته اینو میشه با دستور if انجام داد ولی اینطور بسته به تعداد تکس باکس فکر کنم بیش از 40 حالت باید تعریف کرد
من میخام بدونم روشی هست که تعریف کنم بدون اینکه از چندین if استفاده کنم فقط قسمت خاصی از کد بالا استفاده بشه
فرض کنیم من تکس باکس اول و دوم مقدار میزارم حالا میخام خود به خود فقط قسمت


Adodc1.RecordSource = "select * from Tabel where FIELDa like '%" & a.Text & "%' and FIELDb like '%" & b.Text & "%'"استفاده بشه
یا مثلا تکس باکس سوم و چهارم مقدار بدم و بصورت خودکار این قسمت انتخاب بشه


Adodc1.RecordSource = "select * from Tabel where FIELDc like '%" & c.Text & "%' and FIELDd like '%" & d.Text & "%'"یعنی یه دستور نوشته بشه بتونه خودش انتخاب کنه
و دستور سلکت رو براساس تکس باکسهایی که مقدار وارد شده بصورت هوشمند انتخاب کنه

skh1300
دوشنبه 20 اردیبهشت 1389, 11:10 صبح
ميشه يه مثال از پروژه ات بزاري

look20
سه شنبه 21 اردیبهشت 1389, 11:09 صبح
منظورم رو بهتر بگم این فایل زیر رو ببینید
یه دستور select نوشتم که برای اجرای اون دستور تمام تکس باکس های سمت چپ باید پر بشه
مشکل اینجاست من میخام اگه یکی از تکس باکسها یا چند تا از اونها پر شدبشه جستجو کرد ولی برای این کار باید بیش از 100 شرط گذاشت

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

میخاستم بدونم راهی هست مثل کوئری اکسس باشه
بهتره بگم میخام دستوری بنویسم بسته به اینکه فلان تکس باکس پر بود جزء موارد جستجو قرار بگیره و اگه یا نبود جزء موارد جستجو نباشه
ممنون میشم راهنمایی کنید

xxxxx_xxxxx
سه شنبه 21 اردیبهشت 1389, 13:25 عصر
سلام،
دستور شما 8 شرط داره که همونطور که خودتون گفتید بررسی همه شرایط ممکن نیست. چراکه تعداد حالات بسیار زیادی تولید میشه.

شما میتونید برای حل این مشکل، کل دستور SQL رو با فرض اینکه تمام فیلدها پر شده اند بنویسید و درون یک متغیر رشته ای قرار بدید. بعد به ازای هر فیلد فقط کافیست یک شرط بزارید. به این صورت که اگر اون فیلد خالی بود، اون قسمت از دستور SQL که درون متغیر ذخیره کردید رو حذف می کنید.
مثلاً این دستور SQL شماست، با شرط اینکه همه TextBox ها دارای مقدار هستند:


Dim SQLCommand As String
SQLCommand = "select * from us where " & _
"cod Between '" & Trim(SH_cod1.Text) & "' and '" & Trim(SH_cod2.Text) & "' " & _
"and jens like '%" & SH_Jens.Text & "%' " & _
"and name like '%" & SH_Name.Text & "%' " & _
"and lName like '%" & SH_LName.Text & "%' " & _
"and bornDate Between '" & Trim(SH_Born1.Text) & "' and '" & Trim(SH_Born2.Text) & "' " & _
"and EmployDate Between '" & Trim(SH_Employ1.Text) & "' and '" & Trim(SH_Employ2.Text) & "' " & _
"and Job like '%" & SH_Job.Text & "%'" & _
"and JobPlace like '%" & SH_JobPlace.Text & "%'"

حالا، مثلاً برای فیلد Name چنین شرطی استفاده می کنیم:


If SH_Name.Text = "" Then SQLCommand = Replace(SQLCommand, "and name like '%" & SH_Name.Text & "%' ", "")

با این دستور، چنانچه TextBox مربوط به Name خالی باشه، شرطش از دستور SQL حذف میشه.
برای بقیه فیلدها هم چنین شرطی نیاز هست.

موفق باشید/

xxxxx_xxxxx
سه شنبه 21 اردیبهشت 1389, 13:28 عصر
راستی، چون فیلد cod مقدار عددی داره، باید از عملگرهای < و > استفاده کنید و نه Between:

cod >= " & Trim(SH_cod1.Text) & " and cod <= " & Trim(SH_cod2.Text)
نوع فیلد رو هم تو دیتابیس از Text به Number تغییر بدید.

look20
سه شنبه 21 اردیبهشت 1389, 17:45 عصر
سلام بازم کد مشکل داره
فایل زیر رو دانلود کنید متوجه میشید
البته میدونم احتمالا مشکل از منه چون به کدها وارد نیستم

xxxxx_xxxxx
سه شنبه 21 اردیبهشت 1389, 18:46 عصر
سلام،
این کار اشتباه هست:


Adodc1.RecordSource = SQLCommand = "select * from us where "

شما اینجا فقط متغیر SQLCommand رو مقداردهی کنید.
بعد شرط ها رو بزارید تا به نحوی SQLCommand رو فیلتر کرده باشید.
در آخر، SQLCommand رو به Recordsource بدید و بعد هم Refresh

موفق باشید/

look20
سه شنبه 21 اردیبهشت 1389, 19:03 عصر
میشه بگید این کد رو کجا بزارم ارور میده

Adodc1.RecordSource = SQLCommand
Adodc1.Refresh

poorhasan
سه شنبه 21 اردیبهشت 1389, 19:28 عصر
سلام دوست عزیز
نیازی نیست که SQLcommand رو تعریف کنید یا اگر هم تعریفش می کنید کدهای sql رو ابتدا داخل sqlcommand بریزید بعد به recordsource نسبت بدید
طبق گفته دوستمون دستور زیر اشتباه است
Adodc1.RecordSource = SQLCommand = "select * from us where
از یکی از دستورات زیر استفاده کنید
Adodc1.RecordSource = "select * from us where
یا
SQLCommand = "select * from us where...
Adodc1.RecordSource = SQLCommand

look20
سه شنبه 21 اردیبهشت 1389, 19:58 عصر
من هرجا کدو گذاشتم یا اروز داد و یا اصلا جستجو انجام نمیشه
میشه توی فایل خودم نشون بدید منظورم توی خود کدی که ساختم

look20
سه شنبه 21 اردیبهشت 1389, 21:00 عصر
این کد رو هم امتحان کردم ارور میده نگاه کنید ارور سینتک

Adodc1.RecordSource= "select * from us where cod >= " & Trim(SH_cod1.Text) & " and cod <= " & Trim(SH_cod2.Text) & "'"

poorhasan
چهارشنبه 22 اردیبهشت 1389, 00:48 صبح
این کد رو هم امتحان کردم ارور میده نگاه کنید ارور سینتک

Adodc1.RecordSource= "select * from us where cod >= " & Trim(SH_cod1.Text) & " and cod <= " & Trim(SH_cod2.Text) & "'"

دوست عزیز در انتهای برنامه از " ' " استفاده کردی در صورتی که طرف دیگر رشته رو مشخص نکردی این علامت در صورتی استفاده می شه که داده مورد نظر شما از نوع تکست(استرینگ) باشه نه عدد اگر دادتون تکست هست باید در دو طرف این علامت رو قرار بدید " ' " ....... " ' "
اگر عددیه که نیازی نیست و همان " ...... " کافیه
Adodc1.RecordSource= "select * from us where cod >= " & Trim(SH_cod1.Text) & " and cod <= " & Trim(SH_cod2.Text)

Pooria121
چهارشنبه 22 اردیبهشت 1389, 05:46 صبح
این کد مشکل امنیتی داره، به راحتی SqlInject میشه، اگر جایی مورد استفاده میگره که امنیت مهم است، دقت کنید که اگر user در textbbox ها ' وارد کند، میتواند کد SQL وارد کند بعد از آن و اجرا شود.

xxxxx_xxxxx
چهارشنبه 22 اردیبهشت 1389, 08:09 صبح
سلام، شما که میخواید دست کاربر رو برای وارد کردن مقادیر باز بزارید پس چرا از این شرط ها استفاده می کنید:


If Option1.Value = True And Option3.Value = True And SH_cod1 <> "" And SH_cod2 <> "" And SH_Jens <> "" And SH_Name <> "" And SH_LName <> "" And SH_Born1 <> "" And SH_Born2 <> "" And SH_Employ1 <> "" And SH_Employ2 <> "" And SH_Job <> "" And SH_JobPlace <> "" Then

اسم بعضی Textbox ها اون چیزی نبود که تو کد نوشته بودید.
من برنامه اول رو تغییر دادم: