Board logo

标题: VBSQL求助调试 [打印本页]

作者: 马小玲的眼泪    时间: 2007-6-28 13:58     标题: VBSQL求助调试

现有人事管理系统一个,但存在一点错误,希望得到高手帮助。。

程序代码下载:
http://vip.pastein.net/keith/other/CH12.rar

时间推迟到下周,不过还是比较紧急。。

============

另,手头上还有一套VB数据库代码,可用,但是功能太全面太强大,需要删减。我一动就出错,寻人帮忙。。- -

代码和要求如下,顶楼也有链接。。两套代码任意完成一套即可结贴。
http://vip.pastein.net/keith/help/vbaccess.rar

[ 本帖最后由 马小玲的眼泪 于 2007-6-28 21:58 编辑 ]
作者: tenshinx    时间: 2007-6-28 14:00

把sql扣出来贴上来。。家里没装vb
作者: .lemon.    时间: 2007-6-28 14:01

么装vb  你去csdn的vb/delphi版块问啊.. 那里高手如云- -



作者: 马小玲的眼泪    时间: 2007-6-28 14:01

数据库和程序代码都在压缩包里。。
作者: tenshinx    时间: 2007-6-28 14:04

没装vb呀。。最近又休息。不去公司,说哪个模块错了?
作者: 马小玲的眼泪    时间: 2007-6-28 14:11

说不清楚

Private Sub cmdOK_Click()
    Dim mrc As ADODB.Recordset
    Dim strmsg As String
    txtSQL = "select uid from userinfo where UID='" & Trim(txtUserName.Text) & "'"
    Set mrc = ExecuteSQL(txtSQL, strmsg)
    If mrc.EOF = True Then
        MsgBox " 用户名错误!", vbExclamation + vbOKOnly, "警告"
        txtUserName.SetFocus
        txtUserName.SelStart = 0
        txtUserName.SelLength = Len(txtUserName.Text)
        Exit Sub
    End If
    UserName = mrc.Fields(0)
    txtSQL = "select UID from userinfo where PWD='" & Trim(txtPassword.Text) & "'"
    Set mrc = ExecuteSQL(txtSQL, strmsg)
    If mrc.EOF = True Then
        MsgBox " 密码错误!", vbExclamation + vbOKOnly, "警告"
        txtPassword.SetFocus
        txtPassword.SelStart = 0
        txtPassword.SelLength = Len(txtPassword.Text)
        Exit Sub
    End If
    OK = True
    frmMain.Show
    Unload Me
End Sub


提示这个有问题。。
作者: tenshinx    时间: 2007-6-28 14:30

我看了下。可能是这个错。


CREATE TABLE [dbo].[userinfo] (
        [UID] [char] (10) COLLATE Chinese_PRC_CI_AS NOT NULL ,
        [PWD] [char] (10) COLLATE Chinese_PRC_CI_AS NULL ,
        [user_Des] [char] (10) COLLATE Chinese_PRC_CI_AS NULL
) ON [PRIMARY]

你压缩包里的userinfo这个表的建立sql是这个,注意黑体字


Private Sub cmdOK_Click()
    Dim mrc As ADODB.Recordset
    Dim strmsg As String
    txtSQL = "select uid from userinfo where UID='" & Trim(txtUserName.Text) & "'"
    Set mrc = ExecuteSQL(txtSQL, strmsg)
    If mrc.EOF = True Then
        MsgBox " 用户名错误!", vbExclamation + vbOKOnly, "警告"
        txtUserName.SetFocus
        txtUserName.SelStart = 0
        txtUserName.SelLength = Len(txtUserName.Text)
        Exit Sub
    End If
    UserName = mrc.Fields(0)
    txtSQL = "select UID from userinfo where PWD='" & Trim(txtPassword.Text) & "'"
    Set mrc = ExecuteSQL(txtSQL, strmsg)
    If mrc.EOF = True Then
        MsgBox " 密码错误!", vbExclamation + vbOKOnly, "警告"
        txtPassword.SetFocus
        txtPassword.SelStart = 0
        txtPassword.SelLength = Len(txtPassword.Text)
        Exit Sub
    End If
    OK = True
    frmMain.Show
    Unload Me
End Sub




你的cmdok_Click事件下面的sql里是select uid from userinfo  大小写问题。
把txtSQL = "select uid from userinfo where UID='" & Trim(txtUserName.Text) & "'"这句里的uid改成UID(大写)试试

[ 本帖最后由 tenshinx 于 2007-6-28 14:32 编辑 ]
作者: 蜡烛鞭三郎    时间: 2007-6-28 14:33

txtSQL = "select UID "
  txtSQL = txtSQL & " from userinfo "
  txtSQL = txtSQL & "where UID ='" & Trim(txtUserName.Text) & "'"

SQL那段换一下就行了

LZ恶搞... Where语句里用UID  Select后面跟 uid
难道是2个字段?
作者: .lemon.    时间: 2007-6-28 14:39

...

SQL是不区别大小写的..

语法是成立的,但逻辑上有错误- -

找Uid为某某的Uid??



ps.一般有编译器环境做软件,报错,或结果有出入就跟踪一下啊.. 每步每步对照问题出在哪....




[ 本帖最后由 .lemon. 于 2007-6-28 14:44 编辑 ]
作者: 蜡烛鞭三郎    时间: 2007-6-28 14:47

原帖由 .lemon. 于 2007-6-28 14:39 发表
...

SQL是不区别大小写的..

语法是成立的,但逻辑上有错误- -

找Uid为某某的Uid??



ps.一般有编译器环境做软件,报错,或结果有出入就跟踪一下啊.. 每步每步对照问题出在哪....





表字段不区分大小写?
作者: 马小玲的眼泪    时间: 2007-6-28 14:55

原帖由 tenshinx 于 2007-6-28 14:30 发表
我看了下。可能是这个错。

你压缩包里的userinfo这个表的建立sql是这个,注意黑体字




你的cmdok_Click事件下面的sql里是select uid from userinfo  大小写问题。
把txtSQL = "select uid from userinfo where UID='" & Trim(txtUserName.Text) & "'"这句里的uid改成UID(大写)试试

仅仅是把这个改成UID吗?似乎依然有问题。

原帖由 蜡烛鞭三郎 于 2007-6-28 14:33 发表
txtSQL = "select UID "
  txtSQL = txtSQL & " from userinfo "
  txtSQL = txtSQL & "where UID ='" & Trim(txtUserName.Text) & "'"

SQL那段换一下就行了

LZ恶搞... Where语句里用UID  Select后面跟 ...

换什么,哪里换..


------------------

另,根据程序提示,"    If mrc.EOF = True Then" 这里有问题。
作者: .lemon.    时间: 2007-6-28 14:58

原帖由 蜡烛鞭三郎 于 2007-6-28 14:47 发表



表字段不区分大小写?


8区别的..自己开查询分析器试下不就知道了..
作者: .lemon.    时间: 2007-6-28 15:03

我觉得还是逻辑错误,纪录集最常见的报错,要么是空,要么索引器超出范围..



作者: .lemon.    时间: 2007-6-28 15:08

楼主改下select语句,你这个逻辑有问题.纪录集为空,  你EOF不报错才怪..

select count(*) from userinfo where uid=txtUserName的内容

具体代码我就不细说了(其实n久不做vb忘了语法.. - -)

思路是sql返回的是你当前符合txtUserName输入内容的数量..

结果赋给一个变量..

如果是0 则证明没有这条数据


[ 本帖最后由 .lemon. 于 2007-6-28 15:10 编辑 ]
作者: 马小玲的眼泪    时间: 2007-6-28 15:12

哎,就是求代码啊。。

我程序学的乱七八糟,要能自己动手也就不求人了。。- -
作者: tenshinx    时间: 2007-6-28 15:13

别用eof.用recordcount..
作者: .lemon.    时间: 2007-6-28 15:18

Private Sub cmdOK_Click()
    Dim mrc As ADODB.Recordset
    Dim strmsg As String
    txtSQL = "select count(*) from userinfo where UID='" & Trim(txtUserName.Text) & "' and PWD="'" & Trim(txtPassword.Text) & '"
    Set mrc = ExecuteSQL(txtSQL, strmsg)
    Dim return_count
    return_count=mrc.Fields(0)
   if return_count=0 then
      MsgBox " 用户名不存在或密码错误!", vbExclamation + vbOKOnly, "警告"
  end if
    OK = True
    frmMain.Show
    Unload Me
End Sub


试下吧..

根据你写的改的..


[ 本帖最后由 .lemon. 于 2007-6-28 15:43 编辑 ]
作者: .lemon.    时间: 2007-6-28 15:23

不对..

VB声明变量是Dim吧?

= =

常时间不用都忘光了..改了下


[ 本帖最后由 .lemon. 于 2007-6-28 15:25 编辑 ]
作者: 马小玲的眼泪    时间: 2007-6-28 15:25

嗯, 是有问题。。

作者: .lemon.    时间: 2007-6-28 15:30

头晕了..

VB的语法什么我真不大记得路 反正就是


txtSQL = "select count(*) from userinfo where UID='" & Trim(txtUserName.Text) & "' and PWD='" & Trim(txtPassword.Text) & "'"


这段SQL执行的结果,算出同时符合你文本框输入的UserName和Password 的值的数量..

它返回在纪录集里的,就一条纪录:符合结果的数量,如果这个数量=0说明没有这条数据..登陆失败..


你原来PW条件后面还有点问题.. 第一个等号后面不应该用两个双引号. 改了下.


[ 本帖最后由 .lemon. 于 2007-6-28 15:36 编辑 ]
作者: 蜡烛鞭三郎    时间: 2007-6-28 15:32

原帖由 .lemon. 于 2007-6-28 14:58 发表


8区别的..自己开查询分析器试下不就知道了..



字段名和表名怎么会不区分大小写呢.. 又不是SQL命令

你userinfo 这个表里的UID字段是大写的话

Select uid form userinfo 这句在分析器里是报错的..
作者: 马小玲的眼泪    时间: 2007-6-28 15:44

虽然各位尚未解决,但依然感谢各位的热心,暂奉上微薄积分。。

如果哪位朋友机器上恰好装了VB+SQL,能够帮忙调试,那就大好了。。
作者: .lemon.    时间: 2007-6-28 15:47




你真的去试了么?
作者: .lemon.    时间: 2007-6-28 15:53

        Dim mrc As ADODB.Recordset
        Dim strmsg As String
        txtSQL = "select count(*) from userinfo where UID='" & Trim(txtUserName.Text) & "' and PWD='" & Trim(txtPassword.Text) & "'"
        mrc = ExecuteSQL(txtSQL, strmsg)
        Dim return_count
        return_count = mrc.Fields(0)
        If return_count = 0 Or return_count = "0" Then
            MsgBox(" 用户名不存在或密码错误!", vbExclamation + vbOKOnly, "警告")
        End If
        OK = True
        frmMain.Show()
        Unload(Me)



再试下.. 应该没问题的啊..
作者: 马小玲的眼泪    时间: 2007-6-28 15:53

原帖由 .lemon. 于 2007-6-28 15:47 发表



你真的去试了么?

可能试的方法有问题吧,能把具体问题说明白吗。。- -
作者: .lemon.    时间: 2007-6-28 15:56


我22楼是对20楼讲的- -||||

楼上再试下我23楼的代码


[ 本帖最后由 .lemon. 于 2007-6-28 15:58 编辑 ]
作者: 马小玲的眼泪    时间: 2007-6-28 16:02

原帖由 .lemon. 于 2007-6-28 15:56 发表

我22楼是对20楼讲的- -||||

楼上再试下我23楼的代码

编译错误:
属性的使用无效
作者: .lemon.    时间: 2007-6-28 16:03

报在这句上?

If return_count = 0 Or return_count = "0" Then

作者: 蜡烛鞭三郎    时间: 2007-6-28 16:03

原帖由 .lemon. 于 2007-6-28 15:47 发表



你真的去试了么?



恩...






改了语句里的 C_Kno 字段为小写的 C_kno 就报错
SqlServer2000 和 SqlServer2005 都一样
作者: 蜡烛鞭三郎    时间: 2007-6-28 16:05

LZ  那个错我帮你改了

但是完全编译发现错误无数

这东西哪载来的?
作者: .lemon.    时间: 2007-6-28 16:05

原帖由 马小玲的眼泪 于 2007-6-28 15:44 发表
虽然各位尚未解决,但依然感谢各位的热心,暂奉上微薄积分。。

如果哪位朋友机器上恰好装了VB+SQL,能够帮忙调试,那就大好了。。


问题是你好多方法都是封装好的..

比如那ExecuteSQL..

作者: tenshinx    时间: 2007-6-28 16:08

来。关于区分大小写问题,我们补充一个基本知识。
关于区分大小写问题,sqlserver是可以区分的,默认是不区分。

那么怎么样做到可以区分呢?
我们在create table时经常会碰到这样的语句,例如:CityName nvarchar(10)collate chinese_prc_ci_as null,那它到底是什么意思呢?

Windows_collation_name 是 Windows 排序规则的排序规则名称。参见 Windows 排序规则名称。
SQL_collation_name 是 SQL 排序规则的排序规则名称。参见 SQL 排序规则名称。

排序规则名称由两部份构成,前半部份是指本排序规则所支持的字符集。
如:
  Chinese_PRC_CS_AI_WS
前半部份:指UNICODE字符集,Chinese_PRC_指针对大陆简体字UNICODE的排序规则。
排序规则的后半部份即后缀 含义:
  _BIN 二进制排序
  _CI(CS) 是否区分大小写,CI不区分,CS区分
  _AI(AS) 是否区分重音,AI不区分,AS区分   
  _KI(KS) 是否区分假名类型,KI不区分,KS区分 
    _WI(WS) 是否区分宽度 WI不区分,WS区分 


ok.结束,别说的那么绝对,撒sqlserver不区分大小写
作者: 蜡烛鞭三郎    时间: 2007-6-28 16:08

ExecuteSQL没有封装

在MOD模块里

Public Function ExecuteSQL(ByVal SQL _
   As String, MsgString As String) _
   As ADODB.Recordset
'executes SQL and returns Recordset
   Dim cnn As ADODB.Connection
   Dim rst As ADODB.Recordset
   Dim sTokens() As String
   
   On Error GoTo ExecuteSQL_Error
   
   sTokens = Split(SQL)
   Set cnn = New ADODB.Connection
   cnn.Open ConnectString
   If InStr("INSERT,DELETE,UPDATE", _
      UCase$(sTokens(0))) Then
      cnn.Execute SQL
      MsgString = sTokens(0) & _
         " query successful"
   Else
      Set rst = New ADODB.Recordset
      rst.Open Trim$(SQL), cnn, _
         adOpenKeyset, _
         adLockOptimistic
      'rst.MoveLast     'get RecordCount
      Set ExecuteSQL = rst
      MsgString = "イ鰉ッオス" & rst.RecordCount & _
         " フ?ヌツシ "
   End If
ExecuteSQL_Exit:
   Set rst = Nothing
   Set cnn = Nothing
   Exit Function
   
ExecuteSQL_Error:
   MsgString = "イ鰉ッエ﨔・ " & _
      Err.Description
   Resume ExecuteSQL_Exit
End Function


我这里日文VB6  没办法显示出中文..
作者: .lemon.    时间: 2007-6-28 16:10

回28楼..

你在国内市场上买的无论哪一款SQL2000 or 2005. 在默认设置下,是绝对不区别大小写的.

你有这种情况,只能说是特例.. 要么你的环境特别设置过,要么日文版的问题.

作者: .lemon.    时间: 2007-6-28 16:11

原帖由 蜡烛鞭三郎 于 2007-6-28 16:08 发表
ExecuteSQL没有封装

在MOD模块里

Public Function ExecuteSQL(ByVal SQL _
   As String, MsgString As String) _
   As ADODB.Recordset
'executes SQL and returns Recordset
   Dim cnn As ADODB. ...


那就是我记不大得了..

你有vb环境把她改下就好了..

很简单的一个登陆 扯这么多出来..

作者: 蜡烛鞭三郎    时间: 2007-6-28 16:13

原帖由 .lemon. 于 2007-6-28 16:10 发表
回28楼..

你在国内市场上买的无论哪一款SQL2000 or 2005. 在默认设置下,是绝对不区别大小写的.

你有这种情况,只能说是特例.. 要么你的环境特别设置过,要么日文版的问题.




现在不区分大小写的很少了吧

基本都会区分的

不要争论这个问题了

我CTRL+F5 了下LZ的程序

无数变量没定义 甚至好有用到的函数连主体都没的

一个个注释 注释了几十个还是有错

LZ这程序到底哪弄来的

有原代码伐..
作者: .lemon.    时间: 2007-6-28 16:13

原帖由 tenshinx 于 2007-6-28 16:08 发表
来。关于区分大小写问题,我们补充一个基本知识。
关于区分大小写问题,sqlserver是可以区分的,默认是不区分。

那么怎么样做到可以区分呢?
我们在create table时经常会碰到这样的语句,例如:CityName nv ...


有意义么?

有必要单独设置一下,到时候出现兼容问题?

作者: 马小玲的眼泪    时间: 2007-6-28 16:14

程序的是lolicon给的,他说,这程序再某些机器上没有问题,但在某些机器上报错。。

程序出处是某书上附送的,以前他可以用,现在他数据库坏了,无法调试。。。- -

[ 本帖最后由 马小玲的眼泪 于 2007-6-28 16:15 编辑 ]
作者: tenshinx    时间: 2007-6-28 16:16

原帖由 .lemon. 于 2007-6-28 16:10 发表
回28楼..

你在国内市场上买的无论哪一款SQL2000 or 2005. 在默认设置下,是绝对不区别大小写的.

你有这种情况,只能说是特例.. 要么你的环境特别设置过,要么日文版的问题.

看我31楼的贴。。。。别无事我- -
作者: .lemon.    时间: 2007-6-28 16:17

............

原来不是摘过来的..

作者: tenshinx    时间: 2007-6-28 16:21

没必要要这东西干嘛。。。你当ms傻子啊
作者: .lemon.    时间: 2007-6-28 16:22

原帖由 tenshinx 于 2007-6-28 16:16 发表

看我31楼的贴。。。。别无事我- -


不想扯这个问题了..

翻baidu我也会..

SQL在安装的时候是有一个大小敏感的问题..

之前教我软件的那人给过我一个先入为主的概念,即,SQL类VB语言在默认情况下不区别大小写..

作者: 蜡烛鞭三郎    时间: 2007-6-28 16:25

原帖由 .lemon. 于 2007-6-28 16:22 发表


不想扯这个问题了..

翻baidu我也会..

SQL在安装的时候是有一个大小敏感的问题..

之前教我软件的那人给过我一个先入为主的概念,即,SQL类VB语言在默认情况下不区别大小写..



在C# 之前 VB和 VB.NET 都不区分大小写

但是现在已经2007年了....
作者: tenshinx    时间: 2007-6-28 16:30

翻baidu也是学习,有不懂的呢就要学习
作者: .lemon.    时间: 2007-6-28 16:32

.额...

好的,你们赢了..

之前我是把一个几乎没人去关心的问题潜移默化的当做即存事实..

是饿..2007年了,语言都应该来用区别大小证明它是否更高级..

作者: wowshell    时间: 2007-6-28 16:49

你们开辩论会呢?
作者: 马小玲的眼泪    时间: 2007-6-28 16:50

