这样也不行
rs1 = "insert into agentest values('"& fields(1) &"','"& fields(2)&"','" & fields(3) & "','" & fields(4) & "')"

解决方案 »

  1.   

    这样居然也不行
    rs1 = "insert into agentest(agent_id,agent_name,agent_type,agent_pass) values(2002,’me‘,‘标准作息’,123)"
    rc = SQLExecDirect(hstmt, rs1, Len(rs1))
      

  2.   

    dim StrSql as string
    Dim CnnSql As New ADODB.Connection            'ADO数据库连接
    Dim PRs As New ADODB.Recordset              'ADO数据集StrSql = "insert into agentest values("& fields(1) &","& fields2)&"," & fields(3) & "," & fields(4) & ")"     
    PRs.Open StrSql, CnnSql, adOpenKeyset, adLockReadOnly
      

  3.   

    '根据楼上加入字符串单引号试试
    dim StrSql as string
    Dim CnnSql As New ADODB.Connection            'ADO数据库连接
    Dim PRs As New ADODB.Recordset              'ADO数据集StrSql = "insert into agentest values('"& fields(1) &"','"& fields2)&"','" & fields(3) & "','" & fields(4) & "')"     
    PRs.Open StrSql, CnnSql, adOpenKeyset, adLockReadOnly
      

  4.   

    哦,是插入操作,顺便要把 adlockreadonly去掉
      

  5.   

    大家看清是用odbc api呀。不是ado.
      

  6.   

    大家看清是用odbc api呀。不是ado.
      

  7.   

    ado能访问foxbase数据库吗?就相对oracle数据库那样操作?
      

  8.   

    楼上说的是什么呀?vb  odbc api oracle
    就这么短的程序,已经两天了,还没解决Private Sub Form_Load()
    Dim henv As Long
    Dim hdbc As Long
    Dim hstmt As Long
    Dim rc As Integer
    Dim dsn As String
    Dim pwd As String
    Dim uid As String
    Dim rs As Stringdsn = "SDKH"
    pwd = "123"
    uid = "SDKH"
    rc = SQLAllocEnv(henv)
    rc = SQLAllocConnect(henv, hdbc)
    rc = SQLConnect(hdbc, dsn, Len(dsn), uid, Len(uid), pwd, Len(pwd))
    If rc <> SQL_SUCCESS Then
    MsgBox "connect failed"
    Exit Sub
    End Ifrc = SQLAllocStmt(hdbc, hstmt)
    rs = "insert into agentest values(2004,'me','普通作息',124)"
    rc = SQLExecDirect(hstmt, rs, Len(rs))       //rc=-1
    If rc = SQL_SUCCESS Then
    MsgBox "insert success"
    Else
    MsgBox Err.LastDllError     //output  0
    MsgBox "insert failed"
    End IfEnd Sub
      

  9.   

    先检查一下,agentest 表中是否已INSERT进去,如记录已被INSERT进来,执行结果应该返回-1(insert into本来就无记录集返回)
      

  10.   

    Public Function exec_procedure(sql As String, Optional i As Integer = 0) As String
        exec_procedure = ""
        If sql = "" Then Exit Function
        Dim cnn1 As ADODB.Connection
        Dim rst1 As ADODB.Recordset
        Set cnn1 = New ADODB.Connection
        Call cnn1.Open(connectstr())
        Set rst1 = New ADODB.Recordset
        rst1.ActiveConnection = cnn1
        On Error GoTo errorhandle
        Call rst1.Open(sql, cnn1, adOpenKeyset, adLockReadOnly)
        If i <> 555 And i <> 999 Then
            If rst1.RecordCount = -1 Then exec_procedure = CStr(rst1.Fields(i).value)
            If rst1.RecordCount = 1 Then exec_procedure = CStr(rst1.Fields(i).value)
        End If
            If i = 999 Then
                ReDim arrary_rpt(rst1.Fields.Count) As String
                If (rst1.RecordCount = 1 Or rst1.RecordCount = -1) And rst1.Fields.Count >= 1 Then
                    Dim k As Integer
                    For k = 0 To rst1.Fields.Count - 1
                       arrary_rpt(k) = rst1.Fields(k).value
                    Next
                Else
                    For k = 0 To rst1.Fields.Count - 1
                       arrary_rpt(k) = ""
                    Next
                End If
            End If
        Set rst1 = Nothing
        cnn1.Close
        Set cnn1 = Nothing
        Exit Function
    errorhandle:
        Err.Clear
        Set rst1 = Nothing
        Set cnn1 = Nothing
        Exit Function
    End Function    Sql = "insert into agentest(f1,f2,f3,f4) values('"& fields(1) &"','"& fields2)&"','" & fields(3) & "','" & fields(4) & "')"    
       call exec_procedure(Sql,555)。
      或者在数据库中建procedure如:
    create procedure insert_ag 
       @f1 varchar(50),   --类型依实况而定,现仅作假释。
       @f2 varchar(50),
       @f3 float,
       @f4 money
    as 
      declare @errormsg as varchar(300)
      insert into agentest(f1,f2,f3,f4) values(@f1,@f2,@f3,@f4)
      IF (@@ERROR <> 0)
        SET @errormsg = @@ERROR
      else
        SET @errormsg = 'ok'   select errormsg = @errormsg代码执行:
       dim errmsg as string
       errmsg = exec_procedure("exec insert_ag  '"+f1+"','"+f2+"',"+f3+","+f4+"",0)
        msgbox errmsg
     
      

  11.   

    to:wzsswz(岌岌荆棘)
    1。ado能访问foxbase数据库吗?如果不能,是不是只能用odbc api方式对其操作?
    2。我是要实现这样的功能,把foxbase中的数据转到oracle中的相应同名表中。
    3。Function exec_procedure这个函数没看懂,惭愧!!!
      

  12.   

    忘了问,oracle在哪写存储结构?
      

  13.   

    ado当然能访问数据库:
    方式:
    FoxStr = "Provider=MSDASQL.1;Driver=Microsoft Visual Foxpro Driver;SourceType=DBF;DBQ=" & App.Path
    Cn.Open FoxStr
    访问自由表时跟访问ACCESS一样:"select * from tablename1 where ...."
    不是自由表时:“select * from databasename1..tablename1 where ...."
    你的插入语句:
    StrSql = "insert into agentest values("& fields(1) &","& fields2)&"," & fields(3) & "," & fields(4) & ")"     
    cn.execute(StrSql)
      

  14.   

    字段类型都是varchar2的,但第一和第四个字段是数字,中间的两个是字符
    但即使这样也不能插入,我试过了(别的都没改动),在sql*plus历史正确的。
    rs = "insert into agentest values(2004,'me','普通作息',124)"
    rc = SQLExecDirect(hstmt, rs, Len(rs))       to:楼上
    foxpro和foxbase有多大区别?你说的那个方法也可以用来访问foxbase吗?