小男孩‘自慰网亚洲一区二区,亚洲一级在线播放毛片,亚洲中文字幕av每天更新,黄aⅴ永久免费无码,91成人午夜在线精品,色网站免费在线观看,亚洲欧洲wwwww在线观看

分享

VB中數(shù)據(jù)控件綁定

 網(wǎng)絡(luò)摘記 2014-10-04
什么是綁定控件?綁定控件指的是一個(gè)窗體上的”對(duì)象“,由于創(chuàng)建它的那個(gè)控件設(shè)置
了顯示數(shù)據(jù)庫(kù)信息方面的功能,通過(guò)設(shè)置對(duì)象的datasource(數(shù)據(jù)源)屬性和datafield
(數(shù)據(jù)字段)屬性,使這個(gè)對(duì)象“綁定”于一數(shù)據(jù)庫(kù)。
數(shù)據(jù)對(duì)象DATA的幾個(gè)重要屬性:
一,connect屬性:數(shù)據(jù)庫(kù)類型,缺省為ACCESS。
二,databasename屬性:選定一個(gè)路徑下數(shù)據(jù)庫(kù)文件,可在屬性窗口設(shè)置,代碼中例
如:Data1.DatabaseName = "d:\vb6\Nwind.mdb"
三,recordsource屬性:選定數(shù)據(jù)庫(kù)中的一個(gè)表,如果不在屬性窗口設(shè)置,代碼中寫也
可以,例如:Data1.RecordSource = "個(gè)體戶管理"
與DATA對(duì)象綁定的對(duì)象的相關(guān)屬性:
四。綁定對(duì)象的datasource屬性:在屬性窗口中設(shè)置,確定“綁定”到哪個(gè)數(shù)據(jù)對(duì)象,
如設(shè)置為Data1
五。將綁定對(duì)象的datafield屬性設(shè)置為該表中的某個(gè)字段名,如: Text1.DataField
= "姓名"
以上是幾個(gè)最基本的屬性。
DATA對(duì)象的readonly屬性:選擇是否以只讀方式打開(kāi)數(shù)據(jù)庫(kù)。
Data對(duì)象的Exclusive屬性:是否以獨(dú)占方式打開(kāi)數(shù)據(jù)庫(kù)。
Data對(duì)象的UpdateRecord方法:在不觸發(fā)Validate事件的情況下保存綁定控件中的值到
數(shù)據(jù)庫(kù)。
Data對(duì)象的UpdateControls方法:把數(shù)據(jù)庫(kù)中的記錄值寫到綁定控件中。即忽略當(dāng)前綁
定控件的值,相當(dāng)于取消更改。
Validate事件:當(dāng)數(shù)據(jù)被增刪,修改,添加等操作前引發(fā)。
Reposition事件:當(dāng)記錄指針移動(dòng)到新位置時(shí)引發(fā)。
ADO是以后發(fā)展的趨勢(shì),將替代DAO和RDO,ADO可訪問(wèn)本地?cái)?shù)據(jù)庫(kù),也可訪問(wèn)遠(yuǎn)程數(shù)據(jù)
庫(kù)。
基于ADO對(duì)象的數(shù)據(jù)控件:Adodc(使用方法和DATA差不多,但DATA是DAO的),與Adodc
綁定的控件:DataGrid控件顯示記錄集并可修改;DataList控件;DataCombo控件,
DataRepeater控件可同時(shí)顯示幾個(gè)綁定控件數(shù)據(jù)。Hierarchical FlexGrid網(wǎng)格控件,可
排序、合并等,但不能修改。Adodc的主要屬性如下:
BOFAction屬性:返回或設(shè)置當(dāng)其記錄集BOF時(shí)的動(dòng)作。
EOFAction屬性:返回或設(shè)置當(dāng)其記錄集EOF時(shí)的動(dòng)作。
CacheSize:返回或設(shè)置在cache中的行數(shù);
CommandTimeout:等待命令返回的時(shí)間(單位為秒),超時(shí)將出錯(cuò)。
CommandType:指明形成記錄集的命令的類型,為1-adCmdText表示形成記錄集的是SQL命
令,為2-adCmdTable表示記錄集由表構(gòu)成,為4-adCmdStoredProc由存儲(chǔ)過(guò)程生成記錄
集,為8-adCmdUnknown未知命令類型。
ConnectionString:通過(guò)對(duì)話框來(lái)建立連接(返回字符串)。
ConnectionTimeout:等待連接成功的時(shí)間(秒)。超時(shí)將出錯(cuò)。
CursorLocation:光標(biāo)位置。為2-adUseServer表示采用服務(wù)器端光標(biāo),為3-adUseClient
表示采用客戶機(jī)端光標(biāo)。
CursorType:光標(biāo)類型,為1-adOpenKeyset鍵集光標(biāo),為2-adOpenDynamic動(dòng)態(tài)光標(biāo),為
3-adOpenStatic靜態(tài)光標(biāo)。動(dòng)態(tài)光標(biāo)允許用戶看到其他用戶對(duì)記錄的修改增刪,可修改
數(shù)據(jù)源;靜態(tài)光標(biāo)是記錄集的拷貝與快照,用戶看不到其他用戶對(duì)記錄集的修改,且只
讀,鍵集光標(biāo)類似動(dòng)態(tài)型光標(biāo),但用戶不能看到其他用戶添加的記錄或已刪除的記錄。
MaxRecord:每次從數(shù)據(jù)庫(kù)中取的最大記錄數(shù)。
UserName:用戶名。
password:口令。
Mode:數(shù)據(jù)庫(kù)打開(kāi)模式,0是未知;1是只讀;2是寫;3是讀寫;16是可共享讀寫;4是不
可共享讀;8是不可共享寫;12是不共享。
RecordSet:記錄集。
RecordSource:記錄集的數(shù)據(jù)源,指定記錄集數(shù)據(jù)產(chǎn)生的方法。
Adodc的主要事件:
EndofRecordSet: 當(dāng)記錄集EOF/BOF時(shí)觸發(fā);
willChangeField: 當(dāng)一個(gè)字段將被修改前觸發(fā);其中的cfields參數(shù):返回發(fā)生改變的
字段數(shù)目,fields參數(shù):返回發(fā)生改變的字段對(duì)象。
fieldChangeComplete: 當(dāng)一個(gè)字段被修改后觸發(fā);
willChangeRecord: 當(dāng)一個(gè)記錄將被修改前觸發(fā);
recordChangeComplete: 當(dāng)一個(gè)記錄被修改后觸發(fā);
willChangeRecordset: 當(dāng)一個(gè)記錄集將被修改前觸發(fā);
recordsetChangeComplete: 當(dāng)一個(gè)記錄集被修改后觸發(fā);
willMove: 一個(gè)記錄即將成為當(dāng)前記錄前觸發(fā);
MoveComplete: 一個(gè)記錄成為當(dāng)前記錄后觸發(fā)。
對(duì)以上事件的參數(shù),以Willmove為例說(shuō)明如下:
adReason返回產(chǎn)生該事件的原因,如返回AdRSNAddnew(值1)是“因添加新記錄而觸
發(fā)”,返回AdRSNClose(9)是“因關(guān)閉觸發(fā)”,adrsndelete(2)是“因刪除記錄觸發(fā)”,
返回AdRsnMove(10)是“因記錄移動(dòng)而觸發(fā)”,返回AdRsnUpdate(3)是“因更新觸發(fā)”等
等??傻綄?duì)象游覽器中找那個(gè)枚舉變量去。
adStatus參數(shù)設(shè)置/返回此事件或(引發(fā)事件的)此操作的狀態(tài)。adStatusOK(1)為引
發(fā)事件的操作完成,為2是發(fā)生錯(cuò)誤,為3是“不能取消引發(fā)事件的操作”,為4即
adStatusCancel是“取消引發(fā)事件的操作”,如在代碼中設(shè)adStatus=4,那么就取消了
(引發(fā)事件的)此操作,等于沒(méi)有發(fā)生此操作。
pRecordSet參數(shù)返回(引發(fā)事件的)此操作所作用的記錄集。
★如何完全在代碼中使用ADO控件和綁定控件?包括設(shè)置ADO的ConnectionString屬性和
RecordSource屬性;綁定控件的DataSource和DataField屬性。舉一例如下:
Private Sub Form_Load()
Adodc1.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data
Source=D:\Program Files\VB98\Biblio.mdb;Persist Security Info=False"
Adodc1.RecordSource = "Titles"
Set Text1.DataSource = Adodc1
Text1.DataField = "Title"
End Sub
其中對(duì)于ADO控件,設(shè)置其ConnectionString和RecordSource屬性都是字符串,重點(diǎn)要注
意的就是綁定控件的DataSource屬性,它的值是一個(gè)對(duì)象,一定要用Set賦值。而且有一
點(diǎn)重要常識(shí):綁定控件實(shí)質(zhì)上是綁定到記錄集上的,不要簡(jiǎn)單地理解為綁定到數(shù)據(jù)控件
或數(shù)據(jù)環(huán)境的Command命令對(duì)象上,這是不準(zhǔn)確的,你應(yīng)當(dāng)試試在代碼中直接將
DataSource賦值給一個(gè)記錄集。(注:對(duì)于數(shù)據(jù)對(duì)象ADO是如此,但對(duì)于ADODC控件??
卻不是)
★對(duì)用戶輸入的數(shù)據(jù)進(jìn)行驗(yàn)證:如用戶輸入的是無(wú)用的數(shù)據(jù),則取消保存和更新,對(duì)于
ADO控件,應(yīng)在WillChangeRecord事件中進(jìn)行驗(yàn)證。ADO對(duì)象則在用WithEvents聲明的
RecordSet對(duì)象WillChangeRecord事件中,一樣的。要取消保存就將事件提供的參數(shù)
adStatus設(shè)為adStatusCancel,或者用CancelUpdate方法。
DataGrid表格控件:DataGrid控件包含1個(gè)Columns字段列集合,對(duì)單元格,行,列等操
作方便。在設(shè)計(jì)時(shí),在DataGrid控件上單擊鼠標(biāo)右鍵,選“檢索字段”,這時(shí)就會(huì)填充
指定datasource中的全部字段,然后再單擊鼠標(biāo)右鍵,選“編輯”,這時(shí)就可隨意調(diào)整
每列的寬度了。通過(guò)設(shè)置datagrid控件中columns字段集合的count屬性和recordset對(duì)象
的recordcount屬性,可以規(guī)定控件顯示的列數(shù)和行數(shù)。當(dāng)用戶選中某個(gè)單元格時(shí),控件
的text和對(duì)應(yīng)column字段對(duì)象的Value屬性就指向這個(gè)單元格,通過(guò)修改這兩個(gè)屬性可以
修改當(dāng)前單元格的內(nèi)容。 利用datagrid控件,還可在程序運(yùn)行時(shí)對(duì)各控件進(jìn)行數(shù)據(jù)的動(dòng)
態(tài)綁定。以及隨時(shí)將不需要的列進(jìn)行隱藏。
DataGrid控件的屬性方法和事件:
屬性:AllowAddnew,AllowDelete,AllowUpdate屬性:是否允許在表中增添、刪除、修改
記錄。如果設(shè)為false實(shí)際等于表只讀,也可分別單獨(dú)設(shè)置。
Col,Row屬性:運(yùn)行中當(dāng)前光標(biāo)所在的列(col)和行(row),最左上角單元格為0,0開(kāi)
始。如姓名“李海石”在第7行第0列。
Text屬性:運(yùn)行時(shí)當(dāng)前單元格的文本內(nèi)容。
ColumnHeaders屬性:是否在表的最上1行顯示字段標(biāo)頭。
HeadLines屬性:字段標(biāo)頭的文本行數(shù)(寬度)。缺省為1行。
DataChanged屬性:表中的數(shù)據(jù)是否改變,如果設(shè)為false表數(shù)據(jù)不可修改。
VisibleCols,VisibleRows屬性:在表中(不使用滾動(dòng)條)可見(jiàn)的列數(shù)和行數(shù)。
Columns字段集合:對(duì)每1字段對(duì)象的操作。如: DataGrid1.Columns("姓名").Visible
= False.隱藏"姓名"字段。用Columns(索引或關(guān)健字)來(lái)標(biāo)識(shí)每個(gè)字段,其實(shí)是
columns.item(索引或關(guān)健字)的缺省形式,索引值從最小0開(kāi)始。Columns集合本身有
count(字段列數(shù)),item(當(dāng)前字段),add(在表中添加字段),remove(刪除表中
字段)四個(gè)屬性方法。如x=Datagrid1.Columns.Count.x返回6表示有六個(gè)字段。索引為
0—5。每個(gè)字段對(duì)象有其自身的屬性,Alignment——記錄中文本的對(duì)齊方式(如左、
右、居中);Button——是否在當(dāng)前記錄單元格右邊顯示下拉箭頭;Caption——字段標(biāo)
題;AllowSizing——是否允許用戶調(diào)整本字段列寬度;Locked——字段只讀;
DataChanged——是否有記錄被修改(本字段);DataField——捆綁字段(只讀?);
Text和Value——當(dāng)前記錄的本字段值。
BeforeUpdate,BeforeInsert,BeforeDelete,BeforeColUpdate,BeforeColEdit事件:在
表中修改,插入,刪除記錄等之前觸發(fā),如果要取消修改或刪除等,只要將事件中的參
數(shù)cancel設(shè)為true即可。在修改,添加,刪除等操作之后則觸發(fā)
AfterUpdate,AfterInsert…等事件。
RowResize,ColResize事件:在運(yùn)行時(shí)改變表的行,列寬時(shí)引發(fā)。

