回 帖 发 新 帖 刷新版面

主题:小问题,只要2分钟就可。请教数据库排序的三种方式哪种好。

本人查资料得到用RS。OPEN STRCON,CNNDB,1或2或3,其中的123到底指的是什么?
书上说3是静态指针又是什么意思。

回复列表 (共10个回复)

沙发

Recordset对象方法

Open方法

recordset.Open Source,ActiveConnection,CursorType,LockType,Options

Source
Recordset对象可以通过Source属性来连接Command对象。Source参数可以是一个Command对象名称、一段SQL命令、一个指定的数据表名称或是一个Stored Procedure。假如省略这个参数,系统则采用Recordset对象的Source属性。

ActiveConnection
Recordset对象可以通过ActiveConnection属性来连接Connection对象。这里的ActiveConnection可以是一个Connection对象或是一串包含数据库连接信息(ConnectionString)的字符串参数。

CursorType
Recordset对象Open方法的CursorType参数表示将以什么样的游标类型启动数据,包括adOpenForwardOnly、adOpenKeyset、adOpenDynamic及adOpenStatic,分述如下:
--------------------------------------------------------------
常数 常数值 说明
-------------------------------------------------------------
adOpenForwardOnly 0 缺省值,启动一个只能向前移动的游标(Forward Only)。
adOpenKeyset 1 启动一个Keyset类型的游标。
adOpenDynamic 2 启动一个Dynamic类型的游标。
adOpenStatic 3 启动一个Static类型的游标。
-------------------------------------------------------------
以上几个游标类型将直接影响到Recordset对象所有的属性和方法,以下列表说明他们之间的区别。

-------------------------------------------------------------
Recordset属性 adOpenForwardOnly adOpenKeyset adOpenDynamic adOpenStatic
-------------------------------------------------------------
AbsolutePage 不支持 不支持 可读写 可读写
AbsolutePosition 不支持 不支持 可读写 可读写
ActiveConnection 可读写 可读写 可读写 可读写
BOF 只读 只读 只读 只读
Bookmark 不支持 不支持 可读写 可读写
CacheSize 可读写 可读写 可读写 可读写
CursorLocation 可读写 可读写 可读写 可读写
CursorType 可读写 可读写 可读写 可读写
EditMode 只读 只读 只读 只读
EOF 只读 只读 只读 只读
Filter 可读写 可读写 可读写 可读写
LockType 可读写 可读写 可读写 可读写
MarshalOptions 可读写 可读写 可读写 可读写
MaxRecords 可读写 可读写 可读写 可读写
PageCount 不支持 不支持 只读 只读
PageSize 可读写 可读写 可读写 可读写
RecordCount 不支持 不支持 只读 只读
Source 可读写 可读写 可读写 可读写
State 只读 只读 只读 只读
Status 只读 只读 只读 只读
AddNew 支持 支持 支持 支持
CancelBatch 支持 支持 支持 支持
CancelUpdate 支持 支持 支持 支持
Clone 不支持 不支持
Close 支持 支持 支持 支持
Delete 支持 支持 支持 支持
GetRows 支持 支持 支持 支持
Move 不支持 支持 支持 支持
MoveFirst 支持 支持 支持 支持
MoveLast 不支持 支持 支持 支持
MoveNext 支持 支持 支持 支持
MovePrevious 不支持 支持 支持 支持
NextRecordset 支持 支持 支持 支持
Open 支持 支持 支持 支持
Requery 支持 支持 支持 支持
Resync 不支持 不支持 支持 支持
Supports 支持 支持 支持 支持
Update 支持 支持 支持 支持
UpdateBatch 支持 支持 支持 支持
--------------------------------------------------------------
其中NextRecordset方法并不适用于Microsoft Access数据库。 

板凳

可是我遇到了一个排序问题:
我正在设计论坛程序,在查看主题内容时,都是先读入主题内容,然后读入回贴内容。但是读回贴内容时,不知道为什么会出现目前回的贴跑到以前回的贴之上去了。这显然显示出来不正确。但也不是全部是上,比如有5个回复,有时新回复的内容夹在回贴的中间部份去了。
我是以ACCESS的ID(不能更改)作为主题标志,然后回复贴时存入该贴对应的ID,然后在列出回复时,以SQL查询所有贴中回复项是等于这个主题ID的贴子,然后依次列出来,这中间打开该库显示回复时,不管传入1,2,3都还是老毛病。我不知道这会是什么原因引起的。打开ACCESS,新存的贴的ID号明明在老贴子的后面,怎么显示时跑到中间去了。

3 楼

这和那个1、2、3没什么关系,因为你没有设回帖排序,所以有时候就会顺序乱掉,你设个按回帖时间顺序排序。

4 楼

意思就是说:在后面加个ORDER BY POSTTIME吗?
id=cint(request("id"))
strSQL = "SELECT  * FROM postbbs WHERE id="&id

可是上面的语句,我在后面加ORDER BY POSTTIME 要出错,提示操作符丢失,593不是一个有效的变量。593是这个贴子的ID,而ID是数据库里的正宗ID,不可改变的。

但是不加就是好的。ORDER BY 又不能加在前面。

5 楼

strSQL = "SELECT  * FROM postbbs WHERE id="&id&" ORDER BY POSTTIME"
试试看!

6 楼

好象可以了,我觉得我应该试过这句的嘛!因为这是常规做法呀!不知怎的,今天就通过了,谢谢老兄了。不过我的POSTTIME是以文本来存储的,应该以后发了多贴后不会出现这种问题吧!

7 楼

另外只有把POSTTIME里用上NOW()才行,只有DATE还是会出现混贴的现象。

不过有个问题就是我是用小写的WXPC注册的,我那天用大写的WXPC登陆后,发的贴现在自己的贴都不能评分了。

8 楼

但是问题又出来了,我以前发的贴是2003-9-4发的,我现在的贴是2003-9-25,他不是把我的贴排在老贴的前面了。

9 楼

posttime用文本?还是用时间类型吧,否则肯定又要乱了,用now因为是日期+时间可以保证时间不会重复,用date只是当前的日期,如果有很多记录都是同一天的,那因为时间一样没法排序,又要乱了。

10 楼

想来想去,用POSTTIME要改数据库里类型的文本为时间太麻烦,我最后终于在你的

strSQL = "SELECT  * FROM postbbs WHERE id="&id&" ORDER BY POSTTIME"
中得到了启发。最后用
strSQL = "SELECT  * FROM postbbs WHERE id="&id&" ORDER BY id"来实现了。

最初因为我写成了
strSQL = "SELECT  * FROM postbbs WHERE id="&id&" ORDER BY “&id&
它老是说我的那个ID号不是有效的类型。最后才明白,这个ID怎能写到后面去嘛!

谢了。

我来回复

您尚未登录,请登录后再回复。点此登录或注册