我在使用 ADO 将完整的日期时间值从 VB6 传递到 sybase 时遇到了问题。似乎忽略了毫秒。
下面是存储过程的示例代码:
CREATE PROCEDURE dbo.usp_ReturnDatetimeInput (
@Input datetime,
@Output datetime output
)
AS
--Show input value
print '@Input = ' + convert(varchar(20), @Input, 14)
set @Output = @Input
GO
VB6代码
Private Function TestDatetimeOutputValue(dInput as Date) As Date
Dim cmd As New ADODB.Command
With cmd
<snip>
.Parameters.Append .CreateParameter("@Input", adDBTimeStamp, , 8, dInput)
.Parameters.Append .CreateParameter("@Output", adDBTimeStamp, adParamOutput, 8, dInput)
.Execute
If Not IsEmpty(.Parameters("@Output").Value) Then
TestDatetimeOutputValue = .Parameters("@Output").Value
End If
End With
End Function
最佳答案
adDBTimeStamp
字段不是 VB 日期类型。通过轻松地将它的值分配给一个 Date 变量,你已经转换了它,截断它以适应。
见 How To Get Fractions of a Second from ADO adDBTimeStamp Field 。 archive
您可以选择如何携带这些值以在 VB6 中使用它们。一种选择可能是带有 Date 字段和 Long 或 Integer 的 UDT 来保存毫秒。另一种可能是计算您存储在 Decimal 或 Currency 类型变量中的内容,在其中将 Date 值缩放到整个部分并添加 ms。例如作为小数部分。
关于vb6 - 如何在 vb6 中取消修剪日期(必须出现毫秒)。日期来自 sybase 中的存储过程,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/17287026/