关于ASP数据库双重检索的代码问题

求高手说一下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

有两个表table1table2
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则需要更多的时间来打开,而应用中通常并不需要。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值