SQL 分頁語法
Web上最重要的就是速度跟資源
資料的傳輸量越小 速度就越快
因此在Windows Form上一次把所有資料篩選出來的做法
到了Web上就變得很可怕
或許在其他的功能上為了方便 無法捨棄便利的物件
那麼至少在資料的篩選方面下點功夫
由於目前的專案會用到大量的資料庫資料
此外還有圖片~等
因此如果使用GrideView這樣的元件內建的分頁
到時候效能可能會讓我被罵到臭頭
再者 由於我使用的元件並不是GridView...而是沒有"內建"分頁功能的DataList
因此使用SQL語法進行分頁的查詢變成了我得要學習的課題
其實說來也不難
者是一小段SQL語法 還是讓我足足摸了一個禮拜(包括偷懶.打屁.哈拉.被其他網路資訊誤導..)
因此就在這裡記錄下來
使用下列語法可以篩選出我要的 每頁 顯示資料筆數 假設為6 筆資料
SELECT TOP  6 * FROM TableA
top n 的語法 用來取出 最前面n筆資料
如果加上Order by 就可以先做好我們要的排序 在取出排序完最前面n筆的資料
SELECT TOP  6 * FROM TableA Order by TableA.ID
現在我們要加上分頁查詢的功能 使用NOT IN 語法 配合子查詢
SELECT TOP  6  *  FROM TableA
WHERE TableA.ID
NOT IN ( SELECT TOP ( 6 * pageIndex ) * FROM TableB.ID order by B.ID )
Order by A.ID
上面的語法有幾點要注意
第一當然就是頁面要顯示的筆數 我們設定為 6 筆 當然可以用變數 替代
但是 子查詢中的 筆數也要 一樣
子查詢中的 6 * pageIndex , pageIndex 指的是 要顯示哪一頁的頁碼 – 1
第一頁 就是 1-1 也就是0 第二頁 是2-1 也就是1
這樣配合起來才能做到排除查詢
另外Order By的 排序必須一致
當然如果有其他Where條件 也必須一致
NOT IN 則是 主查詢 的資料 必須排除 子查詢中的資料 當然包含限制條件
有的網頁資料寫必須相反
是錯誤的 如果在紙上作業一下 就知道 邏輯上有錯誤
另外通常 這樣的做做法都會配合遞迴查詢
也就是TableA 與 TableB 是同一個表 我再這裡 用不同名稱表示 比較好理解
遞迴查詢可以用別名來 識別 子查詢 與外圈的查詢
不過 原則上子查詢 與 外面的查詢 各成區塊 並不會 有名稱模糊的問題 倒也不一定要用別名

給個完整了範例

假設有個Table 叫做 FileInfo 有個欄位叫 ID 是索引值 
有個state欄位 表示該紀錄是否有效 Y 為有效 其他值則為無效
裡面有15筆資料 我們要每頁 4 筆的查詢 排序要以ID降冪排序 只查詢有效資料
SELECT TOP @Rows * FROM FileInfo
  WHERE state=’Y’ AND FileInfo.ID NOT IN ( SELECT TOP (@Rows * @PIndex) * FROM FileInfo Where state=’Y’  Order by ID DESC )
Order by ID DESC

Rows參數給 4
要查詢第1頁 PIndex 參數給0
第2頁 PIndex 參數給1…類推

ADOLPH 發表在 痞客邦 留言(1) 人氣()

取得 SqlDataSource 中Select 的結果做為DataSet 或 DataTable

'取得查詢結果
'使用DataView來取得sqlDataSource中 select 產生的結果
Dim dv As DataView = sqlDataSource1.Select(New DataSourceSelectArguments)

再使用 dv.Table 即可取得
 
C# 語法
DataView dv_temp = (DataView)slqDataSource1.Select(new DataSourceSelectArguments());
DataTable dt_temp = dv_temp.Table ; 

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

在Web開發的過程中難免會動態去產生一些控制項
如果這些控制項只是顯示用的到沒啥問題
不過如果是要動態生一些具有事件的控制項 要怎麼 一起產生對應的事件呢? 其實這個問題來自於我想偷懶的做法
因為其實大部分的控制項都可以在設計時期就配置好
不管是用很複雜的程式也好 用很多的判斷去控制險式或不顯示也好
但是這樣就難免造成有一堆控制物件顯示或不顯示的程式碼(也就是沒啥功能.卻有一長串.但不好識別)
另外對效能也是個影響 畢竟Web程式是透過網路的
因此為了精簡程式 也為了方便管理 還有一點點為了效能 就去找了相關資料 C# 的動態事件指定與VB.net 不太相同
雖然都叫委派 不過 在MSDN裡面委派可是有一大篇章節 更有一堆範例 實做
不同時機使用不同類型,方法.....等
但我的目的只是解決我的問題....…因此 理論的東西就先擱著吧~~
先說再VB.net中 如果動態產生了一些控制項 如 LinkButton 同時要賦予他事件其做法如下

