ADO游标类型和锁类型使用参考

ADO数据库编程中文参考手册详解 本文还有配套的精品资源,点击获取 简介:ADO是一种由Microsoft开发的数据访问技术,广泛应用于Windows平台,以实现与多种数据库系统的交互。本手册详细介绍了ADO的核心概念、主要组件以及数据库编程的详细步骤和高级特性。手册内容包括Connection、Command、Recordset等对象的使用方法,以及如何在VB6、VBA等环境中执行高效的数据操作。此外,还... 阅读详情

ADO游标类型有四种,程序中常用第二种AdOpenKeyset,

AdOpenForwardOnly = 0  '只能用MoveNext读取,并且打开的同时建立的数据库的备份,不能即时体现数据库记录状态,比如记录的编辑和增删.

AdOpenKeyset = 1  '可上下滚动的游标,给打开的记录创建了一个关键字列表,类似记录集的描述,访问的时候才去取得数据值,就是说可以即时看到修改信息,但是不能即时得到数据是否删除的信息,因为这个关键字列表是事先初始化好的.
AdOpenDynamic = 2 '完全可滚动,可得到数据的最新状态,执行效率也会有所降低.

AdOpenStatic = 3 ' 完全可滚动,但是和adOpenKeyset类似,它先将数据库备份文件之后进行操作.可以断开数据库连接后继续使用.

ADO锁的类型有四种,在不需要对数据库数据进行更新的读取操作中,推荐使用AdLockReadOnly只读锁;当添加删除更新一条记录时,推荐使用AdLockPessimistic锁,防止你在更新一条记录时其他人操作相同的记录,或其他人同时录入不合法的重记录。比如用户名注册,在用户查重和提交新名称的过程中有间隔,防止在间隔期其他用户提交你已通过查重的合法名称,或录入两个相同名称。

AdLockReadOnly = 1'只读锁,不能操作记录

AdLockPessimistic= 2'悲观锁,操作者打开之后立即上锁,直到修改完成或者放弃修改为止,此时其他人无法编辑.

AdLockOptimistic= 3'乐观锁,当记录将要被更新的时候才开始上锁,但是不能保证在提交修改之前是否有人改动过.

AdLockBatchOptimistic= 4'批量乐观锁,SQL server中要使用它,必须打开一个可上下滚动的游标,如adOpenKeyset,adOpenStatic.

例(asp):

读取数据库时

set res=server.CreateObject("adodb.recordset")
  res.open sql语句,数据库连接,1,1

更新数据库时

set res=server.CreateObject("adodb.recordset")
  res.open sql语句,数据库连接,1,2

 
掌握ADO游标:优化Microsoft Access 2013编程 本文深入探讨了Microsoft Access 2013编程中的ADO Recordsets游标的使用,包括CursorType、LockType和CursorLocation参数的详解,以及异步记录获取等高级特性。通过理解这些参数的细节,开发者可以更加有效地控制数据的交互和应用性能。 阅读详情

相关推荐

ADO 2.20数据库访问实战:Connection、Recordset与游标锁解析

数据库访问一直是企业级应用开发中的核心环节,而COM组件技术则为Windows平台下的数据交互提供了稳定基石。ADO 2.20作为经典的COM数据库访问类库,通过Connection、Command、Recordset等对象,解决了连接管理、SQL执行、结果集处理等基础问题,至今仍大量运行在遗留系统和自动化脚本中。理解其游标类型、锁类型及连接生命周期的取舍,不仅能提升查询性能,还能避免数据更新失败或资源泄漏等常见隐患。在Python、PowerShell等环境中,借助pywin32同样能便捷调用这组COM接

weixin_34005090的博客 283

ADO锁定整张表

Dim oConn As New ADODB.ConnectionDim oRs As New ADODB.Recordset oConn.ConnectionTimeout = 15 oConn.Open "Provider=SQLOLEDB.1;Password=***;Persist Security Info=True;User ID=***;Initial Catalog

donghaima的专栏 772

我用 Claude Code 给 Spring Boot 老项目做了一次代码 Review:查出 4 类隐藏问题

接手 Spring Boot 老项目时,真正麻烦的往往不是编译报错,而是分散在业务代码中的空指针、N+1 查询、异常吞没和并发隐患。本文记录一次使用 Claude Code 辅助代码 Review 的完整流程,并给出提示词、Java 示例、修改方案和人工复核方法。

海波的专栏 397

记录集游标和锁定类型

http://club.topsage.com/thread-119484-1-1.html 你可以用四种类型的游标打开一个记录集。游标决定了你可以对一个记录集进行什么操作。游标还决定了其他用户可以对一个记录集进行什么样的改变。下面列出了游标的不同类型和限制:   adOpenFowardOnly。使用前向游标,你只能在记录集中向前移动。 adOpenKeyset。使用Keyset游

mituan1234567的专栏 1051

stackelberg博弈_博弈论、多智能体、强化学习(随便记点东西)

多智能体应用场景:已实现:游戏AI。正在努力:UAV,物资运输,快递分发,交通系统。未来:社会学,预测群体行为,城市区域合作,国际关系。博弈论基本定义:玩家集合: 策略集合: 收益函数: 囚徒困境:两智能体矩阵博弈坦白抵赖坦白1,13,0抵赖0,32,2占优策略与最佳应对:上表中两者均具有占优策略,即无论如何都应该选坦白。那么构造下表。坦白抵赖坦白1,13,0抵赖0,12,2对于玩家一来说,坦白...

weixin_39611722的博客 2997

Cisco思科 电子科技大学计算机网络 SRWE 期末技能考试 (PTSA)

电子科技大学2024春_SRWE_计算机网络系统 SRWE 期末技能考试 (PTSA)

2301_76745065的博客 5094

ado游标和锁定含义

你可以用四种类型的游标打开一个记录集。游标决定了你可以对一个记录集进行什么操作。游标还决定了其他用户可以对一个记录集进行什么样的改变。下面列出了游标的不同类型和限制:   adOpenFowardOnly。使用前向游标,你只能在记录集中向前移动。    adOpenKeyset。使用Keyset游标,你可以在记录集中向前或向后移动。如果另一个用户删除或改变了一条记录,记录集中将反映这个变化。但是,

phpnewbie的专栏 2133

EDA课程实验:《数字逻辑电路》实验四___基于Minisys 平台 VIVADO工具与Verilog语言

(4)使用 Verilog HDL 实现一个分频器 clock_div,输入的是系统提供的 100MHz 频率,输出的是 1Hz 频率,占空比是 1:2,(实际上可以用一个加 1 计数器来实现降频,输入的是一个 100MHz 频率的方波,对这 个方波计数 1 亿次刚好到 1 秒(1Hz),题目要求输出频率占空比是 1:2,也就是这个 1Hz 的 方波高电平和低电平各 500ms,可以采用计数到中间值的时候输出电平翻转。(1)1) 拨动 SW1~0 为 01,按下 P4 按钮,GLD1~0 为 01;

ssjy_的博客 1295

游标

游标是存储在数据库服务器上的一个数据库查询,它不是一条select语句,他是一个结果集,有了游标就可以根据需要滚动浏览器数据 了 for update 是将数据库表的数据进行锁定的操作,不让其他的事务可以修改。早Oracle中的这种锁定是对查询结果数据及进行加锁,其他数据不会被加锁,方式叫行级锁 行级锁:数据库表中的数据进行锁定的操作,不让其他事务可以修改,在Oracle...

weixin_30339457的博客 101

传感器应用案例:压力传感器在工业自动化中的应用_(13).压力传感器的数据采集与处理

数据采集系统(Data Acquisition System, DAS)是连接传感器和控制系统的重要桥梁。它包括硬件(如数据采集卡、信号调理器)和软件(如数据采集软件、数据处理算法)两部分。信号调理:将传感器输出的模拟信号转换为适合AD转换的信号。AD转换:将模拟信号转换为数字信号。数据传输:将数字信号传输到控制系统或上位机。存储:将采集的数据存储在本地或远程数据库中。实时性:保证数据的实时性和准确性。压力传感器的数据采集与处理是工业自动化中不可或缺的一部分。

2401_87715305的博客 1620

数仓建模—数据语义层

如今,企业产生大量数据,需要以正确的方式进行分析才能做出重要决策。数据可能来自多个来源并采用不同的格式,这使得清楚地了解其含义和重要性成为一项挑战。这就是语义层的用武之地。语义层存在于数据仓库和最终用户使用的应用程序之间。它为用户提供了简化且一致的数据视图,无论其基础数据源的复杂性如何。该逻辑层有助于映射物理数据结构以创建概念数据模型。它定义了数据元素之间的所有规则和关系,并以业务术语提供了数据的通用词汇表。然后,用户可以轻松地与数据进行交互,而无需了解其数据源的技术知识。

7万+

参考游标(refcursor)的使用

参考游标(refcursor)的使用我们知道在sql server中可以直接在存储过程中使用select * from 来产生记录集,但在oracle的存储过程里却不可以。怎么办呢?可以用参考游标来实现。 参考游标(ref cursor)从Oracle 7.3开始引入,作用是允许在存储过程,函数,包中返回记录集。 在Oracle 9i之前,参考游标以如下方式定义: 

wanglark的专栏 1227

基于YOLOv11的农作物病虫害检测系统设计与实现

我们使用公开的IP102病虫害数据集作为基础,该数据集包含102种病虫害类别,覆盖水稻、小麦、玉米等多种主要农作物。图像数量:75,222张类别数:102图像分辨率:从640×480到4000×3000不等标注格式:PASCAL VOC格式此外,我们还收集了部分田间实际拍摄的图像以增强模型泛化能力。

YOLO 595

ADO 删除记录

ADO 删除记录方法总结 ADO 提供了 Recordset.Delete 和 SQL DELETE 两种方式删除数据库记录。Recordset.Delete 需要可编辑游标和锁类型,适合单条记录操作;SQL DELETE 通过 Connection/Command 执行,适合批量删除。参数化查询可防止 SQL 注入。本文通过 ASP 和 Python 示例,演示了定位记录、删除操作及资源清理方法,并介绍了与 REST API 等技术的结合应用。关键点包括游标类型设置、记录定位和安全删除的实现。

likuoelie的博客 1077

使用CubeMX配置STM32H7的FreeRTOS

本文将介绍如何使用CubeMX配置STM32H7的FreeRTOS,并提供相应的源代码示例。通过使用CubeMX,你可以轻松地配置FreeRTOS和系统资源,并生成相应的初始化代码和配置文件。在"FreeRTOS"选项卡的"Tasks"部分,可以配置系统中的任务。首先,打开CubeMX软件。在"FreeRTOS"选项卡的"Resources"部分,你可以配置FreeRTOS使用的资源,例如,堆内存和信号量。例如,我们可以创建两个简单的任务,一个任务将在循环中切换LED的状态,另一个任务将通过串口打印消息。

JeeVue的博客 711

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

ADO Recordset(记录集)

ADO Recordset 核心摘要 ADO Recordset 是处理数据库查询结果的核心对象,支持数据遍历、增删改查等操作。关键特性包括: 游标类型:Forward-only(默认)、Static、Keyset、Dynamic 锁机制:ReadOnly、Optimistic、Pessimistic 核心方法:Open()、MoveNext()、AddNew()、Update()、Delete() 典型应用场景: ASP/VB6:通过ADODB.Recordset处理数据库记录 Python:借助pywi

likuoelie的博客 1036

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

ADO API 参考( ADO方法)之四

Open 方法 (ADO Connection)打开到数据源的连接。语法connection.Open ConnectionString, UserID, Password, Options参数ConnectionString   可选,字符串,包含连接信息。参阅 ConnectionString 属性可获得有效设置的详细信息。UserID   可选,字符串,包含建立连接时

wybm的专栏 2043

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

ADO 更新记录

ADO 更新记录摘要 本文介绍了使用ADO(ActiveX Data Objects)更新数据库记录的三种方法: Recordset.Update:需可编辑游标,通过Find定位记录后修改字段并调用Update; Connection.Execute:直接执行SQL UPDATE语句,简单但不安全; Command.Execute:参数化查询,防止SQL注入。 提供ASP和Python(pywin32)代码示例,涵盖记录定位、字段修改及安全更新操作。适用于Web表单更新、批量数据处理等场景,强调调试技巧(如

likuoelie的博客 771

通俗理解Windows的ADO数据库对象

注意: 当我们使用Connection(或Command)对象的Execute方法,读取符合SQL语句的记录并记录存放在Recordset对象实例时,将不再调用Recordset对象的Open方法,当我们使用Connection(或Command)对象的Execute方法,读取符合SQL语句的记录并记录存放在Recordset对象实例时,将不再调用Recordset对象的Open方法,* Recordset对象会要求数据库传送所有的数据,那么数据量很大的时候就会造成网络的阻塞和数据库服务器的负荷过重,

MicrLeo的博客 600

ADO API 参考(Parameter 对象&Property 对象&Recordset 对象)

Parameter 对象Parameter 对象代表与基于参数化查询或存储过程的 Command 对象相关联的参数或自变量。说明许多提供者都支持参数化的命令。需要进行的操作在这些命令中只定义一次,但可以使用变量(或参数)改变命令的某些细节。例如,SQL SELECT 语句可使用参数定义 WHERE 子句的匹配条件,而使用另一个参数来定义 SORT BY 子句的列的名称。Para

wybm的专栏 1542

SQLServer游标详解

参考资料 http://technet.microsoft.com/zh-cn/library/ms181441(v=sql.105).aspx 一、游标概念 我们知道,关系数据库所有的关系运算其实是集合与集合的运算,它的输入是集合输出同样是集合,有时需要对结果集逐行进行处理,这时就需要用到游标。我们对游标的使用一本遵循“五步法”:声明游标—&gt;打开游标—&gt;读取数据—&gt;关闭游标—&...

u010833391的博客 7344

ADO API 参考

  ADO API 参考Resync 方法从基本数据库刷新当前 Recordset 对象中的数据。语法recordset.Resync AffectRecords, ResyncValues参数AffectRecords   可选,AffectEnum值,决定 Resync方法所影响的记录数目,可以为下列常量之一。常量说明 AdAffectCurrent 只刷新当前记录

传的专栏 2716

ADO 排序

ADO 排序功能详解:通过 Sort 属性对 Recordset 记录动态排序,支持客户端游标下的多字段升/降序排列。适用于 ASP、VBA 等场景,比 SQL ORDER BY 更灵活。需注意:仅限客户端游标(adUseClient),建议结合 HTML 表格或 REST API 输出结果。Python 可通过 pywin32 实现相同功能。SQL 排序适合大数据集,而 ADO 排序适合临时调整显示顺序。

likuoelie的博客 1052
上一篇: 效率比较高的抽题算法(asp考试系统)
下一篇: state模式与组合电灯开关
firstaking
博客等级 码龄25年 5粉丝 25原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值