转移话题了。。- -

我可能知道问题了,有朋友说此程序是VB5编写的,我这里编译环境都是VB6,有些语法变了。。
作者: .lemon.    时间: 2007-6-28 16:53

其实一个小程序..几个窗体 自己写嘛..

添删查改.. 又不要分层..很快的啊..

你上面这个代码实在不敢恭维.. 像是刚学几天的人写的..

作者: 蜡烛鞭三郎    时间: 2007-6-28 16:57

原帖由 马小玲的眼泪 于 2007-6-28 16:50 发表
转移话题了。。- -

我可能知道问题了,有朋友说此程序是VB5编写的,我这里编译环境都是VB6,有些语法变了。。





先是因为数据库加了下面这句
   If mrc Is Nothing Then
    Return
   End If
   
再把    'If mrc.EOF = True Then 改成
    If mrc.RecordCount <= 0 Then

但是除了这个事件下的问题外

其他还有好多好多错

怎么改..
作者: 马小玲的眼泪    时间: 2007-6-28 17:01

问题是。。。这程序以前可以用。。- -

晚上回来再调试好了,现在要出去考试。。- -
作者: .lemon.    时间: 2007-6-28 17:02

它本身思路就是错的.

先判断用户名是否存在, 再去判断密码是否存在,  就能证明该用户身份?

实现这个思路的过程还是错的..


可用它也是错的啊..


作者: hyde1111    时间: 2007-6-28 17:23

高手过招 菜鸟一边凉快[m_装酷]
作者: 蜡烛鞭三郎    时间: 2007-6-28 17:26


UserName = mrc.Fields(0)
  txtSQL = "select UID from userinfo where PWD='" & Trim(txtPassword.Text) & "'"
改成
   UserName = mrc.Fields(0)
    txtSQL = "select UID from userinfo where UID='" & UserName & "'"
    txtSQL = txtSQL & " AND PWD='" & Trim(txtPassword.Text) & "'"

好象逻辑就对了
作者: 我爱尤那    时间: 2007-6-28 21:23

原帖由 蜡烛鞭三郎 于 2007-6-28 15:32 发表



字段名和表名怎么会不区分大小写呢.. 又不是SQL命令

你userinfo 这个表里的UID字段是大写的话

Select uid form userinfo 这句在分析器里是报错的..

本来就不区分的,sql全大写看看。照样可以通过编译。又不是orm.
作者: tenshinx    时间: 2007-6-28 21:41

原帖由 我爱尤那 于 2007-6-28 21:23 发表

本来就不区分的,sql全大写看看。照样可以通过编译。又不是orm.

小哥看31楼
作者: 我爱尤那    时间: 2007-6-28 21:47

原帖由 tenshinx 于 2007-6-28 21:41 发表

小哥看31楼

我做了一年开发了。一般sql全是习惯全大写的。还真不知道
作者: 马小玲的眼泪    时间: 2007-6-28 21:57

........

大小写争论暂停下,本帖主题是搞定这么一个VB数据库。。

另,手头上还有一套VB数据库代码,可用,但是功能太全面太强大,需要删减。我一动就出错,寻人帮忙。。- -

代码和要求如下,顶楼也有链接。。两套代码任意完成一套即可结贴。
http://vip.pastein.net/keith/help/vbaccess.rar
作者: 爱上一条街    时间: 2007-6-28 22:04

你们在说什么?
作者: 豆腐    时间: 2007-6-28 23:24

我想说的是。。。lz,你后面那个代码包下下来了,里面有个数据库课程设计.doc
要是是按照这个做的话,这两套程序都不符合要求..
作者: 蜡烛鞭三郎    时间: 2007-6-29 00:06

豆腐
小处男的车队打H撞光了..
作者: 蜡烛鞭三郎    时间: 2007-6-29 00:07

明天你看着办吧
我们车队一起去..
非把他砸平




欢迎光临 浆糊论坛-RO小站 (http://bbs.rohome.cn/) Powered by Discuz! 7.2