简单的问题,来拿分

jlqidan 2002-06-03 05:29:14
rs1 = "insert into agentest values("& fields(1) &","& fields(2)
&"," & fields(3) & "," & fields(4) & ")" //不是分行的错误;
rc = SQLExecDirect(hstmt, rs1, Len(rs1))

数组fields的值均正确,但rc的值为-1
...全文
40 21 打赏 收藏 转发到动态 举报
写回复
用AI写文章
21 条回复
切换为时间正序
请发表友善的回复…
发表回复
jlqidan 2002-06-05
  • 打赏
  • 举报
回复
字段类型都是varchar2的,但第一和第四个字段是数字,中间的两个是字符
但即使这样也不能插入,我试过了(别的都没改动),在sql*plus历史正确的。
rs = "insert into agentest values(2004,'me','普通作息',124)"
rc = SQLExecDirect(hstmt, rs, Len(rs))

to:楼上
foxpro和foxbase有多大区别?你说的那个方法也可以用来访问foxbase吗?
chinasqf 2002-06-05
  • 打赏
  • 举报
回复
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)
ql_mf 2002-06-05
  • 打赏
  • 举报
回复
你说了半天我也没看到你的数据库表中的字段都是什么类型的。
在字符串变量两边一定要加'号,在数字两边一定不要加'号,
并不是要么全加'号,要么不加'号。
jlqidan 2002-06-05
  • 打赏
  • 举报
回复
忘了问,oracle在哪写存储结构?
jlqidan 2002-06-05
  • 打赏
  • 举报
回复
to:wzsswz(岌岌荆棘)
1。ado能访问foxbase数据库吗?如果不能,是不是只能用odbc api方式对其操作?
2。我是要实现这样的功能,把foxbase中的数据转到oracle中的相应同名表中。
3。Function exec_procedure这个函数没看懂,惭愧!!!
wzsswz 2002-06-05
  • 打赏
  • 举报
回复
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









jlqidan 2002-06-04
  • 打赏
  • 举报
回复
ado能访问foxbase数据库吗?就相对oracle数据库那样操作?
jlqidan 2002-06-04
  • 打赏
  • 举报
回复
就没人会吗?急死我了
jlqidan 2002-06-04
  • 打赏
  • 举报
回复
没有,数据库里没有插入成功
wzsswz 2002-06-04
  • 打赏
  • 举报
回复
不好意思,搞错了
wzsswz 2002-06-04
  • 打赏
  • 举报
回复
先检查一下,agentest 表中是否已INSERT进去,如记录已被INSERT进来,执行结果应该返回-1(insert into本来就无记录集返回)
jlqidan 2002-06-04
  • 打赏
  • 举报
回复
楼上说的是什么呀?

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 String

dsn = "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 If

rc = 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 If

End Sub
litong33_61 2002-06-04
  • 打赏
  • 举报
回复

显示在敞口的一个图形匡里显示个菱形
jlqidan 2002-06-03
  • 打赏
  • 举报
回复
大家看清是用odbc api呀。不是ado.
jlqidan 2002-06-03
  • 打赏
  • 举报
回复
大家看清是用odbc api呀。不是ado.
rbird 2002-06-03
  • 打赏
  • 举报
回复
哦,是插入操作,顺便要把 adlockreadonly去掉
rbird 2002-06-03
  • 打赏
  • 举报
回复
'根据楼上加入字符串单引号试试
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

lingfeng_314 2002-06-03
  • 打赏
  • 举报
回复
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
KAIBate 2002-06-03
  • 打赏
  • 举报
回复
UP :)
jlqidan 2002-06-03
  • 打赏
  • 举报
回复
这样居然也不行
rs1 = "insert into agentest(agent_id,agent_name,agent_type,agent_pass) values(2002,’me‘,‘标准作息’,123)"
rc = SQLExecDirect(hstmt, rs1, Len(rs1))
加载更多回复(1)

7,762

社区成员

发帖
与我相关
我的任务
社区描述
VB 基础类
社区管理员
  • VB基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