ورود

View Full Version : جستجو ناقص



dddd10
چهارشنبه 21 اردیبهشت 1390, 20:17 عصر
سلام
با استفاده از چند تکست باکس جستجو رو محدود به هر بخشش کردم. بعضی از تکست باکسام جستجوش انجام میگیره بعضیا نه!! کدی که استفاده کردم اینه :

If Text3.Text <> "" Then
Adodc1.Recordset.Filter = "tarikh like '%" & Text3.Text & "%'"
Else
Adodc1.Recordset.Filter = "tarikh <>''"
End If
اولیه انجام نمیگیره اما این انجام میگیره :
If Text1.Text <> "" Then
Adodc1.Recordset.Filter = "code like '%" & Text1.Text & "%'"
Else
Adodc1.Recordset.Filter = "code <>''"
End If

vbhamed
پنج شنبه 22 اردیبهشت 1390, 00:25 صبح
سلام

نوع فيلد كد و تاريخ چيه ؟
احتمالا كدتون رشته اي و تاريخ عددي است

ضمنا داخل text1 و text3 چي مي نويسيد كه جستجو بشه ؟
داخل بانك دقيقا چي ثبت شده ؟

dddd10
پنج شنبه 22 اردیبهشت 1390, 09:08 صبح
مقدار فیلد code از نوع استرینگ هست. و فیلد تاریخ نوع date/time گذاشتم

یک فیلد دیگه هم دارم به نام text که بعضی از textbox ها هم اونو جستجو نمیکنند!

در بانک مال فیلد تاریخ 1390/02/17 ثبت کردم و چندتا تاریخ دیگه

dddd10
پنج شنبه 22 اردیبهشت 1390, 09:09 صبح
راستی وقتی ارور هم میده تو دیباگ میگه این خط مشکل داره!!

Adodc1.Recordset.Filter = "tarikh like '%" & Text3.Text & "%'"

returnx
پنج شنبه 22 اردیبهشت 1390, 09:48 صبح
شما تاریخ رو به شمسی در Db ذخیره می کنید؟
اگه جواب بله هست ، می تونه بخاطر این باشه ، که من بجای اینکه تابع رو به میلادی تبدیل کنید و ذخیره کنید راه دیگه ای رو به شما پیشنهاد میکنم اونم اینه که تاریخ رو تبدیل به عدد کنید و ذخیره کنید ، مثلا 2/3/1390
میشه : 139032 اینجوری دیگه به فیلد Date &Time دیگه نیازی نیست و مشکلات مربوط به تاریخ شمسی حل خواهد شد...
من برای اینکار این تابع رو نوشتم:

Public Function date_to_num(idate As Date) As Double
Dim my_date As String
Dim counter As Integer
Dim token As String * 1
Dim str_date As String
my_date = idate
my_date = my_date & "$"
While token <> "$"
counter = counter + 1
token = Mid(my_date, counter, 1)
If token <> "/" And token <> "$" Then
str_date = str_date & token
End If
Wend
date_to_num = Int(str_date)
End Function
و بر عکس این عمل:

Public Function num_to_date(num As Double) As Date
Dim year As String
Dim mounth As String
Dim day As String
Dim i_date As String
Dim c_date As String
i_date = Str(num)
year = Left(i_date, 5)
mounth = Mid(i_date, 6, 2)
day = Right(i_date, 2)
c_date = year & "/" & mounth & "/" & day
num_to_date = c_date

End Function
موفق باشید...

dddd10
پنج شنبه 22 اردیبهشت 1390, 13:37 عصر
مرسی ولی مشکل من همون تاریخ خالی نیست! چندتا فیلدهای دیگه مثل محل سکونت که از نوع text است همین مشکلو دارند

اگر میدونید برنامه رو بزارم بهتر میشه راهنمایی کرد بگید.

vbhamed
جمعه 23 اردیبهشت 1390, 05:40 صبح
سلام

خب فيلد تاريخ از نوع رشته اي نيست پس نبايد براش از علامت ' استفاده كرد
براي اين كار بايد يا طبق گفته دوستمون فيلد تاريخ رو به صورت عدد ذحيره كنيد و بعد مثل عدد باهاش رفتار كنيد، البته اين بهتر هم هست چون اونطوري هنگام ذخيره تاريخ شمسي در فيلد DATETIME ممكنه به مشكل بر بخورين
يه راه ديگه هم اينه كه با استفاده از يك كوئري اطلاعاتتون رو بخونيد و در اون تاريخ رو به رشته تبديل كنيد و بعد مثل يك رشته با همون دستور بالا جستجو ميشه

Ado.CommandType = adCmdText
Ado.RecordSource = "Select *, cstr(tarikh) as dat from tbl_tel"
Ado.Recordset.Filter = "dat like '%" & Text1 & "%'"


در دستور بالا فيلد Dat از روي تاريخ ساخته شده اما به صورت رشته اي
اگر خواستيد خود فيلد Tarikh ديگه در خروجي نياد به جاي * اسم تك تك فيلد ها رو بنويسيد و با ويرگول از هم جدا كنيد

در مورد بقيه فيلدهاي مشكل دار هم بهتره نمونه كد نوشته شده و اطلاعات ثبت شده در بانك رو بزاريد، البته بهتره كلا اون قسمت پروژه رو بزاريد تا بررسي بشه