SQLの窓

2010年05月30日


VB.net : 文字単位の ASCII と Unicode

0 〜 127 までは同じですが、Chr で作成される文字は SHIFT_JIS なので、全てが存在しません。それに対して、ChrW では、全ての文字コードが存在しています。 

また、SHIFT_JIS の半角カタカナは、SHIFT_JIS の文字コードにありますが、Unicode として表現される場合は、SHIFT_JIS のコードとは違います。

半角カナの ア は、SHIFT_JIS では 0xB1 ですが、Unicode では、0xFF71 です
Module MyModule

' *****************************************
' Chr と ChrW と Asc と AscW
' *****************************************
Sub Main()

	Dim I As Integer
	Dim J As Integer
	Dim c As Char
	Dim c_code As Integer

	' SHIFT_JIS
	For I = 0 to 15
		For J = 0 to 15

			c = Microsoft.VisualBasic.Strings.Chr(I+J*16)
			c_code = Microsoft.VisualBasic.Strings.Asc(c)

			if J = 0 then
				Console.Write( "0" & c_code.ToString("X") & " ")
			else if c_code = 0
				Console.Write( "-- " )
			else
				Console.Write( c_code.ToString("X") & " ")
			end if

		Next
		Console.WriteLine()
	Next

	Console.WriteLine()

	' SHIFT_JIS の中の文字の一部を Unicodeに変換
	For I = 0 to 15
		For J = 0 to 15

			c = Microsoft.VisualBasic.Strings.Chr(I+J*16)
			c_code = Microsoft.VisualBasic.Strings.AscW(c)

			if J = 0 then
				Console.Write( "0" & c_code.ToString("X") & " ")
			else if c_code = 0
				Console.Write( "-- " )
			else
				Console.Write( c_code.ToString("X") & " ")
			end if

		Next
		Console.WriteLine()
	Next

	Console.WriteLine()

	' Unicode
	For I = 0 to 15
		For J = 0 to 15

			c = Microsoft.VisualBasic.Strings.ChrW(I+J*16)
			c_code = Microsoft.VisualBasic.Strings.AscW(c)

			if J = 0 then
				Console.Write( "0" & c_code.ToString("X") & " ")
			else if c_code = 0
				Console.Write( "-- " )
			else
				Console.Write( c_code.ToString("X") & " ")
			end if

		Next
		Console.WriteLine()
	Next

End Sub

End Module


00 10 20 30 40 50 60 70 80 -- A0 B0 C0 D0 -- --
01 11 21 31 41 51 61 71 -- -- A1 B1 C1 D1 -- --
02 12 22 32 42 52 62 72 -- -- A2 B2 C2 D2 -- --
03 13 23 33 43 53 63 73 -- -- A3 B3 C3 D3 -- --
04 14 24 34 44 54 64 74 -- -- A4 B4 C4 D4 -- --
05 15 25 35 45 55 65 75 -- -- A5 B5 C5 D5 -- --
06 16 26 36 46 56 66 76 -- -- A6 B6 C6 D6 -- --
07 17 27 37 47 57 67 77 -- -- A7 B7 C7 D7 -- --
08 18 28 38 48 58 68 78 -- -- A8 B8 C8 D8 -- --
09 19 29 39 49 59 69 79 -- -- A9 B9 C9 D9 -- --
0A 1A 2A 3A 4A 5A 6A 7A -- -- AA BA CA DA -- --
0B 1B 2B 3B 4B 5B 6B 7B -- -- AB BB CB DB -- --
0C 1C 2C 3C 4C 5C 6C 7C -- -- AC BC CC DC -- --
0D 1D 2D 3D 4D 5D 6D 7D -- -- AD BD CD DD -- FD
0E 1E 2E 3E 4E 5E 6E 7E -- -- AE BE CE DE -- FE
0F 1F 2F 3F 4F 5F 6F 7F -- -- AF BF CF DF -- FF

