社区
VB基础类
帖子详情
adOpenStatic, adLockReadOnly的问题
ggwb002
2003-08-21 12:50:42
for i=0 to n
rs.Open "select * from parameter", strcn, adOpenStatic, adLockReadOnly
........
........
rs.Close
.......
next i
循环次数n到一定数时,就会报错,哪位高手知道为什么?
用adOpenDynamic, adLockOptimistic好象不会错.
...全文
602
7
打赏
收藏
adOpenStatic, adLockReadOnly的问题
for i=0 to n rs.Open "select * from parameter", strcn, adOpenStatic, adLockReadOnly ........ ........ rs.Close ....... next i 循环次数n到一定数时,就会报错,哪位高手知道为什么? 用adOpenDynamic, adLockOptimistic好象不会错.
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
7 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
lihonggen0
2003-08-21
打赏
举报
回复
adLockReadOnly
表明是只读的
应该不会出错,可能是你代码的其它部分有问题
报什么错?
liul17
2003-08-21
打赏
举报
回复
报什么?
射天狼
2003-08-21
打赏
举报
回复
为什么要在循环中频繁的打开与关闭数据表,这不是一种好的方法.
ggwb002
2003-08-21
打赏
举报
回复
还有,有时数据源strcn(public)为空
ggwb002
2003-08-21
打赏
举报
回复
谢谢
有时报RS对象不存在,有时再打开别的记录集,应该有数据的却为空
是否象cuizm所说的,占的内存没释放?
didishu0807
2003-08-21
打赏
举报
回复
1、 AdOpenForwardOnly (默认值)一次只能向前移动一行。
2、 AdOpenKeyset 打开键集类型游标。
3、 AdOpenDynamic 打开动态类型游标
4、 AdOpenStatic 打开静态类型游标。
AdOpenForwardOnly和AdOpenStatic这两种游标使得记录集只读,它表示创建数据的一个快照。后者比前者灵活,因为它可以允许任意方向移动。
AdOpenKeyset允许任意移动,并且允许更改记录集。其他用户对记录集的添加和删除,这个游标反映不出来。但它能反映出其他用户对记录集的更改。
AdOpenDynamic允许所有操作,其他用户对记录集的添加、删除、更改在此记录集中
都是可见的。
AdLockReadOnly (默认值)只读 --- 不能改变数据。
AdLockPessimistic 悲观锁(逐个)--- 为确保成功完成编辑记录所需的工作,
在编辑时立即锁定数据源的记录。
AdLockOptimistic 乐观锁(逐个)--- 只在调用Update 方法时才锁定记录。
AdLockBatchOptimistic 乐观批更新---用于批更新模式(与立即更新模式相对)。
射天狼
2003-08-21
打赏
举报
回复
adOpenStatic是静态记录集,是复制一份,比较慢,浪费内存,adOpenDynamic是动态的,如果不添加或者修改的话,一般不用.你可以用adOpenForwardOnly,只向前的,速度比较快(如果只是显示的话).
vb小项目(关于学生信息系统)
关于vb项目设计 Private Sub Command1_Click() Dim cnn As New
AD
O
DB.Connection Dim strcnn As String Dim rst As New
AD
O
DB.Recordset Dim sql As String strcnn = "provider=sqloledb.1;integrated security=sspi;database=students" cnn.O
pen
strcnn sql = "select * from 班级" If xiaoniao = 1 Then Form1.Caption = "class" rst.O
pen
sql, cnn,
ad
O
pen
Static
,
ad
Lock
Re
ad
O
nly
Set Me.DataGrid1.DataSource = rst xiaoniao = 0 Else Form1.Caption = "jiangxuejin" sql = "select * from 奖学金" rst.O
pen
sql, cnn,
ad
O
pen
Static
,
ad
Lock
Re
ad
O
nly
Set Me.DataGrid1.DataSource = rst xiaoniao = 1 End If 'rst.Close 'cnn.Close End Sub
VB定时修改数据库名称
用VB6编写的代码 Private Sub Command2_Click() strconnect = "provider=SQLOLEDB;Persist Security Info=true;User Id='" & Tname & "';PassWord='" & Tpwd & "'; Initial Catalog=master;Data Source='" & Tserver & "'" If Conn.State = 1 Then Conn.Close Conn.O
pen
strconnect 'GetSq Now sql = "select * from sysdatabases where name = '" & Tdatabase & "'" If rst.State = 1 Then rst.Close rst.CursorLocation =
ad
UseClient rst.O
pen
sql, Conn,
ad
O
pen
Static
,
ad
Lock
Re
ad
O
nly
'If rst.EOF = True Then 'MsgBox "修改前的数据不存在,请检查!", vbInformation, "检查数据库是否存在" 'Exit Sub 'End If If rst.EOF = False Then Conn.Execute "exec sp_rename '" & Tdatabase & "','" & Tdatabase1 & "','database'" Else Conn.Execute "exec sp_rename '" & Tdatabase1 & "','" & Tdatabase & "','database'" End If 'MsgBox "执行完毕", vbOKOnly Unlo
ad
Me End Sub
企业人事管理信息系统
SQL+VB做成的licit Public gUserName As String Public gUserKind As String Public gEmployeeId As String Public gLoginSucceeded As Boolean Public Const BLUE = &HFF0000 Public Const WHITE = &H80000005 Sub Main() Dim fLogin As New frmLogin '启动登录窗体 fLogin.Show vbModal '装入并显示模式窗体。 If Not gLoginSucceeded Then MsgBox "系统启动失败,请重试!", vbOKOnly + vbExclamation, "警告" End If Unlo
ad
fLogin End Sub Public Function ConnectString() As String ConnectString = "Provider=SQLOLEDB.1;Password=sa;User ID=sa;Initial Catalog=DBManPower;Data Source=127.0.0.1;" End Function Public Function ExecuteSQL(ByVal SQL As String, rst As
AD
O
DB.Recordset, _ Optional enableWrite As Boolean = True) As Boolean Dim con As
AD
O
DB.Connection Dim sTokens() As String On Error GoTo Execute_Error sTokens = Split(SQL) Set con = New
AD
O
DB.Connection con.O
pen
ConnectString '打开数据库 Set rst = New
AD
O
DB.Recordset If enableWrite Then '读写方式 rst.O
pen
Trim$(SQL), con,
ad
O
pen
Static
,
ad
Lock
Optimistic Else '只读方式 rst.O
pen
Trim$(SQL), con,
ad
O
pen
Static
,
ad
Lock
Re
ad
O
nly
End If ExecuteSQL = True Exit Function Execute_Error: ExecuteSQL = False Exit Function End Function Public Function DBExist(ByVal SQL As String) As Integer Dim con As
AD
O
DB.Connection Dim sTokens() As String Dim flag As String Dim rst As
AD
O
DB.Recordset sTokens = Split(SQL) Set con = New
AD
O
DB.Connection con.O
pen
ConnectString flag = ExecuteSQL(SQL, rst, False) '判断该记录是否存在 If rst.RecordCount <> 0 Then DBExist = rst.RecordCount Else DBExist = 0 End If con.Close End Function Public Function txtIsNull(txt As TextBox) As Boolean If Trim(txt.Text) = "" Then txtIsNull = True txt.SetFocus txt.BackColor = BLUE Else txtIsNull = False End If
ASP 游标参数详解(ASP记录集)第1/2页
rs.o
pen
sql,conn,A,B A:
AD
O
Pen
forwardonly (=0) 只读,且当前数据记录只能向下移动。
AD
O
Pen
keyset (=1) 只读,当前数据记录可自由移动。
AD
O
pen
dynamic (=2) 可读写,当前数据记录可自由移动。
AD
O
pen
static
(=3) 可读写,当前数据记录可自由移动,可看到新增记录。 B:
AD
Lock
re
ad
o
nly
(=1) 缺省锁定类型,记录集是只读的,不能修改记录。
AD
Lock
pessimistic (=2) 悲观锁定,当修改记录时,数据提供者将尝试锁定记录以确保成功地编辑记录,只要编辑一开 始,则立即锁住记录。
用VB编写的学生学籍管理
Dim i, j, n As Integer Dim sql As String Private Declare Function GetKeyState Lib "user32" _ (ByVal nVirtKey As Long) As Integer Public je As Integer '记忆菜单上次数值,实现数据传送 Private Sub acg_Click() Call asPopup7_Click(False) End Sub Private Sub
ad
dcg_Click() Call asPopup6_Click(False) End Sub Private Sub
ad
dstudent_Click() Call asPopup2_Click(False) End Sub Private Sub asPopup1_Click(Cancel As Boolean) Grid1.Visible = True Grid2.Visible = False tkbase = "学生信息" fnumber = 13 sql = "select * from " & tkbase grid1pz '执行grid1的分配空间任务 datagrid '按要求读取数据空间 End Sub Private Sub grid1pz() Grid1.Cols = fnumber + 1 Grid1.Column(1).Width = 120 Grid1.Column(2).Width = 100 Grid1.Column(3).Width = 80 Grid1.Column(4).Width = 40 Grid1.Column(5).Width = 80 Grid1.Column(6).Width = 30 Grid1.Column(7).Width = 100 Grid1.Column(8).Width = 200 Grid1.Column(9).Width = 60 Grid1.Column(10).Width = 80 Grid1.Column(11).Width = 100 Grid1.Column(12).Width = 100 Grid1.Column(13).Width = 100 Grid1.Column(4).CellType = cellComboBox Grid1.ComboBox(4).Clear Grid1.ComboBox(4).
Ad
dItem "男" Grid1.ComboBox(4).
Ad
dItem "女" Grid1.Column(5).CellType = cellCalendar Grid1.Column(1).
Lock
ed = True End Sub Private Sub asPopup2_Click(Cancel As Boolean) Grid1.Visible = True Grid2.Visible = False tkbase = "学生信息" fnumber = 13 Set qy1 = cnn.Execute("select * from " & tkbase) grid1pz For i = 1 To fnumber Grid1.Cell(0, i).Text = qy1.Fields(i - 1).Name Next Grid1.Column(1).
Lock
ed = False Grid1.Rows = 1 Grid1.Rows = 21 gridsave = True '允许保存 griddelete = False '拒绝删除 gridedit = False End Sub Private Sub asPopup3_Click(Cancel As Boolean) Dim fo2 As CTranslucentForm Set fo2 = New CTranslucentForm fo2.hWnd = Form2.hWnd fo2.Alpha = 90 / 100 * 255 Me.WindowState = vbMinimized Lo
ad
Form2 Form2.Show 1 End Sub Private Sub asPopup4_Click(Cancel As Boolean) Dim fo2 As CTranslucentForm Set fo2 = New CTranslucentForm fo2.hWnd = Form4.hWnd fo2.Alpha = 90 / 100 * 255 Me.WindowState = vbMinimized Lo
ad
Form4 Form4.Show 1 End Sub Private Sub asPopup5_Click(Cancel As Boolean) MsgBox "非完整源码不可查询!" End Sub Private Sub asPopup6_Click(Cancel As Boolean) Grid1.Visible = False Grid2.Visible = True tkbase = "学生与课程" fnumber = 5 gridpz2 Set qy1 = cnn.Execute("select * from " & tkbase) For i = 1 To fnumber Grid2.Cell(0, i).Text = qy1.Fields(i - 1).Name Next Grid2.Rows = 1 Grid2.Rows = 21 gridsave = True gridedit = False griddel = False Grid2.Column(1).
Lock
ed = False Grid2.Column(2).
Lock
ed = False Grid2.Column(3).
Lock
ed = False End Sub Private Sub asPopup7_Click(Cancel As Boolean) Grid1.Visible = False Grid2.Visible = True tkbase = "学生与课程" fnumber = 5 sql = "select * from " & tkbase gridpz2 datagrid gridsave = False gridedit = True griddel = True Grid2.Column(1).
Lock
ed = True Grid2.Column(2).
Lock
ed = True Grid2.Column(3).
Lock
ed = True End Sub Private Sub gridpz2() Grid2.Cols = 7 Grid2.Column(1).CellType = cellComboBox Set qy1 = cnn.Execute("select 课程号 from 课程") Grid2.ComboBox(1).Clear Do While Not qy1.EOF Grid2.ComboBox(1).
Ad
dItem qy1.Fields(0) qy1.MoveNext Loop Grid2.Column(2).CellType = cellComboBox Set qy1 = cnn.Execute("select 课程名称 from 课程") Grid2.ComboBox(2).Clear Do While Not qy1.EOF Grid2.ComboBox(2).
Ad
dItem qy1.Fields(0) qy1.MoveNext Loop End Sub Private Sub asPopup9_Click(Cancel As Boolean) End End Sub Private Sub c1_Click(Index As Integer) '提交内容到函数执行,4为当前菜单(0-4),index是按钮数组名称 cmove 4, Index End Sub Private Sub cmove(s As Integer, i As Integer) '菜单智能移动函数代码 Dim j As Integer Dim X, Y, z, x1, y1 As Integer X = s Y = s z = s x1 = s j = 0 Do While s > 0 If je > i Then Do While X > i Do While Y >= X j = j + 360 Y = Y - 1 Loop c1(X).Top = Fre1.Height - j X = X - 1 Loop Else '-----------------向上代码 For X = 0 To i For Y = 0 To X j = j + 360 Next c1(X).Top = j - 360 j = 0 Next End If s = s - 1 For y1 = 0 To x1 If y1 = i Then Fre2(y1).Visible = True Fre2(y1).Top = c1(y1).Top + c1(y1).Height If y1 <> z Then Fre2(y1).Height = c1(y1 + 1).Top - Fre2(y1).Top Else Fre2(y1).Height = Fre1.Height - c1(y1).Top - c1(y1).Height End If Else Fre2(y1).Visible = False End If Next Loop je = i End Sub Private Sub cgdel_Click() Call XPButton6_Click End Sub Private Sub cgedit_Click() Call XPButton4_Click End Sub Private Sub delstudent_Click() Call XPButton6_Click End Sub Private Sub editstudent_Click() Call XPButton4_Click End Sub Private Sub findcg_Click() If hang = 0 Then Exit Sub End If Grid1.Visible = False Grid2.Visible = True tkbase = "学生与课程" fnumber = 5 sql = "select * from 学生与课程 where 学号='" & Grid1.Cell(hang, 1).Text & "'" gridpz2 datagrid gridsave = False gridedit = True griddel = True Grid2.Column(1).
Lock
ed = True Grid2.Column(2).
Lock
ed = True Grid2.Column(3).
Lock
ed = True End Sub Private Sub Grid1_MouseUp(Button As Integer, Shift As Integer, X As Single, Y As Single) If Button = 2 Then PopupMenu student End If End Sub Private Sub Grid1_RowColChange(ByVal Row As Long, ByVal Col As Long) hang = Row If gridsave = True And Col = 5 Then '确认默认年龄在20岁左右 If Row <> 0 Then Grid1.Cell(Row, 5).Text = Date - 7300 End If End If End Sub Private Sub Grid1_Validate(Cancel As Boolean) '设定TAB键切换 Dim nActiveRow As Long, nActiveCol As Long Const VK_TAB = 9 If GetKeyState(VK_TAB) < 0 Then nActiveRow = Grid1.ActiveCell.Row nActiveCol = Grid1.ActiveCell.Col If nActiveCol < Grid1.Cols - 1 Then Grid1.Range(nActiveRow, nActiveCol + 1, _ nActiveRow, nActiveCol + 1).Selected End If Cancel = True End If End Sub Private Sub Form_Lo
ad
() form1.BackColor = RGB(168, 217, 189) With Grid1 .AllowUserResizing = True .DisplayFocusRect = False .ExtendLastCol = True .Appearance = Flat .FixedRowColStyle = Flat .ScrollBarStyle = Flat .DefaultFont.Name = "Tahoma" .DefaultFont.Size = 8 .BackColorFixed = RGB(84, 201, 134) .BackColorFixedSel = RGB(84, 201, 134) .BackColorBkg = RGB(198, 229, 211) .BackColorScrollBar = RGB(198, 229, 211) .BackColor1 = RGB(231, 235, 247) .BackColor2 = RGB(198, 229, 211) .GridColor = RGB(148, 190, 231) .Column(0).Width = 0 End With With Grid2 .AllowUserResizing = True .DisplayFocusRect = False .ExtendLastCol = True .Appearance = Flat .FixedRowColStyle = Flat .ScrollBarStyle = Flat .AllowUserResizing = True .DisplayFocusRect = False .ExtendLastCol = True .Appearance = Flat .FixedRowColStyle = Flat .ScrollBarStyle = Flat .DefaultFont.Name = "Tahoma" .DefaultFont.Size = 8 .BackColorFixed = RGB(84, 201, 134) .BackColorFixedSel = RGB(84, 201, 134) .BackColorBkg = RGB(198, 229, 211) .BackColorScrollBar = RGB(198, 229, 211) .BackColor1 = RGB(231, 235, 247) .BackColor2 = RGB(198, 229, 211) .GridColor = RGB(148, 190, 231) .Column(0).Width = 0 End With je = 4 Dim fr As Integer Fre1.BackColor = RGB(168, 217, 189) For fr = 0 To 4 Fre2(fr).Visible = False Fre2(fr).BackColor = RGB(168, 217, 189) Next Grid2.Visible = False Call c1_Click(0) End Sub Private Sub Grid2_MouseUp(Button As Integer, Shift As Integer, X As Single, Y As Single) If Button = 2 Then MsgBox "非完整源码不支持鼠标右键!" End If End Sub Private Sub Grid2_RowColChange(ByVal Row As Long, ByVal Col As Long) hang = Row End Sub Private Sub datagrid() griddelete = True '允许删除 gridedit = True If tkbase = "学生信息" Then If qy1.State =
ad
StateO
pen
Then '表状态 qy1.Close End If qy1.O
pen
sql, cnn,
ad
O
pen
Static
,
ad
Lock
Re
ad
O
nly
,
ad
CmdText For i = 1 To fnumber Grid1.Cell(0, i).Text = qy1.Fields(i - 1).Name Next qy1.PageSize = 20 nnum = qy1.PageCount If qy1.PageCount = 0 Then nnum = 1 End If numpage = 1 Label1.Caption = "共" & nnum & "页 第" & numpage & "页" Grid1.Rows = 1 Grid1.Rows = 21 If qy1.RecordCount = 0 Then Exit Sub End If qy1.AbsolutePage = numpage For i = 1 To qy1.PageSize '设定读取行 For j = 1 To fnumber '设定读取列 If qy1.EOF = True Then Exit Sub End If If qy1.Fields(j - 1) <> noNull Then '空值的处理 Grid1.Cell(i, j).Text = qy1.Fields(j - 1) Else Grid1.Cell(i, j).Text = "" End If Next If qy1.EOF = False Then qy1.MoveNext '读取下一记录 Else Exit Sub End If Next ElseIf tkbase = "学生与课程" Then If qy1.State =
ad
StateO
pen
Then '表状态 qy1.Close End If qy1.O
pen
sql, cnn,
ad
O
pen
Static
,
ad
Lock
Re
ad
O
nly
,
ad
CmdText For i = 1 To fnumber Grid2.Cell(0, i).Text = qy1.Fields(i - 1).Name Next qy1.PageSize = 20 nnum = qy1.PageCount If qy1.PageCount = 0 Then nnum = 1 End If numpage = 1 Label1.Caption = "共" & nnum & "页 第" & numpage & "页" Grid2.Rows = 1 Grid2.Rows = 21 If qy1.RecordCount = 0 Then Exit Sub End If qy1.AbsolutePage = numpage For i = 1 To qy1.PageSize '设定读取行 For j = 1 To fnumber '设定读取列 If qy1.EOF = True Then Exit Sub End If If qy1.Fields(j - 1) <> noNull Then '空值的处理 Grid2.Cell(i, j).Text = qy1.Fields(j - 1) Else Grid2.Cell(i, j).Text = "" End If Next If qy1.EOF = False Then qy1.MoveNext '读取下一记录 Else Exit Sub End If Next End If End Sub Private Sub Grid2_Validate(Cancel As Boolean) Dim nActiveRow As Long, nActiveCol As Long Const VK_TAB = 9 If GetKeyState(VK_TAB) < 0 Then nActiveRow = Grid1.ActiveCell.Row nActiveCol = Grid1.ActiveCell.Col If nActiveCol < Grid1.Cols - 1 Then Grid1.Range(nActiveRow, nActiveCol + 1, _ nActiveRow, nActiveCol + 1).Selected End If Cancel = True End If End Sub Private Sub renovate_Click() Call asPopup1_Click(False) End Sub Private Sub returncg_Click() Grid1.Visible = True Grid2.Visible = False End Sub Private Sub savestudent_Click() Call XPButton5_Click End Sub Private Sub XPButton1_Click() MsgBox "非完整源码只可显示20条记录!" End Sub Private Sub XPButton2_Click() MsgBox "非完整源码只可显示20条记录!" End Sub Private Sub XPButton4_Click() If gridedit = False Then MsgBox "当前修改操作不被允许!", vbInformation, "非使用对象" Exit Sub End If If hang = 0 Then Exit Sub End If Dim delok As String End Sub Private Sub XPButton5_Click() If tkbase = "" Then MsgBox "表指向不明,请确认", vbInformation, "提示" Exit Sub End If If gridsave = False Then MsgBox "当前不允许保存!", vbInformation, "提示" Exit Sub End If Select Case tkbase Case "学生信息" For i = 1 To 20 '处理重名数据 If Grid1.Cell(i, 1).Text <> "" Then Set qy1 = cnn.Execute("select 学号 from 学生信息 where 学号='" & Grid1.Cell(i, 1).Text & "'") If qy1.EOF = False Then MsgBox "第" & i & "行的学号在数据库里出现重复,请检查", vbInformation, "错误" Grid1.Cell(i, 1).SetFocus Exit Sub End If End If Next For i = 1 To 20 For n = 1 To fnumber Select Case n Case 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12 If Grid1.Cell(i, 1).Text <> "" Then If Grid1.Cell(i, n).Text = "" Then MsgBox "第" & i & "行的--[" & Grid1.Cell(0, n).Text & "]--字段不允许为空!", vbInformation, "提示" Grid1.Cell(i, n).SetFocus Exit Sub End If End If End Select Next If Grid1.Cell(i, 1).Text <> "" Then sql = "insert into " & tkbase & " values('" For j = 1 To fnumber - 1 sql = sql & Grid1.Cell(i, j).Text & "','" Next sql = sql & Grid1.Cell(i, fnumber).Text & "')" Set qy1 = cnn.Execute(sql) End If Next MsgBox "命令执行完毕!", vbInformation, "完成" Grid1.Rows = 1 Grid1.Rows = 21 Case "学生与课程" MsgBox "非完整源码不可保证学生与课程的记录!" End Select gridsave = False griddelete = False '拒绝删除 gridedit = False End Sub Private Sub XPButton6_Click() If griddelete = False Then MsgBox "当前删除操作不被允许!", vbInformation, "非使用对象" Exit Sub End If If hang = 0 Then Exit Sub End If Dim delok As String Select Case tkbase Case "学生信息" MsgBox "非完整源码不可修改!" Case "学生与课程" If Grid2.Cell(hang, 1).Text = "" Then Exit Sub End If delok = MsgBox("确认删除" & Grid2.Cell(hang, 3).Text & "的<" & Grid2.Cell(hang, 2).Text & ">成绩吗??", vbQuestion + vbOKCancel, "注意:此操作将会将学生资料与成绩资料完全清除") If delok = vbOK Then sql = "delete from " & tkbase & " where 学号='" & Grid2.Cell(hang, 3).Text & "' and 课程号='" & Grid2.Cell(hang, 1).Text & "'" Set qy1 = cnn.Execute(sql) MsgBox "目标己删除完成!", , "提示" End If End Select End Sub Private Sub XPButton8_Click(Index As Integer) Call findcg_Click End Sub
VB基础类
7,763
社区成员
197,605
社区内容
发帖
与我相关
我的任务
VB基础类
VB 基础类
复制链接
扫一扫
分享
社区描述
VB 基础类
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章