I am not sure what your exact problem is. I can imagine that the dates are not formatted to your expectations.
First of all I really recommend making your query parameterized (not doing so may result in performance issues and SQL injection!). Consider the following: Someone types D'Artagnan in your TextBox. The ' in D'Artagnan will mess up your query since it means the end of a string in access.
Instead use this:
Dim cmd As New OleDbCommand("Select * from AFINITY where Description = @Description and Datetgl between @Datetgl1 and @Datetgl2 ", con)
cmd.Parameters.AddWithValue("@Description", TextBox1.Text)
cmd.Parameters.AddWithValue("@Datetgl1", DateTimePicker1.Value)
cmd.Parameters.AddWithValue("@Datetgl2", DateTimePicker2.Value)
Dim da As New OleDbDataAdapter(cmd)
.NET will now automatically replace @Description with the TextBox1.Value, but will also make sure that it is used as parameter as a whole (including anything that would normally break your query like */ and ' ).
Your query is now parameterized, which means queries will be cached and parameters will always be valid. So D'Artagnan will now be a valid entry in your TextBox.
Furthermore I think (though I can't say with certainty) that this approach (and using DateTimePicker.Value) will solve your other problem.