00 10 20 30 40 50 60 70 80 -- F8F0 FF70 FF80 FF90 -- --
01 11 21 31 41 51 61 71 -- -- FF61 FF71 FF81 FF91 -- --
02 12 22 32 42 52 62 72 -- -- FF62 FF72 FF82 FF92 -- --
03 13 23 33 43 53 63 73 -- -- FF63 FF73 FF83 FF93 -- --
04 14 24 34 44 54 64 74 -- -- FF64 FF74 FF84 FF94 -- --
05 15 25 35 45 55 65 75 -- -- FF65 FF75 FF85 FF95 -- --
06 16 26 36 46 56 66 76 -- -- FF66 FF76 FF86 FF96 -- --
07 17 27 37 47 57 67 77 -- -- FF67 FF77 FF87 FF97 -- --
08 18 28 38 48 58 68 78 -- -- FF68 FF78 FF88 FF98 -- --
09 19 29 39 49 59 69 79 -- -- FF69 FF79 FF89 FF99 -- --
0A 1A 2A 3A 4A 5A 6A 7A -- -- FF6A FF7A FF8A FF9A -- --
0B 1B 2B 3B 4B 5B 6B 7B -- -- FF6B FF7B FF8B FF9B -- --
0C 1C 2C 3C 4C 5C 6C 7C -- -- FF6C FF7C FF8C FF9C -- --
0D 1D 2D 3D 4D 5D 6D 7D -- -- FF6D FF7D FF8D FF9D -- F8F1
0E 1E 2E 3E 4E 5E 6E 7E -- -- FF6E FF7E FF8E FF9E -- F8F2
0F 1F 2F 3F 4F 5F 6F 7F -- -- FF6F FF7F FF8F FF9F -- F8F3

00 10 20 30 40 50 60 70 80 90 A0 B0 C0 D0 E0 F0
01 11 21 31 41 51 61 71 81 91 A1 B1 C1 D1 E1 F1
02 12 22 32 42 52 62 72 82 92 A2 B2 C2 D2 E2 F2
03 13 23 33 43 53 63 73 83 93 A3 B3 C3 D3 E3 F3
04 14 24 34 44 54 64 74 84 94 A4 B4 C4 D4 E4 F4
05 15 25 35 45 55 65 75 85 95 A5 B5 C5 D5 E5 F5
06 16 26 36 46 56 66 76 86 96 A6 B6 C6 D6 E6 F6
07 17 27 37 47 57 67 77 87 97 A7 B7 C7 D7 E7 F7
08 18 28 38 48 58 68 78 88 98 A8 B8 C8 D8 E8 F8
09 19 29 39 49 59 69 79 89 99 A9 B9 C9 D9 E9 F9
0A 1A 2A 3A 4A 5A 6A 7A 8A 9A AA BA CA DA EA FA
0B 1B 2B 3B 4B 5B 6B 7B 8B 9B AB BB CB DB EB FB
0C 1C 2C 3C 4C 5C 6C 7C 8C 9C AC BC CC DC EC FC
0D 1D 2D 3D 4D 5D 6D 7D 8D 9D AD BD CD DD ED FD
0E 1E 2E 3E 4E 5E 6E 7E 8E 9E AE BE CE DE EE FE
0F 1F 2F 3F 4F 5F 6F 7F 8F 9F AF BF CF DF EF FF


posted by lightbox at 2010-05-30 17:06 | VB.NET : ベーシック | このブログの読者になる | 更新情報をチェックする

2010年05月29日


VBScript : ネイティブ SHA1、MD5、SHA256 変換

Microsoft ドキュメント

HashedData Object (Windows)

関連する記事

VBScript : ネイティブ Base64 エンコード
Set CAPIUtil = CreateObject( "CAPICOM.Utilities" )
Set HashedData = CreateObject( "CAPICOM.HashedData" )
Set Stream = Wscript.CreateObject("ADODB.Stream")
Set StreamBin = Wscript.CreateObject("ADODB.Stream")

'***********************************************************
' データ準備4
'***********************************************************
Stream.Open
Stream.Charset = "shift_jis"
' shift_jis で入力文字を書き込む
Stream.WriteText "日本語表示OK"
Stream.Position = 0

' バイナリで開く
StreamBin.Open
StreamBin.Type = 1

' テキストをバイナリに変換
Stream.CopyTo StreamBin
Stream.Close

' 読み込みの為にデータポインタを先頭にセット
StreamBin.Position = 0

strBinaryString = CAPIUtil.ByteArrayToBinaryString( StreamBin.Read )

'***********************************************************
' SHA1 と MD5 と SHA256
'***********************************************************
' SHA1
HashedData.Algorithm = 0
HashedData.Hash(strBinaryString)

MsgBox(LCase(HashedData.Value))