注意:在使用數(shù)據(jù)綁定控件時(shí),必須把綁定控件和數(shù)據(jù)控件放在同一窗體上。
Datacombo對(duì)象RowSource和listfield屬性,指定下拉表框顯示的某adodc的某字段,僅
僅是顯示而已。datasource,datafield屬性,綁定某adodc控件中某字段,注:須認(rèn)清一
點(diǎn),在綁定后,在datacombo對(duì)象文本框內(nèi)的的改動(dòng)會(huì)自動(dòng)更新到當(dāng)前記錄的對(duì)應(yīng)綁定字
段中。也就是說(shuō)它和文本框一樣“用來(lái)接受數(shù)據(jù)輸入”。
MSChart控件的功能:將數(shù)據(jù)以圖表的形式顯示。
數(shù)據(jù)庫(kù)中的“關(guān)系”:是建立在兩個(gè)表“之間”的鏈接。有一對(duì)一,一對(duì)多,多對(duì)多三
種關(guān)系。
[問(wèn)題:在數(shù)據(jù)庫(kù)中刪除一個(gè)記錄時(shí),并不真正將其刪除,而只是打上個(gè)標(biāo)記而已,如何
真正刪除這些記錄呢?對(duì)一個(gè)打上刪除標(biāo)記的記錄,如何恢復(fù)為原樣,能顯示出來(lái)呢?]
數(shù)據(jù)綁定控件的DataFormat屬性:自定義數(shù)據(jù)的不同顯示格式(自選)。
datachanged屬性:綁定控件的內(nèi)容是否發(fā)生變化。如果設(shè)為False,表示本控件中綁定
數(shù)據(jù)不可修改。(?)
ADODC控件的connectionstring屬性用來(lái)連接一個(gè)數(shù)據(jù)庫(kù),除用“連接字符串”建立連接
外,還可選“使用data link文件(鏈接文件)”的方式建立連接,先隨便在VB外創(chuàng)建
(如桌面)一個(gè)后綴為udl的文件(只要單擊鼠標(biāo)右鍵“新建”選“Microsoft數(shù)據(jù)鏈
接”即可),然后雙擊,從“提供者”卡開(kāi)始完成對(duì)話框即可。有了這樣一個(gè)鏈接文
件,就可在adodc的connectionstring屬性中指定這個(gè)Data link文件。使用數(shù)據(jù)鏈接文
件的好處是:多個(gè)不同程序的ADODC可同用一個(gè)這樣的鏈接文件,還有利于簡(jiǎn)化用ADO對(duì)
象編程時(shí)代碼中寫的connectionstring字符串。
★ 使用數(shù)據(jù)環(huán)境DataEnvironment。
數(shù)據(jù)環(huán)境用于連接數(shù)據(jù)庫(kù),比數(shù)據(jù)控件更方便有用,在實(shí)際的數(shù)據(jù)庫(kù)編程中,不少方案
用了數(shù)據(jù)環(huán)境!
添加數(shù)據(jù)環(huán)境:從工程菜單中“更多ActiveX設(shè)計(jì)器”“Data Environment”就可添加一
個(gè)數(shù)據(jù)環(huán)境,最好干脆在新建工程對(duì)話框中選擇數(shù)據(jù)工程,還可在工具欄上打開(kāi)“數(shù)據(jù)
視圖”窗口,其包含的工具欄上有“添加數(shù)據(jù)環(huán)境到當(dāng)前工程”按紐。
使用數(shù)據(jù)環(huán)境:可將一個(gè)數(shù)據(jù)環(huán)境看成一個(gè)數(shù)據(jù)控件如Adodc,但又有ADO對(duì)象的特征,
第一步:從工程窗口雙擊DataEnvironment1打開(kāi)它,在其中有一個(gè)缺省的Connection1對(duì)
象,右鍵單擊它,在彈出菜單中選擇“屬性”,即可設(shè)置要連接到的數(shù)據(jù)源,其實(shí)就是
它的ConnectionString。設(shè)置好后,單擊工具欄上的“添加命令”按紐,給這個(gè)
Connection1對(duì)象添加一個(gè)Command1命令對(duì)象。右鍵選中Command1,選擇“屬性”,在對(duì)
話框中設(shè)置從數(shù)據(jù)源中取得數(shù)據(jù)的方式(即RecordSource),如選中數(shù)據(jù)庫(kù)對(duì)象,在其
中選“表”,然后選擇一個(gè)表名稱即可。
第二步:為這個(gè)DataEnvironment1添加綁定控件:很簡(jiǎn)單,只要在DataEnvironment1中
展開(kāi)設(shè)置好RecordSource的Command1命令對(duì)象,會(huì)出現(xiàn)可用的全部字段,按住鼠標(biāo)拖動(dòng)
字段到窗體上即可自動(dòng)生成綁定控件(一個(gè)標(biāo)答和一個(gè)文本框)??赏瑫r(shí)向不同的窗體
上拖放字段,都與這個(gè)數(shù)據(jù)環(huán)境綁定,可見(jiàn),DataEnvironment確實(shí)比數(shù)據(jù)控件好,它在
整個(gè)工程中都可見(jiàn)。當(dāng)然也可自行添加綁定控件,需要設(shè)置好DataSource,
DataField以及DataMember屬性,這里多出一個(gè)DataMember屬性是要綁定到數(shù)據(jù)環(huán)境中的
哪個(gè)Command命令對(duì)象(因?yàn)橐粋€(gè)數(shù)據(jù)環(huán)境中經(jīng)常包含多個(gè)命令對(duì)象)。
第三步:添加代碼控制DataEnvironment.其實(shí)它就象是Adodc控件,不過(guò)在使用之前要初
始化,否則會(huì)出現(xiàn)“對(duì)象關(guān)閉”的錯(cuò)誤提示,初始化的方法是用語(yǔ)句:”
DataEnvironment1.命令對(duì)象名”,如DataEnvironment1.Command1,這樣就可以把
Command1打開(kāi)了,注意如果在代碼中重復(fù)使用這句,會(huì)出現(xiàn)“對(duì)象已打開(kāi)”的錯(cuò)誤提
示,所以應(yīng)當(dāng)只使用一次。其他實(shí)際的操作,和數(shù)據(jù)控件類似,比如要使記錄的指針向
上移動(dòng)。可用DataEnvironment1.RecordSets(0).MovePrevious,也是有它的記錄集(集
合)的。當(dāng)然需要指出,因?yàn)橐粋€(gè)數(shù)據(jù)環(huán)境可有多個(gè)連接和命令對(duì)象,當(dāng)在數(shù)據(jù)環(huán)境中
添加多個(gè)命令對(duì)象時(shí),會(huì)有多個(gè)記錄集,每個(gè)命令對(duì)象有一個(gè)記錄集,命名約定是”rs+
命令對(duì)象名”,比如有一個(gè)命令對(duì)象Command3,那么要操作它所產(chǎn)生的記錄集:
DataEnvironment1.rsCommand3.MoveNext
rsCommand3就是對(duì)應(yīng)于Command3對(duì)象的記錄集,可用于代碼中進(jìn)行控制。
技巧:一個(gè)數(shù)據(jù)環(huán)境可添加多個(gè)連接Connection和多個(gè)Command對(duì)象,當(dāng)你選中一個(gè)對(duì)象
時(shí),在屬性窗口中會(huì)顯示出它的屬性列表,真的和控件一樣哦。
特別說(shuō)明:缺省情況下,創(chuàng)建的連接對(duì)象和命令對(duì)象是只讀的,不能修改源數(shù)據(jù)庫(kù)。需
要在命令對(duì)象的屬性頁(yè)“高級(jí)”選項(xiàng)卡上將鎖定類型設(shè)為“3-開(kāi)放式”,或直接在屬性
窗口中將命令對(duì)象的LockType屬性設(shè)置為“3- adLockOptimistic開(kāi)放式”。注意:實(shí)際
上不是命令對(duì)象的LockType屬性,而是它形成的記錄集的LockType屬性,一并放到命令
對(duì)象的屬性頁(yè)中設(shè)置。這點(diǎn)與ADO對(duì)象一樣,因?yàn)锳DO只在RecordSet對(duì)象中有一個(gè)
LockType設(shè)置。
★使用數(shù)據(jù)環(huán)境操作關(guān)聯(lián)表:
大多數(shù)數(shù)據(jù)庫(kù)都在多表間存在關(guān)聯(lián)。關(guān)聯(lián)有一對(duì)一,一對(duì)多,多對(duì)多三種。最常用的是
一對(duì)多的關(guān)系。
一、關(guān)聯(lián):
首先要理解關(guān)聯(lián):關(guān)聯(lián)就是能夠使一個(gè)表中的記錄與另一個(gè)表中的記錄鏈接或關(guān)聯(lián)的兩
表間連接。對(duì)于一個(gè)表中的一條記錄,在另一個(gè)表中有一條或多條記錄與之對(duì)應(yīng),比如
我在“個(gè)體戶檔案”表中有一條“吳蓮秀”的記錄:
姓名 地址 執(zhí)照號(hào)碼 營(yíng)業(yè)額 行業(yè) 備注
吳蓮秀 吉富 1386671215 2000 零售貿(mào)易
在“發(fā)票”表中有“吳蓮秀”交納的多張管理費(fèi)發(fā)票:
發(fā)票號(hào)碼日期 姓名 收費(fèi)起點(diǎn) 收費(fèi)終點(diǎn) 金額 備注
0188035 4/1 吳蓮秀 1/1/2002 1/31/2002 40
0188047 4/1 吳蓮秀 2/1/2002 2/28/2002 40
0188073 4/1 吳蓮秀 3/1/2002 3/31/2002 40
0188098 4/1 吳蓮秀 4/1/2002 4/30/2002 40
在這種情況下,我們就可把這兩個(gè)表關(guān)聯(lián)起來(lái),把“個(gè)體戶檔案”作源表,其“姓名”
字段作為主關(guān)健字,把“發(fā)票”作目的表,其“姓名”字段作為外來(lái)關(guān)健字,創(chuàng)建一個(gè)
一對(duì)多的關(guān)系,要注意:一個(gè)表只能有一個(gè)主關(guān)健字,可以有多個(gè)外來(lái)關(guān)健字。主關(guān)健
字必須具有唯一性,即每個(gè)記錄要有不同的值,這樣才能正確無(wú)誤地標(biāo)識(shí)每條源記錄,
否則關(guān)聯(lián)將崩潰,有一個(gè)辦法就是將主關(guān)健字設(shè)為主索引,如先把“個(gè)體戶檔案”的
“姓名”字段設(shè)為主索引,當(dāng)你試圖增加另一個(gè)叫吳蓮秀的記錄時(shí)就會(huì)出錯(cuò)。且最好使
用數(shù)值型字段,能“自動(dòng)增加字段”更好,這里使用的是字符串,不好意思。
如何創(chuàng)建關(guān)聯(lián)?——通過(guò)在一個(gè)表中包含一個(gè)主關(guān)健字字段并在另一個(gè)表中提供一個(gè)外
來(lái)關(guān)健字段,將一個(gè)引用存儲(chǔ)到連接的記錄上。主關(guān)健字是唯一標(biāo)識(shí)表中每個(gè)記錄的ID
字段,在“可視化數(shù)據(jù)庫(kù)管理器”中,以建立索引的同時(shí)選中復(fù)選框的 “主要的”來(lái)設(shè)
定即可。(?)外來(lái)關(guān)健字用于存儲(chǔ)另一個(gè)表中的主關(guān)健字以創(chuàng)建連接。外來(lái)關(guān)健字不
用特別設(shè)定,至多改一下字段名使其與主關(guān)健字相同就可以了。
另一方面,實(shí)際上,上面兩個(gè)表原是一個(gè)表,即每張發(fā)票上的應(yīng)填內(nèi)容為發(fā)票號(hào)碼,日
期,姓名,地址,執(zhí)照號(hào)碼,行業(yè),營(yíng)業(yè)額,起點(diǎn),終點(diǎn),金額,備注等,但因每個(gè)個(gè)
體戶的地址,執(zhí)照號(hào),行業(yè)等對(duì)同一戶來(lái)說(shuō)都是一樣,每張發(fā)票上都有這些字段,就會(huì)
造成數(shù)據(jù)的重復(fù)。把這樣的信息分解到另外的表中,利用關(guān)聯(lián)來(lái)實(shí)現(xiàn)同樣的目的,可節(jié)
省不少資源。這種分解數(shù)據(jù)到多個(gè)關(guān)聯(lián)表中以簡(jiǎn)化結(jié)構(gòu)的過(guò)程叫“規(guī)范化”(也叫標(biāo)準(zhǔn)
化)。這是設(shè)計(jì)數(shù)據(jù)庫(kù)時(shí)一個(gè)很重要的步驟。數(shù)據(jù)庫(kù)規(guī)范化是分解表使信息重復(fù)最小化
的過(guò)程。
對(duì)于兩個(gè)表中有關(guān)聯(lián)的字段,應(yīng)使用相同的字段名,如都為“姓名”。
在ACCESS軟件中,單擊“關(guān)系”按紐可顯示出各表間的關(guān)系,它在有關(guān)系的不同表字段
間連起一條線,在源表的主關(guān)健字處,上面標(biāo)有數(shù)字1,表示一條記錄,到達(dá)目的表的對(duì)
應(yīng)外來(lái)關(guān)健字處,上面標(biāo)有無(wú)窮大符號(hào)∞,表示可對(duì)應(yīng)無(wú)窮多記錄,這是一對(duì)多關(guān)系,
象VB提供的范例Nwind.mdb數(shù)據(jù)庫(kù)中就全部是這樣的關(guān)系。
一對(duì)一關(guān)系就是一個(gè)表中的一條記錄被連接到另一個(gè)表的一條記錄上。有一點(diǎn)要注意:
不能把一對(duì)多關(guān)系反過(guò)來(lái)看成好象一對(duì)一,比如上面每張發(fā)票記錄只對(duì)應(yīng)一個(gè)個(gè)體戶檔
案記錄,認(rèn)為是一對(duì)一,不對(duì)!發(fā)票記錄的“姓名”不能是主關(guān)健字!不唯一,必須是
從主關(guān)健字的源表引出一條記錄對(duì)應(yīng)另一個(gè)目的表的一條記錄。如下圖一對(duì)一:在目的
表端有一個(gè)十字線,標(biāo)明了源表主關(guān)健字和目的表外來(lái)關(guān)健字。另外象上面?zhèn)€體戶的一
對(duì)多:
目的端有一個(gè)分叉,象這種圖叫做氣泡圖,在建立表關(guān)聯(lián)時(shí)事先畫好作為草圖很有用。
多對(duì)多在聯(lián)較為復(fù)雜,第一個(gè)表中的多條記錄被鏈接到第二個(gè)表的多條記錄,反過(guò)來(lái)也
是這樣。

