在sql查询分析器里可以运行的语句在vb里报错
一个很简单的代码,在查询分析器里:useflbinsertintoB([1],[2],[3],[4])select[1],[2],[3],[4]fromAwhere[4]...
一个很简单的代码,
在查询分析器里:
use flb
insert into B([1],[2],[3],[4]) select [1],[2],[3],[4] from A where [4]='A4'
这个没有报错,其中,flb是数据库名,A和B是里面的两个表,[1],[2],[3],[4]是里面的四个列名,[4]='A4'是一个取值。这些都仔细核对过,并且这个语句在查询分析器里不报错,执行之后确实复制了数据。
但是同样的语句,在vb里却报错,说“未能找到存储过程excute”。
只画了一个按钮command1,在command1_click()下执行。整个代码是这样的:
Private Sub Command1_Click()
Dim conn As New ADODB.Connection
Dim rs As New ADODB.Recordset
Dim sqlstr As String
Dim connstr As String
Dim excutestr As String
connstr = "Provider=SQLOLEDB.1;Persist Security Info=False;" & _
"User ID=sa;Initial Catalog=flb;Data Source=10.232.131.88 "
conn.ConnectionString = connstr
conn.Open
sqlstr = "select * from A"
excutestr = "insert into B([1],[2],[3],[4]) select [1],[2],[3],[4] from A where [4]='A4'"
rs.Open sqlstr, conn, 0, 4
conn.BeginTrans
conn.CommitTrans
Debug.Print excutestr
conn.excute excutestr
rs.Close
conn.Close
Set rs = Nothing
Set conn = Nothing
End Sub
其中这个excutestr执行之前我加了一个Debug.Print excutestr,出来的字符串我粘入查询分析器可以运行。但是vb里就是不行。因为connstr里已经是打开了flb,所以没写useflb。为了排除,也加过一条use flb的语句在insert之前。结果这条语句也报错。请高手指点。 展开
在查询分析器里:
use flb
insert into B([1],[2],[3],[4]) select [1],[2],[3],[4] from A where [4]='A4'
这个没有报错,其中,flb是数据库名,A和B是里面的两个表,[1],[2],[3],[4]是里面的四个列名,[4]='A4'是一个取值。这些都仔细核对过,并且这个语句在查询分析器里不报错,执行之后确实复制了数据。
但是同样的语句,在vb里却报错,说“未能找到存储过程excute”。
只画了一个按钮command1,在command1_click()下执行。整个代码是这样的:
Private Sub Command1_Click()
Dim conn As New ADODB.Connection
Dim rs As New ADODB.Recordset
Dim sqlstr As String
Dim connstr As String
Dim excutestr As String
connstr = "Provider=SQLOLEDB.1;Persist Security Info=False;" & _
"User ID=sa;Initial Catalog=flb;Data Source=10.232.131.88 "
conn.ConnectionString = connstr
conn.Open
sqlstr = "select * from A"
excutestr = "insert into B([1],[2],[3],[4]) select [1],[2],[3],[4] from A where [4]='A4'"
rs.Open sqlstr, conn, 0, 4
conn.BeginTrans
conn.CommitTrans
Debug.Print excutestr
conn.excute excutestr
rs.Close
conn.Close
Set rs = Nothing
Set conn = Nothing
End Sub
其中这个excutestr执行之前我加了一个Debug.Print excutestr,出来的字符串我粘入查询分析器可以运行。但是vb里就是不行。因为connstr里已经是打开了flb,所以没写useflb。为了排除,也加过一条use flb的语句在insert之前。结果这条语句也报错。请高手指点。 展开
展开全部
你将"insert into B([1],[2],[3],[4]) select [1],[2],[3],[4] from A where [4]='A4'"分为两步执行试试,就是
excutestr = "insert into B([1],[2],[3],[4])"
执行
excutestr = "select [1],[2],[3],[4] from A where [4]='A4'“
执行
excutestr = "insert into B([1],[2],[3],[4])"
执行
excutestr = "select [1],[2],[3],[4] from A where [4]='A4'“
执行
追问
能说的详细些么,就是这是因为什么机制?类似的问题我应该怎么处理?
追答
原来你的写法在一次执行中包含了两条语句,这两条语句在查询分析器中是可以的,嵌入到编程语言中是不行的,嵌入式SQL一次只能执行一步操作。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询