zoukankan      html  css  js  c++  java
  • [转载] 学习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

     

  • 相关阅读:
    百度病了,必应挂了,Yandex疯了。
    SpringBoot从零单排 ------ 拦截器的使用
    SpringBoot从零单排 ------初级入门篇
    我为什么放弃MySQL?最终选择了MongoDB
    NSURL组成部分详解
    关于MPMoviePlayerController 缓存播放的一些技术准备
    动画系列收藏
    代码简化
    自动循环滚动ScrollView
    iOS WKWebView 使用笔记
  • 原文地址:https://www.cnblogs.com/smartlittleant/p/4066983.html
Copyright © 2011-2022 走看看