二、在數(shù)據(jù)環(huán)境中使用關(guān)聯(lián):
主要就是建立分級(jí)的命令對(duì)象,即先建立一個(gè)指向源表的Command對(duì)象,再為這個(gè)命令對(duì)
象建立一個(gè)子命令對(duì)象,使它指向目的表,然后在該子命令屬性頁(yè)“關(guān)聯(lián)”卡上,可以
看到選中了“與父命令關(guān)聯(lián)”復(fù)選框,而且還可看到父命令對(duì)象是指向源表的那個(gè)對(duì)象
(本來(lái)就是在它下面建立的子對(duì)象嘛),在“關(guān)聯(lián)定義”中定義好主關(guān)健字(父字段)
和外來(lái)關(guān)健字(子字段),“添加”即可。這樣,與源表(父命令)記錄集當(dāng)前記錄關(guān)
聯(lián)的目的表(子命令)所有記錄就存儲(chǔ)在子命令的記錄集中。再說(shuō)一遍,也就是:先為
源表和目的表在同一Connection連接對(duì)象下各建立一個(gè)Command對(duì)象(只建立一個(gè)指向源
表的也可以),再在連接到源表的那個(gè)Command對(duì)象上建立子命令對(duì)象,使它指向目的
表,然后接著在子命令屬性頁(yè)的“關(guān)聯(lián)”選項(xiàng)卡上,選中“與父命令關(guān)聯(lián)”復(fù)選框,將
父命令選定源表,在“關(guān)聯(lián)定義”中選擇主關(guān)健字和外來(lái)關(guān)健字,單擊添加按紐即可。
這時(shí),當(dāng)指向源表的父命令對(duì)象移動(dòng)記錄時(shí),指向目的表的子命令對(duì)象將與之關(guān)聯(lián)的記
錄都生成到子對(duì)象的記錄集中?,F(xiàn)舉一例:
雙擊工程窗口中的DataEnvironment1,在Connection1上單擊右鍵打開(kāi)屬性頁(yè),選擇上面
提到的個(gè)體戶檔案的數(shù)據(jù)庫(kù)。建立連接。然后在Connection1下建立兩個(gè)并列的Command
對(duì)象(只建一個(gè)對(duì)象指向源表也可以),在屬性頁(yè)“通用”卡上設(shè)置,使之分別指向源
表個(gè)體戶檔案和目的表發(fā)票。這時(shí),再在指向源表的那個(gè)Command命令下建立子命令對(duì)象
(選中源表命令單擊“添加子命令”按紐),選中新添的子命令,先在其屬性頁(yè)“通
用”卡上設(shè)置使其指向目的表發(fā)票,然后單擊“關(guān)聯(lián)”選項(xiàng)卡,選中與父命令對(duì)象關(guān)
聯(lián),并在父命令下拉框中選定指向源表的那個(gè)命令對(duì)象,然后在關(guān)聯(lián)定義框架中將父對(duì)
象字段(主關(guān)健字)和子對(duì)象字段(外來(lái)關(guān)健字)都選擇“姓名”,單擊“添加”按
紐,即可。
最后是在窗體上顯示源表記錄和目的表中的關(guān)聯(lián)記錄,對(duì)于源表記錄,隨便怎樣都可
以,如直接從數(shù)據(jù)環(huán)境中拖放字段到窗體上,對(duì)于關(guān)聯(lián)的目的表,因?yàn)榭赡芡瑫r(shí)有多條
關(guān)聯(lián)記錄(一對(duì)多),因此最好用MSHFlexGrid全部列表顯示,只要在屬性窗口設(shè)置
HflexGrid的DataSource和DataMember就可以了,直接將DataMember指定為那個(gè)子對(duì)象,
如果在代碼中設(shè)置綁定,可按如下方式寫代碼:
Set MSHFlexGrid1.DataSource = DataEnvironment1.rsCmdUnitRecord.Fields
("CmdSubInvoice").Value
其中rsCmdUnitRecord是源表為個(gè)體戶檔案的對(duì)象的記錄集,而子對(duì)象CmdSubInvoice確
實(shí)如數(shù)據(jù)環(huán)境表中顯示的那樣,成了它的“字段”,只不過(guò)其Value值變成記錄集,賦予
MSHFlexGrid了(經(jīng)驗(yàn):綁定控件的DataSource不僅可指定數(shù)據(jù)控件或環(huán)境,還可直接指
定記錄集來(lái)綁定)。當(dāng)然也可老方法綁定:Set MSHFlexGrid1.DataSource =
DataEnvironment1 : MSHFlexGrid1.DataMember = "CmdSubInvoice"一樣的。
設(shè)置好綁定(特別是子對(duì)象的綁定)后,當(dāng)源表對(duì)象每移動(dòng)當(dāng)前記錄時(shí),目的表子對(duì)象
的記錄集就會(huì)更新,記錄集中存儲(chǔ)的都是與源表當(dāng)前記錄關(guān)聯(lián)的記錄,因此綁定到記錄集
的MSHFlexGrid會(huì)不斷更新數(shù)據(jù)。

