コミュニティでの活動の履歴として、自身(Orator/魔界の仮面弁士)が掲示板・Mailing List・Newsgroup等へ発言した内容の中で、再利用できそうな物を拾い出して、掲載しています。

« 2004年10月 | Main | 2004年12月 »
[Jet 4.0] SQLでバイナリデータの登録を行う方法 / 2004年11月16日(火)

『0x01234567890ABCDEF…』形式の16進数表記文字列を使うと、SQL文にてバイナリデータを渡す事ができます。


実験対象となるテーブルの定義(IMG列がバイナリを渡す列です)

CREATE TABLE MyTable
(
	ID  	IDENTITY(100,1),
	TITLE  	TEXT(20),
	IMG 	OLEOBJECT,
	CONSTRAINT PKEY PRIMARY KEY (ID)
)

バイナリデータを登録するためのSQLの作成

Dim Cn As ADODB.Connection
Dim I As Long
Dim Binary() As Byte

Set Cn = New ADODB.Connection
Cn.Provider = "Microsoft.Jet.OLEDB.4.0"
Cn.Open "C:\Sample.mdb"

'ここでは、"C:\Project1.exe" のバイナリを
'Byte配列の変数に読み込んでいます。
With New ADODB.Stream
    .Type = adTypeBinary
    .Open
    .LoadFromFile "C:\Project1.exe"
    Binary = .Read(adReadAll)   'バイナリ取得
    .Close
End With

'バイナリを、0x01234567890ABCDEF……形式の文字列にして
'SQL文の中に埋め込みます。
Dim SQL As String
SQL = "INSERT INTO MyTable (TITLE, IMG) VALUES ('Project1.exe', 0x"
For I = LBound(Binary) To UBound(Binary)
    SQL = SQL & Right("00" & Hex(Binary(I)), 2)
Next
SQL = SQL & ")"

'確認用
Debug.Print SQL

'SQLの実行
Cn.Execute SQL

Cn.Close
Set Cn = Nothing

 
Posted at 22:55 / Jet/Access / この記事のURL
コメント(0)
[VB.NET] MACアドレスを取得 / 2004年11月12日(金)

.NET Compact Framework用。GetAdaptersInfo APIを使って、物理アドレスを取得しています。


Imports System.Runtime.InteropServices
Public Module MacAddressSample
	Private Const ERROR_BUFFER_OVERFLOW As Integer= 111
	Private Const LMEM_FIXED As Integer= 0
	Private Const LMEM_ZEROINIT As Integer= &H40
	Private Declare Function GetAdaptersInfo Lib "Iphlpapi" (ByVal pAdapterInfo As IntPtr, ByRef pOutBufLen As Int32) As Integer
	Private Declare Function LocalAlloc Lib "coredll" (ByVal uFlags As Integer, ByVal uBytes As Integer) As IntPtr
	Private Declare Function LocalFree Lib "coredll" (ByVal hMem As IntPtr) As IntPtr
	Public Sub Main()
		Dim MacAddress() As Byte=GetMacAddress()
		Console.WriteLine("Address=" & BitConverter.ToString(MacAddress))
		Console.Write("Hit Any Key")
		Console.ReadLine()
	End Sub
	Public Function GetMacAddress() As Byte()
		Dim AdapterInfo As IntPtr=IntPtr.Zero
		Try
			Dim Size As Integer=0
			If GetAdaptersInfo(AdapterInfo, Size) = ERROR_BUFFER_OVERFLOW Then
				AdapterInfo=LocalAlloc(LMEM_FIXED Or LMEM_ZEROINIT, Size)
				GetAdaptersInfo(AdapterInfo, Size)
			End If
			Dim Offset As New IntPtr(AdapterInfo.ToInt32() + 400)
			Dim AddressLength(0) As Integer
			Marshal.Copy(Offset, AddressLength,0,1)
			If AddressLength(0)>=1 And AddressLength(0)<=7 Then
				GetMacAddress=New Byte(AddressLength(0) - 1){}
				Offset = New IntPtr(AdapterInfo.ToInt32() + 404)
				Marshal.Copy(Offset, GetMacAddress,0,AddressLength(0))
			End If
		Finally
			If Not AdapterInfo.Equals(IntPtr.Zero) Then
				If Not IntPtr.Zero.Equals(LocalFree(AdapterInfo)) Then
					Throw New System.ComponentModel.Win32Exception(System.Runtime.InteropServices.Marshal.GetLastWin32Error())
				End If
				AdapterInfo=IntPtr.Zero
			End If
		End Try
	End Function
End Module

 
Posted at 20:48 / .NET / この記事のURL
コメント(2)
[VB.NET] 管理者権限の有無をチェックする / 2004年11月08日(月)

セキュリティ関連の習作です。管理者権限を保有しているかどうかをチェックしていますが、もっとスマートな方法があっても良さそうなので、現在は別の手法を調査中です。


[11/08/2004]VBレスキュー(VB.NET・他用掲示板)

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
	If Array.IndexOf(GetRoles(), "BUILTIN\Administrators") >= 0 Then
		MessageBox.Show("管理者権限があります。")
	Else
		MessageBox.Show("Administratorsグループのメンバではありません。")
	End If
End Sub

Private Function GetRoles() As String()
	Return GetRoles(System.Security.Principal.WindowsIdentity.GetCurrent())
End Function

Private Function GetRoles(ByVal winIdentity As System.Security.Principal.WindowsIdentity) As String()
	Return DirectCast(winIdentity.GetType().InvokeMember("_GetRoles", Reflection.BindingFlags.Static Or Reflection.BindingFlags.InvokeMethod Or Reflection.BindingFlags.NonPublic, Nothing, winIdentity, New Object() {winIdentity.Tokenz, Nothing), String())
End Function

 
Posted at 10:31 / .NET / この記事のURL
コメント(1)
DLL Help Databaseの更新 / 2004年11月03日(水)
いつの間にか、Microsoft DLL Help Database日本語化されたようです。
( 今までも、日本製品のDLL検索はできていましたが、案内文などは英語表記でした。)

http://support.microsoft.com/dllhelp/


しかし、新しい検索画面は、どうも読みにくい…。

ファイル別検索を行った時の検索結果が、内部的なID(ファイルID?)の順でソートされているみたい。以前の検索画面では、ファイルバージョン順にソートされていたのになぁ。

Microsoftに、フィードバック報告してみるかな…。

 
Posted at 03:26 / 雑記 / この記事のURL
コメント(2)
P R

Microsoft Most Valuable Professional, Visual Developer - Visual BasicMSMVP for Visual Basic


Global Media Online INC.