[转载] 学习TClientDataset的使用

[转载] 学习TClientDataset的使用 http://blog.csdn.net/onebigday/article/details/6275550

这个控件好像很好用,以前都是用TSimpledataset,现在突然想用一下它。要用它,好像比TSimpleDataset多几个控件,我是加了以下几个控件,TSQLConnection,TSQLQuery,TDataSetProvider,TClientDataset,TDataSource,TDBGrid。这几个控件中,TDBGrid的DataSource属性设为TDataSource,TDataSource的DataSet属性设为TClientDataset,TClientDataset的ProviderName属性设为TDataSetProvider,TDataSetProvider的Dataset属性设为TSQLQuery,TSQLQuery的SQLConnection属性设为TSQLConnection。

其中还要对TDataSetProvider设置一个属性,就是TDataSetProvider中的Options->poAllowCommandText这个属性设置为True,如果不设置为True的话,调用TClientDataset的Open时,会出现" commandtext changes are not allowed"的错误。以上设置完后,就可以用ClientDataSet1.CommantText := ‘SELECT * FROM MYTABLE‘(注意:SQL语句一定要大写,不然在调用ClientDataset1.ApplyUpdates时会出现“table or view does not exist”的错误)之类的语句设置SQL语句,然后用ClientDataSet1.Open来取得数据。在TDBGrid中修改了数据后就可以用ClientDataset1.ApplyUpdates(0)来把数据更新到数据库中了。

对于有二进制字段的,可以把TDataSetProvider->Options->poFetchBlobOnDemand设为True。这样程序一开始并不加载Blob字段的数据,如果用到了,TClientDataset会自动加载,对于我们程序员来说,是透明的,不需做额外的事,如正常一样访问TClientDataSet中的Blob字段就行了,要注意的是TClientDataSet的CommantText一定要有Select到Blob的SQL语句,而且,SQL语句一定要是大写的,不然也会出现“table or view does not exist”的错误。

完整的测试代码如下:

pas代码:

[delphi] view plaincopyprint?

unit Unit1;

interface

uses

Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,

Dialogs, DBXpress, FMTBcd, SqlExpr, StdCtrls, DB, DBClient, Provider,

Grids, DBGrids;

type

TForm1 = class(TForm)

DBGrid1: TDBGrid;

DataSource1: TDataSource;

DataSetProvider1: TDataSetProvider;

ClientDataSet1: TClientDataSet;

SQLConnection1: TSQLConnection;

Button1: TButton;

Button2: TButton;

SQLQuery1: TSQLQuery;

procedure Button1Click(Sender: TObject);

procedure Button2Click(Sender: TObject);

private

{ Private declarations }

public

{ Public declarations }

end;

var

Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);

begin

ClientDataSet1.Close;

ClientDataSet1.CommandText := ‘SELECT * FROM MYTABLE1‘; //SQL语句一定要大写,不然在调用ClientDataset1.ApplyUpdates(0)时会出现“table or view does not exist”的错误

ClientDataSet1.Open;

end;

procedure TForm1.Button2Click(Sender: TObject);

begin

ClientDataSet1.ApplyUpdates(0);

end;

end.

dfm代码如下:

[delphi] view plaincopyprint?

object Form1: TForm1

Left = 245

Top = 238

Width = 1142

Height = 656

Caption = ‘Form1‘

Color = clBtnFace

Font.Charset = DEFAULT_CHARSET

Font.Color = clWindowText

Font.Height = -11

Font.Name = ‘MS Sans Serif‘

Font.Style = []

OldCreateOrder = False

PixelsPerInch = 96

TextHeight = 13

object DBGrid1: TDBGrid

Left = 152

Top = 88

Width = 529

Height = 233

DataSource = DataSource1

TabOrder = 0

TitleFont.Charset = DEFAULT_CHARSET

TitleFont.Color = clWindowText

TitleFont.Height = -11

TitleFont.Name = ‘MS Sans Serif‘

