改成这样:你测试一下,我是随手写的 Dim conn As New adodb.ConnectionDim s1 As String Dim s As String Dim c As adodb.Recordset s1 = "select * from [20021106] where A=123" Set c = conn.Execute(s1) If c.Fields(0) > 0 Then MsgBox "已完成" Else s = "insert into [20021106](a,b,c) values('" & A变量 & "'," & B变量 & "," & C变量 & ")" conn.Execute s End If //仔细看一下,答案在下面 Execute 方法 (ADO Connection) 执行指定的查询、SQL 语句、存储过程或特定提供者的文本等内容。语法对于非按行返回的命令字符串:connection.Execute CommandText, RecordsAffected, Options 对于按行返回的命令字符串:Set recordset = connection.Execute (CommandText, RecordsAffected, Options)返回值返回 Recordset 对象引用。参数CommandText 字符串,包含要执行的 SQL 语句、表名、存储过程或特定提供者的文本。RecordsAffected 可选,长整型变量,提供者向其返回操作所影响的记录数目。Options 可选,长整型值,指示提供者应如何计算 CommandText 参数,可为下列值:常量 说明 AdCmdText 指示提供者应按命令的文本定义计算 CommandText。 AdCmdTable 指示 ADO 应生成 SQL 查询以便从 CommandText 命名的表中返回所有行。 AdCmdTableDirect 指示提供者应从 CommandText 命名的表中返回所有行。 AdCmdTable 指示提供者应按表名计算 CommandText。 AdCmdStoredProc 指示提供者应按存储过程计算 CommandText。 AdCmdUnknown 指示 CommandText 参数中的命令类型未知。 adAsyncExecute 指示命令应该异步执行。 adAsyncFetch 指示对在 CacheSize 属性指定的初始数量之后的剩余行使用异步提取。 本列表中前 4 个常量的详细说明请参见 CommandType 属性。说明使用 Connection 对象的 Execute 方法,可执行任何在指定连接的 CommandText 参数中传送给方法的查询。如果 CommandText 参数指定按行返回的查询,执行产生的任何结果将存储在新的 Recordset 对象中。如果命令不是按行返回的查询,则提供者返回关闭的 Recordset 对象。返回的 Recordset 对象始终为只读、仅向前的游标。如需要具有更多功能的 Recordset 对象,应首先创建具有所需属性设置的 Recordset 对象,然后使用 Recordset 对象的 Open 方法执行查询并返回所需游标类型。CommandText 参数的内容对提供者是特定的,并可以是标准的 SQL 语法或提供者支持的任何特殊命令格式。该操作完成后将产生 ExecuteComplete 事件。
或者这样 Set c = conn.Execute(s1,,AdCmdText)
Syntax: For a row-returning Command: Set recordset = command.Execute(RecordsAffected, Parameters, Options) For a non–row-returning Command: command.Execute RecordsAffected, Parameters, Options意思是没有返回值的时候不要加括号,所以: conn.Execute(S1,C,adcmdexe)应改为 conn.Execute S1, C, adcmdexe 另外adcmdexe是什么,好象没有这个参数,是不是应该是这样的: conn.Execute S1, C, adCmdText
老兄,我在你的贴出的源代码上修改过了,你要回答的人给出连接字符串,我看没有这个必要吧?!你的代码都写到这儿了,不行连连接字符串都没有写好吧?? :)S1="select * from [20021106] where A=123" conn.Execute S1,C,AdCmdText if C>0 then msgbox "已完成" else S="insert into [20021106](a,b,c) values('" & A变量 & "'," & B变量 & "," & C变量 & ")" conn.execute S end if
a,b,c三个字段的类型是什么啊,估且都当作是字符型吧! 还有你的数据库是什么类型啊?先当作是SQL吧! Dim strSql As String Dim cnn1 As ADODB.Connection Dim rst As ADODB.Recordset Dim strCnn As String ' 打开连接。 strCnn = "Provider=sqloledb;" & _ "Data Source=机器名;Initial Catalog=数据库名;User Id=sa;Password=; " Set cnn1 = New ADODB.Connection cnn1.Open strCnn
' 打开表。 Set rst = New ADODB.Recordset rst.CursorType = adOpenKeyset rst.LockType = adLockOptimistic strSql = "select * from 表名 where a='123'" If rst.State = 1 Then rst.Close rst.Open strsql, cnn1 If rst.RecordCount > 0 Then MsgBox "完成" Else strSql = "insert into 表名(a,b,c) values('123','','');" cnn1.execute strSql End If我调试过了
Dim conn As New adodb.ConnectionDim s1 As String
Dim s As String
Dim c As adodb.Recordset
s1 = "select * from [20021106] where A=123"
Set c = conn.Execute(s1)
If c.Fields(0) > 0 Then
MsgBox "已完成"
Else
s = "insert into [20021106](a,b,c) values('" & A变量 & "'," & B变量 & "," & C变量 & ")"
conn.Execute s
End If
//仔细看一下,答案在下面
Execute 方法 (ADO Connection)
执行指定的查询、SQL 语句、存储过程或特定提供者的文本等内容。语法对于非按行返回的命令字符串:connection.Execute CommandText, RecordsAffected, Options 对于按行返回的命令字符串:Set recordset = connection.Execute (CommandText, RecordsAffected, Options)返回值返回 Recordset 对象引用。参数CommandText 字符串,包含要执行的 SQL 语句、表名、存储过程或特定提供者的文本。RecordsAffected 可选,长整型变量,提供者向其返回操作所影响的记录数目。Options 可选,长整型值,指示提供者应如何计算 CommandText 参数,可为下列值:常量 说明
AdCmdText 指示提供者应按命令的文本定义计算 CommandText。
AdCmdTable 指示 ADO 应生成 SQL 查询以便从 CommandText 命名的表中返回所有行。
AdCmdTableDirect 指示提供者应从 CommandText 命名的表中返回所有行。
AdCmdTable 指示提供者应按表名计算 CommandText。
AdCmdStoredProc 指示提供者应按存储过程计算 CommandText。
AdCmdUnknown 指示 CommandText 参数中的命令类型未知。
adAsyncExecute 指示命令应该异步执行。
adAsyncFetch 指示对在 CacheSize 属性指定的初始数量之后的剩余行使用异步提取。
本列表中前 4 个常量的详细说明请参见 CommandType 属性。说明使用 Connection 对象的 Execute 方法,可执行任何在指定连接的 CommandText 参数中传送给方法的查询。如果 CommandText 参数指定按行返回的查询,执行产生的任何结果将存储在新的 Recordset 对象中。如果命令不是按行返回的查询,则提供者返回关闭的 Recordset 对象。返回的 Recordset 对象始终为只读、仅向前的游标。如需要具有更多功能的 Recordset 对象,应首先创建具有所需属性设置的 Recordset 对象,然后使用 Recordset 对象的 Open 方法执行查询并返回所需游标类型。CommandText 参数的内容对提供者是特定的,并可以是标准的 SQL 语法或提供者支持的任何特殊命令格式。该操作完成后将产生 ExecuteComplete 事件。
Set c = conn.Execute(s1,,AdCmdText)
For a row-returning Command:
Set recordset = command.Execute(RecordsAffected, Parameters, Options)
For a non–row-returning Command:
command.Execute RecordsAffected, Parameters, Options意思是没有返回值的时候不要加括号,所以:
conn.Execute(S1,C,adcmdexe)应改为
conn.Execute S1, C, adcmdexe
另外adcmdexe是什么,好象没有这个参数,是不是应该是这样的:
conn.Execute S1, C, adCmdText
:)S1="select * from [20021106] where A=123"
conn.Execute S1,C,AdCmdText
if C>0 then
msgbox "已完成"
else
S="insert into [20021106](a,b,c) values('" & A变量 & "'," & B变量 & "," & C变量 & ")"
conn.execute S
end if
还有你的数据库是什么类型啊?先当作是SQL吧!
Dim strSql As String
Dim cnn1 As ADODB.Connection
Dim rst As ADODB.Recordset
Dim strCnn As String ' 打开连接。
strCnn = "Provider=sqloledb;" & _
"Data Source=机器名;Initial Catalog=数据库名;User Id=sa;Password=; "
Set cnn1 = New ADODB.Connection
cnn1.Open strCnn
' 打开表。
Set rst = New ADODB.Recordset
rst.CursorType = adOpenKeyset
rst.LockType = adLockOptimistic
strSql = "select * from 表名 where a='123'"
If rst.State = 1 Then rst.Close
rst.Open strsql, cnn1
If rst.RecordCount > 0 Then
MsgBox "完成"
Else
strSql = "insert into 表名(a,b,c) values('123','','');"
cnn1.execute strSql
End If我调试过了
如果要返回值,最好用adodb.recordset
好象还是有问题,我用的ACCESS的数据库
好象还是有问题,我用的ACCESS的数据库
好象还是有问题,我用的ACCESS的数据库
好象还是有问题,我用的ACCESS的数据库
s1 = "select * from [20021106] where A=123"
Correct To This
s1 = "select Count(*) from [20021106] where A=123"