摘要 事务控制是数据库应用系统中的关键技术之一,本文一开始先对事务控制的概念以及微软的 ActiveX 数据对象( ADO )的事务控制做了简介,之后以一个具体的实例给出ActiveX数据对象的事务控制在VB和DELPHI中的使用方法。 关键词 ActiveX数据对象(ADO);事务
摘要 事务控制是数据库应用系统中的关键技术之一,本文一开始先对事务控制的概念以及微软的 ActiveX数据对象(ADO)的事务控制做了简介,之后以一个具体的实例给出ActiveX数据对象的事务控制在VB和DELPHI中的使用方法。
关键词 ActiveX数据对象(ADO);事务控制;VB;DELPHI
1 引言
在数据库的应用中,有时会遇到以独立单元保存或取消对源数据所做的一系列更改。例如在货币转帐时,必须从帐户中减去某个数额并将其对等数额添加到另一个帐户。无论其中的哪个更新失败,都将导致帐户收支不平衡。再如,在进行商品库存管理时,当发生购进或售出商品时,一方面要在商品的销售表中保存该商品的销售记录,另一方面,还要在商品库存中对该种商品的库存进行调整。无论其中的哪个更新失败,都将导致商品收支不平衡。在这种情况下,必须通过事务控制来保证操作的一致性。
2 ActiveX数据对象事务控制
2.1 ActiveX数据对象(ADO)简介
Microsoft ActiveX Data Objects(ADO)是Microsoft开发的数据访问对象,它可使用户通过何OLE DB Provider 访问数据库服务器中的数据。ADO趋向于提供一种稳定的接口,来使用户利用多种不同的数据源包括从非关系型数据源(包括文本文件、电子邮件等)到ODBC关系型数据库。所以它是对ODBC的扩充。
ADO的主要优点是使用简单,快速,内存消耗量低,磁盘的占有量少,在关键
情况下网络的通信量最少,前端与数据存储之间的层次最少,是一种轻便质优的接口。
2.2 ActiveX数据对象(ADO)事务控制
BeginTrans、CommitTrans和RollbackTrans是ADOConnection部件供数据库应用程序在运行时调用开始事务、控制并保存或放弃所做数据修改的方法。
l BeginTrans 开始一个事务
当开始一个事务时,后来所有读写数据库的操作都发生在这次事务的环境中,直到本次事务通过调用CommitTrans或RollbackTrans来显示的终止为止。还以商品管理为例,当购进或售出商品时,在商品数据库记录上必须发生两个修改:
A、购进或销售的记录必须记录在销售表中;
B、在商品库存中对该类商品的库存进行调整。
如果出于某种原因,其中的一个操作不能被完成,那么任何一个操作都不应该发生。因为这些操作是相关的,它们发生在同一个事务中。
l RollbackTrans 取消事务中的修改并终止当前事务
为了取消对数据库所做的修改,必须用RolllbackTrans方法返回一个事务。RollbackTrans方法取消当前事务中对数据库所做的修改并终止当前事务。
l CommitTrans 提交一个事务
为了做永久性的修改,必须CommitTrans方法提交事务,这将保存用户对数据库所做的修改并结束当前事务。
在VB 6.0中,ADO成为它与各种数据源的缺省接口,ADO数据访问方式是现在和未来VB乃至Microsoft的各种应用软件进行数据访问与应用的主流。
而在DELPHI中,基于DBE(Borland Database Engine的简称,即Borland数据库引擎)的数据库访问方式是DELPHI的标准的、传统的方式;基于ADO技术的数据库访问方式,这是DELPHI 5.0新增的功能。DELPHI 5.0 提供了一整套ADO组件,封装了ADO框架的所有功能。
下面以商品库存管理来分别阐明ADOConnection的事务控制在VB和DELPHI中的应用。
3 商品库存管理中的数据库
该数据库GoodsManagement用Microsoft的SQL Server创建,包括三个用户数据表,用户表Users、库存表Goods、进销表InOutGoods,每个数据表的表结构如下:
l 用户表Users
字段名 数据类型 长度
用户名 VARCHAR 8
用户类型 VARCHAR 10
用户口令 VARCHAR 6
主键为: 用户名
注:
用户类型有一般用户和系统管理员两种,其中一般用户只能进行销售商品,碉系统管理员还可以增加或删除用户,由于本文章只是阐述ADOConnection的事务控制,所以也就涉及到用户管理。
l 库存表Goods
字段名 数据类型 长度
商品名 VARCHAR 14
商品描述 VARCHAR 16
商品库存 SMALLINT 2
主键为:商品名
l 进销表InOutGoods
字段名 数据类型 长度
进销 VARCHAR 2
商品名称 VARCHAR 14
商品数量 SMALLINT 2
商品价格 MONEY 8
操作人员 VARCHAR 8
操作时间 DATETIME 8
主键为:(操作人员,操作时间)
外键为:操作人员,对应于Users表的用户名
4 ADO事务控制应用〈〈商品库存管理〉〉在VB中的实现
4.1 数据环境设计器
图1 数据环境设计器
数据环境设计器中主要控件的属性如下:
控件名 控件类型 重要属性设置
CN ADOConnection对象 ConnectSource如下:
Provider=SQLOLEDB.1;Password=SA;Persist Security Info=True;User ID=sa;
Initial Catalog=GoodsManagement
Goods ADOCommand对象 ConnectionName:CN
CommandText:Goods
InOutGoods ADOCommand对象 ConnectionName:CN
CommandText:Goods
StrSQL ADOCommand对象 ConnectionName:CN
CommandText:Goods
4.2 进库管理模块的代码
下面就以其中的一个程序段“进库管理”来说明ADO数据对象如何实现事务管理。
Dim intNum1, intNum2 As Integer ? ‘开始一个事务 DE.Cn.BeginTrans With DE.rsInOutGoods ‘写入购进商品的记录 .AddNew .Fields(0).Value = "进" .Fields(1).Value = TxtName.Text .Fields(2).Value = CInt(TxtNumber.Text) .Fields(3).Value = CInt(TxtPrice.Text) .Fields(4).Value = G_userName .Fields(5).Value = CStr(Now) . .Update End With If DE.rsStrSQL.State = adStateOpen Then DE.rsStrSQL.Close End If
‘求进销表中商品名为TxtNumber.Text且为进的所有记录的进货数量之和
With DE.rsStrSQL .Open "select sum(商品数量) from InOutGoods where 进销='进'" & " and 商品名称='" & TxtName.Text & "'" intNum1 = .Fields(0).Value .Close End With
‘求进销表中商品名为TxtName.Text且为销的所有记录的进货数量之和
With DE.rsStrSQL
.Open "select sum(商品数量) from InOutGoods where 进销='销'" & " and
商品名称='" & TxtName.Text & "'"
If .RecordCount = 1 And IsNull(.Fields(0).Value) Then intNum2 = 0 Else intNum2 = .Fields(0) End If .Close End With
‘调整商品库存中该商品的库存量
DE.Cn.Execute "update Goods set 商品库存=" & (intNum1 - intNum2) & " where 商品名='" & TxtName.Text & "'"
‘向数据库提交事务
D【本文来自鸿网互联 (http://www.68idc.cn)】E.Cn.CommitTrans
?
5 ADO事务控制应用〈〈商品库存管理〉〉在DELPHI中的实现
5.1 系统中的数据模块
数据模块窗体主要控件的属性如下:
控件名 控件类型 重要属性设置
ADOCn ADOConnection对象 ConnectSource :(同前)
ADODatasetGoods 数据集部件ADODataset ConnectionName:ADOCN
CommandText:Goods
ADODatasetInOutGoods 数据集部件ADODataset ConnectionName:ADOCN
CommandText:Goods
ADODataset1 数据集部件ADODataset ConnectionName:ADOCN
CommandText:Goods
DataSourceGoods DataSource控件 Dataset:ADODatasetGoods
DataSourceInOutGoods DataSource控件 Dataset:ADODatasetInOutGoods
5.2 进库管理模块的代码
下面就以其中的一个程序段“进库管理”来说明ADO数据对象如何实现事务管理。
var strSQL:string; intNum1,intNum2,intRecordsAffected:integer; begin ? //启动事务控制 DM.ADOCn.BeginTrans; //向进销表插入一条记录 with DM.ADODataSetInOutGoods do begin insert; fields[0].Value:='进'; fields[1].Value:= editName.text; fields[2].AsString:=editNumber.text; fields[3].AsString:=editPrice.text; fields[4].Value:=G_UserName; fields[5].AsString :=DateTimeToStr(now); Post; end; //求进销表中商品名为editName.text且为进的所有记录的进货数量之和 strSQL:='select sum(商品数量) from InOutGoods where 进销=''进'' and 商品名称='''+editName.text+''''; with DM.ADODataSet1 do begin Close; CommandText:=strSQL; Open; end; intNum1:=DM.ADODataSet1.Fields[0].Value ; //求进销表中商品名为editName.text且为销的所有记录的进货数量之和 strSQL:='select sum(商品数量) from InOutGoods where 进销=''销'' and 商品名称='''+editName.text+''''; with DM.ADODataSet1 do begin Close; CommandText:=strSQL; Open; end; if (DM.ADODataSet1.RecordCount=1) and DM.ADODataSet1.Fields[0].Value=null) then IntNum2:=0 else intNum2:=DM.ADODataSet1.Fields[0].value; strSQL:='update Goods set 商品库存='+intToStr(intNum1-intNum2) +' where 商品名='''+editName.Text+''''; DM.ADOCn.Execute (strSQL,intRecordsAffected,[eoExecuteNoRecords]) ; DM.ADOCn.Execute(strSQL,intRecordsAffected,[eoExecuteNoRecords]) ; DM.ADOCn.CommitTrans ; ?

译者 | 布加迪审校 | 孙淑娟目前,没有用于构建和管理机器学习(ML)应用程序的标准实践。机器学习项目组织得不好,缺乏可重复性,而且从长远来看容易彻底失败。因此,我们需要一套流程来帮助自己在整个机器学习生命周期中保持质量、可持续性、稳健性和成本管理。图1. 机器学习开发生命周期流程使用质量保证方法开发机器学习应用程序的跨行业标准流程(CRISP-ML(Q))是CRISP-DM的升级版,以确保机器学习产品的质量。CRISP-ML(Q)有六个单独的阶段:1. 业务和数据理解2. 数据准备3. 模型

人工智能(AI)在流行文化和政治分析中经常以两种极端的形式出现。它要么代表着人类智慧与科技实力相结合的未来主义乌托邦的关键,要么是迈向反乌托邦式机器崛起的第一步。学者、企业家、甚至活动家在应用人工智能应对气候变化时都采用了同样的二元思维。科技行业对人工智能在创建一个新的技术乌托邦中所扮演的角色的单一关注,掩盖了人工智能可能加剧环境退化的方式,通常是直接伤害边缘人群的方式。为了在应对气候变化的过程中充分利用人工智能技术,同时承认其大量消耗能源,引领人工智能潮流的科技公司需要探索人工智能对环境影响的

Wav2vec 2.0 [1],HuBERT [2] 和 WavLM [3] 等语音预训练模型,通过在多达上万小时的无标注语音数据(如 Libri-light )上的自监督学习,显著提升了自动语音识别(Automatic Speech Recognition, ASR),语音合成(Text-to-speech, TTS)和语音转换(Voice Conversation,VC)等语音下游任务的性能。然而这些模型都没有公开的中文版本,不便于应用在中文语音研究场景。 WenetSpeech [4] 是

条形统计图用“直条”呈现数据。条形统计图是用一个单位长度表示一定的数量,根据数量的多少画成长短不同的直条,然后把这些直条按一定的顺序排列起来;从条形统计图中很容易看出各种数量的多少。条形统计图分为:单式条形统计图和复式条形统计图,前者只表示1个项目的数据,后者可以同时表示多个项目的数据。

arXiv论文“Sim-to-Real Domain Adaptation for Lane Detection and Classification in Autonomous Driving“,2022年5月,加拿大滑铁卢大学的工作。虽然自主驾驶的监督检测和分类框架需要大型标注数据集,但光照真实模拟环境生成的合成数据推动的无监督域适应(UDA,Unsupervised Domain Adaptation)方法则是低成本、耗时更少的解决方案。本文提出对抗性鉴别和生成(adversarial d

数据通信中的信道传输速率单位是bps,它表示“位/秒”或“比特/秒”,即数据传输速率在数值上等于每秒钟传输构成数据代码的二进制比特数,也称“比特率”。比特率表示单位时间内传送比特的数目,用于衡量数字信息的传送速度;根据每帧图像存储时所占的比特数和传输比特率,可以计算数字图像信息传输的速度。

数据分析方法有4种,分别是:1、趋势分析,趋势分析一般用于核心指标的长期跟踪;2、象限分析,可依据数据的不同,将各个比较主体划分到四个象限中;3、对比分析,分为横向对比和纵向对比;4、交叉分析,主要作用就是从多个维度细分数据。

在日常开发中,对数据进行序列化和反序列化是常见的数据操作,Python提供了两个模块方便开发者实现数据的序列化操作,即 json 模块和 pickle 模块。这两个模块主要区别如下:json 是一个文本序列化格式,而 pickle 是一个二进制序列化格式;json 是我们可以直观阅读的,而 pickle 不可以;json 是可互操作的,在 Python 系统之外广泛使用,而 pickle 则是 Python 专用的;默认情况下,json 只能表示 Python 内置类型的子集,不能表示自定义的


热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

AI Hentai Generator
免费生成ai无尽的。

热门文章

热工具

Dreamweaver CS6
视觉化网页开发工具

螳螂BT
Mantis是一个易于部署的基于Web的缺陷跟踪工具,用于帮助产品缺陷跟踪。它需要PHP、MySQL和一个Web服务器。请查看我们的演示和托管服务。

ZendStudio 13.5.1 Mac
功能强大的PHP集成开发环境

记事本++7.3.1
好用且免费的代码编辑器

DVWA
Damn Vulnerable Web App (DVWA) 是一个PHP/MySQL的Web应用程序,非常容易受到攻击。它的主要目标是成为安全专业人员在合法环境中测试自己的技能和工具的辅助工具,帮助Web开发人员更好地理解保护Web应用程序的过程,并帮助教师/学生在课堂环境中教授/学习Web应用程序安全。DVWA的目标是通过简单直接的界面练习一些最常见的Web漏洞,难度各不相同。请注意,该软件中