关于sql语句和vb数组的关系问题

Ice1982 2004-09-09 03:26:46
我用vb作了一个程序,用来连接sql server2000中的一个表。用一个数组来记录此表中的一个字段,然后把此数组作为where语句中的查询条件,但是t-sql语句处报错。具体代码如下
Dim cn As ADODB.Connection
Dim rs As ADODB.Recordset
Dim sql As String
Dim i As Integer
Dim str1(1000) As String

Set cn = New ADODB.Connection
cn.Open "Provider=sqloledb;Data Source=SERVER ;Initial Catalog=OFFICE;User Id=sa;Password="
sql = "select 名称 from 表"
Set rs = New ADODB.Recordset
rs.CursorLocation = adUseClient
rs.Open sql, cn, adOpenDynamic, adLockOptimistic
i = 1
While (rs.EOF = False)
str1(i) = rs.Fields(0) '名称
i = i + 1
rs.MoveNext
Wend

For i = 1 To 1000
Set cn = New ADODB.Connection
cn.Open "Provider=sqloledb;Data Source=SERVER ;Initial Catalog=OFFICE;User Id=sa;Password="
sql = "select 数量 from 表 where 名称=str1(i)"
Set rs = New ADODB.Recordset
rs.CursorLocation = adUseClient
rs.Open sql, cn, adOpenDynamic, adLockOptimistic
j = 0
While (rs.EOF = False)
j = j + rs.Fields(0) '数量
rs.MoveNext
Wend
str3(i) = j
Next i

sql = "select 数量 from 表 where 名称=str1(i)"报错为:“str1不是可识别的函数名”请问大家该怎样解决
...全文
207 10 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
Ice1982 2004-09-13
  • 打赏
  • 举报
回复
请大家帮帮忙。自己顶一下
Ice1982 2004-09-13
  • 打赏
  • 举报
回复
在输入了:入库时间<'" & Format(Text1.Text, "yyyy-mm") & "'之后就报错。只有输入改为:入库时间<'" & Format(Text1.Text, "yyyy-mm-dd") & "'之后才能正常运行。但是我希望:入库时间='" & Format(Text1.Text, "yyyy-mm") & "'只要满足该月的条件就行,但要是改为:入库时间='" & Format(Text1.Text, "yyyy-mm-dd") & "'就只能满足改天的条件才行了。这与我希望的不符。请问各位应该怎样处理?
harryho 2004-09-12
  • 打赏
  • 举报
回复
sql = "select 数量 from 表 where 名称=str1(i)"将这句改为:
sql = "select 数量 from 表 where 名称='" &str1(i) &"'"
cosio 2004-09-10
  • 打赏
  • 举报
回复
(year(入库时间)<year( '" & Format(Text1.Text, "yyyy-mm") & " ')) or (year(入库时间)=year('" & Format(Text1.Text, "yyyy-mm") & " ') and month(入库时间)< month('" & Format(Text1.Text, "yyyy-mm") & " ') ) "


上面已经指出了yyyy-mm 无需在判断year和month了
还有year('" & Format(Text1.Text, "yyyy-mm") & " ') 这个本来是datatime ,而 year()转换字符串,当然去提示出错了!


就用 入库时间<format(text1.text,yyyy-mm) 就可以了!
vzxq 2004-09-10
  • 打赏
  • 举报
回复
stduy
badboyst 2004-09-10
  • 打赏
  • 举报
回复
去掉''试试,在sqlserver中时间不能加''
(year(入库时间)=year(" & Format(Text1.Text, "yyyy-mm") & ")
Ice1982 2004-09-10
  • 打赏
  • 举报
回复
可以了。但是又遇到新的问题了。
text1.text="2004-09"

sql = "select 数量 from 入库表 where 名称='" & str1(i) & "' and [规格/型号]='" & str2(i) & "' and (year(入库时间)<year( '" & Format(Text1.Text, "yyyy-mm") & " ')) or (year(入库时间)=year('" & Format(Text1.Text, "yyyy-mm") & " ') and month(入库时间)< month('" & Format(Text1.Text, "yyyy-mm") & " ') ) "

在执行sql语句时提示错误为:
从字符串转换为datetime是发生语法错误
请问大家,这情况将如何处理?
cosio 2004-09-09
  • 打赏
  • 举报
回复
str1不是可识别的函数名 不是SQL的函数!


改成:名称='"&strl(i)&"' 看行不行了
starsoulxp 2004-09-09
  • 打赏
  • 举报
回复
变量名要写在引号外面,写里面它不认识,又不是sql函数
starsoulxp 2004-09-09
  • 打赏
  • 举报
回复
sql = "select 数量 from 表 where 名称='" & str1(i) & "'"
建立运行环境-Excel Vba,可移植到VB环境中(需修改一些代码) '仿制简单的SQL查询语句,用于对二维数组的查询 '参照SQL语句:Select * From array [Where conditions] [Distinct fields] [ResultWithTitle] ' '实现功能: ' 依条件设置查询数组,返回包含查询字段(或全部字段)的数组,可多条件组合。 ' 条件运算符包括:> = < >= <= <> , like(正则表达式) ' '附注: ' 使用此函数,需要在文件中引用正则表达式脚本 Microsoft VBScript Regular Expressions x.x ' (根据不同的电脑配置和环境此处会有差异) '算法简要: ' 1、查询条件运算符:仅有 >, =, <, >=, <=, <> , like(正则表达式) ' 本函数中仅有上述运算符。原因在于,更多的运算符编制逻辑过于复杂,又不太常用。 ' 为了尽可能多地容纳各种运算关系,添加了正则表达式匹配运算, ' 在某个单一条件中,正则几乎可以容纳绝大部分的比对运算关系了。 ' 2、数字比较: ' 采用了将数字型字符串类型转换为数字之后再比较的方法,结果更为准确。 ' 3、其他算法和运算速度: ' 编制过程中,试验过使用 正则+逻辑分支+表达式引用 的方法, ' 可以实现几乎等同于SQL查询语句的复杂功能,而且代码更简捷。 ' 但运算速度相差过于悬殊(大概几十到上百倍 - "一闪而过"和"一袋烟"的差距!),最后不得不放弃。 ' 所以现在的版本相当于一个简化了的select语句,但对于大多数查询情况而言够用了。

1,217

社区成员

发帖
与我相关
我的任务
社区描述
VB 数据库(包含打印,安装,报表)
社区管理员
  • 数据库(包含打印,安装,报表)社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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