2013-10-02 3 views
0

Я использую datagridview показать студенческие записи ..Как поиск записей, используя дату

Я хочу, чтобы отобразить записи, отфильтрованные по дате рождения студент, живущий в общежитии.

Когда я просматриваю данные, выбирая 11/09 из datetimepicker с использованием настраиваемого формата dd/mm, и он ничего не показывает.

Как я могу отображать все записи, сопоставляя только dd/mm, игнорируя год?

Вот мой код:

Try 
    con = New OleDbConnection(cs) 
    con.Open() 

    cmd = New OleDbCommand("SELECT HostelerID as [Hosteler ID],HostelerName as [Hosteler Name],DOB,HostelName as [Hostel Name],RoomNo as [Room No],DateOfJoining as [Date Of Joining],Purpose,FatherName as [Father's Name],MobNo1 as [Mobile No],Phone1 as [Phone No],MotherName as [Mother's Name],MobNo2 as [Mobile No 2],City,Address,Email,ContactNo as [Contact No],InstOfcDetails as [Ins/Ofc Details],Phone2 as [Phone No 2],Agreement,GuardianName as [Guardian Name],GuardianAddress as [Guardian Address],MobNo3 as [Guardian Mobile No],Phone3 as [Guardian Phone No],FixedDeposit as [Fixed Deposit],CompletionDate as [Completion Date],Photo,DocsPic as [Docs Pic] from Hostelers where DOB like #" & DateTimePicker1.Text & "# order by HostelerName", con) 

    Dim myDA As OleDbDataAdapter = New OleDbDataAdapter(cmd) 
    Dim myDataSet As DataSet = New DataSet() 

    myDA.Fill(myDataSet, "Hostelers") 

    DataGridView6.DataSource = myDataSet.Tables("Hostelers").DefaultView 

    con.Close() 
Catch ex As Exception 
    MessageBox.Show(ex.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error) 
End Try 
+0

Возможно ли получение данных с использованием регулярного выражения в доступе MS? –

+0

пожалуйста, помогите кому-нибудь :( –

+1

Для людей это занимает более 60 секунд. Я только что отредактировал вопрос, чтобы люди могли даже понять, что вы пытаетесь сделать. Будьте терпеливы. Смысл, вернитесь через час или так. – NotMe

ответ

2

Попробуйте изменить 'где' положение, чтобы:

" WHERE MONTH(DOB) = " & DateTimePicker1.Value.Month & 
     " AND DAY(DOB) = " & DateTimePicker1.Value.Day 

Однако я хотел бы также настоятельно рекомендую вам с помощью параметризованного SQL команды http://msdn.microsoft.com/en-us/library/system.data.oledb.oledbcommand.parameters.aspx

Этих предотвратит внедрение SQL (http://technet.microsoft.com/en-us/library/ms161953(v=SQL.105).aspx) и другие ошибки

+0

, это сработало для меня ... спасибо тонн брата. и спасибо stackoverflow.com, чтобы помочь новичкам вроде меня :) –

1

Изменить запрос на что-то вроде этого:

cmd = New OleDbCommand(" 
SELECT HostelerID as [Hosteler ID], HostelerName as [Hosteler Name], 
    DOB, HostelName as [Hostel Name], 
    RoomNo as [Room No], DateOfJoining as [Date Of Joining], 
    Purpose, FatherName as [Father's Name], 
    MobNo1 as [Mobile No], Phone1 as [Phone No], 
    MotherName as [Mother's Name], MobNo2 as [Mobile No 2], 
    City, Address, Email, ContactNo as [Contact No], 
    InstOfcDetails as [Ins/Ofc Details], Phone2 as [Phone No 2], 
    Agreement, GuardianName as [Guardian Name], 
    GuardianAddress as [Guardian Address], MobNo3 as [Guardian Mobile No], 
    Phone3 as [Guardian Phone No], FixedDeposit as [Fixed Deposit], 
    CompletionDate as [Completion Date], Photo, DocsPic as [Docs Pic] 
FROM Hostelers 
WHERE (DatePart(\"M\", DOB) = '" + DateTimePicker1.Value.Date.Month + '") 
    AND (DatePart(\"D\", DOB) = '" + DateTimePicker1.Value.Date.Day + '")) 
ORDER BY HostelerName 
") 
+0

получить ошибку в этой строке (DatePart (\ "M \", DOB) –

+0

Я не знаю, как VB избегает кавычек. Какая ошибка? – NotMe

+0

моя проблема уже решено Джастином .... btw спасибо, что помогли мне бросить. :) –

2

«поиск данных, выбрав 11/09 из DateTimePicker, используя пользовательский формат дд/мм»

В запросе доступа, вам может попросить двигатель db применить Format() к вашему значению DOB, а затем выполнить сравнение. Это будет делать это для статического значения '11/09' ...

WHERE Format(DOB, 'dd/mm') = '11/09' 

Чтобы сделать его гибким, вы можете использовать параметрический запрос и поставить DateTimePicker1.Text в качестве значения параметра.

WHERE Format(DOB, 'dd/mm') = your_string 
+0

Не знал этого. Интересно; – NotMe

+0

Спасибо. Это просто, но требует применения этой функции к каждой строке таблицы. К сожалению, я не вижу более быстрой альтернативы. – HansUp

Смежные вопросы