新增加一条数据mysql,SQL向数据库中添加一条新数据 | VBA实例教程

之前的几节中讲了SQL的Select语句的一些基本用法,从这节开始我们以Access数据库为例继续讲解SQL语句的一些其他例子。我们现在有一个名为“学校管理”的Access 2007数据库,里面有一个“学生信息”表,表里包括学生编号、姓名、性别等10个字段。这节我们来学习下怎样向这个表中添加一条新的数据。

之前的课程中我们说过ADO有前期、后期两种引用方式,后期引用需要在程序开始用CreateObject方法建立Connection连接对象和字段集对象,前期引用需要在工具-引用中将“Microsoft ACtiveX Data Objects 2.x”打勾,之后就可以在程序中直接定义连接对象和字条集对象。下面讲的三种向数据库中插入数据的方法在前期引用和后期引用下都可以使用。

方法一:Insert方法

Sub 添加一条数据insert()

'后期引用

Dim cnn As Object, mypath, sql

Set cnn = CreateObject("adodb.connection")

mypath = ThisWorkbook.Path & "\学校管理.accdb"

cnn.Open "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & mypath

sql = "INSERT INTO 学生信息 (学生编号,姓名,性别,出生日期,籍贯,住址,家庭电话,年级,班级,特长) VALUES('1000001','战战如疯','男','1900/1/1','山东','青岛','88888888','10年级','B班','VBA')"

cnn.Execute sql

cnn.Close

Set cnn = Nothing

End Sub

我这里用的是Access 2007数据库,连接语句用的是Provider=Microsoft.ACE.OLEDB.12.0,如果你的数据库是2003版的那这里应该改为Provider=Microsoft.JET.OLEDB.4.0。Insert语法是Insert into 表名 (字段1,字段2...) values(值1,值2...),然后执行sql即cnn.Execute sql即可。

方法二:AddNew方法

Sub 添加一条记录ADDNEW()

Dim cnn As Object, mypath, sql, rs

Set cnn = CreateObject("adodb.connection")

Set rs = CreateObject("ADODB.recordset")

mypath = ThisWorkbook.Path & "\学校管理.accdb"

cnn.Open "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & mypath

sql = "select * from 学生信息 where 0"

'rs.Open sql, cnn, adOpenForwardOnly, adLockOptimistic

rs.Open sql, cnn, 0, 3

rs.AddNew Array("学生编号", "姓名", "性别", "出生日期", "籍贯", "住址", "家庭电话", "年级", "班级", "特长"), Array("1000007", "战战如疯", "男", "1900/1/1", "山东", "青岛", "88888888", "10年级", "B班", "VBA")

rs.Close

cnn.Close

Set rs = Nothing

Set cnn = Nothing

End Sub

第二种方法是AddNew,要想用此方法我们首先要建立一个记录集,这里我们用"select * from 学生信息 where 0"从数据库中得到一个记录集,这里where 0其实就是条件永远不成立,所以我们选择出来的记录集是个空集,我们是向这个记录集里面加入新的记录,这里加上where 0主要是考虑到效率的问题,不写也是可以的。这里建立记录集用的是Open方法,记录集的execute方法在这里是不适用的,这点要清楚。AddNew的语法是AddNew 字段数组,值数组。

方法三:AddNew的另一种形式。

AddNew除了上面我们所说的之外还有另一种形式。这里我顺便演示一下前期引用的用法,首先需要引用文章开头所说的组件,然后看代码

Sub AddNew2()

'前期引用

Dim cnn As New ADODB.Connection

Dim rs As New ADODB.Recordset

Dim sql, mypath

mypath = ThisWorkbook.Path & "\学校管理.accdb"

cnn.Open "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & mypath

sql = "select * from 学生信息 where 0"

rs.Open sql, cnn, adOpenForwardOnly, adLockOptimistic

rs.AddNew

rs.Fields("学生编号") = "100010"

rs.Fields("姓名") = "战战如疯"

rs.Fields("性别") = "男"

rs.Update

cnn.Close

Set cnn = Nothing

End Sub

前面都一样,就是AddNew用法上是依次给每个字段名赋值,赋值之后要对字段集进行更新rs.Update。这里要注意到我们在打开字段集时用到的两个参数adOpenForwardOnly和adLockOptimistic与方法2中的0和3是完全等效的,这里之所以可以这么写是因为我们前期引用了组件,在这个组件中已经定义了这两个常量,而如果我们在后期引用中用这两个常量程序是无法识别的。

关于这两个常量的意思可以稍加理解

'adOpenForwardOnly 0 缺省值,启动一个只能向前移动的游标(Forward Only)。

'adOpenKeyset 1 启动一个Keyset类型的游标。

'adOpenDynamic 2 启动一个Dynamic类型的游标。

'adOpenStatic 3 启动一个Static类型的游标。

'adLockReadOnly 1 缺省值,Recordset对象以只读方式启动,无法运行AddNew、Update及Delete等方法

'adLockPrssimistic 2 当数据源正在更新时,系统会暂时锁住其他用户的动作,以保持数据一致性。

'adLockOptimistic 3 当数据源正在更新时,系统并不会锁住其他用户的动作,其他用户可以对数据进行增、删、改的操作。

'adLockBatchOptimistic 4 当数据源正在更新时,其他用户必须将CursorLocation属性改为adUdeClientBatch才能对数据进行增、删、改的操作。

具体可以问度娘,我也说不明白。

你可能感兴趣的:(新增加一条数据mysql)