2013年5月24日 星期五

ADOQuery的LockType屬性


  • LockType屬性含義:
  • ltUnspecified  不特別指定 
  • ltReadOnly  選出來的資料表只能讀,無法寫入 
  • ltPessimistic  選出來的資料表可以寫入,當改記錄寫入時會立刻寫入並鎖定 
  • ltOptimistic  選出來的資料表可寫入,當該記錄表寫入時不會立刻寫入但會鎖定,當執行updates時才正式寫入改記錄 
  • ltBatchOptimistic  選出來的資料表可寫入,當該記錄寫入時不會立刻寫入但會鎖定,當執行updates才正式整批寫入該記錄(可以修改多條整批update)        

2013年2月2日 星期六

ServerSocket 元件的幫助


ServerSocket 元件的幫助

ServerSocket 元件
一、屬性
TServerSocket.Socket
指定獲得描述監聽連接端點的TServerWinSocket對象.
使用socket獲得:
1、在socket服務器上的當前活動連接的信息。
2、被socket服務器緩衝使用的連接線程信息。
3、能訪問被Windows socket API需要而調用的監聽連接的Windows socket句柄。

TServerSocket.ServerType
type TServerType = (stNonBlocking, stThreadBlocking);
繼承於TCustomServerSocket,指定被socket服務器接收到的每一個連接要么是non-
blocking(非阻塞模式),要么自動分配一個獨立的執行
線程。
描述:
設定ServerType為線程阻塞模式,服務器接收每一個socket連接會自動的產生一個新的
線程。當設定為線程阻塞模式,當讀或寫的時候,連接線程的執行將會延緩至
通過連接的所有信息傳輸結束。當socket服務器需要讀寫的時候,每一個連接的線程會
觸發OnClientRead或OnClientWrite事件。
(實際使用時,設定ServerType為線程阻塞模式,OnClientRead沒有發現被觸發)
設定ServerType為非阻塞模式,異步的處理所有通過Scoket連接的讀寫。當ServerType
為非阻塞模式,所有的客戶端連接缺省的在一個執行線程中處理。
當客戶端連接的另一端通過連接發送或者接收數據時,服務器端的OnClientRead或
OnClientWrite事件觸發。
注:當ServerType設定為stThreadBlocking時, 有一點很重要,OnClient相應的事件都
應當是線程安全的。
TServerSocket.ThreadCacheSize
繼承於TCustomServerSocket,指定能被新的客戶端連接重新使用的線程最大數量。
描述:
當ServerType設定為stThreadBlocking時,每一個被Socket服務器接受的新的連接會被給
於一個獨立的執行線程。為了提高性能,服務器sockets並不是當連接關閉的時候釋放掉
這些線程,而是把這些線程存儲在緩衝區裡。新的連接能夠重新使用緩衝裡的這些線程
。而不需要socket服務器每次接受一個連接的時候便創建一個線程。
設定ThreadCacheSize來指定能被緩衝復用的線程數量。理想的線程緩衝區大小依賴於
socket服務器接收到的客戶端的請求數量和頻率。如果線程緩衝區設的太低,當客戶端
連接被接收時,服務器sockets將會花費大量的時間在創建和釋放線程上。如果線程緩衝
區大小設定過高,服務器sockets就會沒必要的鎖定沒有被復用的線程內存。
(默認大小為10)
TAbstractSocket.Active
指明和其他機器的socket連接通訊是否是打開的或者是可利用的。
描述:
試圖使用或者改變socket連接前,讀取Ative屬性來確定連接是打開的或者已就緒。
對客戶端而言,設定Active用於打開或關閉一個與其他機器的socket連接。
對服務器而言,設定Active用於打開或關閉一個對客戶端請求可以利用的監聽連接。
在設計期,設定Active為True時,當應用程序運行時,使socket打開。
在運行期,使用Open或Close方法來打開或關閉連接。
TAbstractSocket.Port
(略)
要監聽的端口,如果在Service屬性中指定了服務類型,此屬性將被忽略。
TAbstractSocket.Service
(略)
繼承於TComponent的其他屬性:
TComponent.ComObject
指定被組件執行的接口引用。
TComponent.ComponentCount
指出被組件擁有的組件數量。
TComponent.ComponentIndex
指出組件擁有的組件的在組件屬性排列中的位置。
TComponent.Components
列出被組件所擁有的所有組件。
TComponent.ComponentState
描述當前組件狀態,並指出當前狀態State;
type TComponentState = set of (csLoading, csReading, csWriting, csDestroying,
csDesigning, csAncestor, csUpdating, csFixups, csFreeNotification, csInline,
csDesignInstance);
property ComponentState: TComponentState;
TComponent.ComponentStyle
管理組件的行為。
type TComponentStyle = set of (csInheritable, csCheckPropAvil,csSubComponent,
csTransient);
property ComponentStyle: TComponentStyle;
是一個只讀屬性,各種組件類型的標記是組件定義的一部分,在組件構造器中指定。一
個例外是csSubComponent,它可以在調用SetSubComponent 方法時設定。
TComponent.DesignInfo
TComponent.Name
TComponent.Owner
TComponent.Tag
TComponent.VCLComObject
二、方法
TServerSocket.Create
創建一個TServerSocket的實例。
描述:
在運行期調用TServerSocket.Create創建和初始化一個TServerSocket組件,在設計期放
置一個TServerSocket組件,自動創建一個socket服務器。
調用繼承的構造器之後,Create方法做了以下動作:
1、為Socket服務器分配一個封裝了Windows socket連接的TServerWinSocket對象。
2、初始化了Socket服務器的事件和錯誤發包器。
3、初始化線程緩衝區大小為10。
TCustomServerSocket.Destroy
銷毀一個TCustomServerSocket實例。
描述:
不要在一個應用程序中調用destroy方法,相反,使用free,Free方法能夠檢測服務器
socket不為nil,然後自動調用destroy。
destroy方法釋放描述監聽連接服務終點的TServerWinSocket對象。
TAbstractSocket.Close
TAbstractSocket.Open
繼承於TComponent的方法
TComponent.BeforeDestruction
在第一個destructor銷毀器被調用之前執行的所有操作。
描述:
組件的第一個destructor銷毀器執行之前,BeforeDestruction會被立即自動執行,不
要在你的應用程序中明確調用。
TComponent.Destroying
指出組件和他擁有的組件將被銷毀。
描述:
Destroying方法在ComponentState屬性中將狀態設定為csDestroying 。
對每一個擁有的組件一次調用destroying方法,使它們的csDestroying標記被設定。如
果csDestroying已經設定了,Destroying將不起作用。
沒有必要直接調用Destroying方法,Destroying方法自動在destructor 銷毀器中自動執
行,以調用free方法開始,以對象本身destroying結束。
TComponent.ExecuteAction
將組件作為目標激發一個行為.
function ExecuteAction(Action: TBasicAction): Boolean; dynamic;