' MD5
HashedData.Algorithm = 3
HashedData.Hash(strBinaryString)

MsgBox(LCase(HashedData.Value))

' SHA256
HashedData.Algorithm = 4
HashedData.Hash(strBinaryString)

MsgBox(LCase(HashedData.Value))




Set CAPIUtil = CreateObject( "CAPICOM.Utilities" )
Set HashedData = CreateObject( "CAPICOM.HashedData" )
Set Stream = Wscript.CreateObject("ADODB.Stream")
Set StreamBin = Wscript.CreateObject("ADODB.Stream")

'***********************************************************
' データ準備4
'***********************************************************
Stream.Open
Stream.Charset = "shift_jis"
' shift_jis で入力文字を書き込む
Stream.WriteText "日本語表示OK"
Stream.Position = 0

' バイナリで開く
StreamBin.Open
StreamBin.Type = 1

' テキストをバイナリに変換
Stream.CopyTo StreamBin
Stream.Close

' 読み込みの為にデータポインタを先頭にセット
StreamBin.Position = 0

strBinaryString = CAPIUtil.ByteArrayToBinaryString( StreamBin.Read )

Dim strTarget
'***********************************************************
' SHA512
' https://www.microsoft.com/ja-jp/download/details.aspx?id=3207
' https://docs.microsoft.com/ja-jp/windows/desktop/seccrypto/capicom-hash-algorithm
' C:\Windows\Syswow64\cscript.exe で実行
'***********************************************************
' SHA512
strTarget = strBinaryString
HashedData.Algorithm = 6
HashedData.Hash(strTarget)

MsgBox(LCase(HashedData.Value))





posted by lightbox at 2010-05-29 21:12 | VBS + オブジェクト | このブログの読者になる | 更新情報をチェックする

2010年05月28日


VB.net と C# における KeyPress イベントの受け取り方

いろいろやってみましたが、直感的でかつ短くなる書き方が違います。
ControlChars.Cr は、Microsoft.VisualBasic 名前空間で、Char 型(構造体)です。

Keys.Return は、System.Windows.Forms 名前空間で、列挙体で整数です
VB.net で、整数を Char 型にキャストできないので、比較するにはいろいろ
変換が必要です

C# でも、Microsoft.VisualBasic 名前空間を使用するのであれば、ControlChars.Cr
を使用できますが、Java や C++ から入った人の発想に無い内容になりがちです

VB.net
Public Class Form1

	Private Sub TextBox1_KeyPress( _
	  ByVal sender As System.Object, _
	  ByVal e As System.Windows.Forms.KeyPressEventArgs) _
	  Handles TextBox1.KeyPress

		' VB.net で推奨
		If e.KeyChar = ControlChars.Cr Then
			Console.WriteLine("VB.net用")
		End If

	End Sub
End Class

C#
public partial class Form1 : Form
{
	public Form1()
	{
		InitializeComponent();
	}

	private void textBox1_KeyPress(
		object sender, 
		KeyPressEventArgs e)
	{

		// C# で推奨
		if (e.KeyChar == (char)Keys.Return) {
			Console.WriteLine("C#用");
		}

	}
}



タグ:VB.NET C#
posted by lightbox at 2010-05-28 14:20 | VB.NET : テクニカル | このブログの読者になる | 更新情報をチェックする

2010年05月27日


VB.net : フォーカス イベントの発生順序と注意事項

キーボードとマウスでは、GotFocus と LostFocus のイベント順序が全体で変わってしまうので使用できますが、使用しないようにします。( Visual Studio のイベント選択一覧には表示されません )

各ハンドラーの中からフォーカスを設定しないでください。フォーカスを設定すると、アプリケーションやオペレーティングシステムが応答を停止することがあります

Microsoft へのリンク

Control.Enter イベント (System.Windows.Forms)


キーボードで発生

キーボード (Tab、Shift + Tab など) を使用するか、Select メソッドまたはSelectNextControl メソッドを呼び出すか、ActiveControl プロパティを現在のフォームに設定してフォーカスを変更するとき、次の順序でフォーカスイベントが発生します。
1.Enter 2.GotFocus 3.Leave 4.Validating 5.Validated 6.LostFocus
マウスで発生 マウスを使用するか Focus メソッドを呼び出してフォーカスを変更するとき、フォーカス イベントは次の順序で発生します。
1.Enter 2.GotFocus 3.LostFocus 4.Leave 5.Validating 6.Validated
タグ:VB.NET
posted by lightbox at 2010-05-27 15:47 | VB.NET : テクニカル | このブログの読者になる | 更新情報をチェックする

