2013-02-19 49 views
2

我想在VBA中运行删除查询以删除包含大于预先计算的当前月份的帐单月份的记录。来自另一个系统的源数据具有文本格式的日期,如(YYYY/MM)所示。按日期删除数据,其中日期为文本格式YYYY/MM

这里的语句:

mySQL = "DELETE * FROM [tblBillingData]" _ 
& "WHERE (((tblBillingData.[Billing Month]) > PreCalcCurrentMonth));" 

DoCmd.RunSQL mySQL 

所有的变量是正确声明的,我可以看到PreCalcCurrentMonth当我通过代码,但是当它运行的SQL语句,我带有一个输入参数输入用于PreCalcCurrentMonth变量的框。

+0

是在VBA中声明的变量吗?如果是这样,你不应该使用准备好的声明吗? – bernie 2013-02-19 20:22:21

回答

1

只要PreCalcCurrentMonth是一个日期变量,尝试这样的事情(未经测试):

mySQL = "DELETE * FROM [tblBillingData]" & _ 
    "WHERE (((tblBillingData.[Billing Month]) > " & _ 
    Format(PreCalcCurrentMonth,"\#mm\/dd\/yyyy\#") & _ 
    "));" 

DoCmd.RunSQL mySQL 

Format(PreCalcCurrentMonth,"\#mm\/dd\/yyyy\#")确保您的日期转换为美国日期格式#MM/DD/YYYY#字符串,无论您的区域设置。 #是日期分隔符。

+0

+1格式()' – 2013-02-19 20:33:19

1

试试这个:

mySQL = "DELETE * FROM [tblBillingData]" _ 
& "WHERE (((tblBillingData.[Billing Month]) > #" & PreCalcCurrentMonth & "#));" 

首先,你需要参考您的变量作为字符串以外的变量,否则,进入VBA认为它是一个字符串。

其次,您需要用#符号围绕日期参数。

+0

感谢百万斯科特,这工作就像一个魅力! – edsac64 2013-02-19 21:18:18

+0

只需对此进行跟进即可。我用#标记运行它,并删除了所有内容。幸运的是,这只是一张测试表,当我重新运行所有内容,但删除了#号时,它似乎按需要工作。再次,再次感谢您的帮助! – edsac64 2013-02-19 22:15:38

+0

@ edsac64也许因为你的日期格式化,它不需要#。无论如何,很高兴你得到了你的答案。 – 2013-02-20 03:32:21