'動態產生10個LinkButton

For i As Integer = 1 To 10

    '動態產生LinkButton
    Dim lbtn As New LinkButton()

    '指定顯示的文字
    lbtn.ID=
"lbtn" & i
    lbtn.Text = "按鈕" & i

    '指定命令名稱引述 當作參數 在對應事件時可用來判斷
    lbtn.CommandArgument = i

    '建立事件關聯
    AddHandler lbtn.Click, AddressOf testEven  ‘
testEven 是我們要指定的事件

    '加到容器中 例如 Panel
    Panel1.Controls.Add(lbtn)

Next

'下來 處理該事件
Private Sub testEven(ByVal sender As Object, ByVal e As System.EventArgs)

        '轉換事件來源的物件 為LinkButton
        Dim newlbtn As LinkButton = CType(sender, LinkButton)

        '輸出呼叫此事件按鈕的命令引數 當然可以以此做其他處理
        Response.Write(newlbtn.CommandArgument)
       
End Sub



//接下來是C#的做法
//相同過程就不在述 例如產生控制項  指定文字 或ID 加入容器..等
//僅說明 產生對應事件的語法
lBtn.Command += new CommandEventHandler(testCommand); //testCommand是我們要處理的事件
//事件處理函式
void pageBtn_Command(object sender, CommandEventArgs e)
{
    //取得呼叫此事件的物件參數 然後就可以做其他處理
    string strtest1 = e.CommandArgument;
   
    //或者取得物件本身
    LinkButton Lbtn = (LinkButton)sender;
   //取得參數 或命令名稱
   string strtest2 = Lbtn.CommandEventArgs ;
   string strtest3 = Lbtn.CommandName;
   //然後就可以做其他處理
}

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

由於工作的需要必須使用.net 2.0進行web開發
一開始並沒有注意到而使用.net 3.5 開發了一陣子後
準備再虛擬主機上進行測試時 發現 Asp.net程式怎麼都Run不起來
但是一般網頁卻OK
於是意識到…虛擬主機商的ASP.Net環境 絕大部分都只支援到.net 2.0
那怎麼辦呢?捨棄 AJAX的套件功能? 全部打掉重寫? 改用大量的javascript ?
對我而言以上的方法大概只有第一跟第二可行 因為我的Javascript撰寫能力
僅停留在需要時 上網找找參考....(這點有需要補強~@@)
於是在不甘心捨棄已經開發一半的專案下去找了一些辦法
才發現微軟也有提供解決方案 以下 就是解決過程的紀錄
當你把.net 3.5的專案部屬到 只支援.net 2.0的主機上時 顯然是不可行
而更改專案設定為.net 2.0 會發現 我的AJAX元件通通都會呈現錯誤的狀態
解決辦法是
先安裝asp.net ajax extensions 此功能是提供.net 2.0 開發 AJAX的Client-Side功能
接下來安裝Microsoft ASP.NET 2.0 AJAX Templates for Visual Studio 2008 樣板套件
這樣就可以在vs2008中選擇AJAX專案
但是必須修改web.config的設定 指定特定的組件版本
加入以下設定

<pages>
    <controls>
         <add tagPrefix="asp" namespace="System.Web.UI" assembly="System.Web.Extensions, Version=1.0.61025.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"/>
         </controls>
</pages>

接下來加入參考
必須加入System.Web.Extensions 與 System.Web.Extensions.Design兩個參考
請注意必須選擇 版本為  1.0.61025.0的版本 而不是3.5
當然加入參考的這個部分也可以手動由Web.config指定 不過使用GUI或Web.config設定 兩邊都會同步其設定
因此懶人一族的我 就傾向使用GUI

<compilation debug="true" strict="false" explicit="true">
    <assemblies>
        <add assembly="System.Web.Extensions, Version=1.0.61025.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
        <add assembly="System.Web.Extensions.Design, Version=1.0.61025.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/></assemblies>
</compilation>

這樣就可以繼續開發我的專案 又不用擔心虛擬主機的問題了

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

這個小問題著實也費了番功夫
一開始很天真的以為只要是繫結欄位都只要用
GridView.Rows(Index).Cell(Index).Text 就可以取得
無奈如果你的欄位是一個ButtonField或是HyperLinkField他只會回傳給你一個空字串
 
原是啥呢...因為這兩種欄位他還是有自己的Text屬性
但是如我們要依照資料庫篩選的資料來顯示 就會去設定 DataTextField 屬性為對應的欄位名稱

 
如果同時設定Text跟DataTextField那Text屬性會無效
但是我沒有去測試這樣是否就會取到Text的值 ~ 反正我們要的是變動的值 ~
 