2010年05月26日


VB.net : Oracle の行を返さない SQL の実行

VB.net ビルド & サンプルセット



単純な SQL であれば、System.Data.Odbc でもかまいませんが、PL/SQL へのアクセスが必要な場合は OracleClient が必要となります

オブジェクト的には、OracleConnection や OracleCommand にも Dispose が存在しますが、通常業務処理として Oracle はアプリケーションの開始時に接続し、終了時に接続解除します。( リソースの再取得にはコストがかかりすぎる場合がある為 )。よって、途中で Dispose する事はまずあり得ません
Imports System.Data.OracleClient

Module MyModule

' ********************************************************
' Oracle の行を返さない SQL の実行
' ********************************************************
Sub Main()

	' Oracle 接続用オブジェクト
	Dim myCon As New OracleConnection()
	' Oracle コマンド用オブジェクト
	Dim myCommand As New OracleCommand()
	' SQL文字列格納用
	Dim Query As String = Nothing


	' 接続文字列の作成
	' Server=PC名/サービス名
	myCon.ConnectionString = _
		"Server=pc名/orcl;" + _
		"User ID=lightbox;" + _
		"Password=lightbox;"

	' *******************************************
	' 接続
	' *******************************************
	Try
		' 接続文字列を使用して接続
		myCon.Open()
		' コマンドオブジェクトに接続をセット
		myCommand.Connection = myCon
		' コマンドを通常 SQL用に変更
		myCommand.CommandType = System.Data.CommandType.Text
	Catch ex As Exception
		Console.WriteLine(ex.Message)
		Return
	End Try

	' *******************************************
	' SQL 実行
	' *******************************************
	Query = "update 社員マスタ set 氏名 = 'lightbox' where 社員コード = '0001'"
	myCommand.CommandText = Query
	Try
		myCommand.ExecuteNonQuery()
	Catch ex As Exception
		myCon.Close()
		Console.WriteLine(ex.Message)
		Return
	End Try

	' 接続解除
	myCon.Close()

End Sub

End Module



タグ:Oracle
posted by lightbox at 2010-05-26 19:45 | VB.NET : データベース | このブログの読者になる | 更新情報をチェックする

2010年05月19日


PL/SQL : プロシージャの呼び出し

単純な呼び出し先として、入力引数を二つ取るプロシージャです。

1) SQL としての呼び出し
CALL CSV_OUT('0006','0007')
2) 最も単純な PL/SQL ブロックとしての呼び出し
begin CSV_OUT('0006','0007'); end;
3) 一時 PL/SQL の一部として呼び出し
DECLARE 
	WK_FROM VARCHAR2(4) := '0005'; 
	WK_TO VARCHAR2(4) := '0015'; 
BEGIN 
	CSV_OUT(WK_FROM,WK_TO);
END; 
CREATE or REPLACE PROCEDURE CSV_OUT 
( 
	PM_STRING1 IN VARCHAR2 
	,PM_STRING2 IN VARCHAR2 
) 
 
/**********************************************************/ 
/* 変数の定義 */ 
/**********************************************************/ 
AS 
	WK_FILENAME VARCHAR2(100); 
	WK_CHARACTERSET VARCHAR2(100); 
	FILEHANDLE	UTL_FILE.FILE_TYPE; 
 
	CURSOR cur_main IS
		SELECT * FROM 社員マスタ
			where 社員コード 
			between PM_STRING1 and PM_STRING2
			order by フリガナ;
 
	COMMENT_REC cur_main%ROWTYPE;  
 
/**********************************************************/ 
/* 内部プロシージャ( データ出力 ) */ 
/**********************************************************/ 
PROCEDURE WRITE_DATA 
AS 
	WK_CSV VARCHAR2(200); 
BEGIN 
 
	/***********************************************/ 
	/* 1行ぶんのデータの作成 */ 
	/***********************************************/ 
	WK_CSV := COMMENT_REC.社員コード; 
	WK_CSV := WK_CSV || ',' || COMMENT_REC.氏名; 
 
	/***********************************************/ 
	/* AL32UTF8 は、10g Express 対応 */ 
	/***********************************************/ 
	if WK_CHARACTERSET = 'AL32UTF8' then 
		UTL_FILE.PUT_LINE( 
			FILEHANDLE,  
			CONVERT( WK_CSV,'JA16SJIS','AL32UTF8') 
		); 
	else 
		UTL_FILE.PUTF( FILEHANDLE, '%s\n', WK_CSV ); 
	end if; 
 
