Showing posts with label 程式. Show all posts
Showing posts with label 程式. Show all posts

Saturday, February 21, 2009

資訊|ORACLE REPORT

上班負責開發、維護的系統是用oracle soluction,oracle developer 開發搭配java、struts、workflow,資料庫是oacle 10g、9i等..。似乎是這陣子很像很熱門的Model-View-Controller (MVC)開發模式,細節也還沒弄得非常清楚,不過經過這一兩個月的try and error有比較上軌道就是了,但是對於每次view object改變或是要改畫面內容就要重新產生struts還是有點不習慣也覺得有點麻煩。

 

在報表部分則是使用oacle report,原本面試的時候課長有提到部門也有用到crystal report,但是沒想到那是部門內另外一組在使用的,而我們這組是使用oracle repoort。oracle report物件的觀念好強烈,在設定報表格式的時候,儲存格、列、表格等...一層一層,如果一個不小心可能就產生error ORZ。資料庫資料很多、目前上線的系統也不少,所以相對的要從裡面找到一些需要的資料就需要比較大的工程,不再像學校那樣輕易的幾個語法就可以把資料抓出來了。我想工作到目前為止,最大的收穫就是資料庫的SQL語法。

 

前幾天系統有一個需求,要判斷使用者的需要,在報表呈現某些文字。聽到這樣的需求,我的反應就是在網頁部分做判斷,依使用的需要,導到不同的報表,所以我需要做兩張一樣的報表一張是有呈現某些文字的、一張沒有。在透過使用者的勾選產出需要的報表。

 

但是,組長聽了這樣的需求,交了我一個方法:在report裡作判斷。用一段PL/SQL來判斷是否呈現文字,加了一段PL/SQL這樣的需求就可以用一張報表解決了。

clip_image002

先在reoprt裡建立一個公式

 

clip_image002[6]

在從公式裡的屬性寫一段PL/SQL

 

function CF_1Formula return char is

   SignFlag varchar(200);

   begin

        if :USER_SignFlag = 'Y' then

              SignFlag :='院長_________ 管中主任_________ 副院長_________ 教學部_________ 單位主管

                                 ________ 製表人________';

       else

             SignFlag :='';

       end if;

       return SignFlag;

   end;

 

clip_image002[8]

在報表的格式裡設定要呈現的位置

 

幾道簡單的手續,就可以把功能完成了。

 

雖然這不是什麼艱深的技術或是多複雜的需求。但當組長跟我說這樣的作法時,我真是驚訝萬分。同樣的問題,確有差異這麼大的解決方法,同樣的問題,思考的方向卻南轅北轍,但結果卻又是一樣的。

 

這就像生活一樣,遇到一樣的問題,不同的想法、作法,雖然差異很大。但是其實結果與目的是一樣的。

 

 

Technorati 的標籤:

Saturday, February 9, 2008

ASP.NET Wiki

ASP.NET的網路資源可說是非常豐富,官網的MSDN之外還有許多論壇、討論區等:如藍色小舖、ASP.NET、CodeProject等每每有什麼問題幾乎都可以在這幾個地方找到解答。

今天在瀏覽blog的時候看到一篇還蠻有趣的文章"ASP.NET Wiki"。越來越多人會在blog上寫一些技術文件,透過google雖然也會找到一些blog,但除了blog之外有可能再夾雜一點宣傳廣告、或是比較不相關的網頁。現在透過ASP.NET Wiki搜尋到的資料都是與ASP.net相關的,吻合度比較高。ASP.NET Wiki除了蒐集許多blog之外還有msdn的資料(從原文看來這很像是microsoft團隊開發的)。

ASP.NET Wiki1

這網站最值得推薦的就是每個步驟幾乎都有附上操作圖片,很多討論區都只有文字討論,雖然高手都很認真解答,但是對於初學者來說要瞭解怎麼操作還是有一點難度,有了圖片setp by step的解說之後就更容易上手了。舉例來說:Introduction to ASP.NET 2.0 SqlDataSource Control 文字加圖片的說明,從新增資料來源、增加gridview,並且大致說明程式碼的含意。並且也可選擇訂閱文章、討論區的RSS隨時追蹤關注文章的最新動態。這網站最近才開始運作,如果之後越來越多人加入之後,相信資料一定會越來越齊全。如果也想在這網站發表文章要先成為ASP.NET網站的會員。

 