那要怎麼取得DataTextField上的文字呢
這個問題的資料查起來還真的不多
有一部分的解答是錯誤的 後來找的一份正確的
 
錯誤的資料如下:
C# 語法 
string Mystr1 = ((HyperLink)row.Cells[1].Controls[0]).Text;

string Mystr2 = ((Button)row.Cells[2].Controls[0]).Text

VB 與法

string Mystr1 = CType(GridView1.Rows(Index).Cells(Index).Controls(0), HyperLink).Text

string Mystr2 = CType(GridView1.Rows(Index).Cells(Index).Controls(0), Button).Text

 
正確與法如下
C#語法
string Mystr1 = ((HyperLink)row.Cells[1].Controls[0]).Text;
string Mystr2 = ((LinkButton)row.Cells[2].Controls[0]).Text

VB 語法

string Mystr1 = CType(GridView1.Rows(Index).Cells(Index).Controls(0), HyperLink).Text

string Mystr2 = CType(GridView1.Rows(Index).Cells(Index).Controls(0), LinkButton).Text

 
HyperLinkField轉換型別為HyperLink沒有問題
但是ButtonField的部分 則是轉換成LinkButton而不是Button
 

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

有些常用的語法 每每要用時都會忘記 而要回頭查以前的程式
怪了 既然是"常用"的語法 怎麼還會忘記
 
因為 如果某個功能常用
通常我們會把他寫成類別方法 或是副程式 來進行呼叫
也就是...在某個系統中你可能使用到他10次 但是只寫了1次.....
所以今後或把一些常用但是我每每忘記的語法補充上來
 
高居被我遺忘的常用語法就是 取得日期 並轉換格式
取得日期的VB.net語法是 Now.Day() 就這樣 很簡單
但是依照電腦設定不同 有的人會顯示2008年1月1號
有的會顯示2008年01月01號 有的人還會自訂成1月1號 2008年
可是我要把這東西放到資料庫總不能任由他的格式個人化吧
 
所以我會把他轉換成 2008/01/01 統一使用10個字元儲存 而且存成Vcahr這一類的型態
為何不用Date或DateTime型態...因為這背後有更複雜的理由 所以 如果要拿他做運算
我習慣自己取出來轉換 而不是交由資料庫處理
 
那指定格式的VB.net語法如下



 Format(Now.Day(),"yyyy/MM/dd")

 

 

要在Asp.net中動態指定控制項的顏色






'要先引用System.Drawing

Imports System.Drawing 

 

'指定控制項顏色

'前景色

cortrolerID.ForeColor = coloe.Red

'背景色

controlerID.BackColor = color.Yellow

 

上述是指定預先定義的顏色名稱

指定顏色的方法還有 




controlerID.BackColor = color.FromName(Yellow)   '一樣是使用預先定義的顏色名稱

 

另外可以使用ARGB方法


controlerID.BackColor = color.FromArgb(250,255,12,57)

'格式為 Alpha值 , R值 , G值 , B值  Alpha值應該可以視為飽和度或透明度

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

這個問題實在有點兒意思
因為其實我一直在迴避這個問題
從以前寫程式就一直會把整個組織的資料庫開成同一個
裡面放所需要的Table
可是呢 這樣做實在有點瞎
因為其實不同的系統 如果需要區隔資料庫的話
當然應該把資料庫的實體位置分開

而不是逃避 然後用所謂的Table名稱規則來識別
終於我被迫要面對這樣的問題
由於目前的環就就是這樣設計

不同的系統 使用不同的資料庫
當然就免不了要有一些共用的資料

那...如果你的系統 有某些東西 正好要使用到這些共用的功能
而且不能有迴避的狀況那怎麼辦
所謂的迴避可能就是 你可以自己建個Table在自己的資料庫
因為那個Table的資料可能萬年不變

總而言之
如果你的主機是同一台 但是資料庫不同
而你又要join它們之間的資料那該怎麼做

答案其實很簡單
就是使用完整的資料庫名稱就好了
通常我們只會




SELECT * FROM TableA ta
INNER JOIN TableB tb ON ta.xx=tb.xx
 


如果 TableA 在DBa 而 TableB 在 DBb 這時候只要改成使用完整的資料庫描述就好了
SQL Server範例語法如下




SELECT * FROM DBa.dbo.TableA ta
INNER JOIN DBb.dbo.TableB tb ON ta.xx=tb.xx 


當然 在兩個資料庫中都要有相對應的權限
那麼應該有人會問 這樣的語法寫在程式裡面那我的連線設定是要使用哪一個呢
答案是都可以 只要使用兩個中的其中一個就行了
MySQL呢 .....這才是我的工作上的重點啊 由於沒有MySQL就暫時先這樣
等到有環境在補上來
P.s 經測試.MySQL也是如上述方式 2008/10/16

