范例程序 / 数据库 / access
范例程序 / 数据库 / excel / SQL 操作
范例程序 / 数据库 / csv / access
相关范例
使用系统自带组件连接 Access 数据库,可支持 Excel 。
使用范例
打开数据库连接。
数据库路径可以指定 mdb,xls等文件格式,
如果指定的数据库不存在将自动创建数据库文件
如果在其他参数前添加一个 false 参数,则不打开连接,仅返回连接语句。
access("/*数据库路径(mdb,xls等)*/",{
["Mode"]="Share Deny Read|Share Deny Write";
["Jet OLEDB:Database Password"] = "123456";
})
access("Provider=Microsoft.Jet.OleDb.4.0;Data Source=%s;Jet OLEDB:Database Password=%s;",
"/test.db","/*密码*/" );
转义参数指定值为用于 SQL 查询语句的参数化值
如果传入参数是文本则转换为 SQL 标识符,
返回文本首尾会添加中括号,
如果传入参数是表, 则格式化为 SQL 键值对并以 AND 为分隔符,
如果表中的值为数组,则格式化为 IN 语句
格式化 SQL 查询语句。
所有需要格式化 SQL 语句的函数调用此函数格式化 SQL语句,
如果格式化参数不是表则调用 string.format 格式化,否则按以下规则格式化:
SQL语句中?或??占位符使用表的数组元素格式化,
@字符开始的命名参数使用表的名值对元素格式化,
其中??格式化为标识符,其他占位符格式化为参数值。
字符串转为SQL安全转义字符串,buffer转为 0x4D7953514C 格式,
数组则自动展开为列表,例如{'a', 'b'}格式化为'a', 'b'
嵌套数组则格式化为分组列表,例如{{'a', 'b'}, {'c', 'd'}} 格式化为 ('a', 'b'), ('c', 'd')
非数组的命名表,则格式化为 SQL 键值对,默认以逗号为分隔符,
??占位符格式化 SQL 键值对则以 AND 为分隔符,并将数组值转换为IN语句
可直接使用对象的成员获取ADO组件提供的COM常量
这些常量名的前缀都是 ad
启动事务,返回嵌套层数
注意如果未调用此函数开启事务,默认每条独立SQL语句仍然会自动创建独立事务
关闭数据库连接
提交事务
打开数据库时指定的连接串
[数据库连接串写法](https://www.connectionstrings.com/access/)
创建命令对象
格式化规则请参考 access.format 函数说明,
格式化参数可以是一个表参数,用于替换SQL中占位符指定的参数,
SQL语句用中@前缀标明命名参数使用表参数中的名值对格式化,
SQL语句中的?或??占位符使用表参数中的数组值格式化
数据库连接串中指定的ODBC数据源
for(rs in accessObject.each("select * from [表名]") ){
io.print( rs("字段名").value );
}
for(tbName,tbType,tbObj in accessObject.eachTableObject() ){
}
执条SQL语句
格式化参数规则请参考 access.format 函数说明,
格式化参数可以是一个表参数,用于替换SQL中占位符指定的参数,
SQL语句用中@前缀标明命名参数使用表参数中的名值对格式化,
SQL语句中的?或??占位符使用表参数中的数组值格式化。
执行失败抛出异常。
执行成功返回受影响的记录行数
判断数据库中是否存在指定表
返回表对象
返回数据库的第一个表名。
参数 @1 可选用一个字符串指定表类型,默认为 "TABLE"。
返回数据库中的第一个表对象。
参数 @1 可选用一个字符串指定表类型,默认为 "TABLE"。
查询并返回包含结果数据的数组
此函数返回的数据是先列后行,与getTable相反,
数组由所有列的数据组成,每个列都是由多个行组成的数组
可以使用 返回数据[ 列号 ][ 行号 ] 获取对应的值,
也可以使用 数据.字段名[列号] 获取对应的值
返回数组的元表中使用recordCount记录了总行数,
结果集为空也会返回空数组,可使用 @.recordCount判断记录集的行数
元表中的fields字段则是记录了所有字段名的数组.
所有值后面的占位空白没有去除
可使用getTable函数获取处理过空白占位符的数据,
或参考该函数源码自行处理尾部空白
返回查询结果集数组
每个元素代表一行,每行由N个键值对列组成
返回值的fields成员记录了所有数据列的字段名
结果集为空也会返回空数组,使用#操作符获取结果集长度
打开记录集,游标类型如下:
0:默认值,启动一个只能向前移动的游标
1:打开键集类型游标,允许任意移动,并且允许更改记录集
2:打开动态类型游标,许所有操作,其他用户对记录集的添加、删除、更改在此记录集中
3:打开原生类型游标
锁定方法如下:
1:默认值,不能改变数据
2:悲观锁,编辑时立即锁定数据源的记录
3:乐观锁,只在调用Update 方法时才锁定记
4: 乐观批更新
回滚事务
修改数据库密码,
如果没有旧密码第二个参数可以不写
返回查询结果集第一行的数据,由键值对列组成,
无数据返回null
格式化规则请参考 access.format 函数说明,
格式化参数可以是一个表参数,用于替换SQL中占位符指定的参数,
SQL语句用中@前缀标明命名参数使用表参数中的名值对格式化,
SQL语句中的?或??占位符使用表参数中的数组值格式化
字段大小
列名
类型
参数也可以写数值索引
索引集合
键集合
表名
表示表类型的字符串。
例如 "TABLE", "SYSTEM TABLE", 或 "GLOBAL TEMPORARY"
列集合
总数
调用createParameter创建参数对象,
设置值并添加到SQL执行参数中
注意access的参数对象虽然必须设置正确的名字,
但实际上他只按添加顺序执行
直接添加SQL执行参数
除名字,值以外的其他参数不必要设置
返回创建的参数对象
注意access的参数对象虽然必须设置正确的名字,
但实际上他只按添加顺序执行
参数是一个表,
可使用多个键值对批量指定SQL命令对象的多个参数,
此函数会按参数在SQL中出现的顺序逐个添加参数,
SQL语句中所有参数必须使用@前缀命名,
此函数返回命令对象自身
取消执行
要执行的SQL命令语句
命令类型
普通SQL为1,存储过程为4
创建参数
参数中用到的常量请使用COM对象的成员常量获取,
例如cmd.adLongVarWChar
这个函数创建的参数还需要调用parameters.append添加到执行参数中
不建议直接调用此函数,可以使用更简单的addParameter或bind函数添加参数
for(rs in accessCmdObject.each() ){
io.print( rs(0).value );/*执行SQL命令并遍历结果集*/
}
执行查询,所有参数可选。
参数ra 返回受查询影响的记录的数目
参数parameters 用 SQL 语句传递的参数值
参数options 一个或者多个 CommandTypeEnum 或 ExecuteOptionEnum 值 。
返回记录集对象,execute 返回的记录集没有 getTable,stepQuery 函数。
executeRecords 返回的记录集提供 getTable,stepQuery 函数。
执行查询不返回记录集,所有参数可选。
参数ra 返回受查询影响的记录的数目
参数parameters 用 SQL 语句传递的参数值
执行查询,所有参数可选
参数ra 返回受查询影响的记录的数目
参数parameters 用 SQL 语句传递的参数值
参数options 一个或者多个 CommandTypeEnum 或 ExecuteOptionEnum 值 。
返回记录集对象,execute 返回的记录集没有 getTable,stepQuery 函数。
executeRecords 返回的记录集提供 getTable,stepQuery 函数。
执行查询返回流,所有参数可选。
参数ra 返回受查询影响的记录的数目
参数parameters 用 SQL 语句传递的参数值
查询并返回包含结果数据的 SafeArray 数组
此函数返回的数据是先列后行,与 getTable 相反,
数组由所有列的数据组成,每个列都是由多个行组成的数组
可以使用 返回数据[ 列号 ][ 行号 ] 获取对应的值,
也可以使用 数据.字段名[列号] 获取对应的值
返回数组的元表中使用recordCount记录了总行数,
结果集为空也会返回空数组,可使用 @.recordCount判断记录集的行数
元表中的fields字段则是记录了所有字段名的数组.
所有值后面的占位空白没有去除
可使用getTable函数获取处理过空白占位符的数据,
或参考该函数源码自行处理尾部空白
执行SQL命令返回查询结果集数组
每个元素代表一行,每行由N个键值对列组成
返回值的fields成员记录了所有数据列的字段名
结果集为空也会返回空数组,使用#操作符获取结果集长度
返回已添加的参数
执行SQL命令
返回查询结果集第一行的数据,由键值对列组成
无数据返回null
参数列表
添加参数
注意access的参数对象虽然必须设置正确的名字,
但实际上他只按添加顺序执行
返回参数长度
删除参数
刷新参数
连接对象
连接串
accessObject.connection.CursorLocation = 3/*adUseClient*/
参数指定错误索引
错误集合
错误数
参数的类型,默认是adParamInput
参数名称
数据长度
参数值
是否已经到记录集开始,没有更多数据了
关闭记录集
是否移动到记录集尾部,没有更多数据了
查询并返回包含结果数据的数组
此函数返回的数据是先列后行,与getTable相反,
数组由所有列的数据组成,每个列都是由多个行组成的数组
可以使用 返回数据[ 列号 ][ 行号 ] 获取对应的值
查询并返回包含结果数据的数组,所有参数可选,
rows 指定获取行数,默认为-1,即获取所有剩下的行,0,
@start为可选参数,可选使用以下数值:
_adBookmarkCurrent 0 自当前记录开始
_adBookmarkFirst 1 自首条记录开始
_adBookmarkLast 2 自最后一条记录开始
@ields 可选用一个字符串、或字符串数组指定要获取的列,
也可用数值,或数值数组指定要获取的列
返回查询结果集数组
每个元素代表一行,每行由N个键值对列组成
返回值的fields成员记录了所有数据列的字段名
结果集为空也会返回空数组,使用#操作符获取结果集长度
移动游标位置,
注意第一条记录游标位置为0,
@start为可选参数,可选使用以下数值:
_adBookmarkCurrent 0 自当前记录开始
_adBookmarkFirst 1 自首条记录开始
_adBookmarkLast 2 自最后一条记录开始
获取记录总数,
如果该值为-1,请修改为静态方式打开记录集
返回查询结果集第一行的数据,由键值对列组成
无数据返回null
错误描述
数据源错误代码
错误代码
数据源
错误对象
_adBookmarkCurrent=0
_adBookmarkFirst=1
_adBookmarkLast=2
_adOpenDynamic=2
_adOpenForwardOnly=0
_adOpenKeyset=1
_adOpenStatic=3
_adOpenUnspecified=-1