Technorati 的標籤:,

Wednesday, February 6, 2008

CASE 省思

入伍的這個月,雖然身體很忙,但腦袋卻是放空的,所以常常想想一些以前沒時間思考的問題。在一個機會下聽到坐在我旁邊的臨兵,談到在學生時代接case幫人寫網頁、寫程式,這正好讓我想到當初讓我搞的一個頭兩個大Case經驗,分享一點經驗、心得。

學生接case有分兩種:一種是自己與客戶直接接觸,沒有透過任何人做為媒介,這種case通常比較單純、也較無難度,畢竟客戶會自己找上學生,最重要的就是想省錢。所以只要有達到"表面"要求,應該就沒什麼大問題。所以這種case就不要在意安不安全、效率如何等問題,只要客戶說什麼就做什麼就對了。另外一種比較麻煩也較為複雜,就是透過一個對外窗口,窗口負責與客戶交涉,然後窗口在與學生接觸。這種case窗口如何將是左右案子是否能順利完成的主要關鍵,窗口如果有coding背景那就比較沒問題,但是如果窗口是"業務"背景的就要稍加注意了,因為很多事情都是要親自做過才知道到底有什麼難度、有什麼問題,所以如果是透過第二種方式接到case的,可能就需更加小心。以後是我覺得做case要先想過的問題:

認知case的背景:有些case是直接找學生,有些case則是公司吃不消或是收費太低公司可能把case分出去給一些個體戶,然後個體戶在找學生coding,前者的case就比較單純,客戶想要用最便宜的費用將需要的功能完成,所以通常要求也不會太高、太難。後者因為客戶會覺得他找公司,所以通常需求會比較有難度、要求相較之下也會比較高,這種案子如果沒有十足的把握,還是少碰為妙,畢竟學生如了case還有課業甚至有的還有女朋友:P。

case的時間:一個case通常都會有個期限,但其中有可能有很多變數,例如需求增加、修改,或是做出來的成果不是客戶要的等等...。所以case會延後驗收、交付,接case是副業,所以case時間往後延,有可能就影響到學校的課業或是原訂的計畫等,這個變數也要考慮進去。

需求難度:case難度一個人能力而定,所以到底能不能完成客戶需求就只有自己最清楚,接外面的case不像學校課業寫不出來就不要交,頂多下學期再修一次而已,case寫不出來好一點的可能再給你時間把他寫出來重者賠款、走法院等都時有耳聞。

確認彼此的認知與看法:以程式設計師而言,可能接觸到的就是客戶以及窗口。為了保護自己要把一些規則再一開始就說清楚,更保險的方式是白紙黑字清楚的紀錄下來。需求該做多少可以驗收/結案、如果修改/新增需求時間/費用要怎麼計算、時間如果因需求的修改/新增而無法配合要有什麼因應措施、以什麼標準作為付費的基準等等...,其實最重要的是這一點,只要雙方認知、看法一致就已經可避免許多不必要且又廢神的爭執。

學生會想做case,除了可能有一筆不少的"薪水"外(相較於學校打工一個月四千、五千),更可證明自己的能力足以應付一些業界的需要。應懂得保護自己避免什麼好處都沒得到反而搞的一身腥。

 

HEMiDEMi 的標籤:,

Thursday, December 6, 2007

查詢SQL SERVER中所有資料庫跟資料表

system1

這支程式,大概是半年前完成的。其實功能不會算很複雜,大致需求如下:

1.利用treeview列出資料庫中所有的資料庫、資料表、欄位
2.在treeview進行點選之後,可跑到datagridview上,並可進行計算

以上兩點為最主要的兩個功能,其他就小細節。原本打算用資料表記下所有的資料庫、資料表、欄位,但這樣後續又會有問題,例如如何insert新的資料庫、資料表、欄位?!後來打算利用SQL語法將所需要的資料抓出來,但是以前都是抓資料庫中某個資料表中的欄位或是透過join抓取兩個關聯資料表中的欄位,到底要去哪抓可以抓到SQL SERVER中所有的資料庫、資料表以及欄位,網路上找了很久,甚至又mail給相關領域的專家,好不容易得到解答,抓取資料的問題解決之後,其他小問題就可以輕鬆的解決。

在SQL SERVER 2005抓取資料庫的SQL語法

select name    from master.dbo.sysdatabases

抓取資料表的SQL語法

select Table_name from INFORMATION_SCHEMA.TABLES order by Table_name

抓取欄位的SQL語法

select column_name from INFORMATION_SCHEMA.COLUMNS where table_name='TableName'

 

Thursday, November 29, 2007

使用VB.NET的TableAdapter

開始打工之後,作什麼事情有稍微謹慎一點,所以當要使用到什麼軟體時都會想到會不會有版權問題,網路上找的免費軟體又怕有安全問題,我想就只有自己寫的最好。因為公司這邊似乎沒有Access軟體,所以有需要編輯到資料庫時,就變的有點棘手,網路上有找到一款mdb viwer plus不過用起來不是那麼上手,再這樣的情況下,與其再花時間找下去,不如我直接寫一個小程式可以進行資料庫的新增、刪除以及更新。在學校寫程式總是抱著只要能寫出來就好,但經過這幾個月來職業場上的洗禮,讓我會考慮到執行效率、所用的資源等問題,所以在寫這支程式之前,我給自己"能用越少程式碼越好,多利用現有的資源,避免浪費太多資源"這樣的期許。程式大概的功能如下:

透過datagridview、textbox、button進行資料的新增、刪除、更新

一開始就面臨了最大的問題要怎麼把資料新增進去(我不想再寫新增連線 開啟連線 執行 關閉連線這種code,希望透過visual studio 2005自己產的的物件加以利用),好不容易找到TableAdapter這個物件,msdn上有稍微介紹這個物件,是vs2005才有的新功能,雖然msdn上寫了很多,但msdn的特色不就是非常難懂他想表達的東西,他說的跟我試的總是有一點出入。

當資料庫連線建立之後TableAdapter會自動產生出來,且會自動把select、insert、update、delete等SQL語法建立起來,如果當程式對於datatable裡面的資料進行變動時,再呼叫TableAdapter.insert()、TableAdapter.update()...便可將資料回存到資料庫。

tableadapter1

TableAdaptert產生之後,相對應的SQL語法也一併產生

但是,總是會發生一些無法預期的錯誤,google大神說這樣就可以更新資料庫,可是我的資料庫卻永遠都沒辦法更新。只要把畫面關掉,新增進去的值就消失了,當時我的程式碼是這樣的:

tab1Adapter.insert(XX,XX)'將資料insert到datatable中
tab1Adapter.updata(XXX.tb1)'再將datatable更新到資料庫中
(msdn寫說update可以把datatable作的任何改變回存到資料庫中,所以我又下了update)

可是這個方法總是失敗,後來在請教google大神,發現tableadapter會將資料更新到\bin\Debug的資料庫,而不是當初會新增到project的資料庫,從某個角度看來它是很貼心,因為這樣之後給user用的時候的時候就是那個資料庫。因為這樣網路上很多文章都反應資料庫沒有更新,或許是一直去看原本匯進去的那個資料庫,這應該算是vs2005的一點小bug,發現了這個沒有說的秘密之後,我嘗試把update拿掉,沒想到就可以運作了。推論上段錯誤的程式碼,可能是我作insert之後雖然有新增加一筆資料,可是又作update又把沒有新一筆資料的datatable回存回去,導致資料庫都沒有改變,所以程式一關,資料就不見了(真正的原因有時間應該還要再try看看)。後來就一路順暢的把程式完成,寫法歸納如下:

新增-> tab1Adapter.insert()
修改-> tab1Adapter.update()
刪除-> tab1Adapter.delete()

tableadapter2

程式完成畫面