VB的斷行方式,是
Dim S as string ="SELECT [Date] " & _
" ,[Unit] " & _
" ,[UID] " & _
" ,[MDate] " & _
" FROM [FOD11] "
C#的斷行方式,是
string S = @"SELECT [Date]
,[Unit]
,[UID]
,[MDate]
FROM [FOD11] ";
2012年12月9日 星期日
2012年9月20日 星期四
Crystal Reports 指定子報表接收DataTable資料
建立Crystal Reports報表,使用XML Schema File,使用Crystal Reports中資料庫 > 設定資料來源位置 > 建立新連結 > ADO.NET(XML)來設定報表欄位的方式,這些步驟就先略過了。直接跳回VB端,紀錄塞資料給指定子報表的方式。
REM 宣告 Table:
Dim print_Main As
New DataTable
Dim print_TermsOfPayment As New DataTable
Dim print_Building As
New DataTable
Dim print_Agreement As New DataTable
REM 取得報表資料:
print_Main = Wer_Service_Name( Mode=2, "參數", ServerVer)
print_TermsOfPayment = Wer_Service_Name( Mode=3, "參數", ServerVer)
print_Building = Wer_Service_Name( Mode=4, "參數", ServerVer)
print_Agreement
= Wer_Service_Name( Mode=5, "參數", ServerVer)
REM 載入資料至主報表:
rptDoc_R001.SetDataSource(print_Main)
REM 載入資料至子報表:
REM 方法一,直接指定子報表名稱並匯入資料。
rptDoc_R001.Subreports.Item("R001_TermsOfPayment.rpt").SetDataSource(print_TermsOfPayment)
rptDoc_R001.Subreports.Item("R001_building.rpt").SetDataSource(print_Building)
rptDoc_R001.Subreports.Item("R001_agreement.rpt").SetDataSource(print_Agreement)
REM 方法二,以順序指定子報表並匯入資料。
rptDoc_R001.Subreports.Item(0).SetDataSource(print_TermsOfPayment)
rptDoc_R001.Subreports.Item(1).SetDataSource(print_Building)
rptDoc_R001.Subreports.Item(2).SetDataSource(print_Agreement)
備註:
使用方法二,要注意子報表名稱的排序,需跟子報表放置順序一樣,否則很容易出錯。也就是最好把子報表的名稱R001_TermsOfPayment.rpt、R001_building.rpt、R001_agreement.rpt,改成R001_0.rpt"、"R001_1.rpt"、"R001_2.rpt"這樣的名稱,這樣給資料到子報表時才不會出錯。
傳值到子報表:需在報表端設定。
子報表端設定:
對子報表點選右鍵 > 變更子報表連結... > 設定要連結的欄位。
除了可以連結欄位之外,也可以用來傳值到子報表。
先分別設定好母報表端的「參數欄位」以及子報表的「參數欄位」,接著設定子報表連結。
當母報表接收到傳入值時,就可以透過子報表連結傳遞到子報表端。
2012年9月11日 星期二
C# 的命名空間
開始C#人生了。
然後我發現我的基本觀念都很差,而且應該會繼續差下去吧。因為像「命名空間」、「類別空間」、...這種東西,在我工作的場合,會變動到它們的機會不多。很少用的東西,對我來說,也是容易遺忘的東西,不容易在人腦記憶體裡面佔一席之地。
但不知道,也說不過去,所以還是要記錄一下這些基礎的東西。
但不知道,也說不過去,所以還是要記錄一下這些基礎的東西。
// 引用相關的命名空間
using System;
using System.Collections.Generic;
using System.Text;
namespace ConsoleApplication1 // 命名空間。ConsoleApplication1 同時也是專案名稱。
{
class Program // 類別空間
{
static void
Main(string[] args) // Main() 方法為程式進入點
{
}
}
}
2012年9月3日 星期一
CASE 函數
/* case 函數*/
--對欄位作CASE的判斷。
SELECT s.[std_name] + CASE p.[addr] when '新竹市' then '市民' else '訪客' end
,p.[addr]
from [personal] p,[score]
s
where p.[std_num]=s.[std_num]
--對欄位下條件作CASE的判斷。
SELECT s.[std_name] + CASE when p.[addr] like '新竹%' then '在地人' else '觀光客' end
,p.[addr]
from [personal] p,[score]
s
where p.[std_num]=s.[std_num]
SELECT [std_num]
,[std_name]
,[CO]
,[DB]
,[SP]
,[TD]
,[judgment]
,總成績=co+db+sp+td
,本次考試表現=case
when co+db+sp+td>=360 then '非常好!'
when co+db+sp+td>=320 then '再加油!'
else '太混了!' end
FROM [CSIE98].[dbo].[score]
--對排序作CASE的判斷。
SELECT [員工編號]
,[姓名]
,[職稱]
,[性別]
,[主管]
,[出生日期]
,[任用日期]
,[區域號碼]
,[地址]
,[分機號碼]
FROM [CH11範例資料庫].[dbo].[員工]
ORDER BY CASE [性別] when
'男' then [出生日期] else [任用日期] end
話說,
CASE 函數可以使用在排序條件上,這點有令我意外。
因為我還真不知道可以這樣子用呢!
2012年8月29日 星期三
MERGE 命令語法 ( 限 SQL 2008 以上使用 )
試了好幾次,寫好的 MERGE 命令語法完~~~~全不能用。
去爬文後,看到的答案,大多都是說「不支援SQL 2005」。
既然 MERGE 這個命令語法,不支援SQL 2005。
就記錄一下,以備日後可以參考。
/* MERGE 命令語法 */
MERGE M目標_產品資料 AS T
USING M來源_產品資料 AS S
ON T.產品編號= S.產品編號
/* 當目標資料表與來源資料表條件吻合時,執行下面動作。*/
WHEN MATCHED
THEN UPDATE
SET T.產品名稱=S.產品名稱, T.單價=S.單價
/* 當目標資料表(T)中不存,來源資料表(S)中有的產品編號時,執行下面動作。*/
WHEN NOT MATCHED BY TARGET
THEN INSERT (產品編號, 產品名稱, 單價,)
VALUES (S.產品編號, S.產品名稱, S.單價, 0)
/* 當目標資料表(T)中存在,來源資料表(S)不存在此產品編號時,執行下面動作。*/
WHEN NOT MATCHED BY SOURCE
THEN DELETE
; /* 一定要加分號做結尾,否則會出錯。 */
雖然還沒機會可以使用,但MERGE看起來就是可以一次比對完兩個資料表中的差異,並且將來源資料表(SOURCE)中的結果,異動到目標資料表(TARGET),完成UPDATE、INSERT、DELETE等動作。
2012年8月28日 星期二
合併複數資料表的方式
/* 合併資料表*/
合併兩張資料表的方式,大概有下面三種。
--(1)用逗點分隔
select * from
score,personal
--(2)使用INNER
JOIN
select * from
score INNER JOIN
personal
--(3)省略INNER,只使用JOIN
select * from
score JOIN personal
下面三個語法,有的只有 JOIN 條件,有的只有 WHERE 條件,但結果都是一樣。
--(1)
--下面的語法,把INNER JOIN 中 ON 的條件挪到 where 裡了。
select *
from score S,personal P
where S.std_num=P.std_num and p.addr like '_竹_'
--(2)
select *
from score S join personal P
on S.std_num=P.std_num
where p.addr like '_竹_'
--(3)
--下面語法沒有使用 where 是可以的,但僅適合簡易的資料查詢。
--下面語法沒有使用 where 是可以的,但僅適合簡易的資料查詢。
--「p.addr like '_竹_'」合併到 JOIN 的條件裡了。
select *
from score S join personal P
on S.std_num=P.std_num and p.addr like '_竹_'
用逗點來做 INNER JOIN,對我來說,算是蠻新奇的作法。
我以前都不知道可以這樣使用...
我以前都不知道可以這樣使用...
2012年8月24日 星期五
使用模糊查詢
/* 模糊查詢*/
在資料表中,取出符合條件的資料的方法很多。
可以在 Where 中使用 Like、in,或是使用 LEFT、RIGHT、SUBSTRING等等的函式。
--例如找出住在新竹縣市的人。
select * from
[personal] where left([addr],2)='新竹'
select * from
[personal] where substring([addr],1,2)='新竹'
select * from
[personal] where [addr] like '新竹%'
select * from
[personal] where [addr] in ('新竹市','新竹縣')
--底線'_'是指任何字元,雖然可以模糊查詢,但會受到字元長度限制。
--一個底線代表一個字元。
select * from
[personal] where [addr] like '新竹_'
select * from
[personal] where [addr] like '新__'
--使用中括弧也是模糊查詢的一種。
select * from
[personal] where [addr] like '新竹[縣市]'
--另外老師有教[^北]
--這個「^」到底是什麼意思?下次上課要問清楚。
select * from [personal] where
[addr] like '新[^北][縣市]'
訂閱:
文章 (Atom)