ADOLPH 發表在 痞客邦 留言(1) 人氣()


有時候我們在畫面上會安排許多相同類別的元件
例如
可能在製作某些功能時會用到條列式的排版 這樣免不了就會有一堆按鈕 或著 textBox之類的
最常見的就是你一些重複的功能 但是又要讓user可以做某種程度的分類


如下圖

clip_image002

上圖的功能是送出一份文件 這份文件是以簽呈的方式進行傳遞
簽呈的順位由textBox決定 數字越低 順位越優先
點textBox旁的選擇就會決定上面的單在勾選後是在哪個textBox中列出來 被選擇列會以黃褐色顯示 作為提示


其實最簡單的方式就是每個按鈕去產生事件
可是這樣實在是很呆 圖中有6欄 就又去產生6個選擇按鈕事件 負責換掉選擇列的顏色.沒有被選的顏色.把部門清單重新整理.
把成員清單重新整理…這樣類似度非常高的Code如果不用Function處理帶入的參數 就要呆呆的寫6次


或者說寫1次但是Copy5次 反正就是會在你的程式李出現6次
然後…清除按鈕又要再寫6次………
這不管是WebForm或是WinForm設計都會遇到


今天先來說怎麼在Web自訂Function然後取得觸發該Function的物件ID 就可以使用參數來處理 這樣的狀況了
上面的textBoxID 為 txtRec1~txtRec6
選擇按鈕 為 btnSelect1~btnSelect6
清除按鈕 為 btnClear1~btnClear6 當然按鈕要處理的就是互相對應編號的textBox


首先看怎麼取得觸發事件的物件ID
當然我們會把這一群選擇按鈕 指向同一個事件 , 然後把旁邊那一群取消按鈕 指向同一個事件
而在她們的事件裡就可以用以下的方法取得ID


以下為清除按鈕的範例




'取得按下的按鈕ID
'sender就是事件的觸發者 也就是我們的按鈕
'要取得他的ID要先把他轉換成對應的物件型別 也就是Button 然後就可以用.ID的屬性取得觸發這個事件的
'按鈕ID
Dim btnID As String = CType(sender, Button).ID


'如果要對取得的ID丟給其他事件進行其他處理的話
'就可以把他做型別轉換 或者到要處理的Function在轉換
'但是如果該Function不在這個頁面上會找不到這個物件.
'上次為此折騰了好久 幸好跟Cougar討論後 一語驚醒夢中人 被 Cougar數落的一頓@@”
'因此我習慣先轉換完在丟
'將ID改為對應的textBox的ID 並轉換型別為textBox
'宣告一個textBox 由於我的textBox ID是 txtRec1~txtRec6 因此把取得的按鈕ID取出最右邊的字元
'也就是數字的部分 然後家在字串txtRec的尾巴 就可以組出我們要處理對象的ID
'接著就做型別轉換
Dim txtID As TextBox = CType(FindControl("txtRec" & Right(btnID, 1)), TextBox)


'呼叫清除事件 就可以把我們要處理的textBox物件丟進去
clearTxt(txtID)







clearTxt的程式內容




Public Sub clearTxt(ByVal txtID As TextBox) 
      txtID.Text = ""                                     
End Sub                                                       







依此類推 我們的選擇按鈕就可以依照同樣的方式去處理了
不過選擇要處理的事情比較多 Code比較常 就留待有興趣的網友自行研究吧

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

預先提醒 : 不管是FileUpload還是檔案下載功能 都不能放在UpdatePanel中
也就是不能使用AJAX來處理
因為工作上的需求 要做一個檔案下載的功能
在網路上找了與多資料 測試的結果最終都沒能成功的把檔案下載的功能完備
後來又努力的找了一番資料終於完成了 我想環境可能是個因素導致許多範例最後都沒有成功
先說明一下功能的需求 檔案上傳的功能之前已經完成了
使用FileUpload元件進行檔案上傳也沒有啥好講的 頂多就是上傳前多一些檢查
這也不過是一些IF或者其他的迴圈判斷而已 唯一要說明的是
檔案上傳再設計之時就已經將路徑資訊寫入資料庫
由於要求的設計比較簡單 所以其實存放路徑只有一個目錄 下面在分目錄而已 也就是根目錄下只有一層目錄 例如
根目錄是網路上某台FileServer分享出來的目錄
//fileServer/share/ 而上傳前會去檢查這個路徑下是不是有已經開好要上傳的目錄 例如
我之前設計的需求是要依照文件的編號來分
因為會去檢查根目錄下是不是已經存在該目錄 有的話 就直接上傳 沒有就建立
這部分是標準的VB.net語法
要注意的只有必須 Imports System.IO

'檢查是否有檔案

        'MyFiles為FileUpload物件
        If MyFiles.HasFile Then 

' 建立目錄物件類別
' FilePath則是我依照上面說的檔案的存放根目錄+文件編號組成的目錄路徑
            Dim dir As New DirectoryInfo(FilePath)

' 檢查目錄是否存在 不存在就建立目錄
            If Not dir.Exists Then
                dir.Create()
            End If

' 進行檔案上傳
            Try

               ' 把檔案利用FileUpload物件的SaveAs方法進行上傳 
               ' 要給予完整的存檔路徑加上檔名 其中一般檔案資料夾結構需要注意的事項要在組出路徑時就處理好 
               ' 例如 不能有特殊字元 根目錄/子目錄/檔案 之間的 "/"要注意別遺漏了
                MyFiles.SaveAs(FilePath & MyFiles.FileName)
                Return True

            Catch ex As Exception

                ' 上傳失敗時回傳一個布林值 尤其他程序處理
 
                ' 因為我的Function是設計回傳布林值的參數 當然也可以設計成回傳其他東西
                Return False
            End Try
 
        End If

以上就是上傳檔案我所處理的方式.
當然另外有個函式會在上傳成功後接著把檔案的路徑.檔名...等相關資訊放到DataBase
這樣下載時才有依據
接下來讓我們來看檔案下載的部分 ------------------------------------------------------ --------------------------------------------------------------------- 網路上只要搜尋ASP.Net 檔案下載 應該就可以找到一堆資料
有的還很詳細告訴你哪一行程式是做啥 可是我就是組不出我要的功能
其實我要的功能 也不算複雜 就是檔案下載而已咩 所以我也不確定 我的寫法是不是正確 有需要的網友 如果測試有問題 也不要贛矯我....
或許環境是個很重要的因素吧 我的開發環境是VS2008 .net 3.5 + IIS 6 使用VB.net
測試環境則是IE 6 跟 IE7 重要的是 我的瀏覽器 再瀏覽我設計的功能時 是使用 Unicode UTF-8 編碼 因為用Big-5編碼 根本就無法瀏覽我的網頁
至於網頁編碼問題.....我不懂 也不在這篇記述的範圍 有興趣深入的網友就自行找解答吧
小弟只是把開開發經驗Port上來~@@(好像不是很負責) 接下來就是我的Code 一樣是寫一個Function處理

'判斷檔案是否存在 
        ' fileName是已經從資了庫取出路徑 檔名 組合好的完整檔案所在路徑
        ' 例如 //fileserver/Share/DocNumber/test.pd
        If fileName IsNot Nothing And System.IO.File.Exists(fileName) Then
 
            ' 從緩衝區資料流清除所有標頭 
            Response.ClearHeaders()
            ' 從緩衝區清除所有內容輸出 
            Response.Clear()

            ' 快取分鐘數 0 表示快取立刻過期 
            Response.Expires = 0

            ' 使用緩衝輸出 在資料流完整處理後輸出 
            Response.Buffer = True

            ' 加入HTTP標頭.應該是設定語言吧.... 
           Response.AddHeader("Accept-Language", "zh-tw")

            ' 加入HTTP標頭 設定所取得的文件內容是一個附加檔而不是內嵌資料 這樣就不會用瀏覽器去開啟 
            Response.ContentType = "application/save-as"            

            '  加入HTTP標頭設定 
            '  content-disposition 是 增加一個MIME部署 
            '  attachment 表示內容是一個附加檔 
            '  fileName就是上面說的檔案完整路徑 比較特別的是 路徑要經過 HttpUtility.UrlEncode 來對Url的路徑進行編碼處理 
            '  不然 在小弟環境中的測試 是會發生一些其奇怪怪的狀況 
            '  例如 檔案下載了 卻發生損毀 或者 找到檔案 要下載卻沒有檔名 檔名 是該網頁的名稱 類別不明 
            Response.AddHeader("content-disposition", "attachment ; filename=" & HttpUtility.UrlEncode(fileName))

            '  開始輸出 有的範例是使用 Response.Write() 我的測試 一樣會有怪狀況
            Response.WriteFile(fileName) 
            '  結束輸出 有的範例沒有...不過 我個人認為還是養成好習慣 東西開完 不用了就要關
            Response.End()
 
        Else 
            Response.Write("找不到檔案") 
        End If