TComponent.FindComponent
指出組件是否擁有一個給定的組件
function FindComponent(const AName: string): TComponent; 。 。 。 。 。 。

(還有很多繼承於TComponent的方法)
三、事件
分別繼承於TCustomServerSocket和TCustomSocket
繼承於TCustomServerSocket的事件:
TCustomServerSocket.OnClientConnect
當客戶端完成一個被服務器socket接受的連接時觸發此事件。
property OnClientConnect: TSocketNotifyEvent;
描述:
當一個客戶端socket完成一個向服務器socket的連接後,寫一個OnClientConnect事件句
柄進行指定的動作。例如:socket可以在OnClientConnect事件中通過連接開始讀或寫。
以下是服務器Socket一路執行到OnClientConnect所發生的事件:
1、服務器Socket打開或監聽前,一個OnListen事件先發生。
2、服務器Socket在一個監聽隊列裡接收客戶端請求,服務器Socket接受這些請求中的一
個,並且為新的Socket連接接收一個windows socket句柄。
3、服務器socket產生一個OnGetSocket事件,在windows句柄​​中傳遞。如果為一個新的連
接TServerClientWinSocket對像沒有在OnGetSocke事件句柄中被創建,那麼服務器
socket將會創建一個。 TServerWinSocket對象繼續監聽其他客戶端。
4、使用一個新的TServerClientWinSocket對象,OnAccept三事件被觸發。
5、如果ServerType是stThreadBlocking,並且緩衝區中沒有可用的線程,OnGetThread
事件會發生,如果OnGetThread事件句柄沒有創建線程,服務器socket將會創建
TServerClientThread。
6、如果ServerType是stThreadBlocking,當線程開始執行時,OnThreadStart事件觸發

7、客戶端完成到TServerClientWinSocket對象的連接,OnClientConnect事件觸發

注意:
如果ServerType是stThreadBlocking,確保OnClientConnect事件裡的代碼是線程安全的
使用GetClientThread方法參數來訪問指定的線程信息。
注意:
當設定相關TServerWinSocket的OnClientConnect事件句柄,TServerSocket的
OnClientConnect事件句柄也被設定。
TCustomServerSocket.OnClientDisconnect
(略)
TCustomServerSocket.OnClientError
當建立、使用、或者終止一個針對單獨客戶Socket的連接發生錯誤時觸發。
描述:
寫一個OnClientError事件句柄響應針對一個獨立客戶端連接所引發的錯誤。在
OnClientError事件句柄中將ErrorCode參數設為0,能夠成功的​​​​處理錯誤狀態,防止錯誤
被觸發。
TCustomServerSocket.OnClientRead
TCustomServerSocket.OnClientWrite
TCustomServerSocket.OnGetSocket
當服務器Socket需要創建一個新的TServerClientWinSocket對象來描述一個到客戶端的
連接端點時觸發。
property OnGetSocket: TGetSocketEvent;
描述:
寫一個OnGetSocket事件句柄創建一個指定的TServerClientWinSocket類的繼承對象,供
服務器Socket使用。在參數ClientSocket中返回新的TServerClientWinSocket對象,
Sender參數是描述監聽連接服務端點的TServerWinSocket對象。
TCustomServerSocket.OnGetThread
當服務器socket為客戶端socket的連接需要創建一個新的執行線程時觸發。
property OnGetThread: TGetThreadEvent;
描述:
當客戶端連接過來的時候,OnGetThread事件句柄創建一個指定的TServerClientThread
子類,在參數SocketThread中,表示返回一個新的TServerClientThread對象。
大多數應用程序使用線程阻塞服務器組件,就是想要提供OnGetThread 事件句柄,並且
應用TServerClientThread在自己的線程安全方式下進行讀寫操作,而不是依賴缺省的在
OnClientRead事件或者OnClientWrite事件中的TServerClientThread,因為
OnClientRead事件和OnClientWrite事件句柄存在於服務器socket,而服務器socket在全
局內存中。 (我理解,也就是單線程的)
Sender參數也​​​​就是描述監聽連接端點的TServerWinSocket對象。 ClientSocket參數描述
將要與客戶端形成的服務連接端點。
TCustomServerSocket.OnThreadEnd
TCustomServerSocket.OnThreadStart
(略)
繼承於TCustomSocket的事件
TCustomSocket.OnAccept
接受客戶端的連接請求之後馬上觸發。
客戶端連接請求被接受之後,為服務器socket寫OnAccept事件句柄進行指定的操作。

2013年1月31日 星期四

WebBrowser控件使用詳解


WebBrowser控件使用詳解

方法
說明
 GoBack相當於IE的“ 後退 ”按鈕,使你在當前歷史列表中後退一項
 GoForward相當於IE的“ 前進 ”按鈕,使你在當前歷史列表中前進一項
 GoHome相當於IE的“ 主頁 ”按鈕,連接用戶默認的主頁
 GoSearch相當於IE的“ 搜索 ”按鈕,連接用戶默認的搜索頁面
 Navigate連接到指定的URL
 Refresh刷新當前頁面
 Refresh2同上,只是可以指定刷新級別,所指定的刷新級別的值來自RefreshConstants枚舉表,
該表定義在ExDisp.h中,可以指定的不同值如下:REFRESH_NORMAL執行簡單的刷新,不將HTTP pragma: no- cache頭髮送給服務器REFRESH_IFEXPIRED只有在網頁過期後才進行簡單的刷新REFRESH_CONTINUE僅作內部使用。在MSDN裡寫著DO NOT USE!請勿使用REFRESH_COMPLETELY將包含pragma: no-cache頭的請求發送到服務器



 Stop相當於IE的“ 停止 ”按鈕,停止當前頁面及其內容的載入
屬性
說明
 Application如果該對像有效,則返回掌管WebBrowser控件的應用程序實現的自動化對象(IDispatch )。如果在宿主對像中自動化對象無效,這個程序將返回WebBrowser
控件的自動化對象
 Parent返回WebBrowser控件的父自動化對象,通常是一個容器,例如是宿主或IE窗口
 Container返回WebBrowser控件容器的自動化對象。通常該值與Parent屬性返回的值相同
 Document為活動的文檔返回自動化對象。如果HTML當前正被顯示在WebBrowser中,則Document屬性提供對DHTML Object Model的訪問途徑
 TopLevelContainer返回一個Boolean值,表明IE是否是WebBrowser控件頂層容器,是就返回true
 Type返回已被WebBrowser控件加載的對象的類型。例如:如果加載.doc文件,就會返
Microsoft Word Document
 Left返回或設置WebBrowser控件窗口的內部左邊與容器窗口左邊的距離
 Top返回或設置WebBrowser控件窗口的內部左邊與容器窗口頂邊的距離
 Width返回或設置WebBrowser窗口的寬度,以像素為單位
 Height返回或設置WebBrowser窗口的高度,以像素為單位
 LocationName返回一個字符串,該字符串包含著WebBrowser當前顯示的資源的名稱,如果資源
是網頁就是網頁的標題;如果是文件或文件夾,就是文件或文件夾的名稱
 LocationURL返回WebBrowser當前正在顯示的資源的URL
 Busy返回一個Boolean值,說明WebBrowser當前是否正在加載URL,如果返回true
就可以使用stop方法來撤銷正在執行的訪問操作
WebBrowser 的事件
Private EventsDescription
BeforeNavigate2導航發生前激發,刷新時不激發
CommandStateChange當命令的激活狀態改變時激發。它表明何時激活或關閉BackForward
菜單項或按鈕
DocumentComplete當整個文檔完成是激發,刷新頁面不激發
DownloadBegin當某項下載操作已經開始後激發,刷新也可激發此事件
DownloadComplete當某項下載操作已經完成後激發,刷新也可激發此事件
NavigateComplete2導航完成後激發,刷新時不激發
NewWindow2在創建新窗口以前激發
OnFullScreenFullScreen屬性改變時激發。該事件採用VARIENT_BOOL的一個輸
入參數來指示IE是全屏顯示方式( VARIENT_TRUE )還是普通顯示方式( VARIENT_FALSE )
OnMenuBar改變MenuBar的屬性時激發,標示參數是VARIENT_BOOL類型的。VARIANT_TRUE是可見,VARIANT_ FALSE是隱藏
OnQuit無論是用戶關閉瀏覽器還是開發者調用Quit方法,當IE退出時就會激發
OnStatusBarOnMenuBar調用方法相同,標示狀態欄是否可見。
OnToolBar調用方法同上,標示工具欄是否可見。
OnVisible控制窗口的可見或隱藏,也使用一個VARIENT_BOOL類型的參數
StatusTextChange如果要改變狀態欄中的文字,這個事件就會被激發,但它並不理會程序是否有狀態欄
TitleChange
Title有效或改變時激發

