2012年10月5日 星期五

Excel openrowset 奇怪的問題(再續)

一段寫在stored procedure 的excel openrowset 今天又出問題了.

無法初始化連結伺服器'(null)'的OLE DB提供者 'Microsoft.Jet.OLEDB.4.0'的資料來源物件

這個問題困擾了好久, 有時重啟sql server 就好, 有時得要重開機.

很困擾.

查到這篇文章

OPENROWSET (T-SQL) – Sometimes You Have to Stop and Smell the Roses
講到權限問題, SQL Server service accounts必需要有TEMP directory的讀寫權限.

查看了一下, SQL SERVER是使用本機帳(local system) 號啟動的.

於是乎,再參考一下這篇文章Location of user account temp dir for service accounts

找到使用者對應
  • Local Service (NT AUTHORITY\LOCAL SERVICE)
  • Network Service (NT AUTHORITY\NETWORK SERVICE)
  • Local System (NT AUTHORITY\SYSTEM)
接著 在C:\Users\user.name\AppData\Local\Temp 安全性的檢查讀寫權限是否都已開放.

相關的討論在napierm 的回文中,也有說明.

So, the fix is to do one of the following:
 - Change the SQL Server's service Log On to "Local System account" OR
 - Provide full access to the "\Documents and Settings\NetworkService\Local Settings\Temp" for any account that needs to run the queries.

 希望這是最後一次搞這個問題了.

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

找到我眼花.
 


VS CODE離線安裝套件方式-續

去年 vscode離線安裝 powershell nupkg 今年在一台無外網的 windwos 2025上安裝時遇到了powershell版本一直讀取到了5.1的版本,鬼打牆了一下午,在VM還原重測測了好幾回,應該是可行了。 將下載到的免安裝powershell 解壓縮到...