PIXNET Logo登入

Felix's Spaces

跳到主文

部落格全站分類:不設分類

  • 相簿
  • 部落格
  • 留言
  • 名片
  • 11月 03 週二 200909:58
  • 談論主題 [IIS] 已超過連接逾時的設定。在取得集區連接之前超過逾時等待的時間,可能的原因為所有的共用連接已在使用中,並已達共用集區大小的最大值。

 
引述
[IIS] 已超過連接逾時的設定。在取得集區連接之前超過逾時等待的時間,可能的原因為所有的共用連接已在使用中,並已達共用集區大小的最大值。

 


訊息:



已超過連接逾時的設定。在取得集區連接之前超過逾時等待的時間,可能的原因為所有的共用連接已在使用中,並已達共用集區大小的最大值。
Timeout expired. The timeout period elapsed prior to obtaining a connection from the pool. This may have occurred because all pooled connections were in use and max pool size was reached.


發生原因:



SQLClient 集區已經用盡 SqlInternalConnection 物件。


發生原因:



程式使用的連線太多,導致Connection Pool用完。Max Pool Size預設值為100。


處理方式:



檢查程式有無開啟(open)而無關閉(close)連線的狀況。


檢查程式有無遞迴呼叫,導致連線用完的狀況。


檢查系統使用量是否真的很多,導致連線用完的狀況。


修改連線字串,增加Max Pool Size的上限,例如:Max Pool Size=300


參考資料:



http://support.microsoft.com/?scid=kb%3Ben-us%3B830118&x=9&y=7


http://msdn.microsoft.com/en-us/library/8xx3tyca%28VS.71%29.aspx




文章資料:
 
使用Using來宣告Connection來Connection自動關閉回收,避免忘記回收關閉
 
物件Object的New,Dispose與Connection的Open,Close概念分享
 
Dispose 測試:Dispose時是否立即釋放記憶體
 
(繼續閱讀...)
文章標籤

felix 發表在 痞客邦 留言(0) 人氣(14,719)

  • 個人分類:技術文件
▲top
  • 6月 26 週五 200916:35
  • jQuery 教學 - 基礎篇

文章出處:jsGears技術論壇
 

jQuery 教學 - 基礎篇