END; 
 
/**********************************************************/ 
/* 処理開始 */ 
/**********************************************************/ 
BEGIN 
	DBMS_OUTPUT.PUT_LINE('デバッグ:開始'); 
 
	/***********************************************/ 
	/* 行データを変数にセット */ 
	/***********************************************/ 
	SELECT VALUE INTO WK_CHARACTERSET from V$NLS_PARAMETERS 
		where PARAMETER = 'NLS_CHARACTERSET'; 
 
	/***********************************************/ 
	/* 出力ファイル名を設定 */ 
	/***********************************************/ 
	WK_FILENAME := '社員情報.csv'; 
	if WK_CHARACTERSET = 'AL32UTF8' then 
		WK_FILENAME := 
			CONVERT( WK_FILENAME,'JA16SJIS','AL32UTF8'); 
	end if; 
 
	OPEN cur_main; 
 
	FILEHANDLE := UTL_FILE.FOPEN( 'ORACLEDIR', WK_FILENAME, 'w' ); 
 
	LOOP 
		FETCH cur_main INTO COMMENT_REC; 
		EXIT when cur_main%NOTFOUND; 
 
		/* 内部プロシージャの呼び出し */ 
		WRITE_DATA; 
		DBMS_OUTPUT.PUT_LINE(COMMENT_REC.氏名); 
 
	END LOOP; 
 
	UTL_FILE.FCLOSE( FILEHANDLE ); 
 
	CLOSE cur_main; 
 
/**********************************************************/ 
/* 一番外側のブロックの例外処理 */ 
/**********************************************************/ 
EXCEPTION 
	WHEN OTHERS THEN 
		DBMS_OUTPUT.PUT_LINE('例外発生:'||SQLCODE||':'||SQLERRM); 
END;




タグ:PL/SQL Oracle SQL
posted by lightbox at 2010-05-19 21:46 | Oracle : PL/SQL | このブログの読者になる | 更新情報をチェックする
Seesaa の各ページの表示について
Seesaa の 記事がたまに全く表示されない場合があります。その場合は、設定> 詳細設定> ブログ設定 で 最新の情報に更新の『実行ボタン』で記事やアーカイブが最新にビルドされます。

Seesaa のページで、アーカイブとタグページは要注意です。タグページはコンテンツが全く無い状態になりますし、アーカイブページも歯抜けページはコンテンツが存在しないのにページが表示されてしまいます。

また、カテゴリページもそういう意味では完全ではありません。『カテゴリID-番号』というフォーマットで表示されるページですが、実際存在するより大きな番号でも表示されてしまいます。

※ インデックスページのみ、実際の記事数を超えたページを指定しても最後のページが表示されるようです

対処としては、このようなヘルプ的な情報を固定でページの最後に表示するようにするといいでしょう。具体的には、メインの記事コンテンツの下に『自由形式』を追加し、アーカイブとカテゴリページでのみ表示するように設定し、コンテンツを用意するといいと思います。


※ エキスパートモードで表示しています

アーカイブとカテゴリページはこのように簡単に設定できますが、タグページは HTML 設定を直接変更して、以下の『タグページでのみ表示される内容』の記述方法で設定する必要があります

<% if:page_name eq 'archive' -%>
アーカイブページでのみ表示される内容
<% /if %>

<% if:page_name eq 'category' -%>
カテゴリページでのみ表示される内容
<% /if %>

<% if:page_name eq 'tag' -%>
タグページでのみ表示される内容
<% /if %>
この記述は、以下の場所で使用します
container 終わり



フリーフォントで簡単ロゴ作成
フリーフォントでボタン素材作成
フリーフォントで吹き出し画像作成
フリーフォントではんこ画像作成
ほぼ自由に利用できるフリーフォント
フリーフォントの書体見本とサンプル
画像を大きく見る為のウインドウを開くボタンの作成

CSS ドロップシャドウの参考デモ
イラストAC
ぱくたそ
写真素材 足成
フリーフォント一覧
utf8 文字ツール
右サイド 終わり
base 終わり