<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Access &#8211; 奇风&#039;s Blog</title>
	<atom:link href="http://blog.duoday.com/tag/access/feed" rel="self" type="application/rss+xml" />
	<link>http://blog.duoday.com</link>
	<description>人生总有缺失，不和节拍，不和心意，没有感情的婚姻就是一滩死水。</description>
	<lastBuildDate>Fri, 26 Oct 2018 01:02:55 +0000</lastBuildDate>
	<language>zh-Hans</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=7.0</generator>
	<item>
		<title>动网数据库Access 转成SQL Server2000 数据库的一个绝对成功的好方法</title>
		<link>http://blog.duoday.com/2010/307.html</link>
					<comments>http://blog.duoday.com/2010/307.html#comments</comments>
		
		<dc:creator><![CDATA[奇风]]></dc:creator>
		<pubDate>Tue, 05 Jan 2010 07:34:59 +0000</pubDate>
				<category><![CDATA[人在网络]]></category>
		<category><![CDATA[Access]]></category>
		<category><![CDATA[SQL Server2000]]></category>
		<category><![CDATA[动网]]></category>
		<guid isPermaLink="false">http://blog.duoday.com/2010/307.html</guid>

					<description><![CDATA[1、必须先安装Microsoft Office Access 2003,和SQL Server2000。2、把 [&#8230;]]]></description>
										<content:encoded><![CDATA[<p>1、必须先安装Microsoft Office Access 2003,和SQL Server2000。2、把旧的动网数据库备份，备份完成后，用Access 2003打开动网旧数据库，在打开时会出现一个警告，不要理会它（安全警告），按打开键，打开后按工具栏——数据库实用工具——转换数据库——转换为2002-2003格式，把数据库转换成2003格式。</p>
<p>2、转换完成后再用Access 2003打开，打开后按工具栏——数据库实用工具——升迁向导——新建数据库——填写SQL数据库登陆名称、密码和要新建的动网数据库（准备转成新的动网数据库），按下一步，按“ 》”键，再按下一步，选取所有选项，再按下一步，选择“不对应用程序作任何改动”，再按完成。</p>
<p>3、打开SQL企业管理器——数据库&#8212;选中相应的数据库&#8212;右键所有任务&#8212;&#8211;生成SQL脚本——常规——全部显示——编写全部对象脚本——确定（记住存放的位置）。</p>
<p>4、用记事本打开刚才生成的SQL脚本，在编辑栏——替换——查找内容为“smalldatetime”替换为“datetime”——替换全部；完成后再在编辑栏——替换——查找内容为“nvarchar”替换为“varcha”——替换全部，完成后保存退出。</p>
<p>5、打开SQL企业管理器——数据库——点击这个数据库下新建的动网数据库，然后在工具栏——SQL查询分析器——文件——打开——“刚才生成的SQL脚本”——查询——执行，然后关闭窗口。<br />
（有的朋友说，用sql版自带的sql脚本也可以，大家不妨试试看）<span id="more-307"></span></p>
<p>6、再回到SQL企业管理器——数据库——点击这个数据库下新建的动网数据库，然后打开工具栏——数据库转换服务——导入数据——下一步——数据源“Microsoft Access”文件名“为旧的动网数据库”——下一步——再下一步——从源数据复制表和视图——下一步——全选——下一步——立即运行——下一步——完成。</p>
<p>7、修改动网文件夹两个文件conn.asp和inc\const.asp。<br />
Conn.asp文件修改如下：<br />
Const IsSqlDataBase = 1<br />
SqlDatabaseName = &#8220;MYBBS&#8221;<br />
SqlPassword = &#8220;sa&#8221;<br />
SqlUsername = &#8220;sa&#8221;<br />
SqlLocalName = &#8220;MYSERVER&#8221;</p>
<p>Const.asp文件修改如下：<br />
Const IsBuss=0</p>
<p>8、最后补充：<br />
（1）由于SQL2000里面没有&#8221;自动编号&#8221;,所以你的以&#8221;自动编号&#8221;设置的字段都会变成非空的字段,这就必须手工修改这些字段,并把他的&#8221;标示&#8221;选择&#8221;是&#8221;,种子为&#8221;1&#8243;,增量为&#8221;1&#8243;,<br />
（2）另外,ACCESS2000转换成SQL2000后,原来属性为&#8221;是/否&#8221;的字段将被转换成非空的&#8221;bit&#8221;,这时候你必须修改成自己想要的属性了;<br />
（3）另外,大家要注意对时间函数的把握.ACCESS与SQL是有很多不同的.<br />
根据以上3点，再回到SQL企业管理器——数据库——点击这个数据库下新建的动网数据库，将所有表的字段属性根据以上3点进行修改</p>
<p>补充说明：</p>
<p>自动增加字段需要重写。在access中经常使用的自动编号字段，导入到mssql后，他并不是自增型的int，需要手工设置，把导入后的自动编号字段的标识的“否”改为“是”，“种子”和“递增量”都为“1”，才能成为自动编号</p>
<p>所有的默认值都丢失了。主要是数字类型和日期类型</p>
<p>所有now()，time()，date()要改成getdate()</p>
<p>所有datediff(&#8216;d&#8217;, time1, time2)要改成datediff(day, time1, time2)</p>
<p>所有datediff(&#8216;ww&#8217;, time1, time2)要改成datediff(week, time1, time2)</p>
<p>所有datediff(&#8216;d&#8217;, time1, time2)要改成datediff(day, time1, time2)</p>
<p>在mssql server中，有许多保留字，在access中是没有的，当你把数据导入到mssql的时候，问题就出来了。mssql在导入的时候，会自动给这些字段（包括数据库中的表名）加上“[字段名]”，因此，你必须修改你的脚本，把相应的字段名字（或者表名字）加上中括号，或改变字段名字为不是mssql的保留字</p>
<p>在用access关于时间的使用，大家喜欢使用“select * from aaaa while time=&#8221;&amp;now()”这样的sql语句，然而，在mssql中没有“now()”这个函数，而是使用“getdate()”，所以，所有的sql语句中的“now()”必须换成“getdate()”。</p>
<p>日期函数不相同，在对ACCESS数据库处理中，可用date()、time()等函数，但对<br />
SQL SERVER数据库处理中，只能用datediff,dateadd等函数，而不能用date()、time()等函数。</p>
<p>转化时，跟日期有关的字段，SQL SERVER默认为smalldatetime型，我们最好将它变为datetime型，因为datetime型的范围比smalldatetime型大。有时用smalldatetime型时，转化失败，而用datetime型时，转化成功</p>
<p>isnull(rowname)要改成rowname = null</p>
<p>CursorType要改成1,也就是打开数据库时要给出第一个数字参数为1，否则记录可能<br />
显示不完整</p>
<p>备注类型要通过cast(column as varchar)来使用</p>
<p>true/false类型不能使用，要变为1/0</p>
<p>对此两种数据库进行操作的sql语句不全相同，例如：在对ACCESS数据库进行删除纪录时用：&#8221;delete * from user where id=10&#8243;,而对SQL SERVER数据库进行删除是用：&#8221;delete user where id=10&#8243;.</p>
<p>在对ACCESS数据库处理中,sql语句中直接可以用一些VB的函数，像cstr()函数，而对SQL SERVER数据库处理中，却不能用</p>
<p>在access的sql语句中的时间使用变量查询的时候，大家一般使用&#8221;select * from aaaa while time=#&#8221;&amp;变量名&amp;&#8221;#&#8221;，在mssql中是不行的，他的语法是“select * from aaaa while time='&#8221;&amp;变量名&amp;&#8221;&#8216;&#8221;”。（意思是让你把日期时间变量当成字符串来使用，呵呵~~~）</p>
<p>原来ASP里的“Delete * FROM ……”要改为“Delete FROM ……”</p>
<p>有可能rs.update失败，修改成update 表名 set 字段=‘值’ 这样通过（遇到的情况，提示为：<br />
Microsoft OLE DB Provider for SQL Server 错误 &#8216;80040e38&#8217;</p>
<p>乐观并发检查失败。已在此游标之外修改了该行。</p>
<p>/Admin_ClassOrder.asp，行 164 ）</p>
<p>access里面除法可以使用&#8221;\&#8221;或者&#8221;/&#8221;，MSSQL里面只能使用&#8221;/&#8221;</p>
]]></content:encoded>
					
					<wfw:commentRss>http://blog.duoday.com/2010/307.html/feed</wfw:commentRss>
			<slash:comments>1</slash:comments>
		
		
			</item>
		<item>
		<title>通过ASP与ACCESS数据库建立连接</title>
		<link>http://blog.duoday.com/2006/159.html</link>
					<comments>http://blog.duoday.com/2006/159.html#respond</comments>
		
		<dc:creator><![CDATA[奇风]]></dc:creator>
		<pubDate>Wed, 02 Aug 2006 03:26:15 +0000</pubDate>
				<category><![CDATA[设计代码]]></category>
		<category><![CDATA[Access]]></category>
		<category><![CDATA[ASP]]></category>
		<guid isPermaLink="false">http://blog.duoday.com/2006/159.html</guid>

					<description><![CDATA[如何通过ASP与数据库建立连接是一个非常现实的问题，我尽量写得非常详细。相信看了这篇文章相信您已经能够写出类似 [&#8230;]]]></description>
										<content:encoded><![CDATA[<p>如何通过ASP与数据库建立连接是一个非常现实的问题，我尽量写得非常详细。相信看了这篇文章相信您已经能够写出类似的比较简单和实用的程序了。</p>
<p>（一）数据库的选择：</p>
<p>　　有许多的数据库你可以选择，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中就有，非常方便得到和使用。</p>
<p>　　本文就以ACCESS数据库为准介绍基于WEB的数据库存取方法。</p>
<p>（二）例子：我们建立一个“客户”数据库，需要保存如下的客户资料：客户名称、联络人姓名、所在城市、电话号码。</p>
<p>（1）首先建立ACCESS数据库customer.mdb(今后有用的)。建立如下字段：</p>
<p>　客户名称、联络人姓名、所在城市、电话号码、客户编号、时间。将表保存为&#34;客户&#34;(今后有用的,===>看看图)。注意：建立字段时多作了2个(客户编号、时间)，因为在今后排序时要用到它们。建议今后做数据库时最好都加上这2项，不会没用的。此外，在保存表时ACCESS会询问是否建立一个住关键字，我们不需要它所以不必建立。还有：时间字段的&#34;默认值&#34;设成&#34;now()&#34;，即去系统当时的时间。同时将索引项设成&#34;有(允许重复)&#34;，含义：WEB上极有可能同时存取数据，所以允许重复，索引设成&#34;有&#34;可以加快排序速度。===>看看图</p>
<p>（2）建立递交表单add.htm：</p>
<p>源代码如下：<br />
<html><br />
<head><br />
<title>添加数据库记录</title><br />
<meta  http-equiv=&#34;Content-Type&#34;  content=&#34;text/html;
charset=gb2312&#34;><br />
</head><br />
<body  bgcolor=&#34;#FFFFFF&#34;></p>
<p  align=&#34;center&#34;><font  size=&#34;5&#34;>添加数据库记录</font></p>
<form  method=&#34;post&#34;  action=&#34;adddatabase.asp&#34;>
<div  align=&#34;center&#34;>
<table  width=&#34;46%&#34;  border=&#34;0&#34;>
<tr>
<td  width=&#34;28%&#34;>
<div  align=&#34;right&#34;>公司名称：  </div>
</td>
<td  width=&#34;72%&#34;>
<input  type=&#34;text&#34;  name=&#34;CompanyName&#34;>
</td>
</tr>
<tr>
<td  width=&#34;28%&#34;>
<div  align=&#34;right&#34;>联络人姓名：  </div>
</td>
<td  width=&#34;72%&#34;>
<input  type=&#34;text&#34;  name=&#34;CName&#34;>
</td>
</tr>
<tr>
<td  width=&#34;28%&#34;>
<div  align=&#34;right&#34;>所在城市：  </div>
</td>
<td  width=&#34;72%&#34;>
<input  type=&#34;text&#34;  name=&#34;City&#34;>
</td>
</tr>
<tr>
<td  width=&#34;28%&#34;>
<div  align=&#34;right&#34;>电话号码：</div>
</td>
<td  width=&#34;72%&#34;>
<input  type=&#34;text&#34;  name=&#34;Tel&#34;>
</td>
</tr>
<tr>
<td  width=&#34;28%&#34;>
<div  align=&#34;right&#34;>  </div>
</td>
<td  width=&#34;72%&#34;>
<input  type=&#34;submit&#34;  name=&#34;Submit&#34;  value=&#34;Submit&#34;><br />
<input  type=&#34;reset&#34;  name=&#34;reset&#34;  value=&#34;Reset&#34;>
</td>
</tr>
</table>
</div>
</form>
<p></body><br />
</html></p>
<p>　　这与普通的HTML没有任何区别，关键部分已经用黄色标记了。递交方法用POST，递交后处理的程序是adddatabase.asp（下一步就重点讨论它）。还有就是给每一个项目取一个名字（NAME，后面有用）。</p>
<p>（三）关键部分：建立与数据库的联系并将表单中收集到的信息添加到ACCESS数据库中。<br />
ASP代码放在〈%和%>之间。</p>
<p><%
CompanyName  =  Request(&#34;CompanyName&#34;)
CName  =  Request(&#34;CName&#34;)
City  =  Request(&#34;City&#34;)
Tel  =  Request(&#34;Tel&#34;)

　　以上，首先取得表单中填写的数据，使用ASP的Request对象非常容易可以实现数据的收集。双引号中的就是上一步建立的各个项目的名字（NAME）。所以今后为每个项目起名字是个好习惯，尽管有时候并不一定用得到。这样取得的数据就保存在等号坐侧的变量中了。

If  CompanyName  =  &#34;&#34;  o&#114;  CName  =  &#34;&#34;  o&#114;  City  =  &#34;&#34;  o&#114;  Tel  =  &#34;&#34;  Then
“Response.Write  &#34;<html><body><center><font  size=5><br />
请将资料填写完整。</font></center></body></html>&#34;<br />
Response.Redirect  &#34;error.htm&#34;<br />
Response.End<br />
End  If</p>
<p>　　这里是检测各个项目是否输入了东西，如果为空则不往下继续执行，显示错误信息。注意：你可以使用两种方法。我都列出了。</p>
<p>方法一：使用Response.Write方法写一个出错页面，类似于javascripts的document.write写法，只是ASP使用Response.write罢了。</p>
<p>方法二：使用Response.Redirect方法导向出错页面error.htm。我在方法一的代码前加上单引号表示注释。（ASP中表示注释用单引号“）。</p>
<p>set  dbconnection=Server.Cr&#101;ateOBJECT(&#34;ADODB.CONNECTION&#34;)<br />
DBPath  =  Server.MapPath(&#34;customer.mdb&#34;)<br />
dbconnection.Open  &#34;driver={Microsoft  Access  Driver  (*.mdb)};<br />
dbq=&#34;  &amp;  DBPath</p>
<p>（1）建立Connection对象：dbconnection，建立一个连接(Connection)是数据库存取的开始。我们使用ASP的内建对象方<br />
　　  Server.Cr&#101;ateobject建立与数据库的连接。ADODB是ASP的数据库存取组件，不必担心只要有ASP就有它了，是内置的。</p>
<p>（2）使用dbconnection.open方法打开数据库customer.mdb。driver参数</p>
<p>　　  语法：  driver={Microsoft  Access  Driver  (*.mdb)}必须这么写。<br />
　  　告诉系统使用ACCESS  ODBC驱动处理。dbq参数用来指定打开的数据库文件，它必须是完整的路径。例如<br />
　　　&#34;c:\inetpub\wwwroot\customer\customer.mdb&#34;<br />
　　　我们使用Server.MapPath的方法取得数据库的完整路径。</p>
<p>Set  rs  =  Server.Cr&#101;ateObject(&#34;ADODB.Recordset&#34;)</p>
<p>　　建立Recordset对象rs。Connection仅仅是建立了与数据库间的连接，要存取数据还应该再建立Recordset对象。</p>
<p>rs.Open  &#34;客户&#34;,  dbconnection,  adOpenDynamic,  3</p>
<p>打开数据库中的表&#34;客户&#34;（客户是表名）。  语法：</p>
<p>rs.open  数据表名或SQL指令，已经建立的Connection对象（这里是dbconnection）,  锁定类型</p>
<p>rs.AddNew<br />
rs(&#34;公司名称&#34;)  =  CompanyName<br />
rs(&#34;联络人姓名&#34;)  =  CName<br />
rs(&#34;所在城市&#34;)  =  City<br />
rs(&#34;电话号码&#34;)  =  Tel<br />
rs.Up&#100;ate</p>
<p>　　用AddNew向数据库请求添加数据。最后用Up&#100;ate写入。注意：等号右侧的变量保存着用Request取得的表单数据。双引号内的就是数据库的字段，应该与数据库的一致啊。否则会出错的。这样变量内的数据就写入了数据库对应的字段内了。</p>
<p>　　Response.Write  &#34;<html><body><center><font  size=5><br />
　　祝贺，您的数据已经添加进数据库了！</p>
<p>&#34;<br />
　　Response.Write  &#34;<a  href=“viewdatabase.asp“>查看数据</a>&#34;<br />
　　Response.Write  &#34;</font></center></body></html>&#34;</p>
<p>　写入成功后显示祝贺信息并建立查看数据库记录的连接。</p>
<p>%><br />
<html></p>
<p><head><br />
<title></title><br />
</head></p>
<p><body><br />
</body><br />
</html></p>
<p>（三）显示/查看数据库记录：</p>
<p><%
set  dbconnection=Server.Cr&#101;ateOBJECT(&#34;ADODB.CONNECTION&#34;)
DBPath  =  Server.MapPath(&#34;customer.mdb&#34;)
dbconnection.Open  &#34;driver={Microsoft  Access  Driver  (*.mdb)};dbq=&#34;  &amp;  DBPath

建立与数据库的连接，与上同。

SQL=&#34;sel&#101;ct  *  from  客户  o&#114;der  By  时间  DESC&#34;
SET  CustomerList=dbconnection.EXECUTE(SQL)
%></p>
<p>　　建立SQL查询语句，表示从&#34;客户&#34;表中查询所有记录，Order  By  时间DESC表示&#34;按时间降序排序，&#34;这样最后添加的信息再最上面显示。下面一句执行SQL查询并将结果返回给Recordset对象CustomerList。</p>
<p><html><br />
<body><br />
<font  SIZE=&#34;5&#34;><center>数据库记录</center></font><br />
<center></p>
<table  BORDER=1>
<tr>
<td>编号</td>
<td>公司名称</td>
<td>联络人姓名</td>
<td>所在城市</td>
<td>电话号码</td>
</tr>
<p><%  DO  WHILE  NOT  CustomerList.EOF  %></p>
<p>检测记录是否到了最后一条。EOF表示End  of  File。</p>
<tr>
<td><%  =CustomerList(&#34;客户编号&#34;)  %></td>
<td><%  =CustomerList(&#34;公司名称&#34;)  %></td>
<td><%  =CustomerList(&#34;联络人姓名&#34;)  %></td>
<td><%  =CustomerList(&#34;所在城市&#34;)  %></td>
<td><%  =CustomerList(&#34;电话号?quot  %></td>
</tr>
<p><%  =CustomerList(&#34;客户编号&#34;)  %>可以说是Response.Write方法的简写。<br />
将&#34;客户编号&#34;字段内的数据写入TD标签间。</p>
<p><%  CustomerList.movenext
loop
%></p>
<p>　　如果还没有到最后一条则指针移动到下一条。用Do  While  &#8230;  Loop循环逐一取得所有的记录。</p>
</table>
<p></center></p>
<p><center><br />
<input  type=&#34;button&#34;  onclick=&#34;javascript:location.href=“add.htm“&#34;  value=&#34;添加数据&#34;><br />
</center><br />
</body><br />
</html></p>
<p>　　缺陷：仅仅实现了最基本的功能。先不说其它功能，仅就数据的添加和查看功能来看，比较完美的还应该加入“分页功能”。否则数据大到一定程度显示全部数据基本上是不可能的。我将在下一期推出改进了的版本。<br />
　</p>
]]></content:encoded>
					
					<wfw:commentRss>http://blog.duoday.com/2006/159.html/feed</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
	</channel>
</rss>