以上 今天的報告內容~
可以在我的環境中完整下載"任何檔案" 包括中文檔名 不過中文路徑沒有試過~~~
也有些文章會建議把檔案路徑設定成虛擬目錄.然後直接給超連結就可以下載檔案了
這是最快也最沒問題的方法 而為何我要設計成目前的方式呢?
因為通常企業中都會有自己的檔案伺服器防放檔案 實在沒理由把檔案儲存這種東西放在Web Server上
另外給超連結的方式或暴露檔案的所在位置 有點功夫的user可能就會透過Url連結去找到該檔案目錄 除非你的檔案目錄還設定了權限 可是這樣在我的設計目標下是不可行的
因為不知道放文件是什麼人 他會開啥資料夾
當然嚴格說 還是可以從他的帳號取得資訊 去對應他在企業中的帳號 然後開資料夾時設定權限 不過衍生的問題是 這樣下來要寫的Code好像也不少
小弟下一個專案就是要架構一個Web的檔案管理系統
到時候恐怕少不了這一段

ADOLPH 發表在 痞客邦 留言(2) 人氣()

廣告是我蠻愛看的"節目"之一
有意思的廣告可以達到跟觀眾很好的共鳴
即使你不買他的商品~
也可以在你的心中下深刻的印象
 
你 + 包容 - 習慣 x 責任 / 自由 = 換算之後,你是否還記得真實的自己?
你 + 壓力 - 身段 x 堅強 / 任性 = 換算之後,你是否還記得真實的自己?
這是Ford Mondeo 的兩個廣告 文字詞
真是是很有感覺得廣告
 
他比較強調的是男人的自我內心世界
所以男人比較看的懂 結了婚 有家庭的 有小孩的 感觸更多(也就是老男人啦)
 
很慶幸我目前沒有看到這個廣告詞被濫用的例子
 
為何說被濫用呢
有另一段廣告詞~
就是光陽那個愛上電視的副總拍的一系列廣告
"人的能力量 決定車的力量"
 
由於我已經很久不騎摩托車了
我也不太相信摩托車(一般的輕型機車)有啥高貴之處
當然還是不排除有些不錯的產品 只是很顯然 柯先生不是很懂
機車的價值不全在於馬力 扭力 煞車碟盤...事實上很多機車廠的廣告(台灣)都很乏味
 
柯先生再第一支廣告時說了那句詞 個人覺得 還不錯 可以讓人記住商品
因為他開頭就講 我是xx副總 柯xx 所以 可以很成功的結合商品的品牌與廣告詞的印象
 
可是呢 他後來拍的每支廣告 都要再講一次 .... 車子進化了 可是廣告詞沒有跟著進化...
會讓我感覺..你上一台這樣說 這一台也這樣說 下一台還是這樣說...那 意思是要我一直換車嗎?
因為它廣告的是單一商品 而不是系列商品
 
後來我的朋友嘲笑 " 錢的能量 決定車的力量 " 哈~!  這倒真的是真理
 
另一個我個人喜歡的廣告有點久了
是當時MAZDA休旅車的廣告 當然那個廣告造成了一些不好的效應
有人學廣告 把車子開上一些觀光區的階梯 造成階梯損壞 這當然不是廣告的原意
廣告最後的提字詞是  " 氣度 決定高度"
 
也是個有不錯感覺的詞
可惜..曾經我某個BOSS 很愛講這句
每每訓話時就會說 "人的態度決定 高度" 我不太曉得 是不是前句廣告詞的變形
只是他的要求讓我覺得有很不以為然的地方
所以當他講這句話時 我的心理總是泛起一陣不以為然的漣漪
 
這個涉及人身攻擊跟理念不同 所以就不多提
只是在我的想法(目前) ~ 人的高度 只有決定你信用卡的額度 跟態度 沒有關係
因為我認為可以位在高階的人 大部分都不是靠實力 而是其他因素居多 一樣 涉及人身攻擊 表過就不提了
 
最後有點關聯的是最近挺喜歡的一個廣告
是我想送給那想汲汲營營 鼓勵人們 不知滿足的往上爬的人 例如之前提到的某BOSS.....
 
這也是Ford的廣告 一樣是休旅車的廣告
廣告內容有意思 一樣是給已成家的男人看的 一樣有兩段 (Ford最近很愛這樣搞)
內容是小孩子要交作業 作業是到某處玩的照片 老爹用合成的方式給他照片...
另一段一樣是小孩要交到某處玩的照片 老爹給他了 這是是真的 但照片裡的人小孩子不認為是他
因為那是小孩子很小的時候...例如嬰兒時期
 
這兩段廣告最後的題詞都是 "不景氣會過去 但是童年不會回來"
是的 這是我非常想對某些族群的人說的話
因為太多人鼓勵我去搞管理 搞權力....奇怪 我看起來像是權利慾很重的人嗎 @@"
因為有了小朋友 有了家庭 對我來說不能回頭的 就是小孩子的童年記憶
 
