PDA

View Full Version : جستجوي تاريخ با دستور sql



Modernidea
سه شنبه 22 بهمن 1387, 12:24 عصر
سلام

چندتا فيلد به نام نام كالا، شماره فاكتور، كد جنس، تاريخ فاكتور دارم كه ميخوام يك شرطي بزارم كه در اين فيلد ها بين دو تاريخ جست و جو كنه چيزي كه من نوشتم اين است اما خطا ميده لطفا بگيد كه اشتباه در كجاست.


ADOEditFact.SQL.Add('Select * from tblFactors where IDFactor like '''+EditSearch.Text+'''or
NameMoshtari like '''+EditSearch.Text+'%'' where TarikhFactor
between '''+'1387/12/01'+''' and '''+1387/12/02+'''')/this
با تشكر

jirjirakk
سه شنبه 22 بهمن 1387, 14:40 عصر
ADOEditFact.SQL.Add('Select * from tblFactors where IDFactor like '''+EditSearch.Text+'''or
NameMoshtari like '''+EditSearch.Text+'%'' And TarikhFactor
between '''+'1387/12/01'+''' and '''+1387/12/02+'''')

شما بعد از اینکه EditSearch.Text رو نوشتید دوباره کلمه Where رو تکرار کردید در صورتی که اونجا شما باید از And استفاده کنید.

Modernidea
سه شنبه 22 بهمن 1387, 17:38 عصر
آقا نشد. اين كد من هست و زماني كه چيزي كه شما گفتيد اضافه كردم زماني كه عدد وارد ميشه خطاي Data miss match ميده. ولي من اصلا چيزي كه در جعبه متن وارد ميشه رو در فيلد تاريخ دخالت ندادم. چرا
لطفا كمك كنيد.

چون موقع نوشتن اينج بهم ميريخت ازش عكس گرفتم.

shervin farzin
سه شنبه 22 بهمن 1387, 18:35 عصر
سلام
يه كار ديگه هم امتحان كن . شرط ها رو بين پرانتز بذار مثل حالت زير
(شرط 1 ) and (شرط 2 ) and (شرط 3 ) or ...

موفق باشيد.

Modernidea
سه شنبه 22 بهمن 1387, 19:28 عصر
به جان خودم اين كار رو هم كردم بازهم نشد.
:گریه:

shervin farzin
سه شنبه 22 بهمن 1387, 20:01 عصر
آقا بفرماييد كه IDFactor و IDMoshtari از جه نوعي تعريف شده ؟
اگه با پرانتز گذاري مشكل حل نشده پس صد درصد مربوط به نوع داده فيلدهاست .

Modernidea
چهارشنبه 23 بهمن 1387, 00:53 صبح
آقا بفرماييد كه IDFactor و IDMoshtari از جه نوعي تعريف شده ؟
اگه با پرانتز گذاري مشكل حل نشده پس صد درصد مربوط به نوع داده فيلدهاست .

سيد اين دوتا كه گفتيد از توع integer يا number است ولي همونطور كه گفتم فقط زماني كه اون كدمربوط به قسمت تاريخ رو اضافه مي كنم خطا ميده. بقيش مشكل نداره.
همشهري به دادم برس.

shervin farzin
چهارشنبه 23 بهمن 1387, 03:23 صبح
سلام
دو تا نكته :
1- براي ايجاد شرط روي مقادير Integer و عددي از دستور Like استفاده نميشه .
2- مقاديري كه قرار با فيلد عددي مقايسه بشه نبايد داخل كوتيشن قرار بگيرن .
حالا كد شما به صورت زير تغيير ميكنه :

ADOQuery1.SQL.Add('Select * from tblFactors where ((IDFactor = '+EditSearch.Text+') or '+
'(NameMoshtari like '+QuotedStr(EditSearch.Text+'%')+')) And '+
'(TarikhFactor between '+QuotedStr('1387/12/01')+' and '+QuotedStr('1387/12/02')+')');

به نحوه پرانتز گذاري دقت كن ببين كه نتيجه Query با اين شكل پرانتز گذاري همونيه كه مي خواي
يا نه .
اميدوارم مشكل حل بشه .

Modernidea
چهارشنبه 23 بهمن 1387, 10:36 صبح
سلام ممنونم از پي گيريت.
من كد شما رو اظافه كردم اما اين خطا رو ميده و نمي دونم مربوط به چي هست. عكسش رو ضميمه كردم.
در ضمن من از access استفاده ميكنم. نميدونم به موضع ربطي داره يا نه.

shervin farzin
چهارشنبه 23 بهمن 1387, 11:51 صبح
سلام
آقا يه سوال ديگه ، شما فيلد TarikhFactor رو در Database از نوع Date/Time كه انتخاب نكردي ؟
اگه اين طور هست چون در اين نوع داده تاريخ ميلادي نگه داري ميشه و شما تاريخ شمسي داري
كه فرمتش فرق ميكنه ، نوع اين فيلد رو Text به طول 10 تعريف كن .
موفق باشيد .

Batman
چهارشنبه 23 بهمن 1387, 12:23 عصر
سلام ممنونم از پي گيريت.
من كد شما رو اظافه كردم اما اين خطا رو ميده و نمي دونم مربوط به چي هست. عكسش رو ضميمه كردم.
در ضمن من از access استفاده ميكنم. نميدونم به موضع ربطي داره يا نه.
این خطایی که برنامه میده به خاطر یکسان نبودن نوع فیلد و مقدار داده ای است که شما برای جستجو ازش استفاده می کنید.همونطور که shervin farzin عزیز گفتن نوع فیلد تاریخ رو در جدول text 10 تعریف کنید.
موفق باشید.

Modernidea
چهارشنبه 23 بهمن 1387, 14:09 عصر
سلام
:تشویق:
آقايون خيلي خلي ممنون و تشكر فراوان
كمك خيلي بزرگي كريدن هرچند واسه شما زياد آماتور بود. همون نكته آخر كاملا صحيح بود. مشكل اصلي همون فيلد تاريخ بود كه از نوع Date/Time يود.

يك سوال هم بكنم و برم:

در اين نوع جستجو لازم نيست داده ها بر اساس تاريخ مرتب بشن؟

اين تابع QuotedStr همون IntToStr خودمونه؟
بازهم متشكرم.

shervin farzin
چهارشنبه 23 بهمن 1387, 18:38 عصر
سلام

در اين نوع جستجو لازم نيست داده ها بر اساس تاريخ مرتب بشن؟

خير نيازي به داشتن ترتيب نيست .

اين تابع QuotedStr همون IntToStr خودمونه؟
نه ، QuotedStr براي قرار دادن يك مقدار رشته اي داخل دوتا علامت تگ استفاده ميشه تا به اين
ترتيب قابل پذيرش به عنوان متغير رشته اي در زبان SQL بشه .

در ضمن قابل شما رو نداره همشهري . :چشمک: