函數使用 1.取上一條記錄previous({tablename.fieldname}); 2.取字符串中某個字符第N次出現前面字符 split(string,"text")[1] 例:split("報銷餐費","餐費")[1] ="報銷" Basic公式的語法 1、數據類型 (1)、字符串型:String 字符串處理有很多函數,如:Left(),Right(),Mid(),Trim() (2)、數字型:Number (3)、貨幣型:Currency Crystal Reports中提供CCur()函數,可以將數值型數據轉換為貨幣型數據,比如:CCur(500)。 (4)、布爾型:Boolean 比如True或False,一般Yes可取代True,No可取代False。 (5)、日期及時間型:Date,Time及DataTime Date類型用於存放日期,Time類型用於存放時間,DataTime類型則可同時存放日期和時間 時間可以使用#...#來標識如:#2001/10/1# 2、變量及初始值 變量在使用前必須使用Dim關鍵字聲明,格式為: Dim變量名 AS 數據類型 變量命名比較靈活,但不能和BASIC語法中的關鍵字同名,關鍵字是以藍色顯示的。 變量類型可以分為以下幾種: (1)、簡單類型 (2)、范圍類型 (3)、用來存放簡單類型和范圍類型的數組 3、水晶報表的BASIC語法公式中只支持一維數組,且數組的下標從1開始,這和很多的編程語言的語法規則不一樣。按照如下方式定義一個數組: Dim 數組名(數組長度)AS數據類型 例子:Dim Week(6) AS String Week=Array("Mon","Tue","Wed","Thu","Fri","Sat","Sun") 4、數組除了可以存放簡單數據類型數據外,還可以存放范圍數據 5、運算符 (1)、布爾運算符 Not:產生相反的效果 And:邏輯與 Or:邏輯或 Xor:異或 Eqv:(a Eqv b,a和b兩者值相同的時候,運算結果為真) Imp:(a Imp b,除a為真,b為假外,其他運算結果都為真) (2)、比較運算符 =: <>: <: <=: >: >=: (3)、NULL值 (4)、算術運算符 +: -: *: /: \: Mod: -: ^: 6、控制公式執行流程的語句 (1)、If-Then-Else語句 If 布爾表達式 Then ... 或則 End If if 布爾表達式 then ... elseif 布爾表達式 then ... elseif 布爾表達式 then ... else ... endif (2)、Select Case語句 Select Case 變量 Case 條件1 程序 Case 條件2 程序 Case Else 程序 End Select (3)、For/Next語句 For I=1 To n .... Next I (4)、Exit For(只用於For循環語句中) 有時,可能在循環語句未執行完畢的時候, 就想先結束該循環語句的執行。 (5)、While while 語句用來條件反復執行一段語句,該語句基本結構如下: while 布爾表達式 ...... end 其執行步驟是先判斷布爾表達式是否成立,如果成立,就執行省略號中的程序段,否則就跳出該while循環。 (6)、Do 7、全局變量 上面講述的Dim語句聲明的變量都是屬於局部變量,而全局變量的語法格式如下: Global 全局變量名 AS 變量類型 例子:Global Sdepart AS String 請記住,凡是定義為Global的全局變量,只要這些變量的名稱相同,則其所占用的內存也相同。 8、共享變量 除了全局變量外,還有可以在主報表和子報表之間共享的變量,前面介紹的全局變量在主報表中使用同一塊內存,而共享變量的內存是有主報表和子報表共用,所以共享變量的定義域比全局變量更大,也就是說,共享變量不僅可以跨域公式,還可以跨域主/子報表。 定義共享變量的語法格式如下: Shared 共享變量名 As 變量類型 同樣在主報表中定義了共享變量后,在子報表中葯引用該共享變量的時候,也需要再聲明一次。主子報表的共享變量其實也是占用同一塊內存。 另外請記住,當修改子報表后,如果看到報表的結果並沒有更新,這時請在報表設計區中右鍵單擊子報表控件,並在彈出的對話框中選擇“重新導入子報表”,這樣就能看到更新的結果了。 9、報表中公式的執行順序 指定公式執行的順序,可以使用函數EvaluateAfter() 例子: EvaluateAfter(@gongshi2) ‘gongshi1的公式代碼 ...... 10、Cystal Reports內建函數 水晶報表中的十幾種內建函數 (1)、字符串 Len()函數:用來計算字符串的長度; Trim():去掉字符串中的所有空格; LTrim():去掉字符串開頭的空格; RTrim()函數:刪除字符串尾部的空格; Ucase(“jack”)函數:將字符串轉換成大寫 Lcase(“JACK”)函數:將字符串轉換成小寫 Mid()、Left()、Right() StrCmp(“apple”,“app”):字符串比較函數,前一個是目標字符串,后一個是比較字符串。 Instr()函數:尋找字符串內容函數 Filter()函數:從數組中尋找字符串內容 Replace()函數:取代字符串內容 StrReverse()函數:字符串反轉 Split()函數:分割字符串函數 Join()函數:連接字符串 (2)、日期時間 CurrentDate,CurrentTime,CurrentDateTime取得當前時間 要取出日期中的年,月,日甚至時,分,秒則可以使用Year(),Month(),Day(),Hour(),Minute(),Second()函數 IsDateTime(),IsDate(),IsTime() 格式: WeekDay(),WeekdayName()及MonthName() 格式: DateSerial()及TimeSerial() 格式: DateDiff() (3)、類型轉換 CBool()函數:該函數僅接受Number或Currency類型的數據,若給定的值不為0則返回True,否則返回False,如下例:CBool(-12.1) '返回True CCur()函數:該函數可以將Number,String類型數據轉換成Currency類型的數據 如下例:CCur(“1200”) ‘返回1200 CDbl()函數:將字符串轉換成Number型的數據,如下例:CDbl(“143.2”) ’返回143.2 CStr()函數:該函數可以把輸入數據轉換成字符串,也可以用來格式化數據內容,若輸入的數據是Boolean值,則返回值只有兩種“真”,“假”。若輸入的參數是Number或Currency,則可以指定的參數就非常多,具體格式請讀者們參考相關的幫助。 CDateTime()、CDate()及CTime()可以使用CDateTime()、CDate()、CTime()將日期時間字符串,數字等轉換成DateTime,Date,Time型的數據。 (4)、數組(隊列) Array()函數:用來建立數組,與Crystal語法中的MakeArray()具有相同的功能。注意Array中的數據類型要一致。 UBound()函數:傳遞回數組的長度 統計:可以對數組中的數據進行計算如求總和,求平均值等等。 (5)、格式化 (6)、判斷NULL值 判斷Null的函數格式為:IsNull(字段名) 比如下例:可檢查用戶名字是否為空:IsNull({CustomerList.Name}) 請注意,Null與空字符串時不一樣的,Null指該字段中沒有值。另外,還有PreviousIsNull()及NextIsNull()可檢查上一條或則下一條字段值是否為空值。 (7)、打印狀態