我不會為了工作捨棄家庭 因為那根本不成比例
有人認為年輕不努力 老了就辛苦 是的! 沒錯 而且一點都沒錯 非常正確 但是僅限單身
畢竟你老了 還是可以努力 只是辛苦而已
 
可是 如果為了工作 捨棄了家庭 你的成就有啥意義
很多人都會說 我努力工作是為了給家人更好的生活
但是對家人來講 什麼是更好的?
或許到老婆來講 是有更多前可以花~@@ 不過他自己會賺...還好
對小孩子呢?
 
是不是 這兩者 根本不成比例
工作 你老了可以繼續努力
小孩子的成長 你錯過了 就是錯過了
甚至很很多明言 也說 有些事你現在不做 就一輩子也不會做
也有很多人回頭看時 不曉得自己留下什麼對自己稍微具有意義的事
 
所以 當我的信用卡額度還夠的時候
我認為平衡家庭跟工作比較重要 而且如果他們有衝突 那工作是毫無輕重可以衡量的會被我捨棄掉

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

這篇文寫的有一點時日了.當時只是純粹發洩一下
把它藏在一個沒有人知道我是誰的地方....(真是駝鳥)
今天重新看了一下決定讓他出來見見光
--------------------------------------------------------------------------------------------
 
我一向很討厭一種...所謂的工作回報機制
從幹 SI 到之前的....(還是保留好了)
 
一般來講資訊相關領域似乎普遍會有這種狀況
就是上班打卡制 下班責任制
遲到要扣薪 加班只能賺到GOP跟GPT...(這兩個東西是肝功能的兩個指標)
 
好了~今天並不是要說這個
上述的狀況也沒有誰對誰錯~誰壓榨誰
 
而是
有一種東西 叫做工作回報的管理機制
我在不少工作單位都看過
目的呢 就是各位工程師們 要把工作內容 回到給公司知道
 
原因主要是在於 工程師 四處跑的機會很高
所以想要知道工程師們 今天幹了什麼
就不曉得哪個王八蛋發明了這種機制
 
來說說一般資訊產業的等級吧
通常~最下面 就是工程師群們 負責出生入死 親上火線與顧客周旋 短兵相接
工程師也有分級~但是呢~在組織裡面 統稱就是"下級" (請勿說成低級)
 
上面一點是誰呢?
通常我們叫這個等級為專案管理人 或者專案經理 又或者 專案管理人者...
反正就是總兵等級 負責統領工程師 本身或許也是工程師 但大部分不是
主要職掌的工作就是所謂的"掌握專案進度"
 
在更上面一點呢 通常是xx部經理 xx部特助 xx顧問
再往上一點呢? 應該是 副總經理 這個等級了
然後上面就是總經理 or 老闆
因為很多老闆自己兼總經理 或者又叫 "總裁" , "執行長"(自從台灣霹靂火之後開始流行)
 
那~我要說的是
通常裡面事情最雜 最難以分身 最要花勞力的 就是工程師 這個下級
其他的等級通常都已經是管理層面居多了
 
我從一開始就搞不懂
所謂工作回報機制的由來
一般來講理由是 因為工程師"群" 這些下級"們" 為數眾多
因此專案管理人的這個層級 就會希望下級們 主動回報進度
通常還會建立個專案管理系統...不管是用word . excel . Project .或者e-mail
甚至開發個web讓下級們無論身在何處.....都能被壓榨.
 
在我幹工程師沒多久時 我對於這個機制並沒有異議
而且 我還鼓勵其他工程師們主動點回報
因為這樣可以讓 "上面"對你的印象加分~表示自己負責 夠細心 夠責任感
主動爭取上頭對你的好感與信任
但是後來證明這樣真的只能賺到GOP跟GPT....
 
這些往日的弟兄們....我對不起你們...尤其是H牌公司的同仁們 那些當時年輕的工程師們
因為那只是我當時熱中"管理"的想法....( 唸管理人的缺點...啥都要管理 )
彼得杜拉克大師....我也對不起你 我扭曲了管理的意義...
 
我有異議的部分是....
專案管理人的工作是什麼~?? 大家說一說....
從字面上來解釋~應該是管理專案...吧
那什麼是管理專案呢?........
不外乎就是~~掌握專案進度..然後再報告上級...專案的狀況
雖然很攏統~但是就是"掌握專案狀況"
 
所以說~讓我們整理一下..
掌握專案是誰的工作~誰的責任呢? 應該是所謂的專案管理人 這個層級吧
但是誰在做工作回報呢? 耶~是工程師耶...那專案管理人幹嘛呢?
據說是~整理下級"們"的回報.....
 
一個下級打兩行字 說明工作 10個就可以變成20行 插點圖就是一頁了
然後一個禮拜就有一小本 3個月後也就是一季就可以出版給上頭了
然後~誰受到上面的掌聲?
 
