rs.open sql,conn,a,b表示的意思

合集下载

VBA与数据库操作综合实例教程

VBA与数据库操作综合实例教程

VBA与数据库操作综合实例教程在当今信息技术发展迅速的时代,数据的管理和操作变得越来越重要。

VBA(Visual Basic for Applications)作为一种用于MicrosoftOffice应用程序的编程语言,可以为我们提供数据库的操作和管理功能。

本教程将以VBA为工具,带您进行数据库操作的综合实例教程,介绍如何使用VBA编写数据库应用程序,以便更好地管理和处理数据。

一、数据库基础知识在开始学习VBA与数据库操作之前,我们先来了解一些数据库的基础知识。

数据库是用于存储和访问数据的系统,它可以帮助我们有效地组织和管理数据。

常见的数据库管理系统包括Microsoft Access、SQL Server、Oracle等。

1. 数据库表数据库中的数据通常以表的形式组织,表由行和列组成。

每一行代表一条记录,每一列代表一个字段。

一个数据库通常由多个表组成,表与表之间可以建立关系。

2. SQL语言SQL(Structured Query Language)是一种用于与数据库进行交互的标准查询语言。

它可以用于创建、修改和查询数据库中的表和数据。

在VBA中,我们可以使用SQL语句来操作数据库。

二、连接数据库在使用VBA进行数据库操作之前,我们首先要连接到目标数据库。

VBA通过ADO(ActiveX Data Objects)来实现与数据库的连接。

以下是一个连接Access数据库的示例:```vbaDim conn As New ADODB.Connectionconn.Provider = "Microsoft.ACE.OLEDB.12.0"conn.Open "C:\path\to\your\database.accdb"```在这个示例中,我们创建了一个名为`conn`的连接对象,并指定了数据库的提供程序和路径。

接下来,我们需要使用`Open`方法打开数据库连接。

银行客户业务管理系统

