在SQL SERVER 2000上,讀取一段OPENQUERY SQL,資料來源為informix 11.50,ODBC為IBM INFORMIX 3.82 32BIT。
select * from openquery(testdb,'select * from testtable')出現以下錯誤。
OLE DB Provider 'MSDASQL' 提供資料行 'colxxx' 無效的中繼資料 (Metadata)。The scale exceeded the precision.
來源資料表中,有一欄位colxxx的型態 為decimal(14,0),透過OPENQUERY讀取時,有上述錯誤。
解決方法有二個
1.在SQL SERVER 2000所在主機ODBC,於Advanced頁籤中勾選Describe Decimal Floating Point as SQL_REAL/SQL_DOUBLE。
2.將SQL改寫如下,select
* from openquery(ifx220 'select colxxx::integer as colxxx from testtable'),先轉型為SQL
SERVER可接受的欄位型態。
2018年7月18日 星期三
2018年6月26日 星期二
使用powershell連接OPENDATA資料
最近在測試POWERBI工具,本來想由台灣的OPENDATA網站看看是否能有相關的API可用。但測試了一下,大部份提供的網址都沒法正常用ODATA方式讀取。
後來剛好有個專案上的需求,需要讀取一些資料,並轉入到資料庫中。測試了大半天,總算有點小心得。
作業系統:Windows 10
powersell版本: Windows PowerShell ISE
寫入資料庫版本:Microsoft SQL Server 2014 (SP2-GDR) (KB4019093) - 12.0.5207.0 (X64)
資料來源:商業司提供的API http://data.gcis.nat.gov.tw/od/rule
使用前可先參考說明 下載經濟部商業司開放資料供應清單
提供了很多的API可用,但使用起來,覺得每個API提供的結果都好像少了一些想要的欄位。
然後,每個API都沒法一次性全部撈出想要的結果。
不過,每個API都有提供範例語法可參考,算是很佛系服務的啦。
因為商業司採白名單IP開放,開始用之前,還要先EMAIL申請書,使用系統介接API之單位或個人請填寫使用告知書
等收到EMAIL啟用通知後,才能使用這些API。
回覆的EMAIL中,還註明了使用上的一些限制,如下:
平台的介接限制:
系統最大連線數量:100
申請者最大同時連線數量:3
申請者每日最大介接次數:1000000
為了要測試可回傳多筆的JSON資料,所以使用 32.(測試)營業項目代碼( A農、林、漁、牧業 )查公司,指定細項 A101011 種苗業的公司有哪些。
範例的API如下,
http://data.gcis.nat.gov.tw/od/data/api/11944415-69DE-4770-8D19-1FD8732AA81A?$format=json&$filter=Business_Item eq A101011 and Register_Organization eq 02 and Capital_Stock_Amount eq F
截取參數說明,其中紅框內的參數,我使用自建的資料表,依指定的SQL條件可動態組出,所以公司申登機關代碼表共23家,及資本額範圍共7種,所以應有23*7=161次的API Request送出。

