没有人能回答的问题!快看!

Psyche 2001-04-18 10:14:00
一段代码如下:
Cmd.CommandText = "Select * From " & strDBName & " Where UserName = ?"
Cmd.CommandType = adCmdText
Cmd.Prepared = True
Cmd.Parameters.Append Cmd.CreateParameter("UserName", adVarChar, , 38)
Cmd.ActiveConnection = cn
Cmd("UserName") = StrUserName
'注:StrUserName字符串中可能含有回车、换行、引号和空格的符号
Set Rs = dbf_Cmd.Execute

执行后Rs.Source总是等于
"Select * From " & strDBName & " Where UserName = ?"
且查不出数据,怎么办呢?(查询条件StrUserName在数据库中确实存在)
注:VB中连接Access2000的mdb库需用jet4.0连接。
...全文
181 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
newyj 2001-04-24
  • 打赏
  • 举报
回复
我做了一下测试,发现问题出在单引号上。
每个单引号要用两个单引号表示
sTmp = Replace(sTmp, "'", "''")
sTmp = "select * from t1 where a2='" + sTmp + "'"

Cn:connection Rs:Recordset
表:t1 字段:a1(自增量) a2(text)
Dim S1 As String
S1 ="a'a"
Cn.Execute "insert into t1(a2) values('" + s1 + "')"
出错 s1应等于 "a''a"才能插入 a'a

Rs.Close

sTmp = "select * from t1"
Rs.Find "a1='1'"

sTmp = "select * from t1 where a2='" + sTmp + "'"

Text1.MultiLine = true
Text1.Text = ""
Text1.Text = Rs("a2")

sTmp = Rs("a2")
Label1.Caption = ""

For i = 1 To Len(sTmp)
Label1.Caption = Label1.Caption + CStr(Asc(Mid(sTmp, i, 1))) + "|"
Next i

Rs.Close
'如果不执行下面这句 a2 中有单引号则Rs 无结果
sTmp = Replace(sTmp, "'", "''")

sTmp = "select * from t1 where a2='" + sTmp + "'"
Rs.Open sTmp, Adodc1.ConnectionString, 1, 1
If Rs.RecordCount > 0 Then Text2.Text = CStr(Rs("a1"))

newyj 2001-04-23
  • 打赏
  • 举报
回复
你的数据库大吗,你把要用到的表发一份给我,我给你测试一下;newyj@etang.com
Psyche 2001-04-23
  • 打赏
  • 举报
回复
厉害!厉害!果然有高手!
开始送分了!
仍欢迎有新方法的朋友继续该讨论!
谢谢各位!
binghuodao 2001-04-23
  • 打赏
  • 举报
回复
关键问题在于你的Cmd.Parameters.Append Cmd.CreateParameter("UserName", adVarChar, , 38)中的38。这表示传进CMD的字符串长度是38。就是说如果StrUserName不够38长,会补空格,而你数据库中的username后面可能是不不空格的,所以就查不出来了。应该这样写:Cmd.Parameters.Append Cmd.CreateParameter("UserName", adVarChar, , Len(StrUserName))
Psyche 2001-04-23
  • 打赏
  • 举报
回复
taolei:
taolei的方法和我开始写的是同样的道理,行不通的,
你用watch窗看一看就知道了,我的方法参数是有的,
但接下去查Cmd.CommandText和Rs.Source却不是想象的那样,
而是仍然含有问号的!

newyj:
数据结构很简单,newyj,你用一个字段的表试试都可以的了。

谢谢楼上各位!
可惜问题还没解决呀!
taolei 2001-04-21
  • 打赏
  • 举报
回复
你把名字去掉看看
Cmd.Parameters.Append Cmd.CreateParameter(,, adVarChar, , 38)
Cmd.Parameters(0) = StrUserName
Psyche 2001-04-21
  • 打赏
  • 举报
回复
字符串不是我生成的,而是读取的,不存在上诉问题。
newyj 2001-04-20
  • 打赏
  • 举报
回复
我 想你是不是字符串生成有问题?
回车、换行 要用 chr(13)chr(10)表示 "df " & chr(13) & chr(10) &'dfafa"
引号 ' 直接写可以 “ 要用 两个""表示 如str1="""" str1实际上只有一个 "
s2="d""f" 实际上是 d"f
Psyche 2001-04-20
  • 打赏
  • 举报
回复
呵呵!
你的方法对于一般的字符串没有问题,
可是对于有回车换行等字符就会出错了!
我要讨论的就是这个问题,
顺便,大家有什么操作数据库的高招请提出来!
一定给分!
谢谢!
benjaliu 2001-04-19
  • 打赏
  • 举报
回复
好像不需要这么麻烦吧。
如果
dim basesql,sql,end as string
basesql = "select * from " & strDBName & "Where UserName = '"
end = "'"
则可以在需要的时候生成sql,然后
rs.open sql,conn,,,adcmdtext 可以取得所需的结果集,如果需要变参数是可以先关闭rs,然后重新生成sql后再按该法打开。

还可以写一个参数替换函数Replaceparams,将自己的sql语句中自定义的参数进行替换。
如sql = "select * from @1 where UserName = '@2'"
然后Replaceparams(sql,strDBName,Yourdata) 就可以返回所需的sql语句。
这个函数的写法并不困难,参数是一个字符串加一个动态的字符串数组。有书上有这样的程序。
ttyp 2001-04-18
  • 打赏
  • 举报
回复
Cmd.CommandText = "Select * From " & strDBName & " Where UserName = '?'"
Psyche 2001-04-18
  • 打赏
  • 举报
回复
VB里用,ASP里也用,测试是在VB里,
有另外更好的方法请不吝赐教!
cqq_chen 2001-04-18
  • 打赏
  • 举报
回复
在VB中还是在ASP中用的?如果有VB中没有必要写的这么烦吧!
Psyche 2001-04-18
  • 打赏
  • 举报
回复
我试过了,没有用的!

7,763

社区成员

发帖
与我相关
我的任务
社区描述
VB 基础类
社区管理员
  • VB基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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