因為許多的單據都是用點陣式印表機(Ex EPSON 2080C..),
且紙張都是用連續報表紙或中一刀,
但因為QRReport對NT的作業系統支援有點問題,無法預設Report的size,
所以既使原先的設定都正常,但列印出來仍會用格式跑掉的情況,
下面列出解決辦法:
1.於OS中的印表機和傳真畫面中點選右鍵
2.點選伺服器內容
3.建立新格式
4.根據報表紙的長寬輸入(一般為24.40cm*27.94cm)
5.格式名稱"連續報表紙"-存檔
6.將點陣式印表機設為預設
7.將印表機內的列印喜好設定及裝置設定值紙張格式都設為"連續報表紙"
8.QRReport中的Page Size設定為Default,不可為Custom
2008-12-31
2008-12-25
DBGrid中顯示Memo屬性欄位
若資料庫中欄位的資料型態設為Memo、NVarChar(MAX)....類似欄位
當欲撈取資料顯示於DBGrid中時,則該欄位皆顯示為(MEMO),
解決方法:
一、可以藉由SQL的資料型態型態轉換改變該欄位資料型態-cast
二、於Delphi中QueryField的事件作轉換-GetText
當欲撈取資料顯示於DBGrid中時,則該欄位皆顯示為(MEMO),
解決方法:
一、可以藉由SQL的資料型態型態轉換改變該欄位資料型態-cast
cast(column as NVarChar)
二、於Delphi中QueryField的事件作轉換-GetText
procedure TFSTK205.Query_SearchMemoGetText(Sender: TField; var Text: String; DisplayText: Boolean); begin inherited; Text := Sender.AsString; end;
2008-12-24
查詢MS SQL Server中表格已使用空間
若要查詢Server中表格已使用空間可用下列語法
sp_spaceused TableName
若無輸入 TableName 的話,則會傳回整個資料庫的空間使用狀況
sp_spaceused TableName
若無輸入 TableName 的話,則會傳回整個資料庫的空間使用狀況
sp_spaceused Prod
2008-12-15
當Lookup Field遇上NULL
當Query 中建立Lookup的欄位,欲參照的欄位為NULL時,
則會跳出 "無法識別的錯誤" 的錯誤訊息,
此時將Query中該Lookup的欄位lookupcache屬性設為True,即可解決!
則會跳出 "無法識別的錯誤" 的錯誤訊息,
此時將Query中該Lookup的欄位lookupcache屬性設為True,即可解決!
利用 SQL Convert轉換日期格式
Select CONVERT(varchar(100), GETDATE(), 0)-->05 16 2006 10:57AM Select CONVERT(varchar(100), GETDATE(), 1)-->05/16/06 Select CONVERT(varchar(100), GETDATE(), 2)-->06.05.16 Select CONVERT(varchar(100), GETDATE(), 3)-->16/05/06 Select CONVERT(varchar(100), GETDATE(), 4)-->16.05.06 Select CONVERT(varchar(100), GETDATE(), 5)-->16-05-06 Select CONVERT(varchar(100), GETDATE(), 6)-->16 05 06 Select CONVERT(varchar(100), GETDATE(), 7)-->05 16, 06 Select CONVERT(varchar(100), GETDATE(), 8)-->10:57:46 Select CONVERT(varchar(100), GETDATE(), 9)-->05 16 2006 10:57:46:827AM Select CONVERT(varchar(100), GETDATE(), 10)-->05-16-06 Select CONVERT(varchar(100), GETDATE(), 11)-->06/05/16 Select CONVERT(varchar(100), GETDATE(), 12)-->060516 Select CONVERT(varchar(100), GETDATE(), 13)-->16 05 2006 10:57:46:937 Select CONVERT(varchar(100), GETDATE(), 14)-->10:57:46:967 Select CONVERT(varchar(100), GETDATE(), 20)-->2006-05-16 10:57:47 Select CONVERT(varchar(100), GETDATE(), 21)-->2006-05-16 10:57:47.157 Select CONVERT(varchar(100), GETDATE(), 22)-->05/16/06 10:57:47 AM Select CONVERT(varchar(100), GETDATE(), 23)-->2006-05-16 Select CONVERT(varchar(100), GETDATE(), 24)-->10:57:47 Select CONVERT(varchar(100), GETDATE(), 25)-->2006-05-16 10:57:47.250 Select CONVERT(varchar(100), GETDATE(), 100)-->05 16 2006 10:57AM Select CONVERT(varchar(100), GETDATE(), 101)-->05/16/2006 Select CONVERT(varchar(100), GETDATE(), 102)-->2006.05.16 Select CONVERT(varchar(100), GETDATE(), 103)-->16/05/2006 Select CONVERT(varchar(100), GETDATE(), 104)-->16.05.2006 Select CONVERT(varchar(100), GETDATE(), 105)-->16-05-2006 Select CONVERT(varchar(100), GETDATE(), 106)-->16 05 2006 Select CONVERT(varchar(100), GETDATE(), 107)-->05 16, 2006 Select CONVERT(varchar(100), GETDATE(), 108)-->10:57:49 Select CONVERT(varchar(100), GETDATE(), 109)-->05 16 2006 10:57:49:437AM Select CONVERT(varchar(100), GETDATE(), 110)-->05-16-2006 Select CONVERT(varchar(100), GETDATE(), 111)-->2006/05/16 Select CONVERT(varchar(100), GETDATE(), 112)-->20060516 Select CONVERT(varchar(100), GETDATE(), 113)-->16 05 2006 10:57:49:513 Select CONVERT(varchar(100), GETDATE(), 114)-->10:57:49:547 Select CONVERT(varchar(100), GETDATE(), 120)-->2006-05-16 10:57:49 Select CONVERT(varchar(100), GETDATE(), 121)-->2006-05-16 10:57:49.700 Select CONVERT(varchar(100), GETDATE(), 126)-->2006-05-16T10:57:49.827
case when
有時候會針對不同的欄位資料,對相對應的動作,
可藉由case when來完成
case when Rule then Result (when other Rule then Result) esle Result end
可藉由case when來完成
case when Rule then Result (when other Rule then Result) esle Result end
select (case when Substring(ProdNo,1,1)='0' then PA
when Substring(ProdNo,1,1)='1' then VA else PA end )
from Prod
當ProdNo 第一碼為0時抓取PA欄位
當ProdNo 第一碼為1時抓取VA欄位
其餘抓取PA欄位
2008-12-10
於QRReport顯示縱向文字
基本上於QRReport中僅可顯示橫向的文字,
但有時能仍有特殊需求,需要以縱向顯示,
解決辦法如下:
--------------------範例--------------------
拉一個QRLabel,打上 "保存期限 " ,
放在報表規格內的右側中間(不要置放在任何QRBand 之內)
再來動一點手腳,讓它變成直式(因為 QRLabel的 WordWarp 對中文字沒有作用),
所以用 一般橫式字體打好後,在 QRreport畫面以滑鼠右鍵選擇 View As Text
進入 DFM 的文字編輯模式,找到"保存期限" 這個Label
改成 Caption='保'#13'存'#13'期'#13'限'#13':'#13'一'#13'年'
(註:#13就是Enter)
再轉回 View As Form即可。
參考自:Delphi.KTop
但有時能仍有特殊需求,需要以縱向顯示,
解決辦法如下:
--------------------範例--------------------
拉一個QRLabel,打上 "保存期限 " ,
放在報表規格內的右側中間(不要置放在任何QRBand 之內)
再來動一點手腳,讓它變成直式(因為 QRLabel的 WordWarp 對中文字沒有作用),
所以用 一般橫式字體打好後,在 QRreport畫面以滑鼠右鍵選擇 View As Text
進入 DFM 的文字編輯模式,找到"保存期限" 這個Label
改成 Caption='保'#13'存'#13'期'#13'限'#13':'#13'一'#13'年'
(註:#13就是Enter)
再轉回 View As Form即可。
參考自:Delphi.KTop
2008-12-09
清除MS交易記錄檔
方法一
backup log TableName with NO_LOG
use TableName
dbcc shrinkfile (TableName_log , truncateonly)
方法二
BACKUP LOG 資料庫名稱 WITH TRUNCATE_ONLY
DBCC SHRINKDATABASE (資料庫名稱)
解釋:
TRUNCATE_ONLY 的意思是直接刪除
SHRINKDATABASE 就是把DB使用到的硬碟空間釋放
MS SQL2008已將此BACKUP語法停用!
backup log TableName with NO_LOG
use TableName
dbcc shrinkfile (TableName_log , truncateonly)
方法二
BACKUP LOG 資料庫名稱 WITH TRUNCATE_ONLY
DBCC SHRINKDATABASE (資料庫名稱)
解釋:
TRUNCATE_ONLY 的意思是直接刪除
SHRINKDATABASE 就是把DB使用到的硬碟空間釋放
BACKUP LOG ERPdb WITH TRUNCATE_ONLY
DBCC SHRINKDATABASE (ERPdb)
MS SQL2008已將此BACKUP語法停用!
隨機撈取資料
有時候因為作業的需求,需要隨機從Table中撈取資料,
可使用內建的 NEWID ()函式
可使用內建的 NEWID ()函式
select Top 100 *
from STK
where CorpNo='10002'
order by NEWID()
說明:抓取STK中經亂數排序的前100筆資料
2008-12-08
滑鼠滾輪滾動時移動DBGrid 中的資料列
1.建立一個新類別借以開放OnMouseWheel
type
TMyGrid = Class(TDBGrid)
Public
property OnMouseWheel; // 開放事件
End;
2.在Form1新增一個事件程序
procedure MouseWheel(Sender: TObject; Shift: TShiftState;
WheelDelta: Integer; MousePos: TPoint; var Handled: Boolean);
3.事件程序內容如下
procedure TForm1.MouseWheel(Sender: TObject; Shift: TShiftState;
WheelDelta: Integer; MousePos: TPoint; var Handled: Boolean);
begin
If Sender Is TDBGrid Then Begin // 先判斷Sender是否為TDBGrid
If WheelDelta > 0 Then TDBGrid(Sender).Datasource.DataSet.Prior;
If wheelDelta < 0 Then TDBGrid(Sender).DataSource.DataSet.Next;
Handled := True;
End;
end;
4.最後在Form1.OnCreate事件中將上的事件程序掛上
procedure TForm1.FormCreate(Sender: TObject);
begin
// 將DBGrid_Name轉型為TMyGrid才可以指定OnMouseWheel事件
TMyGrid(DBGrid_Name).OnMouseWheel := MouseWheel ;
end;
type
TMyGrid = Class(TDBGrid)
Public
property OnMouseWheel; // 開放事件
End;
2.在Form1新增一個事件程序
procedure MouseWheel(Sender: TObject; Shift: TShiftState;
WheelDelta: Integer; MousePos: TPoint; var Handled: Boolean);
3.事件程序內容如下
procedure TForm1.MouseWheel(Sender: TObject; Shift: TShiftState;
WheelDelta: Integer; MousePos: TPoint; var Handled: Boolean);
begin
If Sender Is TDBGrid Then Begin // 先判斷Sender是否為TDBGrid
If WheelDelta > 0 Then TDBGrid(Sender).Datasource.DataSet.Prior;
If wheelDelta < 0 Then TDBGrid(Sender).DataSource.DataSet.Next;
Handled := True;
End;
end;
4.最後在Form1.OnCreate事件中將上的事件程序掛上
procedure TForm1.FormCreate(Sender: TObject);
begin
// 將DBGrid_Name轉型為TMyGrid才可以指定OnMouseWheel事件
TMyGrid(DBGrid_Name).OnMouseWheel := MouseWheel ;
end;
列出資料欄位內含有中文字
有時候因為特殊的需求,需要將某些特性欄位中含有中文字段的資料列出,
則可在條件是加入 patindex('%[一-龜]%',column) > 0
--------------------範例--------------------
select ProdNo,PnameD
from Prod
where patindex('%[一-龜]%',PnameD) > 0
order by ProdNo
參考自:點部落
則可在條件是加入 patindex('%[一-龜]%',column) > 0
--------------------範例--------------------
select ProdNo,PnameD
from Prod
where patindex('%[一-龜]%',PnameD) > 0
order by ProdNo
參考自:點部落
2008-12-07
解決MS SQL 定序不同問題
當在查詢兩個不同的Table或DB時,若是兩個表格所設定的定序不同
則無法進行join的動作!
錯誤訊息:Cannot resolve the collation conflict between "Chinese_PRC_CI_AS" and "Chinese_Taiwan_Stroke_CI_AS" in the UNION operation.
解決方法:在要參照的key後加上相同的定序名稱即可解決
創建表格時也可一併設定定序,如下:
則無法進行join的動作!
錯誤訊息:Cannot resolve the collation conflict between "Chinese_PRC_CI_AS" and "Chinese_Taiwan_Stroke_CI_AS" in the UNION operation.
解決方法:在要參照的key後加上相同的定序名稱即可解決
select S.ProdNo,P.PnameD
from STK S,Prod P
where S.ProdNo COLLATE Chinese_PRC_Stroke_CI_AS = P.ProdNo COLLATE Chinese_PRC_Stroke_CI_AS
創建表格時也可一併設定定序,如下:
if (select OBJECT_ID('tempdb..#ExpandRubBOMD')) IS NOT NULL Drop Table #ExpandRubBOMD
CREATE TABLE #ExpandRubBOMD(
[MixRubNo] [varchar](5) collate Chinese_PRC_Stroke_CI_AS NOT NULL,
[ProdNo] [varchar](16) collate Chinese_PRC_Stroke_CI_AS NOT NULL,
[Wgt] [varchar](30) collate Chinese_PRC_Stroke_CI_AS NULL CONSTRAINT [DF_ExpandRubBOMD_Wgt_Dean] DEFAULT ((0)) )
2008-12-06
使用CAST 或 CONVERT 轉換資料型態
使用 CAST:
CAST ( expression AS data_type )
使用 CONVERT:
CONVERT ( data_type [ ( length ) ] , expression [ , style ] )
CAST ( expression AS data_type )
使用 CONVERT:
CONVERT ( data_type [ ( length ) ] , expression [ , style ] )
select cast(AAA as int) from ABCD
select convert(int,AAA) from ABCD
訂閱:
文章 (Atom)