2012年9月26日 星期三

桌機 Checking NVRAM

有一台ASUS桌機,歷史優久2003年安裝WINDOWS 2003後使用到現在.

現在想來,這台是當初用來做SQL 2000 第一個BI的案子的, 後來好像都沒有重裝過OS耶,
前幾年他一直靜靜的躺在一旁, 這二年,我把他擦乾淨後,加了2G的RAM後,平常上班時間,就這樣開著.

今天一來把他開起來後, 一直停在Checking NVRAM 的畫面

重開了好幾次也是如此.

後來想說先進去BIOS看一下設定. 結果進入BIOS後再重開,

咦....就自動好了.  真是奇怪

2012年9月18日 星期二

Informix 重設Serial 欄位值

在SQL Server 是下 DBCC CHECKIDENT (youTableName, reseed, 1);

在Informix 找到幾種方法可以做
1.drop table and recreate  (廢話)

2.insert into yourTable(SerialCol)  values(2147483647);
    truncate table  yourTable;
3.alter table yourTable modify(SerialCol integer);
    truncate table yourTable; 
    alter table yourTable modify(SerialCol serial);

2012年9月14日 星期五

informix DBINFO function

--取得主機名稱
SELECT FIRST 1 DBINFO('dbhostname') FROM systables;

--取得informix db 版本 (IBM Informix Dynamic Server Version 11.50.UC7)
SELECT FIRST 1 DBINFO('version','full') FROM systables;

---取得時間, 很特別的是, 前者會取得目前真正的時日
--但CURRENT在同一個stored procedure中,不論使用幾次,都是一樣的
--所以為了log方便,應採用前者
SELECT DBINFO('utc_to_datetime', sh_curtime) , CURRENT  FROM sysmaster:sysshmvals;

--取得Serial 欄位流水號,必需緊接在insert into sql後使用
insert into table values (1,2,3);
SELECT FIRST 1 DBINFO('sqlca.sqlerrd1') from systables;
 
--取得呼叫此方法前最後sql的影響筆數
SELECT FIRST 1 DBINFO('sqlca.sqlerrd2') from systables ;

2012年9月13日 星期四

informix 序號欄位取值

.net 中,如何取得informix table 新增後serial column  的流水號,然後再傳給另一個table進行使用

--建立測試表
create table  bevtest
    ( col1 serial,
      col2 varchar(50) 
    );

begin work;

insert into bevtest values(0,'test');


--此行需緊接著insert into table 後執行
select dbinfo('sqlca.sqlerrd1') as sn from empty into temp tmpsn with no log;

insert into bevtest select 0,sn||' this is sn"  from tmpsn;

drop table tmpsn;

commit work;

2012年9月11日 星期二

informix 時間 to_char

日期加時間格式

SELECT FIRST 1 
 TO_CHAR(CURRENT , '%Y/%m/%d %R:%S') 
,TO_CHAR(CURRENT , '%Y/%m/%d %I:%M:%S %p') 
FROM systables

回傳

2012/09/12 14:06:14    2012/09/12 02:06:14 下午


2012/09/27:

今天把寫好的SP拿到客戶的環境上執行
結果有個FUNCTION一直 出現 Invalid era, could not assign era date
怪怪,公司跑得好好的說.

查了半天之前用舊方法將國曆數字轉成西元日期,遇到客戶的環境沒有指定DBDATE格式,造成以下的寫法一直有問題

 DEFINE p_date date
 SELECT (((substr((in_date+19110000)::char(8),1,4))||'-'||
                    (substr((in_date+19110000)::char(8),5,2))||'-'||
                     (substr((in_date+19110000)::char(8),7,2)))::date)
  INTO p_date  FROM empty;



改成以下寫法就OK

SELECT (TO_DATE((in_date+19110000)::char(8),'%Y%m%d'))
  INTO p_date  FROM empty;



原來一直搞不懂為什麼INFORMIX中,有today 和current 二個方法

直到今天才知道, today的格式是跟隨著DBDATE的設定回傳日期及時間, current則是回傳固定格式的日期及時間 

以下是客戶環境, DBDATE沒指定,所以預設應跟著DB_LOCALE=zh_TW.big5 
todaycurrent
中華民國101年10月3日 星期三      2012-10-03 16:55:28.00

 

 以下是公司環境, DBDATE=Y4MD-
todaycurrent
2012/10/03                                        2012-10-03 16:55:28.00
  

2012年9月9日 星期日

informix error 720

撰寫informix stored procedure 或function真是一件苦差事.

debug的環境只能利用set debug file 的方式.

在用慣windows UI的開發模式後, 在dbaccess terminal mode模式下開發,心中真的有很多無形的排斥感


720: The number of returned values and of SPL variables do not match.

建立stored procedure 沒有錯誤
執行階段,出了這個錯誤, 但也沒告知到底是哪行出的錯誤

原來是我select ... into ...眾多的欄位中,少了一個欄位與變數的mapping

找到我眼花.
 


publish error allowDefinition='MachineToApplication'

一個老舊的aspx web form專案,調了一些功能建置成功,但進行部署時顯示以下錯誤。 在應用程式層級之外使用註冊為 allowDefinition='MachineToApplication' 的區段發生錯誤。錯誤的原因可能是虛擬目錄尚未在 IIS 中設定為...