DBAccess
01.单SQL执行.DBA.ExeuteSQL(SQL语句,是否返回值,是否事务处理,返回值<字符型>):Boolean;
-- 执行SQL后,将影响的行数进行返回
02.批量SQL执行.DBA.ExecuteBatchSql(TStringList,是否事务):Boolean;
--将需要执行的SQL添加到TStringList中去,然后一次性执行,要么都成功,要么都失败
03.数据库存储过程的执行 DBA.ExecuteStoredProc(过程名,参数对象,是否事务):Boolean;
--参数名称,需与存储过程中定义的参数名一致,否则会出现参数找不着的错误
--在配置参数时,三号参数需要标识参数方向,是传入参数还是返回参数
04.数据库存储守程返回数据集的应用
DBA.ReadStoredProcDataset(存储过程名,参数对象,数据集个数,是否ADO模式):Boolean;
--数据集个数:返回的数据集个数,
--是否ADO模式:如果开启则需要使用AdoDataSet对象接收数据集;如果不开启,使用CDS接收数据集
--数据集的接收:ReadStoredProcDataset(序位,接收对象<CDS或AdoDataSet>)
序位从0开始,只取一次,取完后,自动清理
--数据集的清理:ClearStoredProcDataSet;
-------------------------------------------------------------------------------
解析动作:存储过程可使用 TAdoStoredProc进行处理,也可以直接使用AdoQuery进行处理
a.配置好正常的SQL语句,通过Open执行,
b.借用 _RecordSet;进行多数据集的提取 ==> var NR:_RecordSet
c.NR := Qry1.RecordSet;
while NR<>nil do
begin
Qry2.RecordSet := NR; --> 如果上面开启ADO模式,则直接返回Qry2
--这里使用的是TAdoQuery,也可以使用 TAdoDataSet.RecordSet := NR;
--若需要返回CDS数据,则借用 TDataSetProvider进行转换
TDataSetProvider.dataset := Qry2;
CDS.Data := TDataSetProvider.data; --将CDS进行返回
end
-------------------------------------------------------------------------------
特别说明:如果要同步返回多个数据集,上面的Qry2和CDS需要动态创建,才满足遍历的多数据集
返回,当然,如果明确知道有几个数据集,则可以分别用一同的数据集接收
-------------------------------------------------------------------------------
05.DBA对数据集的读取
a.ReadDataset(SQL语句,CDS或Ado数据集):Boolean; 只是简单的读取数据集回来
b.大数据集读取
function ReadLargeDataset(aSQLStr: String; RecordsPerPage: integer; var RetCDS: TClientDataset): boolean; overload;
在读取大数据集时,会触发 OnDatasetFetchProgress 事件,可用于处理进度条事件
function ReadLargeDataset(aSQLStr: String; RecordsPerPage: integer; LocalTable: string; LocalAdoConn: TAdoConnection): boolean;
overload
在读取大数据集时,也可转存到本地数据库中去,但需要标识要写入哪个数据库表,同时提供对本地数据库的连接
c.简单返回值的读取: function ReadSimpleResult(SqlCommand: string; var RetValue: string): boolean;
如Select count(*)、Select sum()等,执行此SQL命令所返回的简单值,通过RetValue返回。
d.对读大数据过程中的取消读取: ReadLargeCancel;
06.DBA对数据集的写操作
a.绝对的向数据表中写数据: function WriteDataset(Cds: TClientDataset; TableName: string; Condition: string=''): boolean;
如果Condition不为空,则系统将会先删除符合条件的记录,然后再进行数据的插入操作
07.DBA数据表结构的读取: function ReadTableHead(TableName: string; var Cds: TClientDataset): boolean; overload;
实际返回的就是一个没有符合条件记录的空数据集,数据表结构还是以字段方式存在,而不是对数据表结构的详细描述说明
08.DBA数据记录的追加:
a. AppendRecord(TableName: string; RecordParcel: TQBParcel)
先创建一个QBParcel,并按字段类型,向里面添加记录数据: 字段名与字段值
然后再调用AppendRecord进行数据记录的添加
*** 字段名称不能超过30个字符,否则会被忽略掉
b. 使用CDS来添加记录
先用ReadTableHead读取数据表结构,然后再往CDS中添加记录
最后调用 AppendRecord(表名,CDS)来提交数据
** 但本方法只支持一次添加一条记录(内部封装时,限制了一条)
---------------------------------------------------------------
同样的对于数据记录的修改,也可以使用QBParcel和CDS二种方法,
只不过调用的方法分别变成了: UpdateRecord(表名,条件,数据集记录) ==>同样的受限于1条记录
09.DBA对CDS异动数据的提交
a. 直接提交Delta: CommitCdsDelta(TableName: String; KeyFieldList: String; Delta: OleVariant)
这种方法对提交的Delta中,将原来的值改成Null值的时候无法处理
b. 直接提交CDS:CommitCdsDelta(TableName: String; KeyFieldList: String; Cds: TClientDataset)
----------------------------------------
** 数据提交成功后,需要对本地CDS进行合并操作: CDS.MergeChangeLog;
10.多数据集读取
借用 TStringList进行SQL的存储, 然后统一调用
通过 ReadMultipleDatasets(BatchSQL: TStringList; IsAdoFormat: boolean=false) 进行读取
通过 GetResultDataset(aIndex: integer; var aCds: TClientDataset)进行数据集的提取
通过 ClearResultDataSets 进行结果集的清理
11.多数据集写操作
a.先添加要写库的数据集: AddWriteDataset(TableName: string; ClearSql: string; 数据集<CDS或AdoDataSet>):
b.添加完成后,再写:WriteMultipleDatasets();
c.清理: ClearWriteDataSets;
12.主键值的生成
GenerateId(表名; 关键字段名; 过滤条件; FieldMask: ansistring; ConstList: ansistring; var NewId: ansistring):
FieldMask: 关键字段编码范式,内含的字符串意义为:
A: 自增型字段
I: 整数型字段
YY: 两位年
YYYY: 四位年
MM: 月
DD: 日
HH: 时
NN: 分
SS: 秒
XX...X: 流水号(长度取决于X的个数,一个键值里最多只能有一个)
CC..C: 固定字符串(长度取决于C的个数,一个键值里可有多个)
ConstList: 编码范式中存在固定字符时所对应的实际字符串,若有多个串,中间用半角逗号分隔
关键值的退还
FreeUnusedId(TableName: string; KeyFieldName: string; FilterCondition: string; IdToFree: ansistring)
13.分页查询的处理
14.大数据集的读取 ReadLargeDataset(SQL语句,每页记录数,接收CDS)
DBAccess的更多相关文章
- informix dbaccess 常用执行方式及常见技巧
假设: A.数据库servername: testserver B.数据库名:testdb C.SQL脚本文件: sqlfile.sql create table test_table(c1 inte ...
- .net增删该查DBAccess的应用
1.首先引用dll文件 2. //DBAccess.dll引用一個dll文件 private IDBAccess _access; private static readonly stri ...
- 【翻译】MongoDB指南/CRUD操作(二)
[原文地址]https://docs.mongodb.com/manual/ MongoDB CRUD操作(二) 主要内容: 更新文档,删除文档,批量写操作,SQL与MongoDB映射图,读隔离(读关 ...
- EF 添加方式比较
using System; using System.Collections.Generic; using DBAccess.Models; using EntityFramework.BulkIns ...
- 测试EntityFramework,Z.EntityFramework.Extensions,原生语句在不同的查询中的表现。原来池化与非池化设定是有巨大的影响的。
Insert测试,只测试1000条的情况,多了在实际的项目中应该就要另行处理了. using System; using System.Collections.Generic; using Syste ...
- 从SQLite获取数据完成一个产品信息展示
在ios实际开发当中,我们常常用到Core Data做为数据储存首选.但在处理一些大量复杂的数据值且数据之间相互关联的时候,这就不得不使用关系型数据库来实现.例如一个导航程序,自身应该包含大量的地图自 ...
- 框架基础之Hibernate简介
框架基础之Hibernate简介 1.什么是Hibernate? Hibernate是一个开发源代码的对象关系映射框架,它对JDBC进行非常轻量级的对象封装,使得程序员可以随心所欲地使用对象编程思维来 ...
- 架构实例之Demo_JSP_JavaBean
架构实例之Demo_JSP_JavaBean 1.开发工具和开发环境 开发工具: MyEclipse10,JDK1.6.0_13(32位),Tomcat7.0(32位),mysql5.7.1 ...
- Java项目多数据源配置
由于种种原因,有的时候可能要连接别人的数据库,或者不同的数据库没法自动转换,重构起来数据量又太大了,我们不得不在一个项目中连接多个数据源.从网上找了各种资料,只有这位大神给出的解决方案一下子就成功了. ...
随机推荐
- 从表中删除重复记录的sql
--有一个表,假设是这样的 CREATE TABLE Test ( field1 ) primary key, field2 )); --假设field1上有索引. 要删除表中所有field1重复的记 ...
- 构建高性能的ASP.NET应用程序
看见大标题的时候,也许各位看官会自然而然的联想到如何在设计阶段考虑系统性能问题,如何编写高性能的程序代码.关于这一点,大家可以在MSDN和相关网站上找到非常多的介绍,不过大多是防患于未难,提供的是在设 ...
- grunt让Nodejs规范起来
Aug 17, 2013 Tags: gruntJavascriptnodejs Comments: 9 Comments grunt让Nodejs规范起来 从零开始nodejs系列文章,将介绍如何利 ...
- Android 程序崩溃后的处理
在应用发布以后,由于安卓机型的千差万别 ,可能会出现各种各样的问题,这时候如果我们可以将这些信息收集起来,并进行修改就很不错了.下面就来讨论一下怎么处理程序崩溃以后,错误信息的手机. Java中已经提 ...
- Dynamics AX 2012 R3 Demo 安装与配置 - 配置安装环境 (Step 1)
AX 2012 R3 发布后,Reinhard一直想体验一把,可是Reinhard所在的公司暂时不会升级到R3版本.这不,Reinhard就打算在个人电脑上安装下,可是安装的过程中,遇到了很多问题,R ...
- 初识python第二天(2)
整理Python常见数据类型内置函数的使用方法如下: 一.int 首先我们来查看一下int包含了哪些函数 #python3.x print(dir(int)) #['__abs__', '__add_ ...
- Bash:-变量替换后利用大括号获取数字存在的间隔
比如脚本输入位置变量:1_5 输出效果为: 1 2 3 4 5 脚本代码如下: #!/bin/bash i=1_5 for j in $(eval echo {${i/_/\..}});do echo ...
- /var/spool/postfix/maildrop 占用inode索引及磁盘空间解决办法
1.问题表现和检查 运行df -i / 查看inode使用是否满: 2.查看/var/spool/postfix/maildrop是否有非常多的小文件,ls直接卡死等情况 解决: 删除小文件: cd ...
- python学习之if语句
1.if条件表达式判断 ##判断条件是true or false var1=10 if var1: print("true") print(var1) else: print(&q ...
- python(八)内置模块logging/os/time/sys/json/pickle
模块 在计算机程序的开发过程中,随着程序代码越写越多,在一个文件里代码就会越来越长,越来越不容易维护.为了编写可维护的代码,我们把很多函数分组,分别放到不同的文件里,这样,每个文件包含的代码就相对较少 ...