[轉載] 學習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
大寶恩師在道次第班學習討論《入菩薩行論》忏悔品時的開示(農歷二ΟΟ七年臘月十二日午後於大師殿前)第一次聽到大家討論,那麽我感到:第一個,方式方法是對頭了,這一次討論的方式裡邊呢,每一個人的思想檢查,我感覺到還不夠深入,最好再深化一下。我們這個討論學習的目的就是改變思想,使我們的思想如何能跟佛的經論,能夠配合起來,那麽如果說,我們討論的時候是討論,思想行動還是另外一套,這個討論就是意義不太大了。我們繼續學習了之後,又討論了,功夫下了很多,那就希望收到一定效果,這個效果就是說,我們的思想行動能夠跟起經論方面轉過去,怎麽轉過去呢?就要挖掘自己的思想了,深刻的挖掘,把自己過去爲什麽要犯錯的根子找出來,根子找出來了,然後再看到底對不對,是不對的,那把它斷掉,生死(根子)一斷永斷了,如果表面上,膚淺的,說書上怎麽說該怎麽做,過一會呢,或者是你碰到一些事情呢,把書忘掉了,老的習氣出來了,那就是經上說的話怎麽作用都沒有了,所以說我們希望學習呢,要把經論的精神深入到自己的思想裡頭去,要深入(到)思想裡去的話,決定要産生一種觸動,就把思想裡邊的髒東西,挖出來,然後把新的拿進去,我們將來修的《忏悔品》的意思要知道,那裡邊我記得有個比喻,一張、一快很髒的布,你如果要去畫圖的話,決不能畫一個好圖案出來的,那麽你要畫圖,要用髒布畫,要洗的干干淨淨的,然後你畫出來,顔色也鮮的,又好看,那麽這是忏悔的作用了。我們現在要把經論的東西,要真的拿到自己心裡邊去,那麽心裡髒東西,第一要把它洗掉,否則就象那新的東西都變色了,也不好看了,也就變質了嗎,就是說雖然把我們是同樣化了很多時間,同樣化了很多時間討論,也是用了很多功夫,但是效果不大一樣,隨著《忏悔品》,我們現在正在搞忏悔嘛,這個作用是很大的,希望大家把關鍵的問題抓住之後,那麽以後的這個討論的或學習的利益就會源源不斷湧現出來啊,今天我們正好遇到《忏悔品》(剛剛有居士等忏悔過)也是很巧的,就是我們把《忏悔品》抓住,如何把自己心裡把過去髒東西徹底的洗干淨,越洗干淨越好,這樣容納新的佛的這個東西進來呢,才能是保持原味不變,如果我們不洗干淨,多少要變點,既然是不洗的話,那你容納的東西,全部變質了,那就是相似佛法了,這個好的作用起不來了,希望大家就在這個忏悔方面多下點功夫,每個人不能說一點過失也沒有,每時每刻,哪怕一念都會起一些不正當這個惡念會起來,那麽都要忏悔這些啊,那麽就這個樣子了。(回向)
是cds格式的,難道要打開這樣的數據庫還要裝一個delphi嗎?有什麼工具可以支持沒有直接的資料,可以通過TClientDataSet自己轉換 應該沒有這種專業的程序