分类目录归档:网页技术

跟网页技术及编程相关的资料

Access数据库:Update带Select子句无法使用的解决办法

最近需要在Access中,批量更新A表的中数据,而更新的数据是从B表中Select而来。
但怎么折腾都无法成功。多方google查询得到高人的说明和解决方法,摘录如下备忘:

“ACCESS不支持select子查询结果用作update参数”。

如果要从表table2中查询与表table1的id对应的name,update到表table1中的name列。

解决方法1:
update table1 t1 inner join table2 t2 on t1.id=t2.id set t1.name=t2.name;

解决方法2:

UPDATE table1 AS t1,table1 AS t2 SET t1.name = t2.name
WHERE t1.id=t2.id;

具体的语法如下:

UPDATE 《table_name》 《alias》
SET (《column_name》,《column_name》 ) = (
SELECT (《column_name》, 《column_name》)
FROM 《table_name》
WHERE 《alias.column_name》 = 《alias.column_name》)
WHERE 《column_name》 《condition》 《value》;

ADO中使用事务处理功能

定义和用法

这三个方法与 Connection 对象使用,来保存或取消对数据源所做的更改。

注释:并非所有提供者都支持事务。

注释:BeginTrans、CommitTrans 和 RollbackTrans 方法在客户端 Connection 对象上无效。

BeginTrans

BeginTrans 方法可开始一个新事务。

CommitTrans

CommitTrans 方法可保存自最后一个 BeginTrans 方法调用以来的所有更改,并结束当前事务。它也可能启动新事务。

RollbackTrans

RollbackTrans 方法可取消自最后一次 BeginTrans 方法调用以来的所有更改,并结束该事务。它也可能启动新事务。

说明

对于支持嵌套事务的提供者,在打开的事务中调用 BeginTrans 方法将启动新的嵌套事务。返回值将指示嵌套层次:返回值为“1”指示打开了顶层事务(即此事务未嵌套在其他事务中),返回值为“2”指示打开了第二层事务(嵌套在顶层事务中的事务),依此类推。调用 CommitTrans 或 RollbackTrans 只影响最新打开的事务;在处理任何更高层事务之前必须关闭或回卷当前事务。

语法
level=objconn.BeginTrans()

objconn.BeginTrans

objconn.CommitTrans

objconn.RollbackTrans

转:SQL语句恢复数据库时一直显示“正在还原”

“RESTORE DATABASE ” + dbName + ” From disk='” + filePath + “‘ WITH REPLACE,NORECOVERY “;

dbName:数据库名

filepath:备份数据所在的路径名(包括文件名)

用上面的SQL语句还原备份数据库时,数据库的状态总是“正在还原”,使得不能对它进行其他操作。

 

解决方案:“RESTORE DATABASE ” + dbName + ” From disk='” + filePath + “‘ WITH REPLACE,RECOVERY “;

即:不用NORECOVERY,而用RECOVERY。

注:REPLACE也一定要的,不然就会出错的。(错误跟没有选择”覆盖原数据库“产生的错误是一样的)

EXCEL导入时,同一列中有数据和字符类型,出现导漏数据问题

问:在使用ASP的ADO导入EXCEL数据时,同一列数据中有文本及数字类型数据时,文本部份或数字部分的数据无法导入,但又没有报错,如何解决?直接读取EXCEL显示到ASP页面上,也是显示部份数据为空,如何解决?有没有直接打开EXCEL读取数据的方法?

这个是数据库驱动的原因造成的,你可以在数据库连接字符串中加上”IMEX=1″,如:strCon = “Provider=Microsoft.Jet.OLEDB.4.0;Data Source = ” + Path + “;Extended Properties =’Excel 8.0;HDR=NO;IMEX=1′”; 说明:HDR=表示数据有无标题行(yes/no),IMEX=1通知驱动程序始终将“互混”数据列作为文本读取,在这里需要清楚的是,系统在判断该字段(列)到底是数值还是文本时,是通过该列的前8条记录是否有文本数据,有则该列作为文本读取,否则,即使后面的记录有文本,也还是按数值读取(导致文本为空)。 修改“HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Jet\4.0\Engines\Excel”下的TypeGuessRows注册表值,可以将其改大些,如1000,这样在1000条记录前只要有文本,就不会出现文本为空的现象,具体情况要视你的数据而定。

提交表单到新窗口

很多人会用js函数 window.open(),但这个函数只能GET提交,不能POST提交。在我们开发的过程中往往经常用POST提交。
解决这个问题的思路是:先用window.open()打开一个新的窗口,然后在表单中指定提交的target为刚刚打开的窗口即可。
例子代码:
<form action=”?” method=”post” name=”test” target=”newWindow“>

<input type=”text” />

</form>

<script>

window.open(‘about:blank’,’newWindow‘,”);

document.test.submit();

</script>