ورود

View Full Version : مشکل در کوئری



smderfan
چهارشنبه 24 مرداد 1386, 17:21 عصر
سلام
در کوئری که ایجاد کرده ام فقط عددی را که در فرم 1 وارد شده در گزارش فیلتر و نمایش داده می شود حالا می خوام در صورتی که فیلد جستجو در فرم 1 فاقد عددی باشه کل رکوردهای جدول رو نمایش بده ...
می خوام بدونم کوئری به چه صورت تغییر بکنه .....
و همچنین در صورتی که عدد وارد شده در جدول نبود یه پیغام به کاربر نشان دهد.

مهدی قربانی
چهارشنبه 24 مرداد 1386, 19:46 عصر
سلام
با تغییر شرط در کوئری و نوشتن msgbox در ریپورت مورد نظر فکر میکنم چیزی که می خوای انجام میشه .
موفق باشی

tthenry14plus
شنبه 27 مرداد 1386, 13:32 عصر
سلام دوستان

ببین آقا/خانم smderfan

اینکه با دادن مقدار 0 همه فیلد های جدول ظاهر شوند امکان پذیر نیست

چون شما وقتی داخل criteria کوئری آدرسی می فرستی موقع اجرا مقدار آن فیلد باید برابر آن آدرس شود

بنابراین وقتی مقدار شما صفر باشد طبیعتا باید رکوردی که شماره کاربری آن صفر است را برگرداند

و کد آن اینطوری می شود :
[SELECT * FROM Table1 WHERE Table1.code=[Forms]![Form1]![Text2

برای شرطی کردن کوئری دستور IIF وجود دارد
اما برای کاری که شما می خواهید بکنید جواب نمی دهد:
برای اینکه بگوییم مقدار هیچ فیلدی خالی نباشد باید مقدار criteria را برابر Is Not Null قرار دهیم ولی در این جا نمی شود از آن استفاده کرد
(IIf([Forms]![Form1]![Text2]<>0;[Forms]![Form1]![Text2];Is Not Null
اینجا گفتم در صورتی که مقدار text2 خالی نبود طبق روال عمل کن ولی در غیر اینصورت آنرا برابر Is Not Null قرار بده

ولی نگاه کن اصلا دستور غلط می شود : code = Is Not Null
در صورتی که شکل صحیح آن بدین صورت است : code Is Not Null

حالا متوجه شدی

تنها راه برای اینکار اینه که یک کوئری دیگه درست کنی که موقع صفر بودن آنرا اجرا کند

سوال بعدی شما هم این بود که اگر داخل text عدد اشتباه وارد کردیم نگذارد که اینکار انجام شود

روش:

* روی text Box راست کلیک کن و سپس change to > combo box
* حال پراپرتی row source type آنرا برابر Query/table قرار بده
* مقدار پراپرتی row source را هم برابر select code from table1 قرار بده
* مقدار پراپرتی limit to list و Auto Expand را نیز برابر yes قرار بده

اکنون وقتی عدد اشتباهی وارد شود پیغامی ظاهر می شود که نمی گذارد عدد اشتباه را تایید کنید

smderfan
شنبه 27 مرداد 1386, 15:01 عصر
سوال بعدی شما هم این بود که اگر داخل text عدد اشتباه وارد کردیم نگذارد که اینکار انجام شود

روش:

* روی text Box راست کلیک کن و سپس change to > combo box
* حال پراپرتی row source type آنرا برابر Query/table قرار بده
* مقدار پراپرتی row source را هم برابر select code from table1 قرار بده
* مقدار پراپرتی limit to list و Auto Expand را نیز برابر yes قرار بده

اکنون وقتی عدد اشتباهی وارد شود پیغامی ظاهر می شود که نمی گذارد عدد اشتباه را تایید کنید

با تشکر حالا اگر بخوام پیام سیستم نمایش داده نشه و پیام من نمایش داده بشه باید چه عملی انجام دهم.
حتی وقتی در رویداد On not in list پیامی رو قرار دهیم بعد از آن هم خطای سیستم صادر می شه...

tthenry14plus
یک شنبه 28 مرداد 1386, 01:44 صبح
باید از کنترل خطا استفاده کنی

دستوری برای اینکار وجود دارد که میتونی کاری کنی که پیغام های سیستم غیر فعال شود DoCmd.SetWarnings False
DoCmd.SetWarnings True

smderfan
دوشنبه 29 مرداد 1386, 15:01 عصر
این دستور رو هم قرار دادم ولی باز هم خطا صادر شد.
The text you entered isn't an item in the list

شاپرک
دوشنبه 29 مرداد 1386, 15:51 عصر
Private Sub CmbName_NotInList(NewData As String, Response As Integer)
Response = 0
MsgBox "Your Message", vbOKOnly, "Error"
End Sub

arman2000
شنبه 30 مرداد 1389, 19:14 عصر
سلام
من می خواستم در Report شرط زیر را در Control Source تکست باکس بذارم: اگه مقدار تکست باکس برابر صفر بود، بجاش خط تیره بذاره وگرنه مقدار خودشو نمایش بده. ولی جواب نداد

=IIf([Text] Eqv 0;"-";[Text])