您的位置:程序门 -> vb -> 基础类



高手,指点一下啊!在线等!至少一个参数未被指定值!!!!!


[收藏此页] [打印本页]选择字色:背景色:字体:[][][]


高手,指点一下啊!在线等!至少一个参数未被指定值!!!!!
发表于:2007-01-10 22:14:37 楼主
程序如下:
private   sub   cmd_absent_click()
dim   sql   as   string
if   txtno   =   " "   then
msgbox   "请选择学号! ",   vbexclamation,   "提示 "
    else
    set   myrs   =   new   adodb.recordset
sql   =   "update   考勤表   set   旷课人数=旷课人数+1     where   学号= ' "   +   trim(txtno.text)   +   " '   and   班级名称= ' "   +   trim(combo1.text)   +   " 'and   课程名称= ' "   +   trim_(datacombo1.boundtext)   +   " ' "

    myrs.open   sql,   conn,   adopenkeyset,   adlockoptimistic--------运行到这里就说至少一个参数未被指定值

    if   myrs.eof   then
        myrs.addnew
          end   if
    with   myrs
          myrs.fields(0)   =   txtno.text
          myrs.fields(1)   =   combo1.text
          myrs.fields(2)   =   datacombo1.boundtext
    set   datagrid1.datasource   =   myrs
    myrs.update
    end   with
      myrs.close
  end   if
  end   sub


就是有一张表,里面有一个缺勤人数的字段,然后在vb里我想用一个缺勤的按钮实现,当用户点击的时候,缺勤人数这个字段就会累加1,当然,在vb里其他选择了的字段也要进入数据库,然后一同显示在vb的datagrid里   缺勤人数只在datagrid里有显示.数据库是用access的
可是在datagrid里是没有任何数据显示,为什么呢?帮帮忙啊大虾们,在线等.
发表于:2007-01-10 22:28:321楼 得分:0
private   sub   cmd_absent_click()
dim   sql   as   string
if   txtno   =   " "   then
msgbox   "请选择学号! ",   vbexclamation,   "提示 "
    else
    set   myrs   =   new   adodb.recordset
sql   =   "update   考勤表   set   旷课人数=旷课人数+1     where   学号= ' "   +   trim(txtno.text)   +   " '   and   班级名称= ' "   +   trim(combo1.text)   +   " 'and   课程名称= ' "   +   trim_(datacombo1.boundtext)   +   " ' "

    conn.EXECute   sql   '用这个

    if   myrs.eof   then
        myrs.addnew
          end   if
    with   myrs
          myrs.fields(0)   =   txtno.text
          myrs.fields(1)   =   combo1.text
          myrs.fields(2)   =   datacombo1.boundtext
    set   datagrid1.datasource   =   myrs
    myrs.update
    end   with
      myrs.close
  end   if
  end   sub

发表于:2007-01-10 22:29:132楼 得分:0
检查方法
1.你到access里面建立一个query看看得你的sql是不是正确的
2.你的conn一切正确?
发表于:2007-01-10 22:32:363楼 得分:0
用了,可是还是不行啊!还有其他建议吗?
发表于:2007-01-10 23:10:054楼 得分:0
现在有出现了新错误说:对象关闭时,不允许操作!
private   sub   cmd_absent_click()
dim   sql   as   string
if   txtno   =   " "   then
msgbox   "请选择学号! ",   vbexclamation,   "提示 "
    else
    set   myrs   =   new   adodb.recordset
sql   =   "update   考勤表   set   旷课人数=旷课人数+1     where   学号= ' "   +   trim(txtno.text)   +   " '   and   班级名称= ' "   +   trim(combo1.text)   +   " 'and   课程名称= ' "   +   trim_(datacombo1.boundtext)   +   " ' "

    myrs.open   sql,   conn,   adopenkeyset,   adlockoptimistic
    if   myrs.eof   then--------------------对象关闭时,不允许操作!
        myrs.addnew
          end   if
    with   myrs
          myrs.fields(0)   =   txtno.text
          myrs.fields(1)   =   combo1.text
          myrs.fields(2)   =   datacombo1.boundtext
    set   datagrid1.datasource   =   myrs
    myrs.update
    end   with
      myrs.close
  end   if
  end   sub
发表于:2007-01-11 10:14:275楼 得分:0
用adodb.recordset   对象打开的update语句,执行成功后自动关闭了,你还要对一个已经关闭的数据集进行数据库游标操作就出现了   对象关闭时,不允许操作!
发表于:2007-01-11 13:31:586楼 得分:0
请问具体要怎样实现呢?可以帮忙写出来吗?
发表于:2007-01-11 16:43:347楼 得分:0
把这句话去掉看看
    if   myrs.eof   then

    end   if

直接
myrs.addnew
发表于:2007-01-11 17:31:288楼 得分:0
那也就是说,你在eof执行前要重新打开数据库就行了~~~
添加一条打开数据库的语句就可以。
你的语句不用改动。

在末尾记得执行完毕关闭数据库即可。
发表于:2007-01-11 20:09:319楼 得分:0
授人于渔,而不要授人于鱼。
发表于:2007-01-11 20:26:0310楼 得分:0
数据库在模块那里就打开了,再打开不会重复了吗?
发表于:2007-01-11 20:42:0211楼 得分:0
执行了前面的已经被关闭了~
发表于:2007-01-11 20:51:4812楼 得分:0
修改了一些代码,可是还是不行,代码:
private   sub   cmd_absent_click()
dim   sql   as   string
if   txtno   =   " "   then
        msgbox   "请选择学号! ",   vbexclamation,   "提示 "
    else
        set   myrs   =   new   adodb.recordset
        set   myrs2   =   new   adodb.recordset
        sql   =   "select   *   from   考勤表     where   学号= ' "   +   trim(txtno.text)   +   " '   and   班级名称= ' "   +   trim(combo1.text)   +   " 'and   课程名称= ' "   +   trim(datacombo1.boundtext)   +   " ' "
        myrs.open   sql,   conn,   adopenkeyset,   adlockoptimistic
        if   not   myrs.eof   then
              sql   =   "update   考勤表   set   旷课次数=旷课次数+1     where   学号= ' "   +   trim(txtno.text)   +   " '   and   班级名称= ' "   +   trim(combo1.text)   +   " 'and   课程名称= ' "   +   trim(datacombo1.boundtext)   +   " ' "
              myrs2.open   sql,   conn,   adopenkeyset,   adlockoptimistic
              with   myrs
                  .fields( "旷课次数 ")   =   .fields( "旷课次数 ")   +   1
                  .update
              end   with
      end   if
    set   datagrid1.datasource   =   myrs
    myrs.close
  end   if
  end   sub
没报错,也没东西显示出来啊,进不了数据库,这是为什么呢
发表于:2007-01-11 23:03:3713楼 得分:0
第1.做update,delete操作时不用(最好禁止)recordset操作,而是用connection
第2.可能datagrid1需要再refresh一下(或者rebind),这个我有些忘了,不知道是不是这个原因

你试试这个看行不行

private   sub   cmd_absent_click()
dim   sql   as   string
dim   drs   as   new   adodb.recordset

if   txtno   =   " "   then
        msgbox   "请选择学号! ",   vbexclamation,   "提示 "
        exit   sub
endif

              sql   =   "update   考勤表   set   旷课次数=旷课次数+1     where   学号= ' "   +   trim(txtno.text)   +   " '   and   班级名称= ' "   +   trim(combo1.text)   +   " 'and   课程名称= ' "   +   trim(datacombo1.boundtext)   +   " ' "
              conn.EXECute   sql
        sql   =   "select   *   from   考勤表     where   学号= ' "   +   trim(txtno.text)   +   " '   and   班级名称= ' "   +   trim(combo1.text)   +   " 'and   课程名称= ' "   +   trim(datacombo1.boundtext)   +   " ' "
        drs.open   sql,   conn
    set   datagrid1.datasource   =   drs
    'set   datagrid1.refresh   '如果不行,再试试   'set   datagrid1.rebind   '也可能还不行,呵呵
  '不要关闭数据集
  end   sub
发表于:2007-01-12 09:33:2714楼 得分:0
数据库连接可能有点不当
发表于:2007-01-12 11:12:0215楼 得分:0
update   不可能有记录集返回的,要用   EXECute   执行

dim   lrows   as   long
...
cnn.EXECute   sql,   lrows
if   lrows   =   0   then
    '更新记录数为   0,执行   新增
    sql   =   "insert   ... "
    cnn.EXECute   sql
end   if

sql   =   "select   ... "
datagrid1.datasource   cnn.EXECute(sql)


快速检索

最新资讯
热门点击