请教一下在VB中的SQL语句提示:在select附近有语法错误如何解决?

hutucong 2007-06-27 10:47:12
由于是初学者,对一些问题还是摸不着头脑,
现在做一个使用VB的查询,建立了链接SQL数据库,
在进行查询时,总会提示:“在SELECT 附近有语法错误”,当我将此句话转到SQL查询分析器下面去运行反而没问题,还可以查出结果,但实在是不知为何挪到VB中就不行了???
...全文
1209 20 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
20 条回复
切换为时间正序
请发表友善的回复…
发表回复
flashasp 2007-07-01
  • 打赏
  • 举报
回复
一般是空格的问题,把sql语句输出来在查询分析器一看就知道了
快乐老猫 2007-07-01
  • 打赏
  • 举报
回复
str = "and ([发站] like '广州') and ([到站] like '重庆')"
"select * from [车票] where (1 = 1) " & str

1.为什么用中文字段和表名?在一些系统中可能产生不稳定因素,也可能因为英文版的MDAC、SQL SERVER 等环节产生问题。
2.特殊字符、保留字作为字段、表名的时候,用“[]”括起来。
3.where 后面如果多表达式,每个表达式用“()”括起来,小心优先级问题。好像 and 的优先级很高的说(虽然比不过 not)


PS:运算符的优先顺序
当一个复杂的表达式有多个运算符时,运算符优先性决定执行运算的先后次序。执行的顺序可能严重地影响所得到的值。

运算符有下面这些优先等级。在较低等级的运算符之前先对较高等级的运算符进行求值。

+(正)、-(负)、~(按位 NOT)
*(乘)、/(除)、%(模)
+(加)、(+ 串联)、-(减)
=, >, <, >=, <=, <>, !=, !>, !< 比较运算符
^(位异或)、&(位与)、|(位或)
NOT
AND
ALL、ANY、BETWEEN、IN、LIKE、OR、SOME
=(赋值)
huashui 2007-06-28
  • 打赏
  • 举报
回复
用TRIM函数就可以把空格除掉了
issacp 2007-06-28
  • 打赏
  • 举报
回复
這個可能是控件的問題,你試把Adodc1從窗體中刪除後重新拖一個進去試試看吧!
hutucong 2007-06-28
  • 打赏
  • 举报
回复
用trim函数可以把空格的问题解决了,
但是程序还是没有查出结果,仍然提示:在SELECT附近有语法错误,
不知还有什么问题,改后的程序如下:
Private Sub Command1_Click()
Dim str, a, b
a = Trim(DataCombo1.Text)
b = Trim(DataCombo2.Text)
If a <> "" Then
str = "and 发站 like '" & a & "'"
End If
If b <> "" Then
str = str & " and 到站 like '" & b & "'"
End If
If str <> "" Then
Adodc1.RecordSource = "select * from 车票 where 1=1 " & str
Adodc1.Refresh
End If
End Sub
在Adodc1.RecordSource = "select * from 车票 where 1=1 " & str处做了一个断点,
str的值为:"and 发站 like '广州' and 到站 like '重庆'"
a的值为:"广州"
b的值为:"重庆"
请求帮助.....
hutucong 2007-06-27
  • 打赏
  • 举报
回复
如何把
str 的值为:" and 发站 like '广州' and 到站 like '重庆 '"
中重庆后面的空格去掉?
源代码似乎没有空格?
hutucong 2007-06-27
  • 打赏
  • 举报
回复
重庆后面的空格是怎么来的?
呵呵.....搞笑了
hutucong 2007-06-27
  • 打赏
  • 举报
回复
str 的值为:" and 发站 like '广州' and 到站 like '重庆 '"
是不是重庆后不应该有空格?
OracleRoob 2007-06-27
  • 打赏
  • 举报
回复
在以下行中断

Adodc1.RecordSource = " select * from 车票 where 1=1 " & str

调试出SQL串,把这个串贴出来
hutucong 2007-06-27
  • 打赏
  • 举报
回复
在试.....
好感动啊.....
hutucong 2007-06-27
  • 打赏
  • 举报
回复
你们说的方法我在SQL中都可以查的出来,但是在VB中就不行了,还是提示:Adodc1在关键字select附近有语法错误?
还有没有别的什么原因啊?
hellowork 2007-06-27
  • 打赏
  • 举报
回复
请将四个datacombo的值都填满即都不为空,然后执行一下命令按钮中的代码.如果成功执行则说明SQL字符串正确.
OracleRoob 2007-06-27
  • 打赏
  • 举报
回复
检查是否有全角的空格。
hutucong 2007-06-27
  • 打赏
  • 举报
回复
等等我来试试,刚才没看到回帖!
hutucong 2007-06-27
  • 打赏
  • 举报
回复
我一直在想是不是"select * from 车票 where " & str有问题?
select * from 车票 where 是从SQL查询分析器语句中复制的,格式应该不会有问题吧?
我试了几次,还是在SQL中可以,在VB中不可以!
hellowork 2007-06-27
  • 打赏
  • 举报
回复
这样改一下:
Private Sub Command1_Click()
Dim str
If DataCombo1.BoundText <> "" Then
str = " and 发站 like '" & DataCombo1.BoundText & "'" /*移动"and"*/
End If
If DataCombo2.BoundText <> "" Then
str = str & " and 到站 like '" & DataCombo2.BoundText & "'" /*添加"and"*/
End If
If str <> "" Then
Adodc1.RecordSource = "select * from 车票 where 1=1 " & str /*增加1=1条件*/
Adodc1.Refresh
End If
End Sub
OracleRoob 2007-06-27
  • 打赏
  • 举报
回复
--改一下

Private Sub Command1_Click()
Dim str
If DataCombo1.BoundText <> "" Then
str = " and 发站 like '%" & DataCombo1.BoundText & "%' "
End If
If DataCombo2.BoundText <> "" Then
str = str & " and 到站 like '%" & DataCombo2.BoundText & "%' "
End If
If str <> "" Then
Adodc1.RecordSource = " select * from 车票 where 1=1 " & str
Adodc1.Refresh
End If
End Sub
hutucong 2007-06-27
  • 打赏
  • 举报
回复
为了具体说明我把程序附上:
Private Sub Command1_Click()
Dim str
If DataCombo1.BoundText <> "" Then
str = "发站 like '" & DataCombo1.BoundText & "'and "
End If
If DataCombo2.BoundText <> "" Then
str = str & "到站 like '" & DataCombo2.BoundText & "'"
End If
If str <> "" Then
Adodc1.RecordSource = "select * from 车票 where " & str
Adodc1.Refresh
End If
End Sub
以上是一个查询的代码,
本来是两个查询的功能,但是作用都一样,只写了一个的代码,
界面上有四个datacombo,一个dataGrid,三个adodc,两个commond
分别进行了链接,
在运行后,会提示:
在select附近有语法错误,但是在SQL的查询分析器中可以查询啊?
能否给些详细的说明?
mugua604 2007-06-27
  • 打赏
  • 举报
回复
VB有个字串转换成SQL的工具~~用那个试试!在把那个贴出来看看!
OracleRoob 2007-06-27
  • 打赏
  • 举报
回复
贴出你的SQL。

建议把所有字段或表名都加上[]

34,837

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