[前言]
jQuery 是一套 JavaScript 的 Library,因此,你必須稍具 JavaScript 的基礎,至少寫過一些 JavaScript 才比較容易上手,並且看得懂後續的教學。jQuery 的核心程式並非包山包海、什麼都可以幫你做,相反地,jQuery 主要是用在 DOM 文件的操作,包含「快速選取元素(Element)」並且「做一些事情」,快速選取元素可以讓你一次選取單一或多個的元素,然後你可以將這些被選取的元素做一些改變,例如隱藏、顯示等等。此外 jQuery 的核心程式還加強了非同步傳輸(AJAX)以及事件(Event)的功能,讓你更容易操作遠端文件及事件。
以上看得出來 jQuery 是針對 JavaScript 內在不足的地方加以增進,你仍然需要自己寫一些程式來完成你需要的各種功能,不同的是,正確地使用了 jQuery 可以讓你的程式碼更精簡、更優雅的表達出來,這在後續的範例中可以看到,更重要的是,應該也會讓你更快速的開發出你要的功能。
或許你會想說,在這個 Web 2.0 的時代,我需要多點漂亮、絢麗的 Widgets 來裝飾我的網站,就像 Yahoo UI 或 ExtJS 提供的那些功能一樣,jQuery 有嗎?其實 jQuery 的設計上有考慮到這類擴展性的問題,目前 jQuery 的 plugin 已經有上百個了,你也不一定要完全自己動手寫,上 jQuery 官方網站找找看,或許你需要的功能別人已經幫你做好了。以 UI 來講, jQuery 跟 UI 相關的 plugins 已經做過了一些整合,目前獨立發佈為 jQuery UI (http://ui.jquery.com/),如果你之前沒聽過 jQuery UI,建議你上去網站上看一下展示的範例,嗯,雖然可能還有一些 bug 存在,但是整體來說已經有相當的水準了,或許你會對 jQuery 更有興趣了。
以下的教學內容,主要是擷取了 jQuery 作者 John Resig 的一篇簡報 "Building Interactive
Prototypes with jQuery" 的內容加以調整並註解,希望能以比較忠實的方式來呈現 jQuery 的設計含意。
[初探]
jQuery 怎麼用來「快速選取元素」並且「做一些事情」呢?請看看程式碼:





  1. $("div").addClass("special");  
$("div").addClass("special");

錢記號 $ 是 jQuery 的物件,使用 $("div") 就是用 jQuery 來選取元素,這個範例可以選取文件內所有的 <div> 元素。後面接著的 .addClass("special") 就是用來做一些事情,這個範例是將先前所選取到的所有元素都加上一個名為 "special" 的 class。也就是透過 $("div").addClass("special") 的語法,可以讓你一次幫文件上有的 <div> 元素都加入 special 的 class。
請注意喔,剛剛的例子可以針對已選取的多個元素做批次的操作,也就是說如果文件上有三個 <div>,那就會一次找出三個 <div> 並且全部套用後續的動作。這和你原本自己使用 JavaScript 來寫程式有很大的差異,原本自己寫可能會需要用到迴圈之類的語法,而 jQuery 的函數大多具有批次處理的功能,光是這點就可以讓你的程式更簡潔了。
關於錢記號 $ 將會是你學習及使用 jQuery 的過程中最重要的物件(或者你要把 $ 當成一個函數也可以,事實上也是這樣),使用方式就像剛剛你看到的,用來找元素用的,把參數帶入即可。或許你不習慣錢記號也可以當成函數名稱,那麼你也可以用 jQuery 這個名字,錢記號其實是被當成 jQuery 的縮寫,讓你的函數看起來更簡潔一些,如果你要自己設定另外一個縮寫,例如 $j,也是可以的,這部份後續再解釋,先看看已下的範例,結果將會和上面的範例是一模一樣的:





  1. jQuery("div").addClass("special");  
jQuery("div").addClass("special");


[選取元素]


前面的例子使用 $("div") 來選取元素,帶入的參數 div 是表示你要找的元素,這是 CSS 選擇器(CSS Selector) 的語法,就如同 CSS 在做排版和外觀所使用的選擇器語法一樣。jQuery 所支援的 CSS Selector 包含了 CSS 1、CSS2 以及仍未正式發佈的 CSS3,此外透過 plugin 還可支援常用的 XPath 語法,善用這些 CSS、XPath 語法就可以很容易地找到你要處理的網頁元素,底下來看看更多的範例。
這是一段原始的 HTML:





  1. <div id="body">  

  2.   <h2>Some Header</h2>  

  3.   <div class="contents">  

  4.     <p>...</p>  

  5.     <p>...</p>  

  6.   </div>  

  7. </div>  
<div id="body">
  <h2>Some Header</h2>
  <div class="contents">
    <p>...</p>
    <p>...</p>
  </div>
</div>

以下用一連串的範例,以藍色字體展示一些基本的語法並且以深色字顯示文件中會被選取的元素。
$("div")
<div id="body">
  <h2>Some Header</h2>
  <div class="contents">
    <p>...</p>
    <p>...</p>
  </div>
</div>

解釋:選取所有 <div>
$("#body")
<div id="body">
  <h2>Some Header</h2>
  <div class="contents">
    <p>...</p>
    <p>...</p>
  </div>
</div>

解釋:選取 id 為 body 的元素
$("div#body")
<div id="body">
  <h2>Some Header</h2>
  <div class="contents">
    <p>...</p>
    <p>...</p>
  </div>
</div>

解釋:選取 id 為 body 的 <div>
$("div.contents p")
<div id="body">
  <h2>Some Header</h2>
  <div class="contents">
    <p>...</p>
    <p>...</p>

  </div>
</div>

解釋:選取 class 為 contents 的 <div> 所包住的所有下層的 <p>
$("div > div")
<div id="body">
  <h2>Some Header</h2>
  <div class="contents">
    <p>...</p>
    <p>...</p>
  </div>
</div>

解釋:選取被 <div> 包住的下一層 <div>
$("div:has(div)")
<div id="body">
  <h2>Some Header</h2>
  <div class="contents">
    <p>...</p>
    <p>...</p>
  </div>
</div>

解釋:和前一個範例相反,這邊是選取至少有包住一個 <div> 的 <div>
[做一些事情]
前一段的教學中介紹了如何使用 jQuery 來選取元素,其中大部份的語法都是可以讓你快速地一次選取多個元素,接下來當然就是要來對這些選取到的元素做些改變囉。透過 jQuery 內建的函數,你可以:



  • 對 DOM 進行操作,例如對文件節點的新增或修改
  • 添加事件處理
  • 做一些基本的視覺效果,例如隱藏、顯示、下拉顯示、淡出淡入等等
  • 使用 AJAX 傳送表單內容或取得遠端文件


[範例1] 選取所有有 target 屬性的 <a>,並且在其節點下加入一段文字。





  1. $("a[target]").append(" (Opens in New Window)");  
$("a[target]").append(" (Opens in New Window)");

這是一段原始的 HTML :





  1. <a href="http://jsgears.com">jsGears</a>  

  2. <a href="http://google.com" target="_blank">Google</a>  

  3. <a href="http://amazon.com" target="_blank">Amazon</a>  
<a href="http://jsgears.com">jsGears</a>
<a href="http://google.com" target="_blank">Google</a>
<a href="http://amazon.com" target="_blank">Amazon</a>

選取有 target 屬性並加入文字後的結果:





  1. <a href="http://jsgears.com">jsGears</a>  

  2. <a href="http://google.com" target="_blank">Google (Opens in New Window)</a>  

  3. <a href="http://amazon.com" target="_blank">Amazon (Opens in New Window)</a>  
<a href="http://jsgears.com">jsGears</a>
<a href="http://google.com" target="_blank">Google (Opens in New Window)</a>
<a href="http://amazon.com" target="_blank">Amazon (Opens in New Window)</a>

[範例2] 選取 id 為 body 的元素,並且修改兩個 css 屬性。





  1. $("#body").css({   

  2.   border: "1px solid green",   

  3.   height: "40px"  

  4. });  
$("#body").css({
  border: "1px solid green",
  height: "40px"
});

這是一段原始的 HTML :





  1. <div id="body">  

  2.   ...   

  3. </div>  
<div id="body">
  ...
</div>

選取 id 為 body 的元素並修改 css 後的結果(示意):





  1. <div id="body" style="border: 1px solid green; height: 40px">  

  2.   ...   

  3. </div>  
<div id="body" style="border: 1px solid green; height: 40px">
  ...
</div>

[範例3] 在網頁上的表單送出時加入一個判斷,如果 username 這個欄位是空值的話,就顯示 help 這個區塊內的文字。





  1. $("form").submit(function() {   

  2.   if ($("input#username").val() == "")   

  3.     $("span.help").show();   

  4. });  
$("form").submit(function() {
  if ($("input#username").val() == "")
    $("span.help").show();
});

可作用在類似以下的 HTML,一開始 span.help 是隱藏的,如果沒有輸入 username,才會顯示:





  1. <style type="text/css">  

  2.   .help {display: none}   

  3. </style>  

  4. <form>  

  5.   <label for="username">請輸入大名</label>  

  6.   <input type="text" id="username" name="username" />  

  7.   <span class="help">這個欄位必填喔</span>  

  8. </form>  
<style type="text/css">
  .help {display: none}
</style>
<form>
  <label for="username">請輸入大名</label>
  <input type="text" id="username" name="username" />
  <span class="help">這個欄位必填喔</span>
</form>

[範例4] 當 user 點選 id 為 open 的連結時,顯示 id 為 menu 的區塊,並回傳 false 避免瀏覽器真的換頁。





  1. $("a#open").click(function() {   

  2.   $("#menu").show();   

  3.   return false;   

  4. });  
$("a#open").click(function() {
  $("#menu").show();
  return false;
});

可作用在類似以下的 HTML:





  1. <style type="text/css">  

  2.   #menu {display: none}   

  3. </style>  

  4. <a id="open" href="#">控制面板</a>  

  5. <ul id="menu">  

  6.   <li><a href="#1">控制面板首頁</a></li>  

  7.   <li><a href="#2">編輯個人資料</a></li>  

  8.   <li><a href="#3">個人空間管理</a></li>  

  9. </ul>  
<style type="text/css">
  #menu {display: none}
</style>
<a id="open" href="#">控制面板</a>
<ul id="menu">
  <li><a href="#1">控制面板首頁</a></li>
  <li><a href="#2">編輯個人資料</a></li>
  <li><a href="#3">個人空間管理</a></li>
</ul>

[範例5] 將 id 為 menu 的區塊以下拉布幕的動態效果快速顯示:





  1. $("#menu").slideDown("fast");  
$("#menu").slideDown("fast");

可作用在類似以下的 HTML,原本隱藏的選單會以動態下拉的方式顯示出來:





  1. <style type="text/css">  

  2.   #menu {display: none}   

  3. </style>  

  4. <ul id="menu">  

  5.   <li><a href="#1">控制面板首頁</a></li>  

  6.   <li><a href="#2">編輯個人資料</a></li>  

  7.   <li><a href="#3">個人空間管理</a></li>  

  8. </ul>  
<style type="text/css">
  #menu {display: none}
</style>
<ul id="menu">
  <li><a href="#1">控制面板首頁</a></li>
  <li><a href="#2">編輯個人資料</a></li>
  <li><a href="#3">個人空間管理</a></li>
</ul>

[範例6] 將所有的 <div> 漸變為寬 300px、文字與邊界寬 20px





  1. $("div").animate({   

  2.     width: '300px',   

  3.     padding: '20px'  

  4.   }, 'slow');  
$("div").animate({
    width: '300px',
    padding: '20px'
  }, 'slow');

可作用在類似以下的 HTML:





  1. <div style="width: 100px; border: solid 1px red;">  

  2.   Hello world!   

  3. </div>  
<div style="width: 100px; border: solid 1px red;">
  Hello world!
</div>

PS. jQuery 核心程式的 animate 函數能改變的元素屬性並不多,但是可以透過其他 plugin 提供更多的動態效果。
[範例7] 動態效果的 callback 的範例,將所有的 <div> 以 0.5 秒的動態效果隱藏後,再以 0.5 秒的動態效果顯示。hide() 的第二個參數就是一個 callback 函數,其中 $(this) 是原本程式所處理的各個元素。





  1. $("div").hide(500, function(){   

  2.   // $(this) 是每一個各別的 <div>   

  3.   $(this).show(500);   

  4. });  
$("div").hide(500, function(){
  // $(this) 是每一個各別的 <div>
  $(this).show(500);
});

可作用在類似以下的 HTML:





  1. <div style="width: 100px; border: solid 1px red;">  

  2.   Hello world!   

  3. </div>  

  4. <div style="width: 100px; border: solid 1px red;">  

  5.   jsGears.com!   

  6. </div>  
<div style="width: 100px; border: solid 1px red;">
  Hello world!
</div>
<div style="width: 100px; border: solid 1px red;">
  jsGears.com!
</div>

[範例8] 取得 sample.html 並將找出文件內所有 <div> 下一層的 <h1> 填入原本文件 id 為 body 的元素內





  1. $("#body").load("sample.html div > h1");  
$("#body").load("sample.html div > h1");

這是一段原始的 HTML :





  1. <div id="body"></div>  
<div id="body"></div>

sample.html 的片段:





  1. <div>  

  2.   <h1>Hello world!</h1>  

  3.   <h2>This is H2</h2>  

  4.   <h1>jsGears.com!</h1>  

  5. </div>  
<div>
  <h1>Hello world!</h1>
  <h2>This is H2</h2>
  <h1>jsGears.com!</h1>
</div>

執行程式碼之後的結果:





  1. <div id="body">  

  2.   <h1>Hello world!</h1>  

  3.   <h1>jsGears.com!</h1>  

  4. </div>  
<div id="body">
  <h1>Hello world!</h1>
  <h1>jsGears.com!</h1>
</div>

[範例9] 透過 getJSON() 取得 JSON 格式的資料,並透過 callback 函數處理資料





  1. $.getJSON("test.json", function(data){   

  2.   for (var idx in data)   

  3.     $("#menu").append("<li>" + data[idx] + "</li>");   

  4. });  
$.getJSON("test.json", function(data){
  for (var idx in data)
    $("#menu").append("<li>" + data[idx] + "</li>");
});

這是一段原始的 HTML:





  1. <ul id="menu">  

  2.   <li>項目1</li>  

  3. </ul>  
<ul id="menu">
  <li>項目1</li>
</ul>

test.json 的內容:





  1. [   

  2.   "Hello world!",    

  3.   "jsGears.com!"  

  4. ]  
[
  "Hello world!",
  "jsGears.com!"
]

執行程式碼之後的結果:





  1. <ul id="menu">  

  2.   <li>項目1</li>  

  3.   <li>Hello world!</li>  

  4.   <li>jsGears.com!</li>  

  5. </ul>  
<ul id="menu">
  <li>項目1</li>
  <li>Hello world!</li>
  <li>jsGears.com!</li>
</ul>


[連續使用函數]
jQuery 很重要的一個特性是可以連續地使用函數(Chaining),當你選取了一個或一組的元素後,可以連續對這些元素進行多個處理。以下範例會將所有的 <div> 隱藏,修改文字顏色為藍色,再將 <div> 以下拉布幕的效果顯示出來:





  1. $("div").hide();   

  2. $("div").css("color", "blue");   

  3. $("div").slideDown();  
$("div").hide();
$("div").css("color", "blue");
$("div").slideDown();

這樣的三行程式碼可以用以下一行的程式碼取代,結果會是完全相同的:





  1. $("div").hide().css("color", "blue").slideDown();  
$("div").hide().css("color", "blue").slideDown();

是否感到很神奇呢?在 jQuery 的架構設計上,大部分的函數都會在處理完該做的事情後,再將原本傳入的元素給回傳回去,因此函數都可以連續這樣一個接著一個的使用。還記得一開始所說的 jQuery 可以讓你的程式碼更精簡嗎?看了上面的一些範例後,現在應該有點感覺了吧。
講到 jQuery 的函數連續使用,有兩個很重要的函數必須在此介紹一下。第一個是 end(),這個函數執行後,會回傳「前一組找到的元素」。另一個是 find(),這個函數的用法如同使用 $() 找文件內的元素一樣是帶入 CSS 選擇器,執行後回傳找到的元素,不同的是 $() 是找整個文件,而 find() 是根據先前找到的元素再找其底下的元素,像是一個再過濾的功能。





  1. $("ul.open")                // [ ul, ul, ul ]   

  2.   .children("li")           // [ li, li, li ]   

  3.   .addClass("open")         // [ li, li, li]   

  4.   .end()                    // [ ul, ul, ul ]   

  5.   .find("a")                // [ a, a, a ]   

  6.   .click(function(){   

  7.     $(this).next().toggle();   

  8.     return false;   

  9.   })                        // [ a, a, a ]   

  10.   .end();                   // [ ul, ul, ul ]  
$("ul.open")                // [ ul, ul, ul ]
  .children("li")           // [ li, li, li ]
  .addClass("open")         // [ li, li, li]
  .end()                    // [ ul, ul, ul ]
  .find("a")                // [ a, a, a ]
  .click(function(){
    $(this).next().toggle();
    return false;
  })                        // [ a, a, a ]
  .end();                   // [ ul, ul, ul ]

上面這一段程式碼連續使用多個函數,且透過 end() 和 find() 來分別對不同的元素進行操作,詳細的步驟解釋如下:



  • 找出文件內所有 class 為 open 的 <ul>
  • 過濾出下一層的所有 <li>
  • 對這些 <li> 新增一個 class
  • 回前一次搜尋的結果,也就是所有的 <ul>
  • 再找出底下所有的 <a>
  • 對 <a> 新增事件處理
  • 回前一次搜尋的結果

[document ready 事件]
有些時候,我們必須在網頁下載完成之後立即執行一些程式,可能是想要把游標放在預設的輸入框,或是馬上顯示一些歡迎訊息等等。過去你可能用過 window.onload 來處理,或是直接在 <body> 標籤上加入 onload 的事件處理函數,但是 jQuery 提供了另一種選擇,請參考下面的範例:





  1. $(document).ready(function() {   

  2.   alert('您好,歡迎來到 jsGears.com ~');   

  3. });  
$(document).ready(function() {
  alert('您好,歡迎來到 jsGears.com ~');
});

先透過 $() 取得 document 物件,接著使用 ready() 帶入一個函數,就可以在網頁下載完成後立即執行。jQuery 的 document ready 事件是模擬 W3C DOM 標準的 DOMContentLoaded 事件,DOMContentLoaded 和 window.onlad 的差異在於前者是在 DOM 文件下載完成後觸發,而後者是文件和所有文件內的元件,包含圖檔等等全部下載完成後才會觸發,因此通常 window.onload 的發生時間要比 DOMContentLoaded 晚一點(如果你的網頁內確實有用到一些圖檔),有時候你所需要執行的程式並不需要等所有圖檔都下載完成,因此,放到 DOMContentLoaded 事件內處理是比較合適的。但是,IE 目前的版本 6 和 7 並不支援 DOMContentLoaded 事件,所以 jQuery 用了一些技巧來達到模擬 DOMContentLoaded 的事件,而成果就是上面看到的這個例子的用法。
DOMContentLoaded 和 window.onlad 的另一個差異在於 window.onload 並沒有辦法多次指定不同的函數來執行,最後指定的那個函數會複寫掉先前的,例如以下範例:





  1. window.onload = function() {   

  2.   alert('Hello world!');   

  3. };   

  4. window.onload = function() {   

  5.   alert('您好,歡迎來到 jsGears.com ~');   

  6. };  
window.onload = function() {
  alert('Hello world!');
};
window.onload = function() {
  alert('您好,歡迎來到 jsGears.com ~');
};

上面的例子在同一個頁面上用了兩次 window.onload,結果將會是後面的函數會被執行到,前面的函數將消失無影蹤,當然,只要你稍具 JavaScript 處理 Event 的技巧,真要連續指定兩個函數來執行也不是太困難,不過用 jQuery 會更容易,看看以下相同的範例:





  1. $(document).ready(function() {   

  2.   alert('Hello world!');   

  3. });   

  4. $(document).ready(function() {   

  5.   alert('您好,歡迎來到 jsGears.com ~');   

  6. });  
$(document).ready(function() {
  alert('Hello world!');
});
$(document).ready(function() {
  alert('您好,歡迎來到 jsGears.com ~');
});

相同的例子使用 jQuery 的 document ready 函數,則帶入的兩個函數都會被執行到,很簡單吧,完全不需用到什麼技巧。再提供一個精簡的語法, document ready 函數也可以這樣用:





  1. $(function() {   

  2.   alert('您好,歡迎來到 jsGears.com ~');   

  3. });  
$(function() {
  alert('您好,歡迎來到 jsGears.com ~');
});

直接把函數放到 $() 裡面就可以了,是不是超精簡啊。
[$() 別名]
前面用到了很多 $(),包含剛介紹的 document ready 及先前的選取功能,都是透過這個簡短的錢記號來達成,其實這個錢記號是 「jQuery」這個物件的縮寫,也就是剛剛所有你看到用 $() 的地方,都可以改寫成用 jQuery(),例如:





  1. jQuery(document).ready(function() {   

  2.   jQuery("div").addClass("special");   

  3. });  
jQuery(document).ready(function() {
  jQuery("div").addClass("special");
});

沒事應該不會有人想用比較長的名稱來寫程式,簡短的 $ 不是挺好的。但是,某些情況可能你無法使用 $(),例如你進行中的專案已經使用了其他的 JavaScript Library,而 $ 這個名稱已經被使用了,例如另一套知名的 prototype,也使用了 $() 這樣的函數名稱,這時如果你需要再搭配使用 jQuery 的話,jQuery 本身有提供一個方式來避免 $() 的衝突:





  1. jQuery.noConflict();   

  2. jQuery(document).ready(function() {   

  3.   jQuery("div").addClass("special");   

  4. });  
jQuery.noConflict();
jQuery(document).ready(function() {
  jQuery("div").addClass("special");
});

使用 jQuery 前,先下達 jQuery.noConflict() 這樣就可以避免掉 $() 衝突的問題,接著再用 jQuery 物件來進行操作即可。此外,你也可以自行幫 jQuery 這個物件設定另一個別名,例如:





  1. var $j = jQuery.noConflict();   

  2. $j(document).ready(function() {   

  3.   $j("div").addClass("special");   

  4. });  
var $j = jQuery.noConflict();
$j(document).ready(function() {
  $j("div").addClass("special");
});

使用一個變數來接 jQuery.noConflict() 的回傳值,這個變數就可以做為 jQuery 的一個別名,透過這個別名不但避免了和其他 Library 錢記號的衝突,也可以將函數名稱縮短,算是 jQuery 一個蠻貼心的設計。

(繼續閱讀...)
文章標籤

felix 發表在 痞客邦 留言(0) 人氣(537)

  • 個人分類:技術文件
▲top
  • 5月 19 週二 200918:10
  • 如何透過 SQLCMD 程式和 T-SQL 指令備份 SQL 資料庫

文章出處:The Will Will Web
 

以下共有兩支程式  BackupAllDB.bat 與 BackupScript.bat,最後還有批次檔的參考網址與部分說明。



BackupAllDB.bat 用來定義你要備份哪幾個資料庫,需呼叫 BackupScript.bat 執行備份動作!


BackupScript.bat 用來執行備份的動作


檔案如下: 



BackupAllDB.bat
■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■


@echo off


set DBList=Northwind DBname2  DBName3
for %%a IN (%DBList%) DO (
    CALL BackupScript.bat %%a
)


echo ----------------
echo 資料庫備份檔完成
echo ----------------


pause



BackupScript.bat
■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■


@echo off
::
:: 預設的 %BackupFile% 為「一天備份一次」的檔名
::


::■■■■■■■■■■■■■■■■■
::             基本需求
::■■■■■■■■■■■■■■■■■
::
:: 1. 要安裝 7-zip 壓縮軟體(可不裝)
:: 2. 預設資料庫備份目錄夾在 C:\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\Backup (此為SQLExpress預設目錄,可修改)
:: 3. 資料庫備份目錄夾必須可讓 SQLExpress / SQL 2005 的服務執行帳戶有寫入權限!
:: 4. 預設是使用「信任式連線」
::
::■■■■■■■■■■■■■■■■■
::             參數設定
::■■■■■■■■■■■■■■■■■


:: 備份資料夾目錄 ( 最後「不要」加上斜線 )
set BackupDir=C:\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\Backup
:: 封存資料夾
set ArchiveDir=\\SomeOtherNetworkShare\SQLDBBackup
:: 資料庫名稱 ( 由指令參數傳入 )
set DBName=%1
:: 資料庫位址
set DBHost=(local)\SQLExpress
:: 壓縮檔(7-zip)位址
set ZipProgram="c:\Program Files\7-Zip\7z.exe"


::■■■■■■■■■■■■■■■■■
::          取得日期時間
::■■■■■■■■■■■■■■■■■


:: Setting environment variables with todoy's date values
for /f "tokens=1-4 delims=-/ " %%i IN ('date /t') DO (
set year=%%i
set month=%%j
set day=%%k
)


for /f "tokens=1-3 delims=:" %%i IN ('time /t') DO (
set hour=%%i
set minute=%%j
)


for /f "tokens=1 delims= " %%i IN ("%hour%") DO (
set hour=%%i
)


::■■■■■■■■■■■■■■■■■
::           設定備份檔名
::■■■■■■■■■■■■■■■■■


:: 備份的檔名
set BackupFile=%BackupDir%\%DBName%_%year%-%month%-%day%.bak


::■■■■■■■■■■■■■■■■■
::             執行備份
::■■■■■■■■■■■■■■■■■


IF "%DBName%" NEQ "" goto ExecuteBackup
    echo ■■■■■■■■■■■■■■■■■■
    echo ★★★★★未指定資料庫名稱★★★★★
    echo ■■■■■■■■■■■■■■■■■■
    pause
    exit 0


:ExecuteBackup


echo === 備份 %DBName% 資料庫
echo ---------------------------------------------------------------------------


echo 執行備份到 %BackupDir%
::echo sqlcmd -S %DBHost% -E -Q "BACKUP DATABASE [%DBName%]  TO DISK='%BackupFile%'"
sqlcmd -S %DBHost% -E -Q "BACKUP DATABASE [%DBName%]  TO DISK='%BackupFile%'"


IF EXIST %ZipProgram% goto CheckBackupFile
    echo ■■■■■■■■■■■■■■■■■
    echo ★★★★★備份資料庫失敗★★★★★
    echo ■■■■■■■■■■■■■■■■■
    pause
    exit 0
:CheckBackupFile


::■■■■■■■■■■■■■■■■■
::   壓縮資料庫備份檔 ( 7z 格式 )
::■■■■■■■■■■■■■■■■■


IF NOT EXIST %ZipProgram% goto ZipBackupFile
    :: 7z a -mx=9 "%year%-%month%-%day%-%hour%-%minute%.7z" %workspace%
    echo ----------------
    echo 壓縮資料庫備份檔
    %ZipProgram% a -mx=9 "%BackupFile%.7z" "%BackupFile%" > nul
:ZipBackupFile


::■■■■■■■■■■■■■■■■■
::         刪除資料庫備份檔
::■■■■■■■■■■■■■■■■■


set ZipBackupFile=%BackupFile%.7z
::echo %ZipBackupFile%


IF NOT EXIST "%ZipBackupFile%" goto DeleteBackupFile
    echo ----------------
    echo 刪除資料庫備份檔(僅留下壓縮檔即可)
    del "%BackupFile%"
:DeleteBackupFile


::■■■■■■■■■■■■■■■■■
::   搬移資料庫備份檔到封存資料夾
::■■■■■■■■■■■■■■■■■


if "%ArchiveDir%" EQU "" goto MoveToArchiveEnd


    IF NOT EXIST "%BackupFile%.7z" goto NoZippedBackupFile
        echo ----------------
        echo 搬移資料庫備份檔到封存資料夾 "%ArchiveDir%"
        move "%BackupFile%.7z" "%ArchiveDir%"
    :NoZippedBackupFile
   
    IF NOT EXIST "%BackupFile%" goto NoBackupFile
        echo ----------------
        echo 搬移資料庫備份檔到封存資料夾 "%ArchiveDir%"
        move "%BackupFile%" "%ArchiveDir%"
    :NoBackupFile


:MoveToArchiveEnd


echo ---------------------------------------------------------------------------


 


參考資料



Batch File Command Reference for Windows 2000
http://labmice.techtarget.com/articles/batchcmds.htm


Batch FOR loops
http://www.robvanderwoude.com/index.html


% (variable)


%0          代表正在執行的這支 Batch 檔名
%1 to %9    代表傳入的指令列參數

(繼續閱讀...)
文章標籤

felix 發表在 痞客邦 留言(0) 人氣(3,558)

  • 個人分類:技術文件
▲top
  • 5月 19 週二 200903:41
  • 利用批次檔備份 DNS 資料(標準主要區)

文章出處:Weithenn Study Daily
 
【前言】
若您所建立的 DNS Service 未跟 Active Directory 整合,則您建立的 DNS 為標準主要區,若是跟 Active Directory 整合則為 Active Directory 整合主要區,本文為說明備份 DNS 標準主要區。
  • DNS 未跟 AD 整合:標準主要區
  • DNS 跟 AD 整合:Active Directory 整合主要區

  • 如何備份 DNS 標準主要區?
  • 備份二處機碼 (Registry)

    • HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\DNS Server
    • HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\DNS

  • 備份 .dns 檔案

    • C:\Windows\System32\DNS 下

    如何還原 DNS 標準主要區?
  • 停止 DNS Service
  • 匯入備份的機碼 (Registry)
  • 貼上所複製的 .dns 檔案至 C:\Windows\System32\DNS 下
  • 啟動 DNS Service

  • 【作業環境】
    Windows Server 2003
    【自動備份 DNS 實作】
    您可將下面內容貼至筆記本後存檔為 .bat 並配合排定的工作來達成自動備份 DNS 標準主要區資料的目的。
    實作、利用 xcopy、regedit 指令來自動備份 DNS 標準主要區
  • 匯出 DNS 機碼:HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\DNS Server
  • 匯出 DNS 機碼:HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\DNS
  • DNS 標準主要區備份來源: C:\WINDOWS\system32\dns
  • DNS 標準主要區備份至: D:\dns\當天日期\
  • 備份時 Log 寫入至: D:\log\reg\當天日期.log
  • 備份使用指令: xcopy /S (/S 複製每個目錄及其包含的子目錄,不複製空目錄)



  • rem ----- 將匯出機碼時間寫入 log 紀錄中 -----
    echo 開始匯出機碼及複製 .dns >> D:\log\reg\%date:~0,4%%date:~5,2%%date:~8,2%.log
    TIME /T    >> D:\log\reg\%date:~0,4%%date:~5,2%%date:~8,2%.log
    rem ----- 開始匯出機碼及複製 .dns -----
    rem /S 複製每個目錄及其包含的子目錄,不複製空目錄
    C:\WINDOWS\regedit.exe /e D:\dns\%date:~0,4%%date:~5,2%%date:~8,2%\DNS_Server.reg "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\DNS Server"
    C:\WINDOWS\regedit.exe /e D:\dns\%date:~0,4%%date:~5,2%%date:~8,2%\DNS.reg "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\DNS"
    xcopy C:\WINDOWS\system32\dns D:\dns\%date:~0,4%%date:~5,2%%date:~8,2%\ /S >> D:\log\reg\%date:~0,4%%date:~5,2%%date:~8,2%.log
    rem ----- 將結束匯出機碼及複製 .dns時間寫入 log 紀錄中 -----
    echo 結束匯出機碼及複製 .dns >> D:\log\reg\%date:~0,4%%date:~5,2%%date:~8,2%.log
    TIME /T    >> D:\log\reg\%date:~0,4%%date:~5,2%%date:~8,2%.log



    (繼續閱讀...)
    文章標籤

    felix 發表在 痞客邦 留言(0) 人氣(994)

    • 個人分類:技術文件
    ▲top
    • 5月 19 週二 200903:33
    • 利用bat 配合7-zip定期備份資料夾

    文章出處:Weithenn Study Daily
     
    排程於每天凌晨一點利用備份批次檔(webbk.bat),定期壓縮備份網頁目錄 (web01 ~ web05) 至 D:\Web_Backup 資料夾內,以下為 webbk.bat 內容說明:


     mkdir "%date:~0,4%%date:~5,2%%date:~8,2%"                                    //建立以日期命名的資料夾
    "C:\Program Files\7-Zip\7z.exe" a -t7z web01.7z "C:\Webroot\web01"            //壓縮指定資料夾
    "C:\Program Files\7-Zip\7z.exe" a -t7z web02.7z "C:\Webroot\web02"
    "C:\Program Files\7-Zip\7z.exe" a -t7z web03.7z "C:\Webroot\web03"
    "C:\Program Files\7-Zip\7z.exe" a -t7z web04.7z "C:\Webroot\web04"
    "C:\Program Files\7-Zip\7z.exe" a -t7z web05.7z "C:\Webroot\web05"
    move "D:\Web_Backup\*.7z" "D:\Web_Backup\%date:~0,4%%date:~5,2%%date:~8,2%"  //搬移所有的壓縮檔至指定的資料夾



    (繼續閱讀...)
    文章標籤

    felix 發表在 痞客邦 留言(0) 人氣(4,699)

    • 個人分類:技術文件
    ▲top
    • 5月 19 週二 200903:03
    • 7-Zip的命令列指令


    文章出處:簡睿隨筆 《科技篇》


    7z.exe的命令語法如下:


    7z 命令 [選項] 壓縮檔名 要處理的檔名列

    命令:有a,d,e,l,t,u, x等幾個命令。




































    aAdd將檔名列中的檔案加入壓縮檔-i (Include)
    -m (Method)
    -p (Set Password)
    -r (Recurse)
    -sfx (create SFX)
    -si (use StdIn)
    -so (use StdOut)
    -t (Type of archive)
    -u (Update)
    -v (Volumes)
    -w (Working Dir)
    -x (Exclude)
    dDelete將指定檔名由壓縮檔內移除

    -i (Include)
    -m (Method)
    -p (Set Password)
    -r (Recurse)
    -u (Update)
    -w (Working Dir)
    -x (Exclude)

    eExtract將指定檔名由壓縮檔中擷取出來

    -ai (Include archives)
    -an (Disable parsing of archive_name)
    -ao (Overwrite mode)
    -ai (Exclude archives)
    -i (Include)
    -o (Set Output Directory)
    -p (Set Password)
    -r (Recurse)
    -so (use StdOut)
    -x (Exclude)
    -y (Assume Yes on all queries)

    lList顯示壓縮檔案內的檔案資訊

    -ai (Include archives)
    -an (Disable parsing of archive_name)
    -ai (Exclude archives)
    -i (Include)
    -p (Set Password)
    -r (Recurse)
    -x (Exclude)

    tTest, 測試壓縮檔的完整性

    -ai (Include archives)
    -an (Disable parsing of archive_name)
    -ai (Exclude archives)
    -i (Include)
    -p (Set Password)
    -r (Recurse)
    -x (Exclude)

    uUpdate, 用較新的同名檔案更新壓縮檔內較舊的檔案

    -i (Include)
    -m (Method)
    -p (Set Password)
    -r (Recurse)
    -sfx (create SFX)
    -si (use StdIn)
    -so (use StdOut)
    -t (Type of archive)
    -u (Update)
    -w (Working Dir)
    -x (Exclude)

    xeXtract with full paths以完整路徑的格式解出檔案

    -ai (Include archives)
    -an (Disable parsing of archive_name)
    -ao (Overwrite mode)
    -ai (Exclude archives)
    -i (Include)
    -o (Set Output Directory)
    -p (Set Password)
    -r (Recurse)
    -so (use StdOut)
    -x (Exclude)
    -y (Assume Yes on all queries)


    範例:

    • 壓縮檔案:7z a -tzip archive.zip test1.txt test2.txt test3.txt
    • 刪除檔案:7z d archive.zip *.bak
    • 解壓縮到目前資料夾:7z e archive.zip
    • 解壓縮所有的.cpp檔案案件到指定資料夾:7z e archive.zip -oc:\soft *.cpp
    • 顯示壓縮檔內的資訊:7z l archive.zip
    • 依壓縮檔內的檔案路徑解壓縮到指定資料夾:7z x archive.zip -oc:\soft *.cpp
    更詳細的內容直接看到7-zip.chm即可。
    做了一點小測試:將資料夾內30個檔案大小共260,823,040 Bytes的檔案(SQL Server資料庫備份出的資料檔案),分別使用7-Zip、PkzipC、WinRAR 3.0
    壓縮,大小分別同下:

    • 7-Zip: 43,791,855 Bytes
    • WinRAR: 50,415,283 Bytes
    • PKZipC: 63,701,625 Bytes
    獲勝的是7-Zip。
    (繼續閱讀...)
    文章標籤

    felix 發表在 痞客邦 留言(0) 人氣(31,186)

    • 個人分類:技術文件
    ▲top
    • 2月 20 週五 200902:08
    • 談論主題 Div表格原理與實作



     


    引述


    Div表格原理與實作




    主旨: 進階認識DIV標籤語法的相關應用  (??%) (現在只有原理)

    首先的認知:


    • 對HTML語法完全不懂的,要先行自修(本教學附一點點)。
    • 本文所謂的表格不是一般教學網站所使用Table標籤,而是DIV標籤。
    • 本教可能學需使用Office FrontPage才能順利完成。

    • 教學分兩部份:「原理」與「實作」。


    • 原理與實作對照學習會更了解。


    一些知識:


    • HTML裡的<P>與<DIV>標籤原本都是拿來做段落用的,只要撰寫在此標籤內的文章,會自動變成一個段落。<P>標籤會設定邊界(margin),在段落的上下會置入一列空白,<DIV>標籤則不會設置空白,為何用<DIV>來替代<TABLE>的標籤的原因就在於此 ,加上FrontPage對<DIV>標籤有較便利的調整方式與較高的調整自由度(像框線、圖層工具列),配合豐富的Style Sheet加上<DIV>幾乎承接所有的CSS屬性,足以模擬<TABLE>標籤。
       

    • DHTML(動態HTML)中,被<DIV>或<SPAN>標籤包起來的文字、圖片...任何東西,瀏覽器都會將之視作一個物件。就如同我們在打包物品一樣,您可以一個包裹只包一件衣服,也可以一個包裹包衣服、鞋子、帽子等。<DIV>和<SPAN>標籤就是這種功能!您可以用<SPAN>標籤包住一段文字,該段文字就成了一個物件(您要想成包裹也無可厚非...),您也可以用<SPAN>標籤包住一段文字,一張圖、一個表格,那麼這三個東西也會被視作一個物件。
      註:<SPAN>不斷行
       

    • <DIV>的定義:
       
         <DIV> ("division","部分"的簡稱)是一個"塊級元素"。<DIV>可以包含段落、標題、表格甚至其它部分。這使<DIV>便於建立不同集成的類,如章節、摘要或備註。 它絕對是CSS的好幫手。
        
       

    • 那麼<DIV>標籤到底要怎麼使用,才能模擬成<TABLE>標籤呢?首先來看看<DIV>到底有哪些Style Sheet....

    HTML該如何敘述?

    無屬性:<標籤名稱>內容</標籤名稱>
    單屬性:<標籤名稱
    屬性名稱="值">內容</標籤名稱>
    多屬性:<標籤名稱
    屬性名稱1="值"   屬性名稱2="值">內容</標籤名稱>
    依此類堆

    *重要的是:內容要被標籤名稱所包夾
    *標籤及屬性名稱和值 英文大小寫無差別
     

    例如:

    <IMG SRC="sample.gif"></IMG> -------->顯示圖片</IMG>一般可省略
    <DIV ALIGN="center">段落內容</DIV> ------->段落內容文字圖片等置中 </DIV>不能省略
    <DIV STYLE="各種樣式">段落內容</DIV>  ------->段落內容使用Style定義樣式。</DIV>不能省略

    Style Sheet 是什麼?

    Style Sheet 是一種屬性名稱,中文稱呼「樣式表」。HTML是用來記述文件的邏輯結構的,不過在以前Netscape和Microsoft這2家公司的市場爭奪戰之中(現在多了Mozilla Firefox),HTML也逐漸地被使用來記述外觀。後來為了讓HTML還原他最初的作用,有人便提出了「讓邏輯結構與外觀(修飾)分開來使用」。為此,『Style Sheet 』因而誕生。
     

    Cascading Style Sheets 是什麼?

    Cascading Style Sheets(串接樣式表),簡稱CSS。定義為:它是由許多樣式名稱和樣式指定值所組成的字串,我們可以利用設定好的樣式表,指定給某一種HTML標籤,或某一群組HTML標籤來使用。而被套用的HTML標籤,將會依據所套用的CSS來顯式它的外觀。所以特性類似的標籤就會給予相同的樣式名稱,讓Style Sheet能讓設計著有快速且簡單的方法。
     

    Style Sheet 的使用方式?

    Style Sheet(樣式表)的使用方式按照用途,狀況的不同,可分成幾種方式。


    1. 讀取外部的CSS檔案 由於檔案位於外部所以可以讓多人共享。如此一來網頁的版面配置作業,也可以更簡單、更美觀了。
    2. 在MSN Spaces等不支援CSS設定的網誌,那就直接在標籤內寫上Style Sheet。
    3. 其他方式請參考[here]。
       

    Style Sheet 該如何敘述?(以DIV為例)
     
    單樣式:<DIV Style="樣式名稱:值 ;">內容</DIV>
    雙樣式:<DIV
    Style="樣式名稱1:值 ; 樣式名稱2:值 ;">內容</DIV>
    多樣式:<DIV Style="樣式名稱1:值 ; 樣式名稱2:值 ; 樣式名稱3:值 ; 樣式名稱4:值 ; .....">內容</DIV>
     

    一些MSN Spaces 開放的Style Sheets:(先整理CSS 1)

    區塊屬性的Style Sheets:(僅列出DIV可用) 紅色的樣式是本篇的重點





     樣式   



     樣式名稱



     值




     寬度



     width



     點pt、英寸in、公分cm、像素px、百分比%




     高度



     height



     點pt、英寸in、公分cm、像素px、百分比%




      左邊位置   



     LEFT



     點pt、英寸in、公分cm、像素px、百分比%




       顯示方式    



    display



     block (換行)、inline (不換行)、
    list-item (目錄項標記)、none (沒有顯示)




      浮動元件位置



     float



     left、right





    超出部份
     顯示方式  




    overflow



       這個性質是設定當區塊內包含的元件大於區塊之寬或高時,顯示的方法。可用值有auto(自動設定,當需要時出現捲軸)、scroll(強迫顯示捲軸,即使內部元件並無超過區塊邊界)、hidden(超出區塊的部份不顯示)、visible(全部顯示,無視區塊大小)。最常用的overflow:auto讓瀏覽器自動判斷 。




     同上(只有水平)



     overflow-x



      同上




     同上(只有垂直)



     overflow-y



      同上




     元件上方位置  



     top



     點pt、英寸in、公分cm、像素px、百分比%




     清除浮動位置



     clear



      left、right、both





      滑鼠游標   




    CURSOR



     AUTO(自動)、CROSSHAIR(十字)、DEFAULT(箭頭)、HAND(手形)、MOVE(移動)、E-RESIZE、NE-RESIZE、NW-RESIZE、N-RESIZE、SE-RESIZE、SW-RESIZE、S-RESIZE、W-RESIZE、TEXT(文字)、WAIT(等待)、HELP(求助) ← 滑鼠移到這會變指標喔




      元件垂直調整   



     Vertical-align



      BASELINE、MIDDLE、SUB、SUPER、TEXT-TOP、TEXT-BOTTOM、TOP、BOTTOM




     放大或縮小



     Zoom



     百分比




      其他   



                            不可用...white-space:?


    段落屬性的Style Sheets:




     樣式   



     樣式名稱



     值




      文字間隔   



     letter-spacing



     一般使用pt(點)或px(像素)或% : 例 9pt、10px




     列高   



    line-height



     點pt、英寸in、公分cm、像素px、百分比%





    文字修飾格式




    text-decoration



    none(無)、underline(加上底線)、
    overline(加上一道上線)、line-through(加上刪除線)




    自動轉換大小寫 



     text-transform



    none、capitalize(首字變大)、uppercase、lowercase




    文字對齊方式 



     text-align



    left、right、center(置中)、justify(分散對齊)




      文字縮排   



     text-indent



     一般使用pt(點)或px(像素)或% : 例 15pt、12px




      單字間隔   



     word-spacing 



     一般使用pt(點)或px(像素)或% : 例 2pt、3px




      文字方向   



     writing-mode 



     tb-rl (上至下、右至左)、lr-tb(上至下、 左至右、標準)




      文字方向  



     unicode-bidi: bidi-override; DIRECTION: 方向



    rtl(右至左)、ltr(左至右)




      其他   



     text-autospace、 text-justify、word-break(換行方式) 可用...


    文字屬性的Style Sheets:




     樣式   



     樣式名稱



     值




      文字顏色  



    color



     一般方式設定




      文字大小   



     font-size



     一般使用pt(點)或px(像素)或% : 例 9pt 、10px




      字型   



    font-family



     Arial、Georgia、新細明體...等各種字型名稱




      文字粗細   



     font-weight



     lighter、normal、bold、bolder  (由細到粗排列)




      斜體   



     font-style



    normal、italic、oblique  (一般使用italic)




      英文樣式   



     font-variant



    normal、small-caps




     其他   



      不可用


    背景屬性的Style Sheets:




     樣式   



     樣式名稱



     值




      背景顏色   



     BACKGROUND-COLOR



     可為顏色名稱 ( 16種 ) 或16進制表示法 - #RRGGBB ( 00暗~FF亮 ) 、#RGB ( 0暗~F亮 ) 表紅綠藍強度、
    TRANSPARENT(透明背景)




     其他   



      不可用


    邊框屬性的Style Sheets:




     樣式   



     樣式名稱



     值




      詳細     



      因可用FrontPage可簡單設定,並不列出,參考[here]


    捲軸屬性的Style Sheets:




     樣式   



     樣式名稱



     值




     



     參考[here]教學 第12步驟


    濾鏡屬性的Style Sheets:




     樣式   



     樣式名稱



     值




        



       參考[here]教學

     

    其他 不可用的屬性: 定位屬性設定 、連結屬性設定



     

    *那麼<DIV>標籤要怎麼使用,才能 實現<TABLE>標籤的功能呢?


    先考慮橫向部份:


    關鍵解說:

    表格最先要表現出來橫向的方塊排列....
    而<DIV>有兩種較好的設定方式,可以模擬成<TABLE>(表格)...
    之後比較兩種方式,差別在設定兩種以上字型(尤其對應行字型不一致)過後,第一種方式易跑位,而在對齊的部份,而表格接密的部份則都沒差, 又因為第二種方式可以用FrontPage直接設計,所以在此建議採用第二種,也可以混合使用。

    第一種方式(使用Display:inline;) :(向左下對齊)

    HTML:

    <DIV style="border:1px solid #000000; WIDTH: 97px; HEIGHT: 64px;Display:inline; background-color:#99FF33">
    A</DIV>
    <DIV style="border:1px solid #000000; WIDTH: 109px;HEIGHT: 73px;Display:inline; background-color:#FF9999">
    B</DIV>

    顯示結果:


    A

    B


    第二種方式(使用float:left;):(向左上對齊)

    HTML:

    <DIV style="float:left;border:1px solid #000000; WIDTH: 99px; HEIGHT: 60px; background-color:#99FF33">
    A</DIV>
    <DIV style="float:left;border:1px solid #000000; WIDTH: 109px;HEIGHT: 77px; background-color:#FF9999">
    B</DIV>

    顯示結果:


    A

    B




     

     

     

     

    * 一個表格的詳細語法對照for MSN Spaces:

    以3乘3表格為例子..(為了簡化語法,因此把上面三張圖合併成一張圖)

    看完橫向部份,再考慮縱向部份,縱向很簡單,因為<div>本來就是縱向無空白縫隙接密的,但是在MSN Spaces上因為本身附的Rich-Text Editor會重新編排部分語法,在<img>後面直接加上<div>時會產生多出的空白行的問題,這時就要使用<br>來產生無空白行斷行,或是把圖放進<div>標籤裡解決。
    當然<div>接<div>則沒有這種問題。

    當你有了周圍8張圖片,上面的部份就如上一段所說,中間然後把圖一張一張放進<div>裡,下面的部份跟上面一樣。

    *所以製作一個DIV表格僅剩的技巧就是把寬高長度都要算的好好....(不會有空隙的關鍵)

    對照圖:(常用3x3)


    HTML語法:

    <img src=頂圖 height="第一行高" width="A+B+C"><br>
    <DIV style="OVERFLOW: hidden; WIDTH: A+B+C px; HEIGHT: 第二行高">
    <DIV style="FLOAT: left; WIDTH: A px; HEIGHT: 400px"><IMG height=第二行高 src="中左圖" width=A border=0></DIV>
    <DIV style="FLOAT: left; OVERFLOW: auto; WIDTH: Bpx;HEIGHT: 第二行高px;>(中間的內容)
    </DIV>

    <DIV style="FLOAT: left; WIDTH: C px; HEIGHT: 第二行高px"><IMG height=第二行高 src="中右圖" width=C border=0></DIV>

    </DIV>
    <IMG height=第三行高 src="底圖" width="A+B+C">
     

    PS.可以下載 方塊說明式Word檔[按我]
    語法解析:

    <img src=頂圖 height="第一行高" width="A+B+C">和<IMG height=第三行高 src="底圖" width="A+B+C">是上下圖(在此是把上圖(下圖)合併來看)
    也可拆成
    <img src=第一張(左)><img src=第二張(中)><img src=第三張(右)>....依此類堆

    背景顏色為暗粉色:包住第2行所有東西
    背景顏色為淺綠色:被第一層DIV包住的語法
    桃色:<DIV>中左邊部份</DIV>
    橘色:<DIV>中右邊的部份</DIV>
    棕色:<DIV>中間內容的部份</DIV>

    <br>必加..:

    其他部分請參考最前面的Style Sheet..

    * 一些<TABLE>表格與<DIV>表格的對照表:






    <TABLE>



    <DIV>



    圖示



    <table>
    <tr><td>A</td></tr>
    </table>

    <div>A</div>


    A


    <table>
    <tr><td>A</td><td>B</td></tr>
    <tr><td>C</td><td>D</td></tr>
    </table>

    <div>
    <div style="FLOAT: left;">A</div>
    <div style="FLOAT: left;">B</div>
    </div>

    <div>
    <div style="FLOAT: left;">C</div>
    <div style="FLOAT: left;">D</div>
    </div>



    A

    B


    C

    D



    <table>
    <tr>
    <td rowspan="2">A</td>
    <td>B</td>
    <td>C</td> 
     
    </tr>

    <tr><td>D</td><td>E</td></tr>
    </table> 



    <div>
    <div style="FLOAT: left;">A</div>
    <div style="FLOAT: left;">
    <div>
    <div style="FLOAT: left;">B</div>
    <div style="FLOAT: left;">C</div>
    </div>

    <div>
    <div style="FLOAT: left;">D</div>
    <div style="FLOAT: left;">E</div>
    </div>

    </div>
    </div>




    A



    B

    C


    D

    E

     

    附:MSN Spaces 網誌模組大小對照表(繁體中文):


    參考資料:博碩文化HTML語法參考辭典、W3C


    To be continue.....

    (繼續閱讀...)
    文章標籤

    felix 發表在 痞客邦 留言(0) 人氣(3,418)

    • 個人分類:技術文件
    ▲top
    • 10月 03 週三 200715:28
    • 談論主題 淺談CSS與Div排版技術,適用IE與FireFox

     引述 淺談CSS與Div排版技術,適用IE與FireFox
    最近有一個案子"國貿局與WTO",因為遭網友投書,所以回鍋找我來修正在FireFox瀏覽上的錯誤,果真在Firefox上看真的破碎虛空,但是各位看官可知這是小布在2003年的作品,那時哪有什麼Firefox,而且又是第一次接觸到所謂的無障礙網頁,也因此採用那時新的技術來編輯網頁,也就是棄表格Table不用,而全改寫成Div排版的全CSS網頁,記得那時痛苦萬分,因為怎麼會有不能用Table的一天? 而且還要全用Div?,那時我對Div的認知僅止於它是個"容器"而已,以及我只會用<div align="center">..的對齊標籤,哈哈~說到此還真不好意思內:P
     
    後來,當然小布因為這個緣故走進了CSS-P(css-position)網頁的世界,有一次去參加Macromedia MX2004大會,有堂課推廣CSS-P(css-position)的概念,正好證明小布誤打誤撞的走對了方向,而後來我幾乎所有的網頁皆用Div排版,也因此發現它的好,以及突破既有的網頁設計,而更全面化更圖形化的展現新的網頁設計,這點不用小布的作品來證明,請見mezzoblue  §  css Zen Garden — Design List,沒看過的朋友,你可以發現所有的作品,都是CSS控制,以及皆用同一個內容,只是不一樣的CSS和Images罷了,這點當然跟現在所有的Blog版型的用法是一致性的,我想小布在此也就不歌功頌德了,應該很多人都已經知道了,因此在此分享一下小布的Solution,當你有遇到三欄式的制式專案時,又要IE跟Firefox可以用,如果你還不是很清楚,就參考看看小布的作法囉:)
     
    一般三欄式的作法如下圖所示,我的作法會有幾個DIV框架:Top、Container、Left、Content、Right、Footer這幾個常態會存在的DIV。
    ====================
    CSS原始碼
    ====================
    body{
    margin:0; padding:0px}  (如果你要置中,在Firefox要正常,就要改成margin: 0px auto;)
     
    #DivTop {
    width:1000px;
    } (或者設定百分比)
     
    #DivContainer {} (可以不用設立width,沒有設定會預設為100%)
     
    #DivLeft {
    width:200px; float:left; }
     
    #DivRight {
    width:200px; float:right;}
     
    #DivContent {
    margin-left:200px;margin-right:200px;}
     
    #DivFooter {
    clear:both;}
    ====================
    HTML原始碼
    ====================
    <div id="DivTop">華山論劍室</div>
    <div id="DivContainer">   
        <div id="DivLeft">左邊是圓</div>
        <div id="DivRight">右邊是方</div>
        <div id="DivContent">中間方圓並濟</div>
    </div>
    <div id="DivFooter">下踩八方</div>
    ====================
    以上的HTML的排列是關鍵,中間的Container內包了左、中、右三個DIV內容,而左、中、右的原始碼在本體HTML中的排列順序依序是 左、右、接下來才是Content
    這是因為我們在左Div與右Div設立了float:left(right)的浮動,因此會IE、Firefox瀏灠器會先決定左右的位置後,最後的中間Content再排進來,因為我們設立了margin-left:200px;margin-right:200px;,因此空出了左右的區塊寬度。
     
    最後在DivFooter裡一定要設定clear:both;的屬性,是為了要清掉float的屬性,好讓footer可以緊接著在最下方正確呈現,若是你沒有設立這個屬性,嘿嘿...Footer就會給你浮上去,很不聽話:P
     
    另外,Firefox對CSS整個場景所設定的height會影響底端的Footer,以及對於padding與margin的判斷,IE與Firefox很不一樣,因此設定上要小心,這點當你反覆設計較複雜的版型時就會碰到,不過知道這點比較好辦了,不外乎是加加減減的算數問題。
     
    還有Firefox不吃text-align: center;這個CSS設定,因此傳統的<div align="center">還蠻好用的啦:P,當然,可以解決的方法有很多,就看大家的創意了。
     
    好的作品,如果都能善用CSS-P(css-position)來做,不但可以很容易維護,對程式人員的coding速度也會加快,因為網頁的原始碼實在太乾淨了,不過,對於設計人員來說,小布建議你一定要會,要吃這行飯,如果你不會,那你就落伍了,現在都已經進到Web2.0時代,以後不是AJAX就是RIA的世界,那麼你還緊守著table與傳統的作法? 那麼就太沒有彈性了! 因為小布喜歡偷吃步,所以CSS-P Solution非常方便,因為制訂好自己的一套CSS與頁面規則,哈哈~ 一套抵萬套,做起網站來就快多了,而時間就多留給Flash RIA 這種下世代的介面技術研究,HTML也可以這麼簡單的:)
     
    Trust Me! 就從現在開始寫你的第一套CSS-P吧~
    大家一起來研究與討論:)
     
    (繼續閱讀...)
    文章標籤

    felix 發表在 痞客邦 留言(0) 人氣(463)

    • 個人分類:技術文件
    ▲top
    • 10月 03 週三 200713:53
    • 談論主題 網頁設計特效碼蒐集

     引述 網頁設計特效碼蒐集
     
    偶然間逛到了wowboxBlog ,站長整理了相當多網頁設計的相關知識,真棒!!佩服阿!!
    對於網頁設計領域能建立專業知識網站,對於我們在設計時,的確有很大的參考價值
    尤其是遇到一時不能解決的問題,卻只要幾行程式碼即可解決的問題,更覺得有wowboxBlog 裡的知識真棒!!
     
    ==============================================================
    控制橫向和縱向滾動條的顯隱?
    <body style="overflow-y:hidden"> 去掉x軸
    <body style="overflow-x:hidden"> 去掉y軸
    <body scroll="no">不顯
    --------------------------------------------------------------------------------
    表格變色
    <TD onmouseover="this.style.backgroundColor='#FFFFFF'"
    onmouseout="this.style.backgroundColor=''"
    style="CURSOR: hand">
    --------------------------------------------------------------------------------
    禁止複製,鼠標拖動選取
    <body ondragstart=window.event.returnValue=false oncontextmenu=window.event.returnValue=false onselectstart=event.returnValue=false>
    --------------------------------------------------------------------------------
    普通iframe頁面
    <iframe name="name" src="main.htm" width="450" height="287" scrolling="Auto" frameborder="0"></iframe>
    --------------------------------------------------------------------------------
    iframe自適應高度
    <iframe name="pindex" src="
    http://blogbeta.blueidea.com/index.asp" frameborder=false scrolling="auto" width="100%" height="100%" frameborder=no onload="document.all['pindex'].style.height=pindex.document.body.scrollHeight" ></iframe>
    --------------------------------------------------------------------------------
    IE地址欄前換成自己的圖標&可以在收藏夾中顯示出你的圖標
    <link rel="Shortcut Icon" href="favicon.ico">
    <link rel="Bookmark" href="favicon.ico">
    --------------------------------------------------------------------------------
    字號縮放
    越來越多的人長時間的泡網,眼鏡的普及率也越來越高,讓文字大點,讓更多的用戶看的更清楚。
    <script type="text/javascript">
    function doZoom(size)
    {document.getElementById('zoom').style.fontSize=size+'px';}
    </script>
    <span id="zoom">需要指定大小的文字</span>
    <a href="javascript:doZoom(16)">大</a> <a href="javascript:doZoom(14)">中</a> <a href="javascript:doZoom(12)">小</a>
    --------------------------------------------------------------------------------
    select擋住div的解決方法
    在div裡加入下面的代碼,根據需要調整就可以了。
    <iframe src="
    http://blogbeta.blueidea.com/javascript false" scrolling="no" frameborder="0" style="z-index:-1;position:absolute; top:5px; left:2px;width:168;height:100px;">
    </iframe>
    --------------------------------------------------------------------------------
    iframe(嵌入式幀)自適應高度
    填寫的嵌入地址一定要和本頁面在同一個站點上,否則會提示「拒絕訪問!」。對跨域引用有權限問題,請查閱其他資料。
    <iframe name="guestbook" src="
    http://blogbeta.blueidea.com/gbook/index.asp" scrolling=no width="100%" height="100%" frameborder=no onload="document.all['guestbook'].style.height=guestbook.document.body.scrollHeight"></iframe>
    --------------------------------------------------------------------------------
    跳轉菜單新窗口
    <select name="select" onchange="window.open(this.options[this.selectedIndex].value)">
    <option value="
    http://www.microsoft.com/ie"> Internet Explorer</option>
    <option value="
    http://www.microsoft.com"> Microsoft Home</option>
    <option value="
    http://msdn.microsoft.com"> Developer Network</option>
    </select>
    --------------------------------------------------------------------------------
    flash透明選項
    <param name="wmode" value="transparent">
    --------------------------------------------------------------------------------
    添加到收藏夾和設為首頁
    <a href=# onclick="this.style.behavior='url(#default#homepage)';this.setHomePage('
    http://www.makewing.com/lanren/');">設為首頁</a>
    <a href="javascript:window.external.AddFavorite('
    http://www.makewing.com/lanren/','懶人圖庫')">收藏本站</a>
    --------------------------------------------------------------------------------
    記錄並顯示網頁的最後修改時間
    <script language=JavaScript>
    document.write("最後更新時間: " + document.lastModified + "")
    </script>
    --------------------------------------------------------------------------------
    節日倒計時
    <Script Language="JavaScript">
       var timedate= new Date("October 1,2002");
       var times= "國慶節";
       var now = new Date();
       var date = timedate.getTime() - now.getTime();
       var time = Math.floor(date / (1000 * 60 * 60 * 24));
       if (time >= 0)
       document.write( "現在離"+times+"還有: "+time +"天")
    </Script>
    --------------------------------------------------------------------------------
    加在HEAD裡
    禁止緩存
    <meta http-equiv="Expires" CONTENT="0">
    <meta http-equiv="Cache-Control" CONTENT="no-cache">
    <meta http-equiv="Pragma" CONTENT="no-cache">
    --------------------------------------------------------------------------------
    讓IFRAME框架內的文檔的背景透明
    <iframe src="about:<body style='background:transparent'>" allowtransparency></iframe>
    --------------------------------------------------------------------------------
    打開窗口即最大化
    <script language="JavaScript">
    <!-- Begin
    self.moveTo(0,0)
    self.resizeTo(screen.availWidth,screen.availHeight)
    // End -->
    </script>
    --------------------------------------------------------------------------------
    加入背景音樂
    <bgsound src="mid/windblue[1].mid" loop="-1"> 只適用於IE
    <embed src="music.mid" autostart="true" loop="true" hidden="true"> 對Netscape ,IE 都適用
    --------------------------------------------------------------------------------
    滾動
    <marquee direction=up height=146 onmouseout=start() onmouseover=stop() scrollAmount=2>滾動信息
    </marquee>
    --------------------------------------------------------------------------------
    防止點擊空鏈接時,頁面往往重置到頁首端
    代碼「javascript:void(null)」代替原來的「#」標記
    --------------------------------------------------------------------------------
    文字或圖片彈出指定大小的窗口
    在body中加入
    <script language="JavaScript" type="text/JavaScript">
    function MM_openBrWindow(theURL,winName,features) {window.open(theURL,winName,features);}
    </script>
    彈出代碼
    <a href="#" target="_self" onClick="MM_openBrWindow('windows01.htm','','width=550,height=380')" width="550" height="380" border="0">圖片或文字</a>
    --------------------------------------------------------------------------------
    flash按鈕加鏈接
    on (press) {
    getURL("
    http://www.makewing.com","_blank");
    }
    --------------------------------------------------------------------------------
    跳轉頁面代碼
    <meta http-equiv="refresh" content="5;url=http://www.makewing.com">
    --------------------------------------------------------------------------------
    細線分隔線
    <hr noshade size=0 color=#C0C0C0>
    --------------------------------------------------------------------------------
    網頁中的自動換行
    <td style="word-break:break-all">就搞定了。
    完整的是
    style="table-layout: fixed;WORD-BREAK: break-all; WORD-WRAP: break-word"
    --------------------------------------------------------------------------------
    消除ie6自動出現的圖像工具欄,設置 GALLERYIMG屬性為false或no .
    <IMG SRC="mypicture.jpg" HEIGHT="100px" WIDTH="100px" GALLERYIMG="no">
    --------------------------------------------------------------------------------
    禁止頁面正文內容被選取
    <body oncontextmenu="return false" ondragstart="return false" onselectstart ="return false" onselect="document.selection.empty()" oncopy="document.selection.empty()" onbeforecopy="return
    false"onmouseup="document.selection.empty()">
    --------------------------------------------------------------------------------
    不能點右鍵,不用CTRL+A,不能複製作!
    <body oncontextmenu="window.event.returnValue=false"
    onkeypress="window.event.returnValue=false"
    onkeydown="window.event.returnValue=false"
    onkeyup="window.event.returnValue=false"
    ondragstart="window.event.returnValue=false"
    onselectstart="event.returnValue=false">
    </body>
    --------------------------------------------------------------------------------
    IE瀏覽器支持一個 Body 屬性 bgproperties,它可以讓背景不滾動:
    <Body Background="圖片文件" bgproperties="fixed">
    --------------------------------------------------------------------------------
    隨機變換背景圖像(一個可以刷新心情的特效)
    <Script Language="JavaScript">
       image = new Array(4); //定義image為圖片數量的數組
       image [0] = 'tu0.gif' //背景圖像的路徑
       image [1] = 'tu1.gif'
       image [2] = 'tu2.gif'
       image [3] = 'tu3.gif'
       image [4] = 'tu4.gif'
       number = Math.floor(Math.random() * image.length);
       document.write("<BODY background="
    http://blogbeta.blueidea.com/+image[number]+">");
    </Script>
    --------------------------------------------------------------------------------
    flash載入影片
    on (release)
    {
    loadMovie("1-01.swf", "_root.loaderclip");
    }
    --------------------------------------------------------------------------------
    圖片表單按鈕
    <form id="form1" name="form1" method="post" action="">
    <img src="
    http://blogbeta.blueidea.com/login.gif" width="62" height="22" onclick="document.form1.submit()" />
    </form>
    --------------------------------------------------------------------------------
    左右陰影背景的CSS定義方法
    body {
    text-align:center;
    background-repeat: repeat-y;
    background-position: center;
    background-image: url(../images/bg.jpg);
    }
    --------------------------------------------------------------------------------
    劃過鏈接 手型鼠標
    style="cursor:hand"
    --------------------------------------------------------------------------------
    如何關閉層
    <div id="Layer1"></div>
    <a href="#" onClick="Layer1.style.display='none'">關閉層</a>
    --------------------------------------------------------------------------------
    關閉窗口的腳本
    <a href="
    http://blogbeta.blueidea.com/javascript close"()>[關閉窗口]</a>
    --------------------------------------------------------------------------------
    如果文字過長,則將過長的部分變成省略號顯示
    <DIV STYLE="width: 120px; height: 50px; border: 1px solid blue;overflow: hidden; text-overflow:ellipsis">
    <NOBR>就是比如有一行文字,很長,表格內一行顯示不下.</NOBR>
    </DIV>
    --------------------------------------------------------------------------------
    進入主頁後自動最大化
    <script>
    self.moveTo(0,0)
    self.resizeTo(screen.availWidth,screen.availHeight)
    </script>
    --------------------------------------------------------------------------------
    凹陷文字
    <div style="width:300px;padding:20px;overflow:hidden;word-wrap:break-word;word-break:break:all; font-size:12px; line-height:18px; background-color:#eeeeee;">
    <font disabled>
    怎麼樣,我凹下去了吧?<br>
    你不想試試嗎?<br>
    <a href="
    http://www.lenvo.cn/">www.lenvo.cn</a></font>
    </div>
    --------------------------------------------------------------------------------
    運行代碼框
    <script>
    function Preview()
    {var TestWin=open('');
    TestWin.document.write(code.value);}
    </script>
    <textarea id=code cols=60 rows=15>
     
    ===============================================
    【原文出處:http://220.135.241.51/blog/article.asp?id=1769】
     
    (繼續閱讀...)
    文章標籤

    felix 發表在 痞客邦 留言(0) 人氣(124)

    • 個人分類:技術文件
    ▲top
    1

    自訂側欄

    自訂側欄

    個人資訊

    felix
    暱稱:
    felix
    分類:
    不設分類
    好友:
    累積中
    地區:

    熱門文章

    • (31,186)7-Zip的命令列指令
    • (14,719)談論主題 [IIS] 已超過連接逾時的設定。在取得集區連接之前超過逾時等待的時間,可能的原因為所有的共用連接已在使用中,並已達共用集區大小的最大值。
    • (3,558)如何透過 SQLCMD 程式和 T-SQL 指令備份 SQL 資料庫
    • (2,753)自排車使用常識:OD檔/D檔/N檔/如何溫車
    • (994)利用批次檔備份 DNS 資料(標準主要區)

    文章分類

    • 健康 (1)
    • 資訊安全 (1)
    • 理財&基金 (3)
    • 開懷一笑 (1)
    • 職場三兩事 (3)
    • 網路文章 (11)
    • 技術文件 (9)
    • 未分類文章 (1)

    最新文章

    • 談論主題 [IIS] 已超過連接逾時的設定。在取得集區連接之前超過逾時等待的時間,可能的原因為所有的共用連接已在使用中,並已達共用集區大小的最大值。
    • MBTI 職業性格測試報告
    • 能夠一起飛,才是...人生最大的福氣
    • jQuery 教學 - 基礎篇
    • 『為什麼妳要道歉…?!』
    • 你是海螺嗎?
    • 如何透過 SQLCMD 程式和 T-SQL 指令備份 SQL 資料庫
    • 利用批次檔備份 DNS 資料(標準主要區)
    • 利用bat 配合7-zip定期備份資料夾
    • 7-Zip的命令列指令

    最新留言

      動態訂閱

      文章精選

      文章搜尋

      誰來我家

      參觀人氣

      • 本日人氣:
      • 累積人氣: