我在作完資料庫移機的事情之後
執行網站 看到了這樣的錯誤:
結構描述 'xxx1 ',資料庫 'xxx2 ',物件 'xxx3 ' 沒有 EXECUTE 權限。
在網路上查了一下發現一篇解決方法:
http://hi.baidu.com/jinzesudawei/item/e1c18c262b2b168e9d63d1c6
連結內容摘要:
1. 在資料庫xxx2 身上按右鍵「屬性」
2. 在左邊選單按一下「權限」
3. 在你想要給予權限的登入帳號增加「執行」的權限
我照作,問題解決了,但我覺得這很奇怪
因為在舊資料庫的設定並沒有給予「執行」的權限
=== 正解在此
經過大師指點,在舊資料庫的設定是更細節的設定
可以只授權給某個資料表、預存程序、函數等
設定方法:
1. 打開資料庫xxx2 點開安全性
2. 在你想要給予權限的登入帳號身上按右鍵「屬性」
3. 左邊選單按一下「安全性實體」
4. 右邊按一下「搜尋」
5. 您要加入什麼物件?選下列類型的所有物件
6. 假設要開放權限的是預存程序,請選預存程序
7. 在上方列表會看到所有預存程序 可以在這設定執行權限
===
題外話,資料庫有一個設定是啟用 CLR 整合
http://msdn.microsoft.com/zh-tw/library/ms254506%28v=vs.80%29.aspx
連結內容摘要:
執行以下SQL
sp_configure 'clr enabled', 1
GO
RECONFIGURE
GO
可以用
select [value_in_use] from sys.configurations where name = 'clr enabled'
來檢查目前資料庫的設定值
參考微軟的說明
連結內容摘要:
CLR 整合意味著您現在可以使用任何 .NET Framework 語言 (包括 Microsoft Visual Basic .NET 和 Microsoft Visual C#) 撰寫預存程序、觸發程序、使用者定義型別、使用者定義函數 (純量和資料表值) 和使用者定義彙總函式。
因為我原先以為這個是開啟授權的正解
所以多了這個題外話 (現在修文了)
2013/12/27
2013/12/22
是你教小孩學會亂花錢/騙錢的嗎?
你是否曾經給你的小孩一筆零用錢
然後跟他說:「這零用錢你拿著,用完再跟我說。」
經過幾天之後再問他:「花完了沒?」
如果小孩回答:「還沒花完。」就不給他零用錢
如果小孩回答:「花完了。」就補足他零用錢
如果你這麼作了,那你就是在教小孩學會亂花錢/騙錢
為什麼會這樣?
因為這是獎勵小孩回答「花完了。」的機制
一:「既然我把這筆錢花完就會有下一筆,那我何不很快的花完手上的錢呢?」
二:「我可以不把錢花完,卻跟大人說我已經花完了,那麼我就可以存到錢了!」
然後跟他說:「這零用錢你拿著,用完再跟我說。」
經過幾天之後再問他:「花完了沒?」
如果小孩回答:「還沒花完。」就不給他零用錢
如果小孩回答:「花完了。」就補足他零用錢
如果你這麼作了,那你就是在教小孩學會亂花錢/騙錢
為什麼會這樣?
因為這是獎勵小孩回答「花完了。」的機制
每當他回答「花完了。」,就會得到獎勵,獎勵是零用錢
這就會驅使小孩去亂花錢,或者說謊
曾經是小孩的我,也遇過這種情況。我當時的邏輯有兩套一:「既然我把這筆錢花完就會有下一筆,那我何不很快的花完手上的錢呢?」
二:「我可以不把錢花完,卻跟大人說我已經花完了,那麼我就可以存到錢了!」
題外話
聽說政府預算編列的方法好像也類似這樣?
好像是個不把錢花完,錢就會變少的機制?
2013/12/13
閱讀 jquery 原始碼的筆記 - I don't like this
I_dont_like_this = function (key)
{
var nodes = document.querySelectorAll(key);
var l = nodes.length;
for(var i = 0; i < l ; i++)
{
var node = nodes[i];
node.parentNode.removeChild(node);
}
}
I_dont_like_this("iframe.fb_ltr");
這是我剛寫好,專門隱藏網站外掛FB按讚功能的函數,準備作成 chrome 外掛
document.querySelectorAll 這東西是瀏覽器內建的選擇器
我爬 jQuery 在第6456行找到的
{
var nodes = document.querySelectorAll(key);
var l = nodes.length;
for(var i = 0; i < l ; i++)
{
var node = nodes[i];
node.parentNode.removeChild(node);
}
}
I_dont_like_this("iframe.fb_ltr");
I_dont_like_this(".fb_iframe_widget");
document.querySelectorAll 這東西是瀏覽器內建的選擇器
我爬 jQuery 在第6456行找到的
SQL Server 備份還原 - 備份組包含現有的資料庫以外的資料庫備份
今天嘗試做資料庫的移機
做法是從A電腦的資料庫,按右鍵備份(選完整備份)
然後把備份檔複製到B電腦,在B電腦開一個新的資料庫,按右鍵還原
還原的時候遇到了這樣的錯誤訊息:備份組包含現有的資料庫以外的資料庫備份
爬了一下 google 文章
大部分的人是這樣解的:
===以下節錄其中一篇===
1.先執行以下的SQL
USE [master]
GO
restore database #資料庫名稱
from disk = '#備份資料庫檔路徑及檔名'
with
move '資料庫檔案邏輯名稱' to '資料庫mdf檔案所在位置',
move '資料庫記錄檔邏輯名稱' to '資料庫記錄檔ldf檔案所在位置',
NoRecovery,
Replace
go
執行完畢資料庫會呈現「還原中」
2.到要還原的資料庫上按右鍵→[工作]→[還原]→[資料庫]→[來源裝置]→瀏覽備份檔→勾選還原→確定
如此就完工了
===以上節錄其中一篇===
我看了覺得很怪 認為這個做法很不正常
於是繼續爬 Google 發現到另一個解法
===以下節錄另一個解===
SQL SERVER 資料庫備份:
=> 在資料庫上點右鍵 -> 工作 -> 備份 來建立備份。
(第一次建完整,第二次以後就建差異備份)
(一陣子可以重新再建立一次完整的備份)
若出現“無法開啟備份裝置 'C:\123'。作業系統錯誤 5(存取被拒。)。"”
-> 檢查SQL SERVER 組態管理員,SQL SERVER 的登入身份是否為LOCALSYSTEM
還原:
=> 在資料庫上右鍵 -> 工作 -> 還原 -> 資料庫
若出現“備份組包含現有的xx資料庫以外的資料庫備份”時,
在選項,勾選 覆寫現有的資料庫
===以上節錄另一個解===
這個看起來就很合理
但很多人搜尋到第一個解之後就寫一篇文紀念他
結果造成第一篇文的解法被發揚光大
所以我寫一篇文章 希望大家以後遇到這個問題可以選用第二個解
做法是從A電腦的資料庫,按右鍵備份(選完整備份)
然後把備份檔複製到B電腦,在B電腦開一個新的資料庫,按右鍵還原
還原的時候遇到了這樣的錯誤訊息:備份組包含現有的資料庫以外的資料庫備份
爬了一下 google 文章
大部分的人是這樣解的:
===以下節錄其中一篇===
1.先執行以下的SQL
USE [master]
GO
restore database #資料庫名稱
from disk = '#備份資料庫檔路徑及檔名'
with
move '資料庫檔案邏輯名稱' to '資料庫mdf檔案所在位置',
move '資料庫記錄檔邏輯名稱' to '資料庫記錄檔ldf檔案所在位置',
NoRecovery,
Replace
go
執行完畢資料庫會呈現「還原中」
2.到要還原的資料庫上按右鍵→[工作]→[還原]→[資料庫]→[來源裝置]→瀏覽備份檔→勾選還原→確定
如此就完工了
===以上節錄其中一篇===
我看了覺得很怪 認為這個做法很不正常
於是繼續爬 Google 發現到另一個解法
===以下節錄另一個解===
SQL SERVER 資料庫備份:
=> 在資料庫上點右鍵 -> 工作 -> 備份 來建立備份。
(第一次建完整,第二次以後就建差異備份)
(一陣子可以重新再建立一次完整的備份)
若出現“無法開啟備份裝置 'C:\123'。作業系統錯誤 5(存取被拒。)。"”
-> 檢查SQL SERVER 組態管理員,SQL SERVER 的登入身份是否為LOCALSYSTEM
還原:
=> 在資料庫上右鍵 -> 工作 -> 還原 -> 資料庫
若出現“備份組包含現有的xx資料庫以外的資料庫備份”時,
在選項,勾選 覆寫現有的資料庫
===以上節錄另一個解===
這個看起來就很合理
但很多人搜尋到第一個解之後就寫一篇文紀念他
結果造成第一篇文的解法被發揚光大
所以我寫一篇文章 希望大家以後遇到這個問題可以選用第二個解
2013/12/6
閱讀 jquery 原始碼的筆記 - Array.slice 的妙用
在 jquery v1.10.2 裡面的第 232行寫到 :
toArray: function() {
return core_slice.call( this );
}
他的功能是把 jquery 物件從物件 {} 轉換成陣列 []
在這裡的 this 是個 jquery 物件
而 core_slice 是宣告在第 55 行 :
core_deletedIds = [],
core_slice = core_deletedIds.slice,
以上來自第48行和第55行
我們知道他宣告了一個變數 core_slice 把陣列的 slice 函數拿來用
slice 能作什麼事呢?
從這裡我們知道執行
var fruits = ["Banana", "Orange", "Lemon", "Apple", "Mango"];
var citrus = fruits.slice(1,3);
會得到
citrus = ["Orange","Lemon"];
的結果
根據測試我發現 core_slice.call(A) 的運作模式是先判斷 A 有無 length 屬性
如果有就 new 一個新的陣列 然後把對應的元素丟進新的陣列裡,如果沒有傳入參數的話就是全丟進去
嘗試實作看看 :
function slice(A, start, end) {
var output = [];
if (start == undefined) start = 0;
if (end == undefined) end = A.length;
if (start < 0) start = A.length + start;
if (end < 0) end = A.length + end;
for (var i = start; i < end; i++) {
output.push(A[i]);
}
return output;
}
試用起來跟內建的一樣
可以測試以下程式碼
var o = {};
o.length = 5;
o[0] = 1;
slice(o);
[].slice.call(o);
toArray: function() {
return core_slice.call( this );
}
他的功能是把 jquery 物件從物件 {} 轉換成陣列 []
在這裡的 this 是個 jquery 物件
而 core_slice 是宣告在第 55 行 :
core_deletedIds = [],
core_slice = core_deletedIds.slice,
以上來自第48行和第55行
我們知道他宣告了一個變數 core_slice 把陣列的 slice 函數拿來用
slice 能作什麼事呢?
從這裡我們知道執行
var fruits = ["Banana", "Orange", "Lemon", "Apple", "Mango"];
var citrus = fruits.slice(1,3);
會得到
citrus = ["Orange","Lemon"];
的結果
根據測試我發現 core_slice.call(A) 的運作模式是先判斷 A 有無 length 屬性
如果有就 new 一個新的陣列 然後把對應的元素丟進新的陣列裡,如果沒有傳入參數的話就是全丟進去
嘗試實作看看 :
function slice(A, start, end) {
var output = [];
if (start == undefined) start = 0;
if (end == undefined) end = A.length;
if (start < 0) start = A.length + start;
if (end < 0) end = A.length + end;
for (var i = start; i < end; i++) {
output.push(A[i]);
}
return output;
}
試用起來跟內建的一樣
可以測試以下程式碼
var o = {};
o.length = 5;
o[0] = 1;
slice(o);
[].slice.call(o);
閱讀 jquery 原始碼的筆記 - && 和 || 運算子的妙用
在 jquery v1.10.2 裡面的第 153行寫到:
context && context.nodeType ? context.ownerDocument || context : document,
它的實際意義是
如果 context 不存在 或者 context 沒有 nodeType 屬性時,傳回 document
如果 context 存在,而且 context 具有 nodeType 屬性時,嘗試傳回 context.ownerDocument ,如果 context.ownerDocument 不存在就改成傳回 context
為什麼可以這樣寫 ?
運算子 && 的功能
執行 A && B 假如A可以轉換為 false 就 return A 否則 return B
試著實作 function and(A,B){ if(Boolean(A) === false) return A; return B;}
結果發現 A && B 跟 and(A, B) 的運作結果完全相同
運算子 || 的功能
執行 A || B 假如 A 可以轉換為 true 就 return A 否則 return B
試著實作 function or(A,B){ if(Boolean(A) === true) return A; return B;}
結果發現 A || B 跟 or(A, B) 的運作結果完全相同
附上可以轉換為 false 的物件列表 (從這裡找到的)
0
-0
null
""
false
undefined
NaN
除了這些東西之外 丟進 Boolean 都會傳回 true
2013/11/28
爐石戰記的配卡參數-先手卡與後手卡的比例
爐石戰記遊戲中玩家可以做兩件事
1. 配卡
我們可以對第二、三種卡作細分:第二種是順風卡、第三種是逆風卡,第二種卡適合順風時擴大優勢,第三種卡適合逆風時逆轉戰況
1. 配卡
2. 對戰
本文講的是關於配卡時的觀念
生物卡帶有各種能力,就觸發時機可分為上場時觸發(戰吼),存活在場上時生效,死亡之聲等時機不一一列舉。
就發動效果可分為聖盾、謿諷、衝鋒、抽牌等效果不一一列舉。
本文針對卡片效果,將效果大致分為三類:
1. 觸發能力不需要友軍在場,也不需要敵軍在場
例如:
召喚生物 → 機械幼龍技師(只有我跟咬咬)
抽牌 → 見習工程師
嘲諷 → 森金禦盾大師(卡死丁狗)
召喚生物 → 機械幼龍技師(只有我跟咬咬)
抽牌 → 見習工程師
嘲諷 → 森金禦盾大師(卡死丁狗)
2. 觸發能力需要友軍在場
例如:
友軍死亡抽牌 → 教派宗師
友軍增加能力 → 破碎之日教士、阿古斯防衛者、火舌圖騰
友軍死亡抽牌 → 教派宗師
友軍增加能力 → 破碎之日教士、阿古斯防衛者、火舌圖騰
3. 觸發能力需要敵軍在場
例如:
心控 → 精神控制技師
摧毀 → 奔竄的科多獸
沉默 → 破法者(也可以放友軍)
心控 → 精神控制技師
摧毀 → 奔竄的科多獸
沉默 → 破法者(也可以放友軍)
第一種卡是先手卡,任何時間點都可以打出卡,這種卡通常不太能改變戰況。
第二、三種卡則是後手卡,遊戲肯定會把後手卡的效果做得比先手卡強,而當後手卡的效果越強,觸發條件越嚴格。(酷拉皮卡:我的能力只能用在幻影旅團上)
我們可以對第二、三種卡作細分:第二種是順風卡、第三種是逆風卡,第二種卡適合順風時擴大優勢,第三種卡適合逆風時逆轉戰況
有些後手卡可以直接打出來,不一定需要發動,但有些卡必須發動才可以出牌 (黑鐵矮人)。
若牌組全放後手卡,就很容易卡手牌(除非你願意放棄觸發效果)。若全放先手卡,則難以逆轉戰況。
所以,一個牌組內,先手卡和後手卡的比例是需要考量的參數之一
當然,順風卡跟逆風卡的比例也是需要考量的參數之一
當然,順風卡跟逆風卡的比例也是需要考量的參數之一
2013/11/11
2013/10/22
2013/7/23
Git Server On Windows
目標
弄一台 Git Server 在 A電腦另外在 B電腦用 http 的方式連線到 A 的 Git Server
安裝方法
A 跟 B 都要安裝的東西 : https://code.google.com/p/msysgit/A 在 IIS 上面用 .net 4.0 架這個網站 https://github.com/JeremySkinner/git-dot-aspx/downloads
其中 web.config 要稍微修改一下
<add key="RepositoriesDirectory" value="這裡填存放檔案的路徑" />
詳情參考這篇文章 http://www.jeremyskinner.co.uk/2010/06/25/hosting-a-git-server-under-iis7-on-windows/
接著在B安裝 https://code.google.com/p/tortoisegit/
開一個新的Repo
在 A 開啟你剛剛 IIS 架好的網站首頁進去會看到這樣的畫面
點箭頭指的那裏可以建立一個新的
然後會多一條灰灰的在下面 (被馬掉的那個)
點他可以看到訊息
Client 連線到 Server
找個空的資料夾按右鍵
填網址的地方就填從 server 拿到的就好
2013/1/4
Regexp link
online 例句
http://regexr.com/
regexp 圖解
https://regexper.com/
regexp 圖解
https://www.debuggex.com/
regexp ruby 線上編輯器
http://rubular.com/
訂閱:
文章 (Atom)