★在數(shù)據(jù)環(huán)境中使用記錄分組和參數(shù)查詢:
這兩項(xiàng)工作都是在Command對(duì)象的屬性頁(yè)中設(shè)置。
將記錄按某個(gè)字段分組:先設(shè)置好Connection1連接和Command1的數(shù)據(jù)源,然后在
Command1的屬性頁(yè)“分組”選項(xiàng)卡上選中“分組命令對(duì)象”復(fù)選框,然后從左邊選擇一
個(gè)字段添加到右邊框中,確定即可。這樣生成的記錄集便具有了層次性,和GROUP BY的
效果是一樣的,可以用MSHflexgrid或報(bào)表Data Report來(lái)綁定。
使用帶單個(gè)參數(shù)的SQL查詢:在Command1的屬性頁(yè)“通用”卡上選中使用“SQL語(yǔ)句”生
成記錄集,然后輸入在WHERE子句中帶?問(wèn)號(hào)的查詢:SELECT [name],[money] FROM
[invoice] WHERE [name] LIKE ?。這個(gè)問(wèn)號(hào)就是一個(gè)參數(shù),可以在代碼中賦值,生成不
同記錄集。當(dāng)然,僅這樣參數(shù)的設(shè)置還沒(méi)完成,在“參數(shù)”選項(xiàng)卡上為這個(gè)‘問(wèn)號(hào)’設(shè)
置屬性,如參數(shù)名,輸入/輸出參數(shù),數(shù)據(jù)類型等。
代碼中賦予具體的參數(shù)值,很簡(jiǎn)單,在初始化命令對(duì)象的語(yǔ)句
(DataEnvironment1.Command1)后面附上參數(shù)值就可以了,如:
Private Sub Form_Load()
DataEnvironment1.Command2 "符章秀"
Set MSHFlexGrid1.DataSource = DataEnvironment1.rsCommand2
End Sub
不過(guò)只能包含一個(gè)參數(shù)。而且有一點(diǎn)問(wèn)題本人還沒(méi)解決:就是如何動(dòng)態(tài)地改變參數(shù)值,
因?yàn)闀?huì)出現(xiàn)“對(duì)象已打開(kāi)”的錯(cuò)誤。
★數(shù)據(jù)報(bào)表DataReport:
新建工程時(shí)選擇數(shù)據(jù)工程,或直接從“工程”菜單中添加Data Report,這時(shí)就會(huì)在工程
窗口中顯示出DataReport1對(duì)象,它就象一個(gè)Form窗體一樣,只不過(guò)界面為白色,網(wǎng)格點(diǎn)
變成了稀疏的格線,而且多了幾條“頁(yè)標(biāo)頭”“頁(yè)注腳”“細(xì)節(jié)”的橫杠,下面就解釋
一下:
這幾根橫杠是“帶-Band”,它表示了報(bào)表的結(jié)構(gòu),也是報(bào)表中在需要時(shí)可多次重復(fù)的區(qū)
域。主要有:1,報(bào)表頁(yè)眉/頁(yè)腳,它在整個(gè)報(bào)表的頭尾處出現(xiàn),可讓它們單獨(dú)占據(jù)一
頁(yè),只要將ForcePageBreak屬性設(shè)為1-rptPageBreakAfter即可;當(dāng)然首先要在報(bào)表中單
擊鼠桔右鍵”顯示報(bào)表頁(yè)眉/注腳”顯示它;2,頁(yè)面頁(yè)眉/頁(yè)腳(在界面中寫為頁(yè)標(biāo)頭和
頁(yè)注腳),它在報(bào)表中每頁(yè)的頭尾處出現(xiàn),就象WORD的頁(yè)眉頁(yè)腳一樣;3,組頁(yè)眉/頁(yè)
腳,顯示分級(jí)的查詢結(jié)果時(shí)會(huì)出現(xiàn)這些帶區(qū),例如在關(guān)聯(lián)表中,組頁(yè)眉顯示主表信息,
其下的細(xì)節(jié)帶則顯示更詳細(xì)的多條關(guān)聯(lián)信息;組頁(yè)眉/頁(yè)腳包圍在每個(gè)細(xì)節(jié)帶的頭尾外出
現(xiàn);4,細(xì)節(jié)Detail帶,它是報(bào)表中最重要的帶,位于最中心位置,顯示最詳細(xì)的那部分
數(shù)據(jù)信息,并在一個(gè)頁(yè)面內(nèi)自動(dòng)重復(fù)多次直到整頁(yè)全部占滿為止。
使用一個(gè)數(shù)據(jù)報(bào)表時(shí),先要將它綁定到數(shù)據(jù)源上,設(shè)置其DataSource屬性為數(shù)據(jù)環(huán)境,
設(shè)置其DataMember為一個(gè)命令對(duì)象,然后在報(bào)表窗體上單擊鼠標(biāo)右鍵,選擇“檢索字
段”,這時(shí)就會(huì)按綁定的命令對(duì)象來(lái)初始化報(bào)表結(jié)構(gòu),比如分級(jí)的具有子命令的命令,
結(jié)構(gòu)中會(huì)包含進(jìn)“分組標(biāo)頭/注腳”帶區(qū)等,經(jīng)過(guò)檢索字段初始化后,可在報(bào)表上添加控
件以顯示數(shù)據(jù),可添加六種特定的控件RptLabel、RptTextBox等,和普通的標(biāo)簽文本框
沒(méi)什么兩樣,只不過(guò)專用于報(bào)表上而已。其中有一點(diǎn)要注意:在這六個(gè)控件中,標(biāo)簽,
圖片框、直線、形狀控件都不能綁定,只有文本框和函數(shù)控件可以進(jìn)行綁定,因此要顯
示記錄集中不同記錄時(shí)都要使用文本框(即在細(xì)節(jié)帶區(qū)中都要使用文本框)來(lái)進(jìn)行,設(shè)
置其DataMember屬性和DataField屬性。注意:報(bào)表中的綁定與普通窗體上的綁定有點(diǎn)不
同,它會(huì)自動(dòng)枚舉記錄集中每條記錄依次顯示于報(bào)表中。另外,將控件添加到哪個(gè)帶
區(qū),按具體情況而定,總之是:頁(yè)標(biāo)頭/注腳帶區(qū)在每頁(yè)頭尾處重復(fù);細(xì)節(jié)帶區(qū)在每頁(yè)中
都不斷重復(fù)(其實(shí)是枚舉記錄集記錄);分組標(biāo)頭/注腳包圍在每次細(xì)節(jié)帶區(qū)重復(fù)的外面
頭尾重復(fù)??茨愕男枰獢[放和對(duì)齊控件位置。
★ 數(shù)據(jù)報(bào)表DataReport是一個(gè)對(duì)象,可以在代碼中對(duì)其進(jìn)行操作,如顯示報(bào)表的Show方
法:
Private Sub Command1_Click()
DataReport1.Show
End Sub
★ 再如將報(bào)表內(nèi)容導(dǎo)出為HTML文檔或文本文檔:ExportReport方法。
Private Sub Command1_Click()
DataReport1.ExportReport rptKeyHTML, "c:\a.htm"
End Sub
其中第一個(gè)參數(shù)指定導(dǎo)出為HTML文檔還是文本文檔,rptKeyHTML為導(dǎo)出HTML文檔,
rptKeyText為導(dǎo)出文本文檔,rptKeyUnicodeText為導(dǎo)出Unicode文本文檔。
RptKeyUnicodeHTML_UTF8為導(dǎo)出HTML Unicode文檔,第二個(gè)參數(shù)指定導(dǎo)出文件的路徑和
名字,該方法還有其他可選參數(shù),第三個(gè)OverWrite參數(shù)指定當(dāng)文件存在時(shí)是否覆蓋原文
件,第四個(gè)ShowDialog參數(shù)為是否顯示Export導(dǎo)出對(duì)話框,第五個(gè)參數(shù)Range為是否導(dǎo)出
所有頁(yè),缺省為rptRangeAllPages所有頁(yè),可選值為rptRangeFromTo設(shè)定導(dǎo)出范圍。第
六個(gè)參數(shù)PageFrom和第七個(gè)參數(shù)PageTo只在前面參數(shù)設(shè)定為導(dǎo)出范圍時(shí)需要設(shè)置,分別
為范圍起始頁(yè)和終止頁(yè)。如:
DataReport1.ExportReport rptKeyHTML, "c:\abc.htm", True, True,
rptRangeFromTo, 2, 3
★ 再如不經(jīng)預(yù)覽直接打印報(bào)表:PrintReport方法,如:DataReport1.PrintReport,其
參數(shù)都是可選參數(shù),第一個(gè)ShowDialog意為是否顯示打印對(duì)話框,缺省為False,只打印
不顯示。第二個(gè)參數(shù)Range意為是否打印所有頁(yè),缺省為rptRangeAllPages所有頁(yè),可選
值為rptRangeFromTo打印指定范圍,如果是這個(gè)值,則需要在第三個(gè)和第四個(gè)參數(shù)中指
定打印范圍的起始頁(yè)及終止頁(yè),第三個(gè)參數(shù)PageFrom和第四個(gè)參數(shù)PageTo意為打印范圍
的起始頁(yè)和終止頁(yè),這兩個(gè)參數(shù)只在第二個(gè)參數(shù)為rptRangeFromTo指定一個(gè)打印范圍時(shí)
需要設(shè)置。例如:
DataReport1.PrintReport False, rptRangeFromTo, 1, 4

★ 報(bào)表中的動(dòng)態(tài)變量:也就是程序運(yùn)行時(shí)在報(bào)表中會(huì)自動(dòng)代入具體值的類似符號(hào)的內(nèi)置
變量。%t:短格式當(dāng)前時(shí)間;%d:短格式當(dāng)前日期;%p:當(dāng)前頁(yè)碼;%P:總頁(yè)數(shù);%i:
報(bào)表標(biāo)題;%D:當(dāng)前日期;%T:當(dāng)前時(shí)間。這些動(dòng)態(tài)變量會(huì)自動(dòng)隨具體情況不同而調(diào)
整,比如在屬性窗口中,將一個(gè)標(biāo)簽rptLabel的Caption屬性設(shè)為“第%p頁(yè),共%P頁(yè)。”
當(dāng)報(bào)表運(yùn)行時(shí),顯示的就是具體的數(shù)字如“第2頁(yè),共9頁(yè)?!薄?br>★在報(bào)表上顯示字段的統(tǒng)計(jì)信息:RptFunction控件。可以顯示指定字段值的總和,平均
值,最大值,最小值等。注意:此控件只能放在分組注腳或報(bào)表注腳中。
控件的使用方法很簡(jiǎn)單,先向分組注腳(或報(bào)表注腳)中添加該控件,然后在屬性窗口
中設(shè)置其DataMember和DataField屬性指到要綁定(統(tǒng)計(jì))的那個(gè)字段,然后設(shè)置
FunctionType為要統(tǒng)計(jì)的方面,有以下可選項(xiàng):0-rptFuncSum字段值總和;1-
rptFuncAve字段平均值;2-rptFuncMin字段最小值;3-rptFuncMax字段最大值;4-
rptFuncRCnt字段的行數(shù);5-rptFuncVCnt字段中非空值的行數(shù);6-rptFuncSDEV字段標(biāo)準(zhǔn)
偏差;7-rptFuncSERR字段標(biāo)準(zhǔn)錯(cuò)誤。這也就決定了該控件所能進(jìn)行的所有統(tǒng)計(jì)功能。
簡(jiǎn)單地設(shè)置好以上三個(gè)屬性,就完成了所有的工作,可以打印了。
使用水晶報(bào)表Crystal Reports:
★ 使用Crystal Reports水晶報(bào)表:首先要從VB6光盤中安裝,路徑在Common/Tools/
VB/CrysRept/CrysTL32.exe,然后在“外接程序”中打開(kāi)“報(bào)表設(shè)計(jì)器”。報(bào)表是一個(gè)
單獨(dú)的.rpt文件存在的。要在VB中使用,應(yīng)當(dāng)添加一個(gè)控件:Crystal Report Control
4.6,設(shè)置好相關(guān)屬性即可。最簡(jiǎn)單只要設(shè)置ReportFilename(=報(bào)表文件路徑)和
Action(=1打印)就可以了。如:
Private Sub Command1_Click()
CrystalReport1.ReportFileName = "c:\abc.rpt"
CrystalReport1.Action = 1
End Sub
關(guān)健問(wèn)題是我們要先用報(bào)表設(shè)計(jì)器設(shè)計(jì)好一個(gè)報(bào)表文件:從外接程序中打開(kāi)“報(bào)表設(shè)計(jì)
器”,創(chuàng)建一個(gè)報(bào)表的步驟基本上有七步:先單擊“File”“New”新建一個(gè)
“Standard”報(bào)表,
第一步Tables:選擇報(bào)表的數(shù)據(jù)源,可以選擇一個(gè)數(shù)據(jù)庫(kù)文件DataFile或ODBC數(shù)據(jù)源;
第二步Links:自動(dòng)創(chuàng)建表間關(guān)系。這一步不用設(shè)置,直接“Next”下一步;
第三步Fields:選擇要添加到報(bào)表的字段,只要將需要的字段從左邊數(shù)據(jù)庫(kù)窗口Add到右
邊的報(bào)表字段窗口就可以了;
第四步Sort:指定一個(gè)Group分組字段和排序方式(如升序或降序等);
第五步Total:指定在報(bào)表中顯示哪些字段的統(tǒng)計(jì)信息;缺省情況下,向?qū)⒖梢杂?jì)算的
字段都添加到右邊TotalFields框中,對(duì)于一個(gè)統(tǒng)計(jì)字段,可以指定統(tǒng)計(jì)內(nèi)容是字段總和
(SUM)還是平均值(AVERAGE),最大值最小值等,只要在下拉框中選擇一種即可。
(注意去掉Add Grand Totals復(fù)選框),所選擇的統(tǒng)計(jì)信息將在報(bào)表上顯示出來(lái);
第六步Select:直接下一步;
第七步Style:選擇一種報(bào)表樣式和輸入報(bào)表標(biāo)題。
OK,可以Preview了。
如果這時(shí)你對(duì)報(bào)表還有不滿意的地方,可以單擊Design設(shè)計(jì)標(biāo)簽,進(jìn)行手動(dòng)調(diào)整。
完成后將報(bào)表文件進(jìn)行保存。
VB中提供的Crystal Report控件的屬性和方法:
Destination屬性:報(bào)表的輸出目標(biāo),可選擇To Window窗口(預(yù)覽),To Printer打
印,To File到文件,To MAPI到郵件。
ReportFilename屬性:指定要導(dǎo)出的.rpt報(bào)表文件。
SelectionFormula屬性:導(dǎo)出準(zhǔn)則。即設(shè)置一個(gè)篩選條件,只導(dǎo)出滿足條件的記錄。注
意格式:為一個(gè)字符串“字段-比較符號(hào)-值”,但有趣的是{字段}必須用大括號(hào)括起,
而不能象SQL那樣用中括號(hào)!怪!例如:CrystalReport1.SelectionFormula
= "{invoice.name} LIKE '符章秀'"
GroupSelectionFormula屬性:分組導(dǎo)出準(zhǔn)則吧?
DataFiles屬性:報(bào)表所屬的數(shù)據(jù)源集合,通常是DataFiles(0)=報(bào)表所屬的數(shù)據(jù)庫(kù)文件
路徑。也就是使用單個(gè)數(shù)據(jù)庫(kù)作為報(bào)表數(shù)據(jù)源。
Action屬性:設(shè)為1導(dǎo)出報(bào)表。
SortFields屬性:排序字段(集合),將報(bào)表中的記錄順序按指定字段排序。如:
SortFields(0)=”+{invoice.name}”,注意格式:字段用大括號(hào),前加+加號(hào)表示升
序,前加-減號(hào)表示降序。一個(gè)報(bào)表可同時(shí)按多個(gè)字段排序,SortFields(1)=”+
{invoice.money}”…。
WindowTitle屬性:打印預(yù)覽窗口的標(biāo)題文字。
★使用公式:Crystal Reports支持一套非常豐富的計(jì)算工具和函數(shù),可以對(duì)一個(gè)字段進(jìn)
行幾乎任何類型的計(jì)算。
首先創(chuàng)建好一個(gè)報(bào)表,然后通過(guò)insert菜單Formula Field加入一個(gè)公式字段,會(huì)彈出
Formula Name文本框,輸入公式名,接在在“編輯公式”對(duì)話框中構(gòu)造好所需公式。
構(gòu)造公式的具體方法,特別是其中的語(yǔ)法,本人還沒(méi)搞清楚!
構(gòu)造好的公式可以單擊Check按紐來(lái)檢查正確性,如果無(wú)誤的話,可以單擊Accept按紐并
在報(bào)表相應(yīng)位置上放置該字段。
真是沒(méi)看懂,比如這個(gè)公式是什么意思:
WhilePrintingRecords;’確保打印時(shí)檢查公式。
NumberVar Zip5Count;
Zip5Count;=Zip5Count+1;
再如下面這個(gè):
WhilePringingRecords;
NumberVar StateCount;
NumberVar StateTotalCount;
NumberVar StateCost;
NumberVar StateUnitCost;
NumberVar FirstClassCount;
NumberVar FirstClassCost;
If StateCount>=10 then
StateCost :=StateCost+(StateCount*StateUnitCost)
Else
FirstClassCount :=FirstClassCount+StateCount;
If StateCount>=10 then
StateTotalCount :=StateTotalCount+StateCount;
If StateCount>=10 then
StateCount;
★改變記錄的排序順序:這是報(bào)表中需要最多的一種變化。通過(guò)VB代碼,將報(bào)表中的記
錄按不同字段進(jìn)行排序,使同一個(gè)報(bào)表的記錄可以改換多種打印順序。只要設(shè)置
SortFields屬性就行了,如:CrystalReport1.SortFields(0) = "+
{invoice.number}",可以在代碼中動(dòng)態(tài)改變,每改變一次后使用Action=1就會(huì)Show出一
個(gè)不同打印窗口。
★打印標(biāo)簽:比如信封標(biāo)簽等。全部的工作都在報(bào)表設(shè)計(jì)器中完成。新建一個(gè)Mail
Label報(bào)表,然后選擇DataFile數(shù)據(jù)源,添加需要的Field字段,然后選擇一種Label類
型,在Choose Mailing Label Type下拉框中選擇一種,非常之多,對(duì)于一種選定類型,
還可手動(dòng)調(diào)整它的尺寸大小,就這樣吧。
★在報(bào)表中添加圖象和線條等:Insert菜單Graphic項(xiàng)或Line項(xiàng)??梢栽趫?bào)表中調(diào)整添加
的圖象和線條的位置大小,也可以通過(guò)在圖象或線條上的右鍵菜單來(lái)做更多的調(diào)整。

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購(gòu)買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多