银行客户业务管理系统
<td height="22"><%=rs("ClientName")%></td>
<td><%=rs("ClientCountry")%></td>
<td><%=rs("ClientCity")%></td>
<td><%=rs("ClientTel")%></td>
<td><%=rs("ClientEmail")%></td>
<script language="javascript">
function HLItem(obj)//鼠标经过
{
obj.oldClassName=obj.className;
obj.className="List";
requestpage=1
end if
if requestpage>maxpage then'在接收页码的值大于最大页码时,使其等于最大页码
requestpage=maxpage
end if
if requestpage<>1 then'向上或向下移动相应的记录
rs.move (requestpage-1)*rs.pagesize
这就需要银行的业务系统流程比较灵活,适合于为中小客户提供服务,相应迅速,而且具有一定的风险放控能力,个人征信等系统的数据应用,也有其现实意义。
另外,金融产品的创新和业务流程再造,都需要信息化系统的支持。未来银行的管理架构和业务流程应以客户为目标;实行业务的垂直运作,前后台相互制约的管理体系;实行集中化和集约化的营运管理体系;精简业务流程,实现信息化、自动化、标准化和智能化。

sqla,b的用法

sqla,b的用法

sqla,b的用法SQL(Structured Query Language)是一种用于管理关系数据库的编程语言。

它是用于操作、管理、查询数据库的标准语言。

SQL包括了用于创建数据库、插入数据、更新数据、删除数据等操作的语句。

在SQL中,我们经常使用到一些关键字,如SELECT, FROM, WHERE 等。

一、SQL(结构化查询语言)SQL是用于操作数据库的标准语言,它提供了许多用于查询、插入、更新和删除数据的命令。

以下是SQL的一些基本用法:1. 创建数据库:可以使用CREATE DATABASE关键字创建一个新的数据库。

例如:CREATE DATABASE mydatabase。

2. 查询数据:可以使用SELECT关键字从数据库中查询数据。

例如:SELECT * FROM customers WHERE age > 18。

这将返回所有年龄大于18岁的客户信息。

3. 插入数据:可以使用INSERT INTO关键字向数据库插入新数据。

例如:INSERT INTO customers (name, age) VALUES ('John', 25)。

这将向customers表中插入一个名为John,年龄为25岁的客户信息。

4. 更新数据:可以使用UPDATE关键字更新数据库中的数据。

例如:UPDATE customers SET age = 26 WHERE name = 'John'。

这将把John的年龄更新为26岁。

5. 删除数据:可以使用DELETE FROM关键字删除数据库中的数据。

例如:DELETE FROM customers WHERE age < 20。

这将删除年龄小于20岁的所有客户信息。

二、B(B树)B树是一种平衡的多路搜索树,常用于数据库索引和存储。

它与二叉搜索树类似,但具有更多的属性,如路径上的最小值和最大值限制,以确保树的平衡和存储效率。

sqlconnect函数使用

sqlconnect函数使用

sqlconnect函数使用SQLConnect 函数是用于连接 SQL Server 数据库的函数。

该函数可以在 C++ 编程语言中使用,它可以让我们使用 C++ 来操作 SQL Server 数据库。

这篇文章将会详细介绍 SQLConnect 函数的使用方法。

1. SQLConnect 函数的参数SQLConnect 函数有 5 个参数,分别是:第一个参数:一个指向已分配的 ODBC 环境的指针。

第二个参数:一个字符串,表示要连接的数据源名称。

第三个参数:该参数保留,值应始终设置为 SQL_NTS(如果不清楚其中的含义,可以默认使用此值)。

第四个参数:一个字符串,表示要使用的用户名。

第五个参数:一个字符串,表示要使用的密码。

2. SQLConnect 函数的返回值SQLConnect 函数返回一个整数值。

如果连接成功,返回 SQL_SUCCESS 常量。

如果连接失败,返回 SQL_ERROR 常量。

3. SQLConnect 函数的使用方法以下是 SQLConnect 函数的使用方法://首先包含头文件 #include <sql.h> #include <sqlext.h> //定义变量 SQLHENV henv; SQLHDBC hdbc; SQLRETURN retcode; //分配环境句柄 SQLAllocHandle(SQL_HANDLE_ENV, SQL_NULL_HANDLE, &henv); SQLSetEnvAttr(henv,SQL_ATTR_ODBC_VERSION,(SQLPOINTER)SQL_OV_O DBC3, 0); //分配连接句柄 SQLAllocHandle(SQL_HANDLE_DBC, henv, &hdbc); //连接数据库 retcode=SQLConnect(hdbc,TEXT("datasource name"),SQL_NTS,TEXT("user name"),SQL_NTS,TEXT("password"),SQL_NTS); if (retcode==SQL_SUCCESS){ //Connected, do some stuff } else { //Connection error }首先,我们需要包含 SQL.h 和 sqlext.h 这两个头文件。

rsopensql,conn,a,b表示的意思

rsopensql,conn,a,b表示的意思

rs.open sql,conn,a,b表示的意思rs.open sql,conn,a,b中的a,b其实表示的是访问权限和锁定方式rs.open sql,conn,1,1本文中大量使用的方式。

无法看到其他用户添加的新数据,但被其他用户删除的数据将变为不可访问,同时可以看到其他用户所作的修改。

rs.open sql,conn,1,3静态打开方式。

在你使用数据是其他用户无法访问该数据rs.open sql,conn,1,2动态的数据库打开方式,其他用户所进行的修改、删除和新建等工作都会立即在数据对象中体现出来,并且支持全部类型的数据移动方式,除非提供者不支持,否则也可以进行书签操作rs.open sql,conn,-1不指定打开方式rs.open sql,conn,a,b参数a为设定游标的类型,其取值为:0 仅向前游标,只能向前浏览记录,不支持分页、recordset、bookmark1 键集游标,其他用户对记录说做的修改将反映到记录集中,但其他用户增加或删除记录不会反映到记录集中。

支持分页、recordset、bookmark2 动态游标功能最强,但耗资源也最多。

用户对记录说做的修改,增加或删除记录都将反映到记录集中。

支持全功能浏览。

3 静态游标,只是数据的一个快照,用户对记录说做的修改,增加或删除记录都不会反映到记录集中。

支持向前或向后移动参数b为记录集的锁定类型,其取值为:1 锁定类型,默认的,只读,不能作任何修改2 当编辑时立即锁定记录,最安全的方式3 只有在调用update方法时才锁定记录集,而在此前的其他操作仍可对当前记录进行更改、插入和删除等4 当编辑时记录不会被锁定,而更改、插入和删除是在批处理方式下完成的打开数据记录集方法其实不止一种,但是我们用的最多的就是rs.open sql,1,1的方法,可是后面的数字参数很多人不解其意,下面我们来介绍一下。

其实open方法后面有多个参数cursortype locktype commandtype比如rs.open sql,1,1也可以写成rs.cursortype = 1rs.locktype = 1rs.open sql其中cursortype代表从一个表或者一个sql查询结果返回的记录。

网络程序设计——ASP模拟试卷

网络程序设计——ASP模拟试卷

ASP模拟试卷(一)一、选择题(每小题2分,共40分)1.请判断下列语句执行完毕后,a、b、c的值<%a="1" + 1b="1" + "1"c="1" & "1"%>(A) "11","11","11" (B) 2,"11","11" (C) "11",2,"11" (D) "11","11",22.执行完语句a="2",a的类型为(A) 数值型(B) 字符串型(C) 布尔型(D) 日期型3.执行完如下语句后,a的值为:<%Dim aa=3a=a+1%>(A) 0 (B) 1 (C) 3 (D) 44.执行完如下语句后,Sum的值为:<%Dim a(5),SumSum=0For I=0 To 5a(I)=ISum=Sum+a(I)Next%>(A) 0 (B) 5 (C) 15 (D) 205.执行完a=5 Mod 3 语句后,a的值为:(A) 0 (B) 2 (C) 3 (D) 56.执行完a=5>3 And "a"<"c" 语句后,a的值为:(A) True (B) False (C) 1 (D) 07.下面a=Trim(" vbscript") & Rtrim(" good") 语句后,a的值:(A) " vbscript good"(B) "vbscript good"(C) " vbscriptgood"(D) "vbscriptgood"8.下面哪个函数可以返回当前的日期和时间:(A) Now (B) Date (C) Time (D) DateTime9.对于利用Dim a(4,5) 语句定义的二维数组,Ubound(a,1)将返回(A) 0 (B) 4 (C) 5 (D) 610.对于Request对象,如果省略获取方法,如Request(“user_name”),将按什么顺序依次检查是否有信息传入:(A)Form、QueryString、Cookies、Server Variables、ClientCertificate(B)QueryString、Form、Cookies、Server Variables、ClientCertificate(C)Cookies、QueryString、Form、Server Variables、ClientCertificate(D)Form、QueryString、Cookies、Server Variables、ClientCertificate11.下面哪条语句可以返回访问者的IP地址(A) Request.ServerVariables("REMOTE_ADDR")(B) Request.ServerVariables("REMOTE_IP")(C) Request.ClientCertificate("REMOTE_ADDR ")(D) Request.ClientCertificate ("REMOTE_IP ")12.执行完如下语句后,页面上显示的内容为:<%Response.Write "A"Response.EndResponse.Write "B"%>C(A) A (B) AB (C) AC (D) ABC13.请问下面程序段执行完毕,页面上显示内容是什么:<%Response.Write “<a href=''>新浪</a>”%>(A) 新浪(B) <a href=''>新浪</a>(C) 新浪(超链接)(D) 该句有错,无法正常输出14.Session对象的默认有效期为多少分钟?(A) 10 (B) 15 (C) 20 (D) 应用程序从启动到结束15.请问下面程序段执行完毕,页面上显示内容是什么:<%Response.Write Server.HTMLEncode(“<a href=''>新浪</a>”)%>(A) 新浪(B) <a href=''>新浪</a>(C) 新浪(超链接)(D) 该句有错,无法正常输出16.当使用事务处理时,假如要提交事务处理,应该利用如下方法:(A) BeginTrans (B) EndTrans(C) CommitTrans (D) RollBackTrans17.如果刚打开了一个含有1条记录的记录集,那么Bof的值为(A) 1 (B) True (C) False (D) NULL18.使用W3 Jmail组件发送E-mail时,附件必须位于(A) 客户端(B) 服务器端(C) 服务器端和客户端(D) 服务器端或客户端19.对于文件上传组件,如果希望获取上传文件的大小,应该怎样用?(A) Upload.Files("upfile").Size(B) Upload.Form("upfile").Size(C) Request.Files("upfile").Size(D) Request.Form("upfile").Size20.对于如下的文件超链接组件中使用的超链接数据文件,文件路径和说明之间应该用()隔开。

ADO Recordset对象的RecordCount属性总是-1

ADO Recordset对象的RecordCount属性总是-1

ADO Recordset对象的RecordCount属性总是-1?收藏最近在用asp做网页后台时,遇到了一个烦人的问题,RecordSet对象的RecordCount和Pag eCount均为-1.不能直接获取RecordCount属性,我就想了其他的笨办法代替,比如,利用了SQL的集函数select Count(*) as count from table,这样count中就存储了RecordSet的属性值;或者,利用一个变量存储,在游标从头到尾的搜索过程中,这个变量逐次加一,最终就得到了该属性: <% dim ii=0set rs=conn.Open "select * from table"do while not rs.EOFi=i+1rs.MoveNextLoop%>可是,接下来要用到PageCount属性来实现分页(AbsolutePage:指定当前页;PageCount:返回记录集中的逻辑页数;PageSize:指定一个逻辑页中的记录个数,缺省值是10.)这种方法行不通了,没办法,就开始到处搜集信息:首先让我们来看看怎么样获得记录集RecordSet,有以下几种:<%set conn = Server.CreateObject("ADODB.Connection")set rs = conn.Open(sqlstring)%>另外一种方式:<% set conn = Server.CreateObject("ADODB.Connection")set cmd = Server.CreateObject("mend")cmd.ActiveConnect = conncmd.StringText = "Select * from Table"set rs = cmd.Open conn %>而另外一种办法就是:<%set rs = Server.CreateObject("ADODB.Recordset")rs.open sql,conn,打开方式,锁类型 %>参数一表示游标类型,如下设置:参数1 意义0 只读,数据只能向下移动1 可读写,数据可以自由移动,多用户下别人不能看到新增数据(除非重启动)2 可读写,数据可以自由移动,多用户下别人可以看到新增数据3 只读,数据可以自由移动参数2表示锁定类型,如下:参数2 意义1 默认值,只读2 悲观锁定3 乐观锁定4 批次乐观锁定也就是说第一个参数为1或2的时候,才能有recordcount所以也可以用recordset.open打开数据源:rs.CursorLocation = adUseClientrs.CursorType = adOpenStaticrs.open sqlstring,conn在我的程序中,改为第二种打开方式就可以正确访问RecordSet的那些属性了.具体就是:rs.Open sqlstring,conn,1,3那么CursorLocation和CursorType到底是什么东西,能产生这么大的影响?(1)CursorLocation:设置或返回游标引擎的位置, 可设置为以下某个常量的长整型值:adUseNone:没有使用游标服务.(该常量已过时并且只为了向后兼容才出现) adUseClient:使用由本地游标库提供的客户端游标。

SQL游标(cursor)详细说明及内部循环使用示例

SQL游标(cursor)详细说明及内部循环使用示例

SQL游标(cursor)详细说明及内部循环使⽤⽰例游标 游标(cursor)是系统为⽤户开设的⼀个数据缓冲区,存放SQL语句的执⾏结果。

每个游标区都有⼀个名字,⽤户可以⽤SQL语句逐⼀从游标中获取记录,并赋给主变量,交由主语⾔进⼀步处理。

游标是处理结果集的⼀种机制吧,它可以定位到结果集中的某⼀⾏,多数据进⾏读写,也可以移动游标定位到你所需要的⾏中进⾏操作数据。

⼀般复杂的存储过程,都会有游标的出现,他的⽤处主要有:1. 定位到结果集中的某⼀⾏。

2. 对当前位置的数据进⾏读写。

3. 可以对结果集中的数据单独操作,⽽不是整⾏执⾏相同的操作。

4. 是⾯向集合的数据库管理系统和⾯向⾏的程序设计之间的桥梁。

优点 在数据库中,游标是⼀个⼗分重要的概念。

游标提供了⼀种对从表中检索出的数据进⾏操作的灵活⼿段,就本质⽽⾔,游标实际上是⼀种能从包括多条数据记录的结果集中每次提取⼀条记录的机制。

游标总是与⼀条SQL 查询语句相关联因为游标由结果集(可以是零条、⼀条或由相关的选择语句检索出的多条记录)和结果集中指向特定记录的游标位置组成。

当决定对结果集进⾏处理时,必须声明⼀个指向该结果集的游标。

如果曾经⽤C 语⾔写过对⽂件进⾏处理的程序,那么游标就像您打开⽂件所得到的⽂件句柄⼀样,只要⽂件打开成功,该⽂件句柄就可代表该⽂件。

对于游标⽽⾔,其道理是相同的。

可见游标能够实现按与传统程序读取平⾯⽂件类似的⽅式处理来⾃基础表的结果集,从⽽把表中数据以平⾯⽂件的形式呈现给程序。

我们知道关系数据库管理系统实质是⾯向集合的,在MS SQL SERVER 中并没有⼀种描述表中单⼀记录的表达形式,除⾮使⽤where ⼦句来限制只有⼀条记录被选中。

因此我们必须借助于游标来进⾏⾯向单条记录的数据处理。

由此可见,游标允许应⽤程序对查询语句select 返回的⾏结果集中每⼀⾏进⾏相同或不同的操作,⽽不是⼀次对整个结果集进⾏同⼀种操作;它还提供对基于游标位置⽽对表中数据进⾏删除或更新的能⼒;⽽且,正是游标把作为⾯向集合的数据库管理系统和⾯向⾏的程序设计两者联系起来,使两个数据处理⽅式能够进⾏沟通。

ASP中recordset所有的属性与方法

ASP中recordset所有的属性与方法
rs.close():关闭连接。
属性和方法分开列出
属性:
AbsolutePage属性:当RecordSet对象设有分页时,返回当前页码。
AbsolutePosition属性:当前指针的绝对位置。
ActiveConnection属性:指明进行SQL语句的数据库连接。
EOF属性:若指针位于第一条记录之前,返回TRUE、否则返回FALSE。
rs.Properties.Count:ADO的ResultSet或Connection的属性个数。
rs.Properties(item).Name:ADO的ResultSet或Connection的名称。
rs.Properties:ADO的ResultSet或Connection的值。
Bookmark属性:将指针设置在某条记录。
CursorLocation属性:设置或返回光标提供者的位置,若设为2(adUseServer)表示使用服务器端光标(默认);若设为3(adUseClient)表示使用浏览器端光标。
CursorType属性:指出RecordSet对象中使用的光标类型
在RecordSet组件中,常用的属性和方法有:
rs.Fields.Count:RecordSet对象字段数。
rs(i).Name:第i个字段的名称,i为0至rs.Fields.Count-1
rs(i):第i个字段的数据,i为0至rs.Fields.Count-1
rs("字段名"):指定字段的数据。
循环得到一条记录的所有值
For Each objFld In rs.Fields
Response.Write objFld
Next

asp常用代码

asp常用代码

翻页:<%Set rs = server.CreateObject("Adodb.RecordSet")rs.open sql,c onn,1,1if not rs.eof thenif request("pagenum")="" thenpagenum=1elseif IsNumeric(request("pagenum")) thenpagenum=Cint(request("pagenum"))elsepagenum=1end ifend ifrs.pagesize=40if pagenum<=0 then pagenum=1if pagenum>rs.pagecount then pagenum=rs.pagecount'response.write "["&pagenum&"]"rs.absolutepage=pagenum '转到要查询的页。

for i=1 to rs.pagesize%>循环内容<%rs.movenextif rs.eof then exit fornextelse%>还没记录!<%end if%><%response.write("每页"&rs.pagesize&"项&nbsp;&nbsp;共"&rs.recordcount&"项&nbsp;&nbsp;"&pagenum&"/"&rs.pagecount&"&nbsp;&nbsp;")if 1 < pagenum then '向上翻页response.write("<a href='?pagenum=1'>首页</a>&nbsp;")response.write("<a href='?pagenum="&pagenum-1&"'>上一页</a>&nbsp;")elseresponse.write("<font disabled>首页上一页&nbsp;</font>")end ifif pagenum >= rs.pagecount then '向下翻页response.write("<font disabled>下一页尾页</font>&nbsp;")else'response.write("<br>rs.pagecount="&rs.pagecount&"<br>pagenum="&pagenum&"<br>")response.write("&nbsp;<a href='?pagenum="&pagenum+1&"'>下一页</a>&nbsp;")response.write("<a href='?pagenum="&rs.pagecount&"'>尾页</a>&nbsp;")end if%>VB回车换行符:vbCrLf是VB中用于表示“回车换行”的字符串常数(长度为2字节),相当于Chr(13)+Chr(10),或者汇编中的DB 0AH,0DH,$由于是常数,所以不会影响速度。

asp用户登录

asp用户登录
personalinfo=rsc("personalinfo")
vv=rsc("ntime")
set rsc=nothing
if nr="" then
response.Redirect("index.asp")
end if
if strcomp(nr,request.Form("password"))=0 then
<title>用户注册</title>
<style type="text/css">
<!--
body,td,th {
font-family: 宋体;
font-size: 14px;
}
-->
</style>
</head>
<body>
<center>
用户注册<br>
<%
=request.QueryString("msg")
rs("mail")=request.Form("mail")
rs("sex")=request.Form("sex")
rs("qq")=request.Form("qq")
rs("add")=request.Form("add")
rs("personalinfo")=request.Form("personalinfo")

conn.execute、rs.open、command.execute方法用法大大不同

conn.execute、rs.open、command.execute方法用法大大不同

conn.execute、rs.open、command.execute方法用法大大不同通常形成记录集可以使用Set rs=conn.execute(SQL) 或直接rs=CONN.execute(SQL)和Set rs=Server.CreateObject("ADODB.Recordset")rs.open SQL,CONN,0,1 或rs.open SQL,CONN这种情况通常open比上一个性能要好那么一丁点( command对象更灵活,执行范围更广)使用CONN.execute 可以不用关闭直接执行下一个set rs=conn.execute(SQL)大约要慢2~5倍!!(这是在msSQL循环1000次的),所以执行下一个rs=conn.execute之前!!一定要关闭掉!使用单一对象的rs rs.open在open下一个记录集之前,必需要求显示关闭,否则出错,速度在SQL,CONN,0,1的情况下可前者基本一样所以使用设置一个CreateObject("adodb.recordser")最后一个set rs=nothing 化上句号!open提供非常灵活的操作数据库元数据的非常多的属性!!有很多情况下是非得用open来做的!而conn.execute 非常单一!!!比如:rs1.open SQL1,conn,0,1rs.open SQL,conn,1,3if rs(0)<0 then rs(0)=0rs(1)=aaars(2)=bbbrs.update ' 更新记录集写到数据库rs.addnew '加一条新记录rs(0)=1rs(1)=dddrs(2)=kkkrs.updateid=rs(3) rs(s) '取的字段是自动编号立即获得新记录的自动编号id //这是非常常用的rs1.addnew 对rs1添加关连使用id rs的新记录rs1("id"=idrs1(1)=.....rs1.updaters1.close:set rs1=nothingrs.close:set rs=nothing上面的操作如果采用CONN.execute 则要用到四个CONN.executeCONN.execute("update .."CONN.execute("insert into 表1:"rs=CONN.execute("select 新的自动id"CONN.execute("insert into 表二"那一种方法逻辑条理更好,一目了然还有一个有趣的使用Recordset open记录的方法!!Set rs=server.CreateObject("Adodb.recordset"Set rs=server.CreateObject("Adodb.recordset"rs.open SQL1,CONNrs.open SQL2,CONN这是同时设置同名的两个对象来打开两个记录集,而且是可用的! '只要取的列名合乎这两个记录集中元数据'则正常操作!!扩展开来Set rs=server.CreateObject("Adodb.recordset"Set rs=server.CreateObject("Adodb.recordset"Set rs=server.CreateObject("Adodb.recordset"Set rs=server.CreateObject("Adodb.recordset"rs.open SQL1,CONNrs.open SQL2,CONNrs.open SQL3,CONNrs.open SQL4,CONN这样大于二个同名的rs我还没试过!!感觉有点相当与SQL联合查询再打开记录集~~~如果只需要一笔带过的碰碰数据库,用execute如果要对数据库作比较庞杂的操作!则最好用rs.open注意:不管是rs.open sql,conn还是conn.execute(sql) [这里的SQL是delete,update,insert]执行以后都会返回一个关闭的记录集也就是说如果sql是插入,更新,删除语句,那么set rs=conn.execute(sql)中的RS就没什么意义。

rs.Open strsql,conn,1,3问题

rs.Open strsql,conn,1,3问题
AbsolutePage 不支持 不支持 可读写 可读写
AbsolutePosition 不支持 不支持 可读写 可读写
ActiveConnection 可读写 可读写 可读写 可读写
BOF 只读 只读 只读 只读

ADLOCKPESSIMISTIC(=2)
悲观锁定,当修改记录时,数据提供者将尝试锁定记录以确保成功地编辑记录。只要编辑一开始,则立即锁住记录。
ADLOCKOPTIMISTIC(=3)
乐观锁定 ,直到用Update方法提交更新记录时才锁定记录。
ADLOCKBATCHOPTIMISTIC(=4)
MaxRecords 可读写 可读写 可读写 可读写
PageCount 不支持 不支持 只读 只读
PageSize 可读写 可读写 可读写 可读写
RecordCount 不支持 不支持 只读 只读
Source 可读写 可读写 可读写 可读写
Bookmark 不支持 不支持 可读写 可读写
CacheSize 可读写 可读写 可读写 可读写
CursorLocation 可读写 可读写 可读写 可读写
CursorType 可读写 可读写 可读写 可读写
-------------------------------------------------------------
Recordset属性 adOpenForwardOnly adOpenKeyset adOpenDynamic adOpenStatic
-------------------------------------------------------------
adLockPrssimistic 2 当数据源正在更新时,系统会暂时锁住其他用户的动作,以保持数据一致性。

ADO常用方法

ADO常用方法
Dim rs As ADODB.Recordset '创建一个 Recordset 实例,不使用New 是因为,经常需要重复使用Set,因此没必要在这里使用
Dim CnStr As String, Sql As String '创建两个字符串变量分别存放两个集合的SQL语句代码段
1、装载数据库(不属于Recordset集合)
'[!charlist] 任何不在字符表中的单一字符
'注:根据数据库的不同?、_和*、%的应用有所差别,比如SQL只使用% 和 _ 分别代表多个字符和单一字符
Sql = "select * from 表名 where 列名1='" & 字段 & "' ORDER BY 字段1 ASC" '对查询结果进行升序排列
2、Recordset集合的常用方法
==========================
'1)打开一个表
'------------
Sql = "select * from 表名" 'SQL查询语句
Set rs = New ADODB.Recordset '新建一个实例
rs.Open Sql, conn '使用 Open 方法打开数据库中的一个表
'3 = adLockOptimistic 开放式锁定(逐个) — 只在调用 Update 方法时才锁定记录
'4 = adLockBatchOptimistic 开放式批更新 — 用于批更新模式(与立即更新模式相对)。
'
'2)读写数据

用ASP连接读写ACCESS数据库实例

用ASP连接读写ACCESS数据库实例

(一)数据库的选择:有许多的数据库你可以选择,SQL SERVER、ACCESS(*.mdb)、EXCEL(*.xls)、FOXPRO(*.dbf)甚至普通的文本文件(*.txt)都可以达到存储数据的功能。

那么到底选择什么数据库最合适呢?其中SQL SERVER是服务器级的,足以应付每天上万次的访问量。

对于非服务器级的数据库建议使用ACCESS97。

因为:(1)只要安装了PWS或IIS4肯定有ACCESS的ODBC驱动,即你的系统肯定支持ACCESS数据库的存取。

(2)ACCESS支持的SQL指令非常齐全。

(3)ACCESS ODBC驱动程序的效率非常高。

虽然它不是服务器级的数据库,但是作为中小型企业内部网的数据库支持还是绰绰有余的。

(4)ACCESS97在OFFICE97中就有,非常方便得到和使用。

本文就以ACCESS数据库为准介绍基于WEB的数据库存取方法。

(二)例子:我们建立一个“客户”数据库,需要保存如下的客户资料:客户名称、联络人姓名、所在城市、电话号码。

(1)首先建立ACCESS数据库customer.mdb(今后有用的)。

建立如下字段:客户名称、联络人姓名、所在城市、电话号码、客户编号、时间。

将表保存为"客户"(今后有用的,===>看看图)。

注意:建立字段时多作了2个(客户编号、时间),因为在今后排序时要用到它们。

建议今后做数据库时最好都加上这2项,不会没用的。

此外,在保存表时ACCESS 会询问是否建立一个住关键字,我们不需要它所以不必建立。

还有:时间字段的"默认值"设成"now()",即去系统当时的时间。

同时将索引项设成"有(允许重复)",含义:WEB上极有可能同时存取数据,所以允许重复,索引设成"有"可以加快排序速度。

===>看看图(2)建立递交表单add.htm:源代码如下:<html><head><title>添加数据库记录</title><meta http-equiv="Content-Type" content="text/html; charset=gb2312"></head><body bgcolor="#FFFFFF"><p align="center"><font size="5">添加数据库记录</font></p><form method="post" action="adddatabase.asp"><div align="center"><table width="46%" border="0"><tr><td width="28%"><div align="right">公司名称:</div></td><td width="72%"><input type="text" name="CompanyName"></td></tr><tr><td width="28%"><div align="right">联络人姓名:</div></td><td width="72%"><input type="text" name="CName"></td></tr><tr><td width="28%"><div align="right">所在城市:</div></td><td width="72%"><input type="text" name="City"></td></tr><tr><td width="28%"><div align="right">电话号码:</div></td><td width="72%"><input type="text" name="Tel"></td></tr><tr><td width="28%"><div align="right"> </div></td><td width="72%"><input type="submit" name="Submit" value="Submit"> <input type="reset" name="reset" value="Reset"></td></tr></table></div></form></body></html>这与普通的HTML没有任何区别,关键部分已经用红色标记了。

ADODB.Recordset.Open 中参数的用法

ADODB.Recordset.Open 中参数的用法
ADODB.Recordset.Open 中参数的用法
Recordset对象的Open方法原型:
Open([Source],[ActiveConnection],[CursorTypeபைடு நூலகம்,[LockType],[Options])
CursorType游标类型:
Const adOpenForwardOnly = 0
ADOPENSTATIC(=3) 只读,当前数据记录可自由移动
ADOPENKEYSET(=1) 可读写,当前数据记录可自由移动
ADOPENDYNAMIC(=2) 可读写,当前数据记录可自由移动,可看到新增记录
B: ADLOCKREADONLY(=1) 默认值,用来打开只读记录
ADLOCKPESSIMISTIC(=2) 悲观锁定
Const adLockBatchOptimistic = 4
执行多行批处理更新时使用这种类型
Options参数:
Options参数标明用来打开记录集的命令字符串的类型。告诉ADO被执行的字符串内容的有关信息有助于高效地执行该命令字符串。
adCMDTable。被执行的字符串包含一个表的名字。
以悲观上锁方式打开数据对象。该方式假定在你编辑记录时会有其它用户访问数据。此时一旦你开始编辑记录,其它用户就不能访问该数据。
Const adLockOptimistic = 3
以乐观上锁方式打开数据对象。该方式假定在你编辑记录时不会有其它用户访问数据。在完成改变之前,其它用户不能访问该记录。
前向游标,为缺省游标,提供最快的运行性能。用它打开recordset,从对至尾顺序取得所有结果。它不支持向后滚动,只允许在结果间单向移动。

ASP中RecordSet Open和Connection.Execute一些区别和细节-essen

ASP中RecordSet Open和Connection.Execute一些区别和细节-essen

ASP中RecordSet Open和Connection.Execute一些区别和细节rs.open sql,conn:如果sql是delete,update,insert则会返回一个关闭的记录集,在使用过程中不要来个rs.close在文件最后再写rs.close中间可以来多个记录集rs1.open sql1,conn,最后一块关闭记录集:rs.close rs1.closeconn.execute(sql) 如果sql是delete,update,insert则会返回一个关闭的记录集,在使用过程中不要来个rs.close在文件最后再写rs.close中间可以来多个记录集rs1.open sql1,conn,最后一块关闭记录集:rs.close rs1.close.如果sql是update,insert,delete则应该使用conn.execute(sql)也可以不要括号conn.execute sql 如果sql是select语句则应该使用set rs=conn.execute(sql)括号一定要,不能省略:这是因为vbscript的特性,带返回值的调用必须加括号,不带返回值的调用可以不要括号。

注意:不管是rs.open sql,conn还是conn.execute(sql) [这里的SQL是delete,update,insert]执行以后都会返回一个关闭的记录集也就是说如果sql是插入,更新,删除语句,那么set rs=conn.execute(sql)中的RS就没什么意义。

1.conn.executesql="select * from admin where username='xiaozhu'"set rs=conn.execute(sql)执行完以后自动关闭记录集最后只需要关闭连接就可以了conn.closeset conn=nothing2.rs.openset rs=server.createobject("adodb.recordset")sql="select * from admin where username='xiaozhu'"rs.open sql,conn,1,1可以自己设定一些参数,即锁定和游标的移动方式最后要关闭记录集和连接rs.closeset rs=nothingconn.closeset conn=nothingmand.executesql="select * from admin where username='xiaozhu'"set rs=command.execute(sql)***************************************************************************** 1.set rs=conn.execute("如果是select语句") 得到的rs.recordcount=-1rs.open sql,conn("sql为select语句") 得到的rs.recordcount为正常的记录数2.rs.open是打开数据库conn.execute 是执行SQL指令set rs=conn.execute(insert,update,delete)返回一个关闭了的记录集set rs=conn.execute(select)返回一个没有关闭的记录集3.CONN.EXECUTE(SQL,RowsAffected,C)参数含义:SQL的值可以是SQL语句、表名、存储过程名,也可以是数据提供者所能接受的任意字符串。

adodb.recordset.open(rs.open)方法参数详解

adodb.recordset.open(rs.open)方法参数详解

adodb.recordset.open(rs.open)⽅法参数详解ADO Recordset 对象ADO Recordset 对象⽤于容纳⼀个来⾃数据库表的记录集。

⼀个 Recordset 对象由记录和列(字段)组成。

在 ADO 中,此对象是最重要且最常⽤于对数据库的数据进⾏操作的对象。

ProgIDset objRecordset=Server.CreateObject("ADODB.recordset")当您⾸次打开⼀个 Recordset 时,当前记录指针将指向第⼀个记录,同时 BOF 和 EOF 属性为 False。

如果没有记录,BOF 和 EOF 属性为 True。

Recordset 对象能够⽀持两种更新类型:⽴即更新 - ⼀旦调⽤ Update ⽅法,所有更改被⽴即写⼊数据库。

批更新 - provider 将缓存多个更改,然后使⽤ UpdateBatch ⽅法把这些更改传送到数据库。

在 ADO,定义了 4 中不同的游标(指针)类型:•动态游标 - 允许您查看其他⽤户所作的添加、更改和删除•键集游标 - 类似动态游标,不同的是您⽆法查看有其他⽤户所做的添加,并且它会防⽌您访问其他⽤户已删除的记录。

其他⽤户所做的数据更改仍然是可见的。

•静态游标 - 提供记录集的静态副本,可⽤来查找数据或⽣成报告。

此外,由其他⽤户所做的添加、更改和删除将是不可见的。

当您打开⼀个客户端 Recordset 对象时,这是唯⼀被允许的游标类型。

•仅向前游标 - 只允许在 Recordset 中向前滚动。

此外,由其他⽤户所做的添加、更改和删除将是不可见的。

可通过 CursorType 属性或 Open ⽅法中的 CursorType 参数来设置游标的类型。

注释:并⾮所有的提供者(providers)⽀持 Recordset 对象的所有⽅法和属性。

想了解更多ADO Recordset 对象的朋友可以到查看更多内容。

VBADODB中游标和锁定方式说明

VBADODB中游标和锁定方式说明

VBADODB中游标和锁定⽅式说明VB ADODB中的RecordSet.Open打开记录的两个参数adOpenKeyset、adLockBatchOptimistic的详细说明:这两个参数当时弄明⽩,过后⼜忘记了,做了笔记,但为了⽅便,还是在Blog中也做上这个笔记。

缺省值1 adLockReadOnly RecordSet对象以只读⽅式启动,⽆法运⾏增、删、改等操作2 adLockPessimistic 当数据源正在更新时,系统会锁定其他⽤户的动作,以保数据⼀致性。

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

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

默认值0 adOpenForwardOnly 使⽤仅向前游标。

除了在记录中只能向前滚动外,与静态游标相同。

当只需要在 Recordset 中进⾏⼀个传递时,⽤它可提⾼性能。

1 adOpenKeyset 使⽤键集游标。

尽管从您的 Recordset 不能访问其他⽤户删除的记录,但除⽆法查看其他⽤户添加的记录外,它和动态游标相似。

其他⽤户所做的数据更改依然可见。

2 adOpenDynamic 使⽤动态游标。

其他⽤户所做的添加、更改或删除均可见,⽽且允许 Recordset 中的所有移动类型(如果提供者不⽀持书签,则书签除外)。

3 adOpenStatic 使⽤静态游标。

⼀组记录的静态副本,可⽤于查找数据或⽣成报告。

其他⽤户所做的添加、更改或删除不可见。

-1 adOpenUnspecified 不指定游标类型个⼈总结:如果是查找功能⼀般锁定⽅式为1例rs.Open sql, conn, 1, 1 '==免去增删改如果是其他功能⼀般为2例rs.Open sql, conn, 1, 2 '==当然这⾥游标⽅式1可以根据特定情况更改。

在Word中从Access数据库随机抽取试题制作试卷的方法

在Word中从Access数据库随机抽取试题制作试卷的方法

在Word中从Access数据库随机抽取试题制作试卷的方法在Word中,从Access数据库的对应表中,随机抽取试题并制作成一定版面的试卷,我作了一些尝试,试卷要求:生成大题及对应的分值,题目随机抽取,单选、多选答案也要随机变化(其中含有“以上”字样开头的,必须是第三个或者第四个答案),并根据抽取的题目情况,生成对应的参考答案文件(文件是文本文件)。

一、数据库其中blankQt、judgeQt、multiQt、singleQt结构如上,分别装的是填空题、判断题、多选题、单选题内容。

数据可以自己根据需要填写。

二、VBA窗体利用Word自身所带的VBA,制作窗体如下:三、VBA代码1.模块中代码Sub startMacro()optForm.ShowEnd SubSub readTable(ByVal sBT As String, ByVal sST As String, ByVal iST As Integer, ByVal iMT As Integer, ByVal iJT As Integer, ByVal iBT As Integer)Dim tm(3000) As String, bx(3000, 4) As String, da(3000) As String, i As Integer, j As Integer, cnSq As String, tmCnt As IntegerDim subNo() As Integer, xHs() As IntegerDim tmpTm As String, tmpBx As String, tmpDa As String, tABCD As String, tmpZM As String, outDa As String, qtTitle As String, da1 As StringDim conn As ADODB.ConnectionSet conn = New ADODB.ConnectionDim cnSr As StringcnSr = "driver={microsoft access driver (*.mdb, *.accdb)};dbq=" & ThisDocument.Path & "\nopapertest.mdb"conn.Open cnSrDim refDaFile As StringrefDaFile = ThisDocument.Path & "\" & sST & "(参考答案).txt"Open refDaFile For Output As #1Print #1, sBTPrint #1, sST & "(参考答案)" & vbCrLfsetDocTitle sBT, sST '设置标题(一二级)Dim sRs As ADODB.Recordset '对单选题进行处理Set sRs = New ADODB.RecordsetcnSq = "select 题目,备选A,备选B,备选C,备选D,答案from singleQt"sRs.Open cnSq, conni = 0Do While Not sRs.EOFi = i + 1tm(i) = sRs(0)For j = 1 To 4bx(i, j) = sRs(j)Nextda(i) = bx(i, sRs(5) * 1)sRs.MoveNextLooptmCnt = iReDim subNo(iST), xHs(4)Dim ySBx(4) As StringrandArray subNo, iST, tmCntqtTitle = "一、单项选择题(每小题3分,有" & iST & "个小题,共" & 3 * iST & "分)" Selection.TypeText qtTitle & vbCrLfPrint #1, qtTitlePrint #1, "1-5: ";For i = 1 To iST'Selection.TypeText xHs(1) & xHs(2) & xHs(3) & xHs(4) & vbCrLftmpTm = tm(subNo(i))tmpDa = da(subNo(i))Selection.TypeText i & "、" & tmpTm & vbCrLfySBx(1) = bx(subNo(i), 1)ySBx(2) = bx(subNo(i), 2)ySBx(3) = bx(subNo(i), 3)ySBx(4) = bx(subNo(i), 4)If InStr(ySBx(4), "以上") > 0 And InStr(ySBx(3), "以上") > 0 ThenrandArray xHs, 2, 2xHs(3) = 3: xHs(4) = 4ElseIf InStr(ySBx(4), "以上") > 0 ThenrandArray xHs, 3, 3xHs(4) = 4ElserandArray xHs, 4, 4End IfFor j = 1 To 4tmpBx = ySBx(xHs(j))If j = 1 Then da1 = tmpBxtABCD = Chr(64 + j)Select Case Len(da1)Case Is <= 8If j Mod 4 <> 0 ThenoutDa = tmpBx & vbTabElseoutDa = tmpBx & vbCrLfEnd IfCase Is <= 16If j Mod 2 <> 0 ThenoutDa = tmpBx & vbTabElseoutDa = tmpBx & vbCrLfEnd IfCase ElseoutDa = tmpBx & vbCrLfEnd SelectSelection.TypeText tABCD & "." & outDaIf tmpBx = tmpDa Then tmpZM = tABCDNextPrint #1, tmpZM;If i = iST Or i Mod 20 = 0 ThenIf i = iST ThenPrint #1, ""'Print #1, (i \ 5) * 5 + 1 & "-" & iST & ": ";ElsePrint #1, ""Print #1, (i \ 5) * 5 + 1 & "-" & ((i \ 5) + 1) * 5 & ": ";End IfElseIf i Mod 5 = 0 And i < iST - 5 ThenPrint #1, vbTab & (i \ 5) * 5 + 1 & "-" & ((i \ 5) + 1) * 5 & ": ";End IfEnd IfNextsRs.CloseSet sRs = NothingDim mRs As ADODB.Recordset '对多选题进行处理Set mRs = New ADODB.RecordsetcnSq = "select 题目,备选A,备选B,备选C,备选D,答案from multiQt"mRs.Open cnSq, conni = 0Do While Not mRs.EOFi = i + 1tm(i) = mRs(0)da(i) = ""For j = 1 To 4bx(i, j) = mRs(j)If Mid(mRs(5), j, 1) = "1" Thenda(i) = da(i) & "[[" & bx(i, j) & "]]"End IfNextmRs.MoveNextLooptmCnt = iReDim subNo(iMT), xHs(4)randArray subNo, iMT, tmCntqtTitle = "二、多项选择题(每小题4分,有" & iMT & "个小题,共" & 4 * iMT & "分)" Selection.TypeText qtTitle & vbCrLfPrint #1, vbCrLf & qtTitleFor i = 1 To iMTrandArray xHs, 4, 4'Selection.TypeText xHs(1) & xHs(2) & xHs(3) & xHs(4) & vbCrLftmpTm = tm(subNo(i))tmpDa = da(subNo(i))Selection.TypeText i & "、" & tmpTm & vbCrLftmpZM = ""For j = 1 To 4tmpBx = bx(subNo(i), xHs(j))If j = 1 Then da1 = tmpBxtABCD = Chr(64 + j)If InStr(tmpDa, "[[" & tmpBx & "]]") > 0 ThentmpZM = tmpZM & tABCDEnd IfSelect Case Len(da1)Case Is <= 8If j Mod 4 <> 0 ThenoutDa = tmpBx & vbTabElseoutDa = tmpBx & vbCrLfEnd IfCase Is <= 16If j Mod 2 <> 0 ThenoutDa = tmpBx & vbTabElseoutDa = tmpBx & vbCrLfEnd IfCase ElseoutDa = tmpBx & vbCrLfEnd SelectSelection.TypeText tABCD & "." & outDaNext'Selection.TypeText tmpZM & ": " & tmpDa & vbCrLfPrint #1, i & "." & tmpZM & vbTab;If i = iMT Or i Mod 10 = 0 Then Print #1, ""NextmRs.CloseSet mRs = NothingDim jRs As ADODB.Recordset '对判断题进行处理Set jRs = New ADODB.RecordsetcnSq = "select 题目,答案from judgeQt"jRs.Open cnSq, conni = 0Do While Not jRs.EOFi = i + 1tm(i) = jRs(0)da(i) = jRs(1)jRs.MoveNextLooptmCnt = iReDim subNo(iJT)Dim k As IntegerrandArray subNo, iJT, tmCntqtTitle = "三、判断题(每小题2分,有" & iJT & "个小题,共" & 2 * iJT & "分)"Selection.TypeText qtTitle & vbCrLfPrint #1, vbCrLf & qtTitlePrint #1, "1-5: ";For i = 1 To iJTtmpTm = tm(subNo(i))tmpDa = da(subNo(i))Selection.TypeText i & "、" & tmpTm & vbCrLftmpZM = ""If UCase(tmpDa) = "TRUE" Or UCase(tmpDa) = "ON" Or UCase(tmpDa) = "YES" Or tmpDa = "1"ThentmpZM = "A"ElsetmpZM = "B"End IfPrint #1, tmpZM;If i = iJT Or i Mod 20 = 0 ThenIf i = iJT ThenPrint #1, ""'Print #1, (i \ 5) * 5 + 1 & "-" & iJT & ": ";ElsePrint #1, ""Print #1, (i \ 5) * 5 + 1 & "-" & ((i \ 5) + 1) * 5 & ": ";End IfElseIf i Mod 5 = 0 ThenPrint #1, vbTab & (i \ 5) * 5 + 1 & "-" & ((i \ 5) + 1) * 5 & ": ";End IfEnd IfNextjRs.CloseSet jRs = NothingDim bRs As ADODB.Recordset '对填空题进行处理cnSq = "select 题目,答案from blankQt"Set bRs = New ADODB.RecordsetbRs.Open cnSq, conni = 0Do While Not bRs.EOFi = i + 1tm(i) = bRs(0)da(i) = bRs(1)bRs.MoveNextLooptmCnt = iReDim subNo(iBT)randArray subNo, iBT, tmCntqtTitle = "四、填空题(每小题3分,有" & iBT & "个小题,共" & 3 * iBT & "分)"Selection.TypeText qtTitle & vbCrLfPrint #1, vbCrLf & vbCrLf & qtTitleFor i = 1 To iBTtmpTm = tm(subNo(i))tmpDa = da(subNo(i))Selection.TypeText i & "、" & tmpTm & vbCrLfPrint #1, i & "、" & tmpDaNextbRs.CloseSet bRs = Nothingconn.CloseSet conn = NothingClose #1setTabPosition '为整篇文档设置Tab位置End SubPrivate Sub setDocTitle(ByVal bT As String, ByVal sT As String) '设置文档标题与小标题,分别为一级标题和二级标题ActiveWindow.ActivePane.View.Type = wdOutlineViewSelection.Range.Paragraphs.Style = ActiveDocument.Styles(wdStyleHeading1)Selection.TypeText Text:=bTSelection.HomeKey Unit:=wdLine, Extend:=wdExtendSelection.ParagraphFormat.Alignment = wdAlignParagraphCenterSelection.EndKey Unit:=wdLineSelection.TypeParagraphSelection.Range.Paragraphs.Style = ActiveDocument.Styles(wdStyleHeading2)Selection.TypeText Text:=sTSelection.HomeKey Unit:=wdLine, Extend:=wdExtendSelection.ParagraphFormat.Alignment = wdAlignParagraphCenterSelection.EndKey Unit:=wdLineSelection.TypeParagraphSelection.Range.Style = ActiveDocument.Styles(wdStyleNormal)If ActiveWindow.View.SplitSpecial = wdPaneNone ThenActiveWindow.ActivePane.View.Type = wdPrintViewElseActiveWindow.View.Type = wdPrintViewEnd IfEnd SubPublic Sub clearThisDoc(ByVal b As Boolean)'' clearThisDoc Macro' 清除此文档的所有内容'Selection.WholeStorySelection.Delete Unit:=wdCharacter, Count:=1End SubPublic Sub writeToEachXML(ByVal b As Boolean)Dim connStr As String, conn As ADODB.ConnectionconnStr = "driver={microsoft access driver (*.mdb, *.accdb)};dbq=" & ThisDocument.Path & "\nopapertest.mdb"Set conn = New ADODB.Connectionconn.Open connStrDim xmlFirst As StringxmlFirst = "<?xml version=" & Chr(34) & "1.0" & Chr(34) & " encoding=" & Chr(34) & "utf-8" & Chr(34) & "?>"Dim xmlSrcBegin As String, xmlSrcEnd As StringxmlSrcBegin = "<resources>"xmlSrcEnd = "</resources>"Dim xmlArrBegin(5) As StringDim xmlArrEnd As StringxmlArrEnd = "</string-array>"'以下是单项选择题Dim xmlFileName As StringxmlFileName = ThisDocument.Path & "\S\arrays.xml"Open xmlFileName For Output As #2Print #2, xmlFirstPrint #2, xmlSrcBeginDim sql As Stringsql = "select 题目,备选A,备选B,备选C,备选D,答案from singleQt"Dim rs2 As ADODB.RecordsetSet rs2 = New ADODB.Recordsetrs2.Open sql, connxmlArrBegin(0) = "singletms"xmlArrBegin(1) = "singlebxas"xmlArrBegin(2) = "singlebxbs"xmlArrBegin(3) = "singlebxcs"xmlArrBegin(4) = "singlebxds"xmlArrBegin(5) = "singledas"Dim i As Integer, tmpC As StringFor i = 0 To 5rs2.MoveFirstPrint #2, arraySign(xmlArrBegin(i))While Not rs2.EOFtmpC = rs2(i)tmpC = Replace(tmpC, "&", "&amp;")tmpC = Replace(tmpC, "<", "&lt;")tmpC = Replace(tmpC, "@", "@")tmpC = Replace(tmpC, "?", "?")Print #2, "<item>" & tmpC & "</item>";rs2.MoveNextWendPrint #2, xmlArrEndNextrs2.CloseSet rs2 = NothingPrint #2, xmlSrcEndClose #2'以下多项选择题xmlFileName = ThisDocument.Path & "\M\arrays.xml"Open xmlFileName For Output As #2Print #2, xmlFirstPrint #2, xmlSrcBeginsql = "select 题目,备选A,备选B,备选C,备选D,答案from multiQt" Set rs2 = New ADODB.Recordsetrs2.Open sql, connxmlArrBegin(0) = "multitms"xmlArrBegin(1) = "multibxas"xmlArrBegin(2) = "multibxbs"xmlArrBegin(3) = "multibxcs"xmlArrBegin(4) = "multibxds"xmlArrBegin(5) = "multidas"For i = 0 To 5rs2.MoveFirstPrint #2, arraySign(xmlArrBegin(i))While Not rs2.EOFtmpC = rs2(i)tmpC = Replace(tmpC, "&", "&amp;")tmpC = Replace(tmpC, "<", "&lt;")tmpC = Replace(tmpC, "@", "@")tmpC = Replace(tmpC, "?", "?")Print #2, "<item>" & tmpC & "</item>";rs2.MoveNextWendPrint #2, xmlArrEndNextrs2.CloseSet rs2 = NothingPrint #2, xmlSrcEndClose #2'以下判断题xmlFileName = ThisDocument.Path & "\J\arrays.xml" Open xmlFileName For Output As #2Print #2, xmlFirstPrint #2, xmlSrcBeginsql = "select 题目,答案from judgeQt"Set rs2 = New ADODB.Recordsetrs2.Open sql, connxmlArrBegin(0) = "judgetms"xmlArrBegin(1) = "judgedas"For i = 0 To 1rs2.MoveFirstPrint #2, arraySign(xmlArrBegin(i))While Not rs2.EOFtmpC = rs2(i)If i = 1 ThentmpC = IIf(UCase(tmpC) = "TRUE", "1", "2") End IftmpC = Replace(tmpC, "&", "&amp;")tmpC = Replace(tmpC, "<", "&lt;")tmpC = Replace(tmpC, "@", "@")tmpC = Replace(tmpC, "?", "?")Print #2, "<item>" & tmpC & "</item>";rs2.MoveNextWendPrint #2, xmlArrEndNextrs2.CloseSet rs2 = NothingPrint #2, xmlSrcEndClose #2'以下填空题xmlFileName = ThisDocument.Path & "\B\arrays.xml" Open xmlFileName For Output As #2Print #2, xmlFirstPrint #2, xmlSrcBeginsql = "select 题目,答案from blankQt"Set rs2 = New ADODB.Recordsetrs2.Open sql, connxmlArrBegin(0) = "blanktms"xmlArrBegin(1) = "blankdas"For i = 0 To 1rs2.MoveFirstPrint #2, arraySign(xmlArrBegin(i))While Not rs2.EOFtmpC = rs2(i)tmpC = Replace(tmpC, "&", "&amp;")tmpC = Replace(tmpC, "<", "&lt;")tmpC = Replace(tmpC, "@", "@")tmpC = Replace(tmpC, "?", "?")Print #2, "<item>" & tmpC & "</item>";rs2.MoveNextWendPrint #2, xmlArrEndNextrs2.CloseSet rs2 = NothingPrint #2, xmlSrcEndClose #2conn.CloseSet conn = NothingEnd SubPrivate Function arraySign(ByVal arrName As String) As StringarraySign = "<string-array name=" & Chr(34) & arrName & Chr(34) & ">"End FunctionPrivate Sub randArray(ByRef a() As Integer, ByVal xB As Integer, ByVal maxRnd As Integer) Dim tmp As Integer, flag As Boolean, i As Integer, j As Integer ', s As StringRandomize TimerFor i = 1 To xBflag = Truetmp = Int(Rnd * maxRnd + 1)For j = 1 To i - 1If a(j) = tmp Thenflag = FalseExit ForEnd IfNextIf flag = True Thena(i) = tmp's = s & a(i) & ", "Elsei = i - 1End IfNext'MsgBox sEnd SubPrivate Sub setTabPosition()Selection.WholeStorySelection.ParagraphFormat.TabStops.ClearAllActiveDocument.DefaultTabStop = CentimetersToPoints(0.74)Selection.ParagraphFormat.TabStops.Add Position:=CentimetersToPoints(3.52) _ , Alignment:=wdAlignTabLeft, Leader:=wdTabLeaderSpacesSelection.ParagraphFormat.TabStops.Add Position:=CentimetersToPoints(7.04) _ , Alignment:=wdAlignTabLeft, Leader:=wdTabLeaderSpacesSelection.ParagraphFormat.TabStops.Add Position:=CentimetersToPoints(10.56 _ ), Alignment:=wdAlignTabLeft, Leader:=wdTabLeaderSpacesSelection.HomeKey Unit:=wdStoryEnd Sub2.窗体对应代码Const GkSNums As Integer = 41Const GkMNums As Integer = 9Const GkJNums As Integer = 26Const GkBNums As Integer = 17Private Sub cmdClrDoc_Click()clearThisDoc TrueEnd SubPrivate Sub cmdOutToXML_Click()'生成对应的四个XML文件writeToEachXML TrueEnd SubPrivate Sub UserForm_Initialize()chkGk_ClickEnd SubPrivate Sub chkGk_Click()If chkGk.Value = True ThenMe.frmFreeSet.Enabled = False ElseMe.frmFreeSet.Enabled = True End IfEnd SubPrivate Sub chkS_Click()If chkS.Value = True ThentxtS.Enabled = TrueElsetxtS.Enabled = FalseEnd IfEnd SubPrivate Sub chkM_Click()If chkM.Value = True ThentxtM.Enabled = TrueElsetxtM.Enabled = FalseEnd IfEnd SubPrivate Sub chkJ_Click()If chkJ.Value = True ThentxtJ.Enabled = TrueElsetxtJ.Enabled = FalseEnd IfEnd SubPrivate Sub chkB_Click()If chkB.Value = True ThentxtB.Enabled = TrueElsetxtB.Enabled = FalseEnd IfEnd SubPrivate Sub cmdGetQuestions_Click()Dim mainTitle As String, subTitle As StringmainTitle = Trim(Me.txtBigTitle.Text)subTitle = Trim(Me.txtSubTitle.Text)Dim intST As Integer, intMT As Integer, intJT As Integer, intBT As IntegerIf chkGk.Value = True ThenintST = GkSNumsintMT = GkMNumsintJT = GkJNumsintBT = GkBNumsElseIf chkS.Value = True ThenintST = Val(Me.txtS.Text)If intST < 5 Or intST > 100 Then intST = 40ElseintST = 0End IfIf chkM.Value = True ThenintMT = Val(Me.txtM.Text)If intMT < 5 Or intMT > 100 Then intMT = 30ElseintMT = 0End IfIf chkJ.Value = True ThenintJT = Val(Me.txtJ.Text)If intJT < 5 Or intJT > 100 Then intJT = 40ElseintJT = 0End IfIf chkB.Value = True ThenintBT = Val(Me.txtB.Text)If intBT < 5 Or intBT > 100 Then intBT = 30ElseintBT = 0End IfEnd If'MsgBox mainTitle & vbCrLf & subTitle & vbCrLf & intST & vbCrLf & intMT & vbCrLf & intJT & vbCrLf & intBTreadTable mainTitle, subTitle, intST, intMT, intJT, intBTEnd SubPrivate Sub cmdEnd_Click()EndEnd Sub以上代码,由于时间关系,没有作一一注释,请谅。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

rs.open sql,conn,a,b表示的意思rs.open sql,conn,a,b中的a,b其实表示的是访问权限和锁定方式rs.open sql,conn,1,1本文中大量使用的方式。

无法看到其他用户添加的新数据,但被其他用户删除的数据将变为不可访问,同时可以看到其他用户所作的修改。

rs.open sql,conn,1,3静态打开方式。

在你使用数据是其他用户无法访问该数据rs.open sql,conn,1,2动态的数据库打开方式,其他用户所进行的修改、删除和新建等工作都会立即在数据对象中体现出来,并且支持全部类型的数据移动方式,除非提供者不支持,否则也可以进行书签操作rs.open sql,conn,-1不指定打开方式rs.open sql,conn,a,b参数a为设定游标的类型,其取值为:0 仅向前游标,只能向前浏览记录,不支持分页、recordset、bookmark1 键集游标,其他用户对记录说做的修改将反映到记录集中,但其他用户增加或删除记录不会反映到记录集中。

支持分页、recordset、bookmark2 动态游标功能最强,但耗资源也最多。

用户对记录说做的修改,增加或删除记录都将反映到记录集中。

支持全功能浏览。

3 静态游标,只是数据的一个快照,用户对记录说做的修改,增加或删除记录都不会反映到记录集中。

支持向前或向后移动参数b为记录集的锁定类型,其取值为:1 锁定类型,默认的,只读,不能作任何修改2 当编辑时立即锁定记录,最安全的方式3 只有在调用update方法时才锁定记录集,而在此前的其他操作仍可对当前记录进行更改、插入和删除等4 当编辑时记录不会被锁定,而更改、插入和删除是在批处理方式下完成的打开数据记录集方法其实不止一种,但是我们用的最多的就是rs.open sql,1,1的方法,可是后面的数字参数很多人不解其意,下面我们来介绍一下。

其实open方法后面有多个参数cursortype locktype commandtype比如rs.open sql,1,1也可以写成rs.cursortype = 1rs.locktype = 1rs.open sql其中cursortype代表从一个表或者一个sql查询结果返回的记录。

这个参数有四个值分别是:adopenforwardonly 表示只允许在记录集内的记录间往前移动。

这个是缺省值。

adopenkeyset 反映由其它用户所做的对记录的改变或者删除动作,但并不反映由其它用户做作的添加新记录的动作。

adopendynamic 反映由其它用户所做的对记录的改变或者删除动作,包括添加的新记录adopenstatic 不反映其它用户对记录所做的修改,添加,删除动作。

这四个值vbscript预定义位adopenforwardonly = 0adopenkeyset = 1adopendynamic = 2adopenstatic = 3locktype 表示当打开记录集时,数据提供者用于锁定数据库的类型:adlockreadonly 数据不能改变,这是缺省值!adlockpessimistic 数据提供者在开始编辑数据的时候锁定记录adlockoptimistic 仅当调用update方法时,数据提供者锁定记录adlockbatchoptimistic 用于批处理修改他们的常量值定义分别是:adlockreadonly = 1adlockpessimistic = 2adlockoptimistic = 3adlockbatchoptimistic = 4commandtype这个参数由于很少用到,这里就不讲了。

你只要记住读方式打开用rs.open sql,conn,1,1而读写方式打开用rs.open sql,conn,1,3前面的1是游标移动方式,只能向下移动我写了一个两个数据库转换的代码,我想转完一行,就显示"第N行转换成功"但是我写的这段代码不会出现这种情况,只能转到完成后才会都显示出来,请问要怎么改,才能转一行,显示一行呢要把数据库A转到数据库Bi=0set rs1= Server.CreateObject("adodb.recordset")rs1.open "select jid from bookj" ,conn1,1,3do while not rs1.eof------------------------------------上面这句是读出数据库Aset rs= Server.CreateObject("adodb.recordset")rs.open "select * from bookj where jid="&rs1("jid") ,conn,1,3------------------------------------上面这段是数据库Bif rs.eof thenrs.addnewrs("jid")=rs1("jid")rs.updateend ifi=i+1response.writer "第"&i&"条记录已转换完成"rs1.movenextloop图上的只有全部转换后才会显示i是变量实添加和更新也没有什么区别,只不过在添加的时候要用到rs.AddNew,rs.open "select * from admin where password='"&request.form("password")&"'",conn,3,2if not (rs.eof or err) thenrs.AddNewrs("bodymax")=trim(request.form("bodymax"))rs("pagesize")=trim(request.form("pagesize"))rs.update更新就把rs.AddNew去掉就行了3,2是打开数据库的方式RecordSet对象打开数据表的语法是这样的:RS.Open 数据来源,数据链路,指针类型,锁定方式其中的参数意义如下:? 数据来源:指定数据表的名称? 数据链路:指定一个已经申明的Connection对象,当使用RecordSet对象的Open方法建立一个连接的时候,必须使用Connection对象保证连接的安全。

? 指针类型:设置打开RecordSet的指针类型,其参数值可以设置为0至3,各个值的意义如下:①adOpenForwardOnly/0:打开一个只能向前移动的指针,这是默认值;②adOpenKeyset/1:表示打开一个Keyset type记录指针,使用该指针无法读取其他用户添加或删除的数据,但是更新的数据会立即显示支持双向指针。

③adOpenDynamic/2:打开一个动态指针,使用该指针可以如实反映其他用户操作数据库的情况。

④adOpenStatic/3:表示打开一个静态指针,指针无法实时反映其他用户操作数据库的情况,通常用于搜索或添加记录时使用,支持双向指针。

? 锁定方式:可以设置所打开RecordSet的锁定状态,其参数值可以设置为1到4,各个值的意义如下:①adLockReadOnly/1:将RecordSet打开为只读状态,此为默认值。

②adLockPessimistic/2:当用户对RecordSet中某条记录作编辑时便锁定记录。

③adLockOptimistic/3:当用户调用Update函数对RecordSet作更新时才锁定记录。

④adLockBatchOptimistic/4:用户做批次更新时才锁定记录。

rs.movenext 将记录指针从当前的位置向下移一行rs.moveprevious 将记录指针从当前的位置向上移一行rs.movefirst 将记录指针移到数据表第一行rs.movelast 将记录指针移到数据表最后一行rs.absoluteposition=N 将记录指针移到数据表第N行rs.absolutepage=N 将记录指针移到第N页的第一行rs.pagesize=N 设置每页为N条记录rs.pagecount 根据pagesize 的设置返回总页数rs.recordcount 返回记录总数rs.bof 返回记录指针是否超出数据表首端,true表示是,false为否rs.eof 返回记录指针是否超出数据表末端,true表示是,false为否rs.delete 删除当前记录,但记录指针不会向下移动rs.addnew 添加记录到数据表末端rs.update 更新数据表记录rs.open sql,conn,a,b参数a为设定游标的类型,其取值为:0 仅向前游标,只能向前浏览记录,不支持分页、recordset、bookmark1 键集游标,其他用户对记录说做的修改将反映到记录集中,但其他用户增加或删除记录不会反映到记录集中。

支持分页、recordset、bookmark2 动态游标功能最强,但耗资源也最多。

用户对记录说做的修改,增加或删除记录都将反映到记录集中。

支持全功能浏览。

3 静态游标,只是数据的一个快照,用户对记录说做的修改,增加或删除记录都不会反映到记录集中。

支持向前或向后移动参数b为记录集的锁定类型,其取值为:1 锁定类型,默认的,只读,不能作任何修改2 当编辑时立即锁定记录,最安全的方式3 只有在调用update方法时才锁定记录集,而在此前的其他操作仍可对当前记录进行更改、插入和删除等4 当编辑时记录不会被锁定,而更改、插入和删除是在批处理方式下完成的打开数据记录集方法其实不止一种,但是我们用的最多的就是rs.open sql,1,1的方法,可是后面的数字参数很多人不解其意,下面我们来介绍一下。

其实open方法后面有多个参数cursortype locktype commandtype比如rs.open sql,1,1也可以写成rs.cursortype = 1rs.locktype = 1rs.open sql其中cursortype代表从一个表或者一个sql查询结果返回的记录。

这个参数有四个值分别是:adopenforwardonly 表示只允许在记录集内的记录间往前移动。

这个是缺省值。

adopenkeyset 反映由其它用户所做的对记录的改变或者删除动作,但并不反映由其它用户做作的添加新记录的动作。

相关文档
最新文档