打火機充填技巧(延長使用壽命)

首先要先確定打火機是一般的還是噴射型一般的買一般型的打火機瓦斯就可以了(五金行有賣),如果是噴射型的就要買噴射打火機專用瓦斯(壓力與濃度不同)

第一步: 先用小一字起將火焰開關調整到最小


第二步: 將打火機裡的殘餘瓦斯放乾淨再灌新的瓦斯!!

           這樣打火機的壽命會比較長也比較灌的進去!

第三步: 瓦斯瓶朝下往打火機灌入口按壓3~5秒連續數次              

           等打火機機身恢復至常溫再調整供火大小的螺絲即可

2013年1月30日 星期三

MSSQL筆記


-- 檢查索引碎片 DBCC SHOWCONTIG(表)
DBCC SHOWCONTIG(DBLog)

-------------------------------------------------------------
-- 重建索引
-- DBCC DBREINDEX(表,索引名,填充因子)
-- 第一個參數,可以是表名,也可以是表ID。
-- 第二個參數,如果是'',表示影響該表的所有索引。
-- 第三個參數,填充因子,即索引頁的數據填充程度。如果是100,表示每一個索引頁都全部填滿,此時select效率最高,但以後要插入索引時,就得移動後面的所有頁,效率很低。如果是0,表示使用先前的填充因子值。
DBCC DBREINDEX (oldLog);
-- 或者
DBCC DBREINDEX (oldLog,'',0);

-------------------------------------------------------------
-- 修復資料表
use [庫]

declare @dbname varchar(255)

set @dbname='庫'

exec sp_dboption @dbname,'single user','true'

dbcc checktable('表',REPAIR_ALLOW_DATA_LOSS)

dbcc checktable('表',REPAIR_REBUILD)

-- 把’ 需要修復的資料表的名稱’更改為執行DBCC CHECKDB時報錯的資料表的名稱

exec sp_dboption @dbname,'single user','false'


-------------------------------------------------------------
-- 修復資料庫
use master

declare @databasename varchar(255)

set @databasename='需要修復的資料庫實體的名稱'

exec sp_dboption @databasename, N'single', N'true' --將目標資料庫置為單使用者狀態

dbcc checkdb(@databasename,REPAIR_ALLOW_DATA_LOSS)

dbcc checkdb(@databasename,REPAIR_REBUILD)

exec sp_dboption @databasename, N'single', N'false'--將目標資料庫置為多使用者狀態

-------------------------------------------------------------
-- 依時間刪除最前面1000筆資料
-- 參考: http://msdn.microsoft.com/zh-tw/library/ms175486(v=sql.105).aspx
delete from oldLog where ID in (select top 1000 ID from oldLog order by LogDateTime asc)

-------------------------------------------------------------
--查詢資料庫磁碟空間使用量
USE 庫
GO
EXEC sp_spaceused
GO

-- 查看某資料表的資料大小
sp_spaceused 資料表的名稱

-------------------------------------------------------------
-- 找出目前使用的資料庫的每一張資料表的資料大小
sp_MsForEachTable "Sp_SpaceUsed '?'"

-------------------------------------------------------------
-- reset identity column 重置自動編號的欄位 重設為起始值0
DBCC CHECKIDENT('your table_name', RESEED, 0)

-------------------------------------------------------------
--啟用資料列壓縮 MAXDOP:處理器數量 最大8 不能設超過
ALTER TABLE [dbo].[表]
REBUILD WITH (DATA_COMPRESSION=ROW, MAXDOP=2);  --資料列壓縮
-- 或者
--ALTER TABLE [dbo].[表]
-- REBUILD WITH (DATA_COMPRESSION=PAGE, MAXDOP=2); --資料頁壓縮

-------------------------------------------------------------
--查詢 sys.database_files 目錄檢視以取得資料檔的 file_id。
Use 庫
SELECT file_id, name
FROM sys.database_files;
GO

-------------------------------------------------------------