第一次寫powersell,GOOGLE了許多寫法,測試了半天,好像有點小成果,手刻了一段script,有時間再來精進一下。
二個注意事項:
1.API中含有一些關鍵字,得要使用跳脫符號避開。參考了這篇文章,在powershell中,使用$要前置backtick "`",不然API URL中,$開頭的參數都會消失不見。
2.API回傳的JSON是UTF8,在powershell使用Invoke-WebRequest接回來時,中文都變?了,所以要指定編碼。
$sqlserver = "myserver"
$database = "OpenData"
$connstring = "Server=$sqlserver;Database=$database;Integrated Security=True"
#使用自建的資料表,組合出公司申登機關代碼*公司資本額範圍代碼組合的URL
$query = "declare @url135 nvarchar(max) ='http://data.gcis.nat.gov.tw/od/data/api/11944415-69DE-4770-8D19-1FD8732AA81A?`$format=json&`$filter=Business_Item eq A101011 and Register_Organization eq {1} and Capital_Stock_Amount eq {2}'" +
" select top 1 replace(replace(@url135,'{1}',a.OrgnCode),'{2}',b.RangeCode) as url,a.OrgnCode,b.RangeCode from RegisterOrgn a full join SalesRange b on 1= 1 where a.OrgnCode = '01' and b.RangeCode='F' ;"
$sqlconn = New-Object System.Data.SqlClient.SqlConnection
$sqlconn.ConnectionString = $connstring
$sqlconn.Open()
$sqlcmd = New-Object System.Data.SqlClient.SqlCommand
$sqlcmd.Connection = $sqlconn
$sqlcmd.CommandText = $query
$sqladapter = New-Object System.Data.SqlClient.SqlDataAdapter
$sqladapter.SelectCommand = $sqlcmd
$ds = New-Object System.Data.DataSet
[void]$sqladapter.Fill($ds)
$sqlconn.Close()
$table = $ds.Tables[0]
#逐API URL呼叫
foreach ($row in $table){
$request = $row.Item(0)
$orgn = $row.Item(1)
$range = $row.Item(2)
$result = Invoke-WebRequest $request
#指定UTF8
$char=$result.RawContentStream.ToArray()
$str = [Text.Encoding]::UTF8.GetString($char)
$myobj = ConvertFrom-Json $str
$sqlconn.Open()
$cmd = $sqlconn.CreateCommand()
#逐JSON筆數取欄位資料
foreach($obj in $myobj) {
$cmd.CommandText = "INSERT INTO OpenResult (CompanyNo,CompanyName,DataType,OrgnCode,RangeCode,AddDate,Url) VALUES (@col1,@col2,32,@col3,@col4,getdate(),@col5)"
$cmd.Parameters.AddWithValue("@col1", $obj.Business_Accounting_NO);
$cmd.Parameters.AddWithValue("@col2", $obj.Company_Name);
$cmd.Parameters.AddWithValue("@col3", $orgn);
$cmd.Parameters.AddWithValue("@col4", $range);
$cmd.Parameters.AddWithValue("@col5", $request);
$cmd.ExecuteNonQuery()
$cmd.Parameters.clear();
}
$sqlconn.Close()
}
後來剛好有個專案上的需求,需要讀取一些資料,並轉入到資料庫中。測試了大半天,總算有點小心得。
作業系統:Windows 10
powersell版本: Windows PowerShell ISE
寫入資料庫版本:Microsoft SQL Server 2014 (SP2-GDR) (KB4019093) - 12.0.5207.0 (X64)
資料來源:商業司提供的API http://data.gcis.nat.gov.tw/od/rule
使用前可先參考說明 下載經濟部商業司開放資料供應清單
提供了很多的API可用,但使用起來,覺得每個API提供的結果都好像少了一些想要的欄位。
然後,每個API都沒法一次性全部撈出想要的結果。
不過,每個API都有提供範例語法可參考,算是很佛系服務的啦。
因為商業司採白名單IP開放,開始用之前,還要先EMAIL申請書,使用系統介接API之單位或個人請填寫使用告知書
等收到EMAIL啟用通知後,才能使用這些API。
回覆的EMAIL中,還註明了使用上的一些限制,如下:
平台的介接限制:
系統最大連線數量:100
申請者最大同時連線數量:3
申請者每日最大介接次數:1000000
為了要測試可回傳多筆的JSON資料,所以使用 32.(測試)營業項目代碼( A農、林、漁、牧業 )查公司,指定細項 A101011 種苗業的公司有哪些。
範例的API如下,
http://data.gcis.nat.gov.tw/od/data/api/11944415-69DE-4770-8D19-1FD8732AA81A?$format=json&$filter=Business_Item eq A101011 and Register_Organization eq 02 and Capital_Stock_Amount eq F
截取參數說明,其中紅框內的參數,我使用自建的資料表,依指定的SQL條件可動態組出,所以公司申登機關代碼表共23家,及資本額範圍共7種,所以應有23*7=161次的API Request送出。
第一次寫powersell,GOOGLE了許多寫法,測試了半天,好像有點小成果,手刻了一段script,有時間再來精進一下。
二個注意事項:
1.API中含有一些關鍵字,得要使用跳脫符號避開。參考了這篇文章,在powershell中,使用$要前置backtick "`",不然API URL中,$開頭的參數都會消失不見。
2.API回傳的JSON是UTF8,在powershell使用Invoke-WebRequest接回來時,中文都變?了,所以要指定編碼。
$sqlserver = "myserver"
$database = "OpenData"
$connstring = "Server=$sqlserver;Database=$database;Integrated Security=True"
#使用自建的資料表,組合出公司申登機關代碼*公司資本額範圍代碼組合的URL
$query = "declare @url135 nvarchar(max) ='http://data.gcis.nat.gov.tw/od/data/api/11944415-69DE-4770-8D19-1FD8732AA81A?`$format=json&`$filter=Business_Item eq A101011 and Register_Organization eq {1} and Capital_Stock_Amount eq {2}'" +
" select top 1 replace(replace(@url135,'{1}',a.OrgnCode),'{2}',b.RangeCode) as url,a.OrgnCode,b.RangeCode from RegisterOrgn a full join SalesRange b on 1= 1 where a.OrgnCode = '01' and b.RangeCode='F' ;"
$sqlconn = New-Object System.Data.SqlClient.SqlConnection
$sqlconn.ConnectionString = $connstring
$sqlconn.Open()
$sqlcmd = New-Object System.Data.SqlClient.SqlCommand
$sqlcmd.Connection = $sqlconn
$sqlcmd.CommandText = $query
$sqladapter = New-Object System.Data.SqlClient.SqlDataAdapter
$sqladapter.SelectCommand = $sqlcmd
$ds = New-Object System.Data.DataSet
[void]$sqladapter.Fill($ds)
$sqlconn.Close()
$table = $ds.Tables[0]
#逐API URL呼叫
foreach ($row in $table){
$request = $row.Item(0)
$orgn = $row.Item(1)
$range = $row.Item(2)
$result = Invoke-WebRequest $request
#指定UTF8
$char=$result.RawContentStream.ToArray()
$str = [Text.Encoding]::UTF8.GetString($char)
$myobj = ConvertFrom-Json $str
$sqlconn.Open()
$cmd = $sqlconn.CreateCommand()
#逐JSON筆數取欄位資料
foreach($obj in $myobj) {
$cmd.CommandText = "INSERT INTO OpenResult (CompanyNo,CompanyName,DataType,OrgnCode,RangeCode,AddDate,Url) VALUES (@col1,@col2,32,@col3,@col4,getdate(),@col5)"
$cmd.Parameters.AddWithValue("@col1", $obj.Business_Accounting_NO);
$cmd.Parameters.AddWithValue("@col2", $obj.Company_Name);
$cmd.Parameters.AddWithValue("@col3", $orgn);
$cmd.Parameters.AddWithValue("@col4", $range);
$cmd.Parameters.AddWithValue("@col5", $request);
$cmd.ExecuteNonQuery()
$cmd.Parameters.clear();
}
$sqlconn.Close()
}
2018年6月16日 星期六
SQL2017 複製查詢結果,換行符號無作用?
改用SQL Server Management Studio 2017有一段時間了。
在執行一段之前寫的SQL要組出一段語法時,里頭包含了使用CHAR(10)當作換行符號的文字,在輸出結果中,使用複製貼上的方式要進行執行時,發現換行符號都失效了。
但如果使用Results To Text時,輸出結果看來又很正常。
同樣的SQL,改用使用SQL Server Management Studio 2014,在Results to Grid輸出結果中,卻又可正常顯示。
查了一下,在 SQL Server Management Studio 2017有個屬性可以設定
Tools > Options >Query Results > SQL Server >Results to Grid,勾選Retain CR/LF on copy or Save。
在執行一段之前寫的SQL要組出一段語法時,里頭包含了使用CHAR(10)當作換行符號的文字,在輸出結果中,使用複製貼上的方式要進行執行時,發現換行符號都失效了。
但如果使用Results To Text時,輸出結果看來又很正常。
同樣的SQL,改用使用SQL Server Management Studio 2014,在Results to Grid輸出結果中,卻又可正常顯示。
查了一下,在 SQL Server Management Studio 2017有個屬性可以設定
Tools > Options >Query Results > SQL Server >Results to Grid,勾選Retain CR/LF on copy or Save。
2018年6月14日 星期四
IE瀏覽器無法瀏覽某些HTTPS網站
最近的IE突然無法瀏覽某些HTTPS網站,顯示要連線的網站TLS不安全。
但相同的網站使用FIREFOX卻可以瀏覽。
因為最近本機使用了IISCrypto.exe工具將關閉了TLS 1.0、CIPHER SUITES也停掉了一些加密原則,所以用FIREFOX查看這些網站的HTTPS的資訊
後來發現部份網站雖是TLS1.2,但CIPHER SUITES是 TLS_RSA_WITH_AES_128_CBC_SHA,所以如果本機的加密原則未啟用就會造成無法連線。
IE走的SSL設定應是與WINDOWS主機相同,所以為了資安關掉一些SSL設定時,得要小心。
在不同瀏覽器使用使用這個網址檢測支援的CIPHER SUITES
https://cc.dcsec.uni-hannover.de/
使用SSLLAB檢測瀏覽器
https://www.ssllabs.com/ssltest/viewMyClient.html
但相同的網站使用FIREFOX卻可以瀏覽。
因為最近本機使用了IISCrypto.exe工具將關閉了TLS 1.0、CIPHER SUITES也停掉了一些加密原則,所以用FIREFOX查看這些網站的HTTPS的資訊
後來發現部份網站雖是TLS1.2,但CIPHER SUITES是 TLS_RSA_WITH_AES_128_CBC_SHA,所以如果本機的加密原則未啟用就會造成無法連線。
IE走的SSL設定應是與WINDOWS主機相同,所以為了資安關掉一些SSL設定時,得要小心。
在不同瀏覽器使用使用這個網址檢測支援的CIPHER SUITES
https://cc.dcsec.uni-hannover.de/
使用SSLLAB檢測瀏覽器
https://www.ssllabs.com/ssltest/viewMyClient.html
2018年3月24日 星期六
SSAS 2017 HTTP OLAP
今天安裝了SQL 2017標準版,測試了把SSAS 2014建立的OLAP DB還原到SSAS 2017上。
從SQL 2000開始一直到現在,AP都是用HTTP OLAP 的方式連接CUBE。
HTTP OLAP的設定可以參考這篇文件
幾年下年,一路由2005、2012、2014到現在已是2017的版本,但技術上仍停留在多維度分析的用法上,沒有長進,哈哈。
不料,今天建立好的HTTP OLAP ,測試連線後,出現以下的錯誤
Cannot connect to http://mynb/olap2017/msmdpump.dll.
檔案系統錯誤: 寫入檔案時發生下列錯誤 'MSOLAP ISAPI Extension: \\?\E:\wwwroot\OLAP2017\msmdpump.dll': 存取被拒。 。
內部錯誤: 發生非預期的例外狀況。 (Unknown)
這啥鬼啊....
反覆檢查設定的步驟也都沒錯,詭異的是,使用SQL2014的msmdpump.dll (檔案版本11.0.3000.0)連結到2017 及2014的OLAP SERVER卻又可正常連線。
找到相關的討論,應該是SQL2017 msmdpump.dll (我的檔案版本是2017.140.204.1)的BUG。
金害。
從SQL 2000開始一直到現在,AP都是用HTTP OLAP 的方式連接CUBE。
HTTP OLAP的設定可以參考這篇文件
幾年下年,一路由2005、2012、2014到現在已是2017的版本,但技術上仍停留在多維度分析的用法上,沒有長進,哈哈。
不料,今天建立好的HTTP OLAP ,測試連線後,出現以下的錯誤
Cannot connect to http://mynb/olap2017/msmdpump.dll.
檔案系統錯誤: 寫入檔案時發生下列錯誤 'MSOLAP ISAPI Extension: \\?\E:\wwwroot\OLAP2017\msmdpump.dll': 存取被拒。 。
內部錯誤: 發生非預期的例外狀況。 (Unknown)
這啥鬼啊....
反覆檢查設定的步驟也都沒錯,詭異的是,使用SQL2014的msmdpump.dll (檔案版本11.0.3000.0)連結到2017 及2014的OLAP SERVER卻又可正常連線。
找到相關的討論,應該是SQL2017 msmdpump.dll (我的檔案版本是2017.140.204.1)的BUG。
金害。
2018年3月4日 星期日
開啟Word 顯示嘗試開啟此檔案時發生錯誤
NB重灌WINDOWS10,也重裝了OFFICE 2016。
在開啟一些WORD文件時,顯示了Word 嘗試開啟此檔案時發生錯誤.....的訊息。
但直接將檔案拖拉到WORD又可開啟?
想來是權限的問題。查詢了KB,因為檔案被封鎖了,只要解決封鎖即可。
在KB上的解決方法:
1.WORD檔案按滑鼠右鍵選取內容,在一般頁籤下解除封鎖。每個檔都得這麼做
2.開啟OFFICE,在檔案>選項> 信任中心>信任中設定,在信任位置加入WORD檔案所在的目錄即可。
2018年2月22日 星期四
informx setnet32 could not open the registry
一般安裝好INFORMIX ODBC DRIVER後,只要在控制台\所有控制台項目\系統管理工具下的ODBC 資料來源 (32 位元) 設定好連線應該就OK。
但今天在一台WINDOWS 10的電腦重安裝ODBC且也設定好連線資訊後並測試連線正常後,使用SQLDBX工具時,卻一直無法正常連線。
當利用Informix setnet32設定時,也一直顯示could not open the registry 的提示訊息。
解決方法:
在 Environment頁籤,將INFORMIXSQLHOSTS清空後,就可順利設定Server及Host Information了。
但今天在一台WINDOWS 10的電腦重安裝ODBC且也設定好連線資訊後並測試連線正常後,使用SQLDBX工具時,卻一直無法正常連線。
當利用Informix setnet32設定時,也一直顯示could not open the registry 的提示訊息。
解決方法:
在 Environment頁籤,將INFORMIXSQLHOSTS清空後,就可順利設定Server及Host Information了。
訂閱:
文章 (Atom)
pdf.js 無法顯示部份字
有個檔案在pdf viewer套件中無法顯示內容,但下載檔案後使用工具又可以正常顯示。 本來以為是套件版本太舊的原因,於是去下載pdf viewer套件 https://github.com/mozilla/pdf.js 更新後還是一樣。 覺得應是字型缺漏的問題,於是用PDF-X...
-
上網找了免費的白箱檢測工具,找到了 puma scan 因為支援OWASP TOP 10的檢測,所以這是一個符合客戶需求又能與Visual studio結合的工具(白話說...交差了事矣....) 更重要的是這不用錢....檢測工具都貴森森的,尤其是源碼檢測工具。 ht...
-
建了一個工作排程,定時執行batch檔。 batch中寫了一段xcopy,主要針對有異動較新檔案時才複製。 echo off for /f "delims=" %%a in ('wmic OS Get localdatetime ^| find...
-
改用SQL Server Management Studio 2017有一段時間了。 在執行一段之前寫的SQL要組出一段語法時,里頭包含了使用CHAR(10)當作換行符號的文字,在輸出結果中,使用複製貼上的方式要進行執行時,發現換行符號都失效了。 但如果使用Results...