在vba中读取文本文件时,变量sy1 和ssy1 无法获得日期的值,请问有什么办法可以解决?

Subaa()DimCNNAsNewADODB.ConnectionDimRSTAsNewADODB.RecordsetDimStpathAsString,strSQLA... Sub aa()
Dim CNN As New ADODB.Connection
Dim RST As New ADODB.Recordset
Dim Stpath As String, strSQL As String
Dim txtLine
Dim FileObj
Dim TextObj
Dim FilePath
Dim sy1, ssy1
Dim kk
sy1 = Format("2013 - 1 - 1", "yyyy-mm-dd") '上月1
ssy1 = Format("2013-01-31", "yyyy-mm-dd") '上上月1
FilePath = "C:\text1.txt"
Set FileObj = CreateObject("Scripting.FileSystemObject")
Set TextObj = FileObj.OpenTextFile(FilePath)
Do While Not TextObj.AtEndOfLine
txtLine = txtLine & TextObj.ReadLine
Loop
'txtline内容为:select top 10 * from t_rm_daysum where oper_date between " & sy1 & " and " & ssy1 & "
Stpath = "Provider=SQLOLEDB;Server=0.0.0.0,8052;Database=bf;Uid=user;Pwd=300900;"
CNN.Open Stpath
strSQL = txtLine
RST.Open strSQL, CNN
Worksheets("基础表1").Cells(i, 1).CopyFromRecordset RST
Set RST = Nothing
Set CNN = Nothing
i = i + 1

End Sub
展开
 我来答
网海1书生
科技发烧友

2014-01-11 · 擅长软件设计、WEB应用开发、小程序
网海1书生
采纳数:12311 获赞数:26228

向TA提问 私信TA
展开全部
strSQL = txtLine
改为
strSQL = Replace(txtLine, """ & sy1 & """, "'" & sy1 & "'")
strSQL = Replace(strSQL, """ & ssy1 & """, "'" & ssy1 & "'")

你想明白是什么错误了么?你把sy1和ssy1放入文本文件中,再读出来的时候,它们就成为文本的一部分了,VB怎么会知道它们是变量呢?我知道你的目的是把SQL字串放入文本文件中方便调用,而且可以随意修改,但这只适用于固定的SQL字串,对于含变量的是不适用的,VB(包括VBA)没有宏的功能,但VBScript则有。
我的方法是把字串中的变量重新替换为程序中变量值,但这显然不是你最初想实现的目的。
变通的方法是用一些约定的符号来替换变量,使用的时候再替换回来,比如
select top 10 * from t_rm_daysum where oper_date between '$1' and '$2'
这是用$1和$2分别表示要动态变换的两处地方,然后使用的时候可以这样:
strSQL = Replace(txtLine, "$1", sy1)
strSQL = Replace(strSQL, "$2", ssy1)
这样就简单明朗多了。
追问
除此之外就没有别的方法吗?因为我的sql语句特别长,直接放vb里面,字符太多,运行不了,才不得已这么做,有没有别的更好的办法?因为替代的话,涉及到的变量也很多,
追答
VB中你可以分行写的,就不会出现字符太多的情况了。比如:

strSQL = "select * from ........"
strSQL = strSQL & " where xxxx=aaaa ......."
strSQL = strSQL & " order by xxxx ......."
......
RST.Open strSQL, CNN

或者

strSQL = "select * from ........ _
where xxxx=aaaa ....... _
....... _
order by xxxxx ........"
RST.Open strSQL, CNN
文明国度
2014-01-10 · TA获得超过288个赞
知道小有建树答主
回答量:788
采纳率:25%
帮助的人:337万
展开全部
改为 ' " +sy1+" ' and ' " +ssy1+" ' 试试
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
Webmastersm
2014-01-10 · TA获得超过118个赞
知道答主
回答量:111
采纳率:62%
帮助的人:28.4万
展开全部
2013-01-01
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式