求高手说一下ASP数据库双重检索的代码,越简单越好,只要把怎么样才能同时搜索两个数据表的代码发一下就可以。
你的问题不清楚,连个表有关联吗?
csql = "select table1.field1,table2.field1,table2.field2 from table1,table2 where " _
& " table1.ID=table2.ID and table1.field1=...."
如果没有联系,使用两个记录集查。下面的conn是你定义的数据库对象
set conn= Server.Createobject("ADODB.CONNECTION")
conn.open "数据库连接字符........."
set RS1= Server.CreateObject("ADODB.RecordSet")
set RS2 = Server.CreateObject("ADODB.RecordSet")
csql1 = "select * from table1"
RS1.open csql1,conn,1,1
....
RS1.close
csql2 = "select * from table2"
RS2.open csql,conn,1,1
.....
RS2.close
Set rs1=nothing
set rs2=nonting
有两个表table1和table2
table1.field1是表一中的字段名,按你实际的字段写
table2.field1是表二中的字段名
csql = "select table1.field1,table2.field1,table2.field2 from table1,table2 where table1.ID=table2.ID and table1.field1=...."
就是在两个表里查询,表一中的字段ID和表二中的字段ID的的值相等,条件还是可以写上表中的其他字段,例如table1.field1,省略好就是还可以加很多条件。
查询结果是表一中的一个字段,表二中的两个字段。
从两个表查就是from table1,table2
因为关联查询有很多,这样写是最简单的,你也应该最容易理解
--------------------
RS.OPEN SQL,CONN,A,B
A:
ADOPENFORWARDONLY(=0)
只读,且当前数据记录只能向下移动
ADOPENKEYSET(=1)
只读,当前数据记录可自由移动
ADOPENDYNAMIC(=2)
可读写,当前数据记录可自由移动
ADOPENSTATIC(=3)
可读写,当前数据记录可自由移动,可看到新增记录
B:
ADLOCKREADONLY(=1)
缺省锁定类型,记录集是只读的,不能修改记录
ADLOCKPESSIMISTIC(=2)
悲观锁定,当修改记录时,数据提供者将尝试锁定记录以确保成功地编辑记录。只要编辑一开始,则立即锁住记录。
ADLOCKOPTIMISTIC(=3)
乐观锁定 ,直到用Update方法提交更新记录时才锁定记录。
ADLOCKBATCHOPTIMISTIC(=4)
批量乐观锁定,允许修改多个记录,只有调用UpdateBatch方法后才锁定记录。
当不需要改动任何记录时,应该使用只读的记录集,这样提供者不用做任何检测。
对于一般的使用,乐观的锁定可能是最好的选择,因为记录只被锁定一小段时间,
数据在这段时间被更新。这减少了资源的使用。
-----------------------------------------------------
记录集是否可写不是由光标类型决定的,而是由锁类型决定的。第一种光标(adOpenForwardOpnly)只能向前移动,第二种光标(adOpenStatic)可自由移动,确实如此。但它们只决定了记录集是静态的,而不是“只读”的。而后面两种也不是“可读写”的,而是“动态”的。
记录集分动态、静态两种,区别在于,记录集在打开的过程中,是否实时反映用户对数据库的更改(可能是当前访问数据集的用户,也可能是其他用户)。
adOpenForwardOnly和adOpenStatic这两种属静态类型,当前用户打开记录集后,记录集就保持不变一直到关闭后再次打开它。在这过程中如果数据库中的相应记录发生改变,在当前用户是看不到的。
adOpenDynamic和adOpenKeyset这两种则属动态类型,记录集会反映出数据库中相应记录的更改,他们两者的区别在于:adOpenDynamic是完全动态的,数据库记录的更新、删除、添加都会体现在当前用户所打开的记录集中;而adOpenKeyset则保持当前记录集的个数不变,它只体现更新操作,不体现删除和添加操作。
另外,建议大家使用相应的ADO常量,而不是用一些让人摸不着头脑的数字。在页面的开头部分加入:<!-- metadata type="typelib" file="C:/Program Files/Common Files/System/ado/msado15.dll" -->
指令,就可以使用所有的 ADO 2.5 常量了。ADO常量非常有用,建议大家去记这些常量,而不是记数字。常量由英文单词组成,可以提高代码的可读性,更重要的是帮助我们理解常量所充当的作用。
很多程序员只知道用诸如rs.Open sql, cn, 1, 1这样的语句,用了很多年也不知道这两个数字的含义。虽然这两个数字在大多数情况下可以正常工作,却是以牺牲效率为代价的。通常用于单纯显示的记录集,只需要用只向前、只读类型即可,而这两个属性是默认的,所以可以不设置,如:objRS.Open strSQL, objConn, adOpenForwardOnly, adLockReadOnly
等同于
objRS.Open strSQL, objConn
打开这种记录集的执行效率是最高的!例外的是需要对记录集进行分页,这时必须替换adOpenForwardOnly为其它的,比如adOpenStatic就不错。而通常大家使用的rs.Open sql, cn, 1, 1则需要更多的时间来打开,而应用中通常并不需要。