TitleFont.Style = []

end

object Button1: TButton

Left = 528

Top = 32

Width = 75

Height = 25

Caption = ‘Button1‘

TabOrder = 1

OnClick = Button1Click

end

object Button2: TButton

Left = 704

Top = 40

Width = 75

Height = 25

Caption = ‘Button2‘

TabOrder = 2

OnClick = Button2Click

end

object DataSource1: TDataSource

DataSet = ClientDataSet1

Left = 160

Top = 24

end

object DataSetProvider1: TDataSetProvider

DataSet = SQLQuery1

Options = [poAllowCommandText]

Left = 288

Top = 24

end

object ClientDataSet1: TClientDataSet

Aggregates = <>

Params = <>

ProviderName = ‘DataSetProvider1‘

Left = 224

Top = 16

end

object SQLConnection1: TSQLConnection

ConnectionName = ‘OracleConnection‘

DriverName = ‘Oracle‘

GetDriverFunc = ‘getSQLDriverORACLE‘

LibraryName = ‘dbexpora.dll‘

LoginPrompt = False

Params.Strings = (

‘DriverName=Oracle‘

‘DataBase=192.168.1.100‘

‘User_Name=qgtg‘

‘Password=qgtg‘

‘RowsetSize=20‘

‘BlobSize=-1‘

‘ErrorResourceFile=‘

‘LocaleCode=0000‘

‘Oracle TransIsolation=ReadCommited‘

‘OS Authentication=False‘

‘Multiple Transaction=False‘

‘Trim Char=False‘)

VendorLib = ‘oci.dll‘

Left = 376

Top = 24

end

object SQLQuery1: TSQLQuery

MaxBlobSize = -1

Params = <>

SQLConnection = SQLConnection1

Left = 336

Top = 24

end

end

时间: 2024-08-03 14:52:04

[转载] 学习TClientDataset的使用的相关文章

[转载]学习C语言基本思路与参考书籍

http://zhuanlan.zhihu.com/linjr/19694823 计算机行业发展非常快,大学里的教育基本都跟不上实际的社会需求.如果你所在的学校还在指定大家使用谭浩强的教材,或使用VC6.0来教大家上机实验,那你不妨看看本文,这里有一些建议可以帮助你不会脱离社会太远. 考虑到这是一个过来人感觉很基础,但是对于初学者又觉得困难重重的问题,我想如果这篇文章要想写得不让你觉得专业名词扎堆,内容高深莫测,读完还是不知所云,那最好的办法也许是,我们通过沟通的方式把整个「C语言应该怎么学」的

为什么每个前端开发者都要理解页面的渲染?(转载 学习中。。。)

文章转载自:开源中国社区 [http://www.oschina.net] 今天我要将关注点放到页面渲染以及其重要性上.虽然已经有很多文章提到过这个主题了,但大部分信息都是零碎的片段.为了思考这件事情,我需要研究很多信息的来源.这也就是为什么我觉得我应该写这篇文章的原因.我相信这篇文章对新手会很有用,并且对想刷新和巩固他们已经了解的东西的高手也同样适用. 渲染应该从最开始当页面布局被定义时就进行优化,样式和脚本在页面渲染中扮演着非常重要的角色.专业人员知道一些技巧以避免一些性能问题. 这篇文章不

三分查找算法(转载学习)*【模板】

转载地址:http://blog.csdn.net/acdreamers/article/details/9989197 首先来说说三分的概念: 二分是把区间分为长度相等的两段,三分则是把区间分为长度相等的三段,进行查找,这样的查找称为三分查找,三分查找通 常用来迅速确定最值. 众所周知,二分算法的要求是搜索的序列是单调序列,而三分法所面向的搜索序列的要求是:序列为一个凸性函数. 与二分法类似,三分算法先把区间分为长度相等的三段,那么l与r之间就有两个点,分别是:ll=l+(r-l)/3=(2l

链式--前向星算法(转载学习)*重点*【模板】

转载地址:http://blog.csdn.net/acdreamers/article/details/16902023 我们首先来看一下什么是前向星. 前向星是一种特殊的边集数组,我们把边集数组中的每一条边按照起点从小到大排序,如果起点相同就按照终点从小到大排序, 并记录下以某个点为起点的所有边在数组中的起始位置和存储长度,那么前向星就构造好了. 用len[i]来记录所有以i为起点的边在数组中的存储长度. 用head[i]记录以i为边集在数组中的第一个存储位置. 那么对于下图: 我们输入边的

[转载] 学习新技能的37个最佳网站

原文: http://codecloud.net/the-37-best-websites-to-learn-something-new-4772.html 大部分都是英文课程, 对英文要求较高, 有需求的时候查询吧. 忘了过于褒奖的学校.整天呆在拥挤的教室而效果却差得可怜.这些网站和应用涵盖了科学.艺术和技术的无数话题.它们可以教会你实践练习任何技能,从制作豆沙到用 node.js 开发 app,而且它们都是免费的.你绝对没有任何理由不去掌握一个新技能.拓展你的知识,或最终助长你的职业发展.你

JavaScript 开发进阶:理解 JavaScript 作用域和作用域链(转载 学习中。。。)

作用域是JavaScript最重要的概念之一,想要学好JavaScript就需要理解JavaScript作用域和作用域链的工作原理.今天这篇文章对JavaScript作用域和作用域链作简单的介绍,希望能帮助大家更好的学习JavaScript. JavaScript作用域 任何程序设计语言都有作用域的概念,简单的说,作用域就是变量与函数的可访问范围,即作用域控制着变量与函数的可见性和生命周期.在JavaScript中,变量的作用域有全局作用域和局部作用域两种. 1.  全局作用域(Global S

[转载学习] 背包问题九讲

背包问题九讲 v1.0 目录 第一讲 01背包问题 第二讲 完全背包问题 第三讲 多重背包问题 第四讲 混合三种背包问题 第五讲 二维费用的背包问题 第六讲 分组的背包问题 第七讲 有依赖的背包问题 第八讲 泛化物品 第九讲 背包问题问法的变化 附:USACO中的背包问题 前言 本篇文章是我(dd_engi)正在进行中的一个雄心勃勃的写作计划的一部分,这个计划的内容是写作一份较为完善的NOIP难度的动态规划总结,名为<解动态规划题的基本思考方式>.现在你看到的是这个写作计划最先发布的一部分.

虚拟化技术简介(转载学习)

虚拟化 虚拟化是指计算机元件在虚拟的基础上而不是真实的基础上运行.虚拟化技术可以扩大硬件的容量,简化软件的重新配置过程.CPU的虚拟化技术可以单CPU模拟多CPU并行,允许一个平台同时运行多个操作系统,并且应用程序都可以在相互独立的空间内运行而互不影响,从而显著提高计算机的工作效率. 几种虚拟化软件 1.RedHat KVM虚拟化方式:完全虚拟化 架构:寄居架构(linux内核);祼金属架构RHEV-H 特点:祼金属架构RHEV-H或在关键的硬盘和网卡上支持半虚拟化VirtIO,达到最佳性能.

【转】作用域、链接属性、存储类型总结--转载学习,很清晰,很详细

标识符: 首先,在讨论这三种东西之前,详细说明一下C语言中的标识符. 标识符是用户编程为变量.常量.函数.语句等指定的名字,就好比人名一样的东西. 标识符的命名规则如下: 1.只能由字母.数字.下划线组成,并且首字符不能是数字: 2.不能把C语言的关键字作为标识符: 3.对大小写敏感: 其次,需要明确,作用域和链接属性是在标识符范畴内讨论的,存储类型是在标识符中的变量范畴内讨论的. 作用域: 标识符的作用域就是程序中该标识符可以被使用的区域,由它的声明位置决定. 分为以下四类: 1.文件作用域