zoukankan      html  css  js  c++  java
  • 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)

  • 相关阅读:
    2015531 网络攻防 Exp1 PC平台逆向破解(5)M
    2017-2018-1 20155331 嵌入式C语言
    20155330 《网络对抗》 Exp9 web安全基础实践
    20155330 《网络对抗》 Exp8 Web基础
    20155330 《网络对抗》 Exp7 网络欺诈防范
    20155330 《网络对抗》 Exp6 信息搜集与漏洞扫描
    20155330 《网络对抗》 Exp5 MSF基础应用
    20155330 《网络攻防》 Exp4 恶意代码分析
    20155330 《网络攻防》 Exp3 免杀原理与实践
    20155330 《网络对抗》 Exp2 后门原理与实践
  • 原文地址:https://www.cnblogs.com/jieling/p/5868387.html
Copyright © 2011-2022 走看看