datagrid在vb6中显示错误的输出

datagrid在vb6中显示错误的输出,vb6,Vb6,当我从第10个月选择相同的日期时,比如说dtpckr1=02-10-2019和dtpckr2=02-10-2019..数据网格不打印任何内容,并显示msgbox not found记录,我为方便起见对其进行编码…但当我从上个月选择开始日期和本月的结束日期时,dtpckr1=30-09-2019和dtpckr2=02-10-2019,它会显示所有数据第09个月,从第10个月开始没有。。。奇怪的是,当选择从09月开始的日期时,即使它是相同的dtpckr1=13-09-2019和dtpckr2=13-

当我从第10个月选择相同的日期时,比如说dtpckr1=02-10-2019和dtpckr2=02-10-2019..数据网格不打印任何内容,并显示msgbox not found记录,我为方便起见对其进行编码…但当我从上个月选择开始日期和本月的结束日期时,dtpckr1=30-09-2019和dtpckr2=02-10-2019,它会显示所有数据第09个月,从第10个月开始没有。。。奇怪的是,当选择从09月开始的日期时,即使它是相同的dtpckr1=13-09-2019和dtpckr2=13-09-2019或22-09-2019,它工作得很好。所以请尝试通过参考以下代码来帮助我。到目前为止,我发现我在datagridview中获得的数据是按天dd而不是按整个日期…意味着如果我选择日期1=2019年9月31日和日期2=2019年10月01日,则仅显示09月01日至31日的数据。。。。我还检查了数据库的日期格式和我的输入,它们是相同的…在数据库中,日期数据类型是日期/时间,格式是短日期…如果有任何其他解决方案,请告诉我。。。我会试试。。。我的目的是在datagridview中显示日期食品订单,然后计算总销售额。。。我是vb6的新手…所以如果你能编辑我的代码并重新发布它…那将非常棒…因为我想在明天之前提交这个项目…这是唯一困扰我的。。。多谢各位

Dim con As New ADODB.Connection
Dim rs As New ADODB.Recordset

Private Sub cmdSearch_Click()

Dim date1 As Date
Dim date2 As Date

If IsNull(DTPicker1.Value And DTPicker2.Value) Then

    MsgBox "You must select date", vbCritical, "Warning"
    Exit Sub
End If
DTPicker1.Value = Format(DTPicker1.Value, "dd-mm-yyyy")
DTPicker2.Value = Format(DTPicker2.Value, "dd-mm-yyyy")
date1 = DTPicker1.Value
date2 = DTPicker2.Value
con.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=D:\OrderMania\ordermania.mdb;Persist Security Info=False"
rs.CursorLocation = adUseClient

If DTPicker2.Value < DTPicker1.Value Then
MsgBox "End Date Cannot Be Lesser Then Start Date", vbCritical, "Wrong Input"
Exit Sub
Else
Adodc1.RecordSource = "select * from order1 where (date between #" & date1 & "# and #" & DTPicker2.Value & "#)"
Adodc1.Refresh
If Adodc1.Recordset.EOF Then
MsgBox "Please Enter Another Date", vbCritical, "No Record Found"
Else
Adodc1.Caption = Adodc1.RecordSource
End If
End If

con.Close

Call sale

End Sub


Public Sub sale()
Dim i As Integer
Dim Tot, gst, gtot As Double

For i = 0 To Adodc1.Recordset.RecordCount - 1
    Tot = Tot + CDbl(DataGrid1.Columns(5).Text)
    Adodc1.Recordset.MoveNext

Next i

Text1.Text = Tot
gst = Tot * 0.05
Text2.Text = gst
gtot = Tot + gst
Text3.Text = gtot
End Sub

尝试在中间条款中颠倒月份和日期:

..."between #" & Format(date1, "mm-dd-yyyy") & "# and #" & Format(date2, "mm-dd-yyyy")) & "#)"

但是,正如@GSerg提醒我的那样,将SQL字符串与变量值连接起来被认为是不好的做法,因为SQL可能会注入恶意代码。您应该使用参数。如果你想研究这一点,这里有一个起点:

非常感谢你…它起了作用…我想,因为数据库中的日期是DD/MM/YYYY格式的,所以我需要按原样进行格式化…但现在我认为它是使用ISO格式的…请告诉我背后的原因…@知识是关键。。再次感谢Microsoft Jet Ole db和Access在使用本地格式显示时,在内部操作中始终使用US格式的日期。我想这是因为最初的开发人员。即使固定了日期格式,这仍然是一件需要做的事情,而且,从广义上说,这是一个非常糟糕的建议。仅供我参考,如何在格式指令中进行SQL注入?如果您控制格式字符串,并且date1确实键入为日期,则您不会这样做,否则,“罗伯特”;落桌学生;-,mm dd yyyy确实返回了Robert';落桌学生;-。然而,这确实意味着这样做原则上是可以的,这将导致将来使用字符串连接。我非常怀疑,当OP需要第三个参数作为查询的字符串时,他们会重写整个过程来使用参数。它们很可能会阻塞另一个字符串连接。