大家好,我现用的是VB+SQL数据库,遇到一些问题,大家能否帮我看一下,多谢啦.修改MSFlexGrid1单元格内容,用下面语句老提示=号附近有语法错误,但我用access数据库时是没有问题的。
-----------------------------------------------
Private Sub Text2_KeyPress(KeyAscii As Integer)
Dim conn As New ADODB.Connection
conn.ConnectionString = "Provider=sqloledb;Data Source=OFFICE;Initial Catalog=h;User Id=sa;Password=123;"
    '  ESC取消输入
    If KeyAscii = vbKeyEscape Then
        Text2.Visible = False
        MSFlexGrid1.SetFocus
        Exit Sub
    End If
    '  回车确定输入
    If KeyAscii = vbKeyReturn Then
        conn.Open
        MSFlexGrid1.Text = Text2.Text
        strSql = "update lzliu set " & MSFlexGrid1.TextMatrix(0, MSFlexGrid1.Col) & " ='" & MSFlexGrid1.TextMatrix(MSFlexGrid1.Row, MSFlexGrid1.Col) & "'"
 strSql = strSql & " where id=" & MSFlexGrid1.TextMatrix(MSFlexGrid1.Row, MSFlexGrid1.Cols - 1)
 conn.Execute strSql
 conn.Close
        Text2.Visible = False
        MSFlexGrid1.SetFocus
    End If
End Sub
另删除单元格内容用下面代码也是提示错误,提示 * 号附近有错误.但我用access数据库时都没有问题呀...有那位朋友有空能否帮我看一下,多谢啦.Private Sub Command2_Click()
Dim conn As New ADODB.Connection
conn.ConnectionString = "Provider=sqloledb;Data Source=OFFICE;Initial Catalog=h;User Id=sa;Password=123;"
conn.Open
i = MsgBox("所选记录将被删除!!确认要删除吗?", vbOKCancel, "警告")
If i = vbOK Then
MSFlexGrid1.Text = Text2.Text
strSql = "delete * from lzliu "
strSql = strSql & " where id=" & MSFlexGrid1.TextMatrix(MSFlexGrid1.Row, MSFlexGrid1.Cols - 1)
conn.Execute strSql
conn.Close
MSFlexGrid1.Refresh
Text2.Visible = False
MSFlexGrid1.SetFocus
End If
End Sub

解决方案 »

  1.   

    第一个错误是哪句?
    第二个  strSql = "delete from lzliu "   '*去掉即可
      

  2.   

    第一个错误提示是:
    实时错误'-214721790(80040e14)'
    第1行 '-'号附近有语法错误第二个,我把*去掉了,又提示下面的错误,与第一个一模一样.
    实时错误'-214721790(80040e14)'
    第1行 '-'号附近有语法错误我表里的id类型是:int 自动递增,跟这个有没有关系?多谢.
      

  3.   

    执行后,指针移到:
     conn.Execute strSql
    这一句
      

  4.   

    1,conn可以先连接好,不用在每次KeyPress时连接一下
    2,在conn.execute前加一句:msgbox strsql ,看看SQL语句
      

  5.   

    这个是实现在MSFlexGrid控件上修改任意单元格的内容,要修改的内容具体是什么类型,我们不知道呀,这些代码在用access数据库时是能正确运行的,为什么换成SQL数据库就不行了呢?
      

  6.   

    conn.Execute strSql 
    F9,
    debug strsql
      

  7.   

    我加上 msgbox strsql 时,在修改列名为:23a 的内容时,弹出的框提示内容为:
    update lzliu set 23a='3' where id=后面id= 什么看不见了
      

  8.   


    在conn.Execute strSql做断点调试时,是这样的
    strsql="update lzliu set 23a='3' where id="
      

  9.   

    你的MSFlexGrid1.TextMatrix(MSFlexGrid1.Row, MSFlexGrid1.Cols - 1) 
    是空的。
      

  10.   

    MSFlexGrid1.TextMatrix(MSFlexGrid1.Row, MSFlexGrid1.Cols - 1)=""
    看看要更新时是否 MSFlexGrid1.Row > 0 
      

  11.   

    在列名两边加方括号,使得 SQL 成为下面的形式
    update lzliu set [23a]='3' where id=123
      

  12.   

    MSFlexGrid1.Text = Text2.Text '没有指明哪个单元
            strSql = "update lzliu set " & MSFlexGrid1.TextMatrix(0, MSFlexGrid1.Col) & " ='" & MSFlexGrid1.TextMatrix(MSFlexGrid1.Row, MSFlexGrid1.Col)//这一句MSFlexGrid1.TextMatrix(MSFlexGrid1.Row, MSFlexGrid1.Col)实际上为空。MSFlexGrid1.SetFocus '没有绑定数据库中的记录集。Private Sub MSHFlexGrid1_RowColChange()end sub
     '应定义数据表格1当前活动单元改变时发生的事件.
      

  13.   

    strSql = strSql & " where id=" & MSFlexGrid1.TextMatrix(MSFlexGrid1.Row, MSFlexGrid1.Cols - 1)改为strSql = strSql & " where id=" & chr(39) & MSFlexGrid1.TextMatrix(MSFlexGrid1.Row, MSFlexGrid1.Cols - 1) & chr(39)其它类似的都一样要加 chr(39)
      

  14.   


    加了chr(39)后,没有报错了。但数据没有被更改。
      

  15.   

    '收集到的代码,直接在网格上进行,然后自己再进行相应的数据更新等系列操作
    Private Sub mshgrid_KeyPress(KeyAscii As Integer)
        If mshgrid.Col = 4 Or mshgrid.Col = 5 Then  '将修改列固定在第4\5列上,自己按需要设定
          Select Case KeyAscii
            Case 30 To 136
                mshgrid.Text = mshgrid.Text & Chr(KeyAscii)
            Case 8
                If mshgrid.Text <> "" Then mshgrid.Text = Mid(mshgrid.Text, 1, Len(mshgrid.Text) - 1)
            End Select
        End If
    End Sub
      

  16.   


    MSFlexGrid1.TextMatrix(MSFlexGrid1.Row, MSFlexGrid1.Cols - 1) 是空的,没有满足条件的数据。
      

  17.   

    “MSFlexGrid1.Cols - 1”是不是该“MSFlexGrid1.Col - 1”啊?
      

  18.   

    还是先到出错地方,将strSql的内容贴出来吧,这类问题肯定不是VB语法的错误,而是SQL串结构错了,而且是取值方面错了。例如第一个例子中:
    where id=" & MSFlexGrid1.TextMatrix(MSFlexGrid1.Row, MSFlexGrid1.Cols - 1)
    你就确定id一定对应msflexgrid1的最后一列?