其實這也不算什麼
只是最近發生~專門管理人們要下級們回報工作
那....下級們除了東奔西跑的特性 外 還有所謂 一開始提到的 下班是責任制
工作沒有告一段落 是閃不了人的
所以通常要等下級們來回報....時間上可能就晚了 也不一致
 
於是....由於專案管理人需要向更上面回報...而且要整理~就規定下級們
在哪個時間區間理回報.....
這個 就是我不爽的地方
掌握專案進度是專案管理人的責任
 
結果Loading反而在下級們身上....
好的專案管理人~應該隨時"主動"掌握進度吧.
掌握進度於~跟下級哈拉打屁之中~順便搏感情於無形~
反正大家都是工程師~不致於哈拉的內容聽不懂吧
而不是要大家在某個時間內完成回報
而且~在聽到這個怪狀況時~我才知道我的專案管理是誰.....這真的很怪
 
致全天下倒楣的下級們 萬歲
希望你們有朝一日...也變成令人討厭的管理人...那代表你們的努力有成果了....
而我呢 ? 少說幾年內 我想也不會想管理的工作了
 
分享一句
魔鬼代言人 / 艾爾帕西諾(Al Pacino): 虛榮是我最愛的原罪
 
自省 : 我迷失了好一陣子

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

最近開始開發Web專案
想要寫Web已經可以說是非常久遠以來的夢想~Why??
I don't Know~ 也許是覺得好玩吧 現在由於工作的關係
終於可以開始投入所謂的Web開發 由於公司內部已經有網站了
因此等於開發的原則必須符合現有的網站 例如 有相同的訊息呈現模式
資料新增的模式
甚至是外觀的結構 在某種程度上受到了一些些限制
今天所要表達的 就是對於在這樣環境下開發的一點點看法 目前公司內部的網站是左右兩欄式
左欄是所謂的選單欄 也就是放功能表 或功能連結之類的
右欄則又切割為上下兩列 上列呈現List 也就是資料清單 或者說資料的大略或摘要
下欄就是對應的詳細資料 當然這並不是訂得很死的 有時候可以視狀況修改
只要不要弄個風格元全不同的樣式出來就好 於是我就想說 那就一樣 弄個兩欄式 就好
由於我一直鍾愛全組按鈕這樣的選單
就花了點時間做了出來 結果在老大稍微看過之後....點點頭表示可以
但是又追加了一句....那個選單可不可以改成樹狀選單..... 比較符合現在內部Web的風格.....這....不是說可以修改 不要差太多就好了嗎....
由於這個群組按鈕 花了點功夫去弄 實在是不想拿掉
而且手上還有另一個專案 打算到時後再用樹狀選單 因為目前的專案是固定的功能
另一個專案則有可能需要動態產生選單 因此就很有可能需要用到
樹狀選單結合資料庫產生個節點這樣的功能 總之還是稍微try了一下述狀選單
發現他跟我預期的功能有點落差
當然結合資料庫去產生對應的選單是非強大的功能 不過在固定功能的web上來講究有點小缺點
稍微測試了一下整理如下 優點~
他是標準原件 拉一拉就可以產生你要的選單 滑鼠點一點就可以把也面連結好
他還可以結合網站地圖
SIZE 相較之下比我自行開發的選單來的小 缺點
醜.....我個人覺得啦
操作不直覺.....這也是我個人覺得....我很不習慣在web上看到樹狀選單....
最重要的是...他沒辦法隱藏特定的節點或者項目....目前我的測試是如此 最後一點提到的缺點意味著~
如果今天我需要有權限控制的功能~我就不能自己去隱藏他
除非他的產生來自於資料庫的資料 我才能控制要產生那些項目
但是對於功能較少 而且固定的web來講...就有點小題大作了 由於我不能自己去隱藏他
所以就表示所有的user都能看到他
因此user去點擊他沒有權限的頁面時~就只能在該頁面處理權限檢查
然後回給他一個~ " 很抱歉~你還沒有長大....不要亂逛啊~~ " 之類的警告訊息 對於我個人的習慣來講~
我並不是很喜歡這樣的處理方式
因為這會給user一種挫折感
我比較習慣~不給用的功能 乾脆就不要讓 user 看到 而且程式上來講 就可以免掉其他的出錯的機會
因此呢~我可能還是會堅持在目前專案使用自己設計的選擔吧
真的老大堅持的話....再來修改囉 或許過一陣子 也會架個網站
把自己喜歡的功能~介面~在上面實現~

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

Blog Stats
⚠️

成人內容提醒

本部落格內容僅限年滿十八歲者瀏覽。
若您未滿十八歲,請立即離開。

已滿十八歲者,亦請勿將內容提供給未成年人士。