学习TClientDataset的使用

        这个控件好像很好用,以前都是用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代码:

 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代码如下:

 

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

你可能感兴趣的:(Delphi编程,button,dataset,object,authentication,oracle,table)