2012年8月22日水曜日

[SQL]指定したグループ別に通し番号を振る。

よく忘れるシリーズ。

SQL Serverにて指定したグループで通し番号を振るには
ROW_NUMBER() を使用します。
OVER()内でグループ単位を指定(複数もOK)、通し順を指定します。

'---------------------------------------------

SELECT
   ROW_NUMBER() OVER( PARTITION BY 市, 町  ORDER BY 引っ越して来た日 ) AS SEQ 
   名前, 市, 町, 引っ越して来た日
FROM
  住民台帳
ORDER BY
  市, 町, 引っ越して来た日
'---------------------------------------------

結果は

1,田中,広島市,南町,2012/01/01
2,佐藤,広島市,南町,2012/01/03
1,竹田,広島市,中町,2012/01/02
1,田中,福山市,北町,2012/01/02
2,田中,福山市,北町,2012/01/03

となります。

2012年8月20日月曜日

[VBA]ExcelVBAでWebサービスを読む。


----------------------------------------------------------
ExcelでWebサービスを読む方法。(SOAP方式。ASP.NETで作成。)
----------------------------------------------------------

①Excel2003の場合は、「Web Service Toolkit」をダウンロード+インストールしておくとよい。
  2003じゃなくてももし完成後に文字化けするようであれば、それはSOAP3.0入手のためダウンロードした方がいいとか悪いとか。


②既存の[ツール]→[参照設定]→「Microsoft SOAP Type Library」にチェックをいれて、SOAPのコードをいじれるようにしておく。


③「MyWebService」というクラスを作成してソースを以下の様にします。赤文字の追記を参照のこと。
========================================================================

Private MyWebService As SoapClient30
Private Const c_WSDL_URL As String = "http://●●●.asmx?wsdl"
Private Const c_SERVICE As String = "●●●●"
Private Const c_PORT As String = "●●●●" '※上記アドレスをブラウザで直接見ればPortやService名,Namespaceは書いてあります。
Private Const c_SERVICE_NAMESPACE As String = "http://●●●●/"
Private Sub Class_Initialize()
'*****************************************************************
'クラスがインスタンス化されるたびに、このサブルーチンが呼び出されます。
'変数 sc_ComplexTypes に SoapClient30 を割り当てます。
'*****************************************************************
Dim str_WSML As String
str_WSML = ""
Set MyWebService = New SoapClient30
MyWebService.MSSoapInit2 c_WSDL_URL, str_WSML, c_SERVICE, c_PORT, c_SERVICE_NAMESPACE
'ProxyServer を <CURRENT_USER> に設定し、Internet Explorer の LAN 設定で定義されている
'プロキシ サーバーを使用します。
MyWebService.ConnectorProperty("ProxyServer") = "<CURRENT_USER>"
'Internet Explorer が自動検出に設定されている場合、EnableAutoProxy を True に設定して、
'プロキシ設定を自動検出するようにします。
MyWebService.ConnectorProperty("EnableAutoProxy") = True

End Sub
Private Sub Class_Terminate()
'*****************************************************************
'クラスが消滅するたびに、このサブルーチンが呼び出されます。
'変数 sc_ComplexTypes を Nothing に設定します。
'*****************************************************************
'エラー処理
On Error GoTo Class_TerminateTrap
Set MyWebService = Nothing
Exit Sub
Class_TerminateTrap:
WSRefScrCommonErrorHandler ("Class_Terminate")
End Sub
Private Sub WSRefScrCommonErrorHandler(str_Function As String)
'*****************************************************************
'このサブルーチンは、クラス エラー処理ルーチンです。
'サブルーチン、または関数でエラーが発生したときに呼び出されます。
'エラーが発生したサブルーチン名、または関数名とエラー内容を返します。
'*****************************************************************
' SOAP  エラー
If MyWebService.FaultCode <> "" Then
Err.Raise vbObjectError, str_Function, MyWebService.FaultString
' SOAP  以外のエラー
Else
Err.Raise Err.Number, str_Function, Err.Description
End If
End Sub
'=====================================================================
'↓↓使用する関数の宣言は以下に追加していきます↓↓
'=====================================================================
'例①:文字列(String)を投げて、文字列(String)で結果が返ってくる関数
 Public Function wsm_ExecuteScalar(ByVal str_SQL As String) As String
'エラー処理
On Error GoTo wsm_ExecuteScalarTrap
wsm_ExecuteScalar = MyWebService.ExecuteScalar(str_SQL)
Exit Function
wsm_ExecuteScalarTrap:
WSRefScrCommonErrorHandler "wsm_ExecuteScalar"
End Function

'例②:文字列(String)を投げて、データテーブル型で結果が返ってくる関数の場合は、DOMNodeListで宣言する!
Public Function wsm_GetDataTable(ByVal str_SQL As String) As MSXML2.IXMLDOMNodeList
'*****************************************************************
'"wsm_GetDataTable" は XML として定義されています。XML 変数の実装に関する詳細については、
'Microsoft Office 2003 Web Services Toolkit 2.0 ヘルプの「複合型 : XML」を参照してください。
'*****************************************************************
'エラー処理
On Error GoTo wsm_GetDataTableTrap
Set wsm_GetDataTable = MyWebService.GetDataTable(str_SQL)
Exit Function
wsm_GetDataTableTrap:
WSRefScrCommonErrorHandler "wsm_GetDataTable"
End Function
'=====================================================================
'↑↑使用する関数の宣言は以下に追加していきます↑↑
'=====================================================================

========================================================================
④作ったクラスを利用して、コードはこのように書きます。
========================================================================

Dim mySQL As String
mySQL = " SELECT * FROM 社員テーブル"
'Webサービスから
Dim MyWebService As New MyWebService
Dim Nodes As MSXML2.IXMLDOMNodeList
Set Nodes = MyWebService.wsm_GetDataTable(mySQL)

'中身確認したい場合は
'For i = 0 To Nodes.Length - 1
' MsgBox i & "=>" & vbCrLf & Nodes(i).nodeName & "=>" & vbCrLf & Nodes(i).Text
' Nodes.NextNode
'Next


Dim xNode As MSXML2.IXMLDOMNode
Set xNode = Nodes(1) 'Nodes(0)はヘッダー情報ぽいのでNodes(1)だけでOk
Dim NodeList As MSXML2.IXMLDOMNodeList
Set NodeList = xNode.selectNodes("NewDataSet/tmp") '←Node名はWebサービスによって変わる!あらかじめブラウザで結果を確認した方がヨイ

If NodeList.Length = 0 Then
 MsgBox ("対象データはありません")
 GoTo EndStep
End If


For Each obj In NodeList
'ここでセルに自由に加工する
With obj

Dim strMoji(16) As Variant
strMoji(0) = .childNodes(0).Text
strMoji(1) = .childNodes(1).Text
WS.Range(WS.Cells(intRow, 1), WS.Cells(intRow, 16)).Value = strMoji
End With

intRow = intRow + 1
Next

======================================================================== 

2012年7月13日金曜日

[その他]igoogleやgoogleリーダーの代わりのNetvibesで出来ること

igoogle→NetVibesから乗り換えメモ。
追記:googleリーダも終了になったのでさらに積むことに…。
追記:Myyahooも終了…そのうちichrome試します。


結論から言うと
「Web Page」ガジェットと「HTML」ガジェットを使いこなせばigoogleより便利に使えそう。

単純にRSSリーダとして使えばgoogleリーダーも兼用できるし。⇒◆RSS関係◆へ。


以下、出来たことと方法メモ。

2012年7月6日金曜日

[VS2005]外部ツールに「エクスプローラを開く」機能追加。

覚え書き。
VisualStudioにて、エクスプローラを簡単に呼び出せる設定追加。


「ツール」→「外部ツール」にて

「追加」ボタン
↓
タイトル「エクスプローラ(&E)」
コマンド「explorer.exe」
引数(R)「/e,"$(ItemDir)."」
↓
「適用」ボタン


[VS2005]Windows7における「発行されない」現象

ASP.NETにて
ファイル名「****(未使用).ASPX」のファイルがあったのだが
↓
Windows 7 に移行した途端、コンパイルはできなくなるが発行をしても発行されなくなった。
(「発行は成功しました」とメッセージがでるが発行ファイルが出来ない。)
↓
いろいろ調べた結果、「****(未使用).ASPX」のファイルを消すとうまくいった。


Windows 7 ではカッコ付の命名ファイルはNGか??




2012年6月29日金曜日

[ASP]画面が表示されるまで「お待ち下さい…」の表示を行なう。

From Evernote:

[ASP]画面が表示されるまで「お待ち下さい…」の表示を行なう。

以下の3ステップを行なう。

①全画面表示される前に準備出来たものから表示するおまじない。これを最初に書く。
<% Response.Buffer=false %>

②bodyタグに以下のonloadスクリプトを追加する。
<body onload="document.all['waitdiv'].style.display='none';">

③表示のdivを作成する。一番上に。
<div id="waitdiv" align="center">
     <br/>
     集計しています。お待ちください…
     <img src="image/roller.gif" border="0" alt="">
</div>

2012年6月21日木曜日

[SQL]SQL文での日付変換あれこれ。

From Evernote:

SQL文での日付変換あれこれ。

SQL文での日付変換あれこれ。


●yyyyMMdd(数値型)→Date型
---------------------------------------
SELECT    CONVERT(datetime, CAST(CA.数値型 AS VARCHAR), 112) AS 日付型
FROM      カレンダーテーブル AS CA 
---------------------------------------


●Date型→yy/MM(文字列)
---------------------------------------
SELECT     RIGHT(CONVERT(VARCHAR, CA.日付型,111),5) AS 文字列型
FROM       カレンダーテーブル AS CA 
---------------------------------------