问题一: 一个Datagrid控件通过ADODC连接数据库,怎么让一个textbox 显示自己想显示的那一行呢,datagrid 它老是默认显示第一行,这样的话,我修改了某一行的内容后代码中有refresh,textbox又是默认显示第一行,我想让它显示修改那行~~问题二:
其中stukc是个combobox控件,我想实现的功能是控件stukc中选项变化,stucj.text和stuxf.text 都跟着改变,但是运行后显示实时错误3709,连接无法用于执行此操作,在此上下文中它可能已被关闭或无效~~
这个窗体里代码就是这些了,不会是牵扯到别的窗体了吧?
Private sqlcon As New ADODB.Connection
Private sqlres As New ADODB.Recordset
Private sqlcmd As New ADODB.Command'移动显示信息
Private Sub stuado_MoveComplete(ByVal adReason As ADODB.EventReasonEnum, ByVal pError As ADODB.Error, adStatus As ADODB.EventStatusEnum, ByVal pRecordset As ADODB.Recordset)
If Not pRecordset.EOF And Not pRecordset.BOF Then
  stuxh.Text = pRecordset("学号")
  stuxm.Text = pRecordset("姓名")
  stukc.Text = pRecordset("课程名")
  stucj.Text = pRecordset("成绩")
  stuxf.Text = pRecordset("学分")
End If
End Sub
Private Sub Form_Load()
sqlcon.Provider = "SQLOLEDB"
sqlcon.Open "server=WJG;database=学籍管理;UID=sa;PWD=;"
End SubPrivate Sub chaxun_Click()
Dim xhstring As String
xhstring = InputBox("请输入要查询的学生学号:", 输入框, , 3500, 3500)
stuado.RecordSource = "select * from XSKC where 学号 like '%" + xhstring + "%'"
stuado.Refresh
End Sub
Private Sub gengxin_Click()
If Not stuado.Recordset.EOF Then
   If IsNumeric(stucj.Text) = False Then
    MsgBox "学生成绩格式应为数字型!", vbOKOnly + vbExclamation, "警告"
    Exit Sub
   ElseIf IsNumeric(stuxf.Text) = False Then
    MsgBox "学生学分格式应为数字型!", vbOKOnly + vbExclamation, "警告"
    Exit Sub
  End If
   stuado.Recordset("成绩") = stucj.Text
   stuado.Recordset("学分") = stuxf.Text
End If
stuado.Recordset.Update
stuado.RecordSource = "select * from XSKC"
stuado.Refresh
End Sub
Private Sub stukc_Change()
 Dim sqlstr As String
sqlstr = "select * from XSKC where XSKC.学号=" + stuxh.Text + "and XSKC.课程名=" + stukc.Text
sqlres.Open sqlstr, sqlcon, adOpenDynamic, adLockPessimistic
If Not sqlres.EOF Then
   stucj.Text = sqlres("成绩")
   stuxf.Text = sqlres("学号")
End If
End Sub其中stukc是个combobox控件,我想实现的功能是控件stukc中选项变化,stucj.text和stuxf.text 都跟着改变,但是运行后显示实时错误3709,连接无法用于执行此操作,在此上下文中它可能已被关闭或无效~~
这个窗体里代码就是这些了,不会是牵扯到别的窗体了吧?大哥们帮帮小弟吧,小弟感激不禁。过几天就要交作业了,我的系统做的还很垃圾,很崩溃呀~~

解决方案 »

  1.   

    (1)textbox可以自己bind的,不用借助grid
    (2)使用ado访问数据库在msdn里面有标准的做法,和源代码,你可以参考下,你这个代码问题太多了。
      

  2.   

    stuado.RecordSource = "select * from XSKC where 学号 like '%" + xhstring + "%'" 这是啥?你这代码完全是东拼西凑出来的吧,基本不能用。你去弄个完整的小工程,在其基础上改吧……
      

  3.   

    我想lz的stuado就是adodc控件.
    修改行要设记录标签,保存后刷新时定位到标签即可,资料很多,想学习的话就去查一下,实在解决不了再找我
      

  4.   

    这个完全是我自己做的,代码前边大部分都能用的,就是最后stukc_change()  出问题
      

  5.   

    嗯,这位大哥说的不错,只是那个记录标签我只听说过,不知道该怎么查起,你给我说个关键字之类的,我好百度一下~~
    还有,你能帮我看一下,我在通用里  Private sqlres As New ADODB.Recordset,在最后stuck_change里 
    Dim sqlstr As String 
    sqlstr = "select * from XSKC where XSKC.学号=" + stuxh.Text + "and XSKC.课程名=" + stukc.Text 
    sqlres.Open sqlstr, sqlcon, adOpenDynamic, adLockPessimistic 
    这样语法没有错误吧?
      

  6.   

    想grid刷新后指定行,只要用.move i-1就能实现了。
      

  7.   

    恩,这个是我在网上查的内容,试一试,看行不行~~
    BookMark: 设置/返回当前记录指针的书签,为字符串。如:
    在当前记录处设置书签:lxn=Adodc1.Recordset.BookMark
    当指针移动后回到指定书签位置:Adodc1.Recordset.BookMark=lxn.
      

  8.   

    个人建议 将窗体加载时候打开连接的代码和你数据空间变化过程代码写在一起,
    sqlcon.Provider = "SQLOLEDB" 
    sqlcon.Open "server=WJG;database=学籍管理;UID=sa;PWD=;" 
    Dim sqlstr As String 
    sqlstr = "select * from XSKC where XSKC.学号=" + stuxh.Text + "and XSKC.课程名=" + stukc.Text 
    sqlres.Open sqlstr, sqlcon, adOpenDynamic, adLockPessimistic 
    If Not sqlres.EOF Then 
      stucj.Text = sqlres("成绩") 
      stuxf.Text = sqlres("学号") 
    End If 
    ,加上连接关闭这句代码试试
    sqlcon.close
      

  9.   

    只要你的问题2解决了 问题1就跟着解决了
    问题2中不是有修改的where子句吗 你要想让一个文本框显示你修改的记录,在执行修改操作后写个查询过程以修改where子句作为查询条件 获取对应字段给文本框就行了嘛。