设为首页收藏本站Access中国

Office中国论坛/Access中国论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

12下一页
返回列表 发新帖
查看: 6402|回复: 15
打印 上一主题 下一主题

急救密文啊!

[复制链接]
跳转到指定楼层
1#
发表于 2003-3-11 00:53:00 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

用代码A、代码B写入同样的文字“ABC”,加RC4("ABC")打开表结果不一样,代码B有误,
但两段代码不加RC4写入,结果都一样,是明码“ABC”,请教存储过程加了RC4为什么会出错,
如何解决?
谢谢!

代码A
Dim RST As New ADODB.Recordset, CNN As New ADODB.Connection
  Set CNN = CurrentProject.Connection
  RST.Open "SELECT * FROM Sb_员工基本资料 WHERE 姓名='" & "陈芬芬" & "' ", CNN, adOpenStatic, adLockPessimistic
  RST!密码 = RC4("ABC")
  RST.Update
  RST.Close
  Set RST = Nothing
END SUB

代码B
Sub AddPass2()
  DoCmd.RunSQL ("exec Tb_更改密码 " & "'陈芬芬', '" & RC4("ABC") & "'")
End Sub

'存储过程 Tb_更改密码
UPDATE dbo.Sb_员工基本资料
SET 密码效期 = GETDATE() + 30, 密码 = @新密码
WHERE (姓名 = @姓名)


Option Compare Database
Private Const conKey = "E54YBYB5eytn7kVSr6ub56uyAV%^&^$^%$$*YUGhj"

Public Function RC4(strInp As String) As String

Dim s(0 To 255) As Byte, K(0 To 255) As Byte, I As Long
Dim j As Long, temp As Byte, Y As Byte, t As Long, X As Long
Dim Outp As String


For I = 0 To 255
  s(I) = I
Next

j = 1
For I = 0 To 255
  If j > Len(conKey) Then j = 1
  K(I) = Asc(Mid(conKey, j, 1))
  j = j + 1
Next I

j = 0
For I = 0 To 255
  j = (j + s(I) + K(I)) Mod 256
  temp = s(I)
  s(I) = s(j)
  s(j) = temp
Next I

I = 0
j = 0
For X = 1 To Len(strInp)
  I = (I + 1) Mod 256
  j = (j + s(I)) Mod 256
  temp = s(I)
  s(I) = s(j)
  s(j) = temp
  t = (s(I) + (s(j) Mod 256)) Mod 256
  Y = s(t)
  
  Outp = Outp & ChrW(AscW(Mid(strInp, X, 1)) Xor Y)
Next
RC4 = Outp
End Function



分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 分享淘帖 订阅订阅
2#
发表于 2003-3-11 06:36:00 | 只看该作者
没细研究,反正我用RC4没问题。
3#
发表于 2003-3-27 23:02:00 | 只看该作者
呵呵,老问题了,这就是只抄代码的坏处

你要先搞清楚 ANSI 和 UNICODE 的区别
4#
 楼主| 发表于 2003-3-29 06:33:00 | 只看该作者
我想 cg1兄说得对,ACCESS与SQL之间好象有区别,cg1兄能否帮忙解决一下!谢谢!
5#
发表于 2003-3-29 19:18:00 | 只看该作者
什么乱七八糟的?这个和sql有什么关系?
6#
 楼主| 发表于 2003-3-29 19:26:00 | 只看该作者
直接写表没问题,用存储过程就出错,好象SQL与ACCESS有些东西不兼容。
有劳 cg1帮我解决一下。
7#
发表于 2003-3-29 20:28:00 | 只看该作者
Sub AddPass2()
  DoCmd.RunSQL ("exec Tb_更改密码 " & "'陈芬芬', '" & RC4("ABC") & "'")
End Sub

这个很可能就是导致错误的根源

不要这样执行存储过程,你用command来执行试试看,但是还要注意,还是有可能出错的,存储过程的参数定义也有关。你先试验一下再说
8#
发表于 2003-3-31 06:18:00 | 只看该作者
XXX网站,抄袭代码如下:(哈哈)

adp 代码如下:
----------------------------------------
Public Function DoProcedure()
    Dim cmdByRoyalty As ADODB.Command
    Dim prmByRoyalty As ADODB.Parameter
    Dim rstByRoyalty As ADODB.Recordset
    Dim intRoyalty As String
    Set cmdByRoyalty = New ADODB.Command
    cmdByRoyalty.CommandText = "存储过程名"
    cmdByRoyalty.CommandType = adCmdStoredProc
    intRoyalty = Trim(InputBox("输入参数:"))
        '你可以直接写参数,不用调用 input
    Set prmByRoyalty = cmdByRoyalty.CreateParameter("aab", adChar, adParamInput, 255)
    cmdByRoyalty.Parameters.Append prmByRoyalty
    prmByRoyalty.value = intRoyalty
    Set cmdByRoyalty.ActiveConnection = CurrentProject.Connection
    Set rstByRoyalty = cmdByRoyalty.Execute
End Function
9#
发表于 2003-3-31 06:24:00 | 只看该作者
up
[此贴子已经被作者于2003-3-31 19:21:33编辑过]

10#
 楼主| 发表于 2003-3-31 21:11:00 | 只看该作者

联不上

与昨天一样的错误!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
您需要登录后才可以回帖 登录 | 注册

本版积分规则

QQ|站长邮箱|小黑屋|手机版|Office中国/Access中国 ( 粤ICP备10043721号-1 )  

GMT+8, 2024-11-13 16:59 , Processed in 0.095465 second(s), 34 queries .

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表