ACCESSから起動できないプログラムでVBからは起動できる
そんな場合にACCESSからパラメータとして文字送信をし
VBで受け取りその内容に応じて処理を行う
windows32 APIを利用 SendMessage
送信側 (ACCESS)
Option Compare Database
Option Explicit
'ウィンドウハンドル取得
Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" _
(ByVal lpClassName As String, ByVal lpWindowName As String) As Long
'子ウィンドウハンドル取得
Private Declare Function FindWindowExA Lib "user32" _
(ByVal hpar As Long, ByVal hchi As Long, ByVal cnm As String, ByVal cap As String) As Long
'メッセージ送信
Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" _
(ByVal hWnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long
Private Const WM_COPYDATA = &H4A
Private Type COPYDATASTRUCT
dwData As Long
cbData As Long
lpData As String
End Type
Function strSend()
Dim hWnd As Long
Dim sdtCOPYDATASTRUCT As COPYDATASTRUCT
Dim txtSendData As String
txtSendData = "ABCDEFG"
Dim Ret As Long
'送信データ格納
sdtCOPYDATASTRUCT.dwData = 0
sdtCOPYDATASTRUCT.cbData = LenB(txtSendData) + 1
If Nz(txtSendData, "") = "" Then
sdtCOPYDATASTRUCT.lpData = vbNullChar
Else
sdtCOPYDATASTRUCT.lpData = txtSendData '送信データ
End If
'受信側のウィンドウハンドル取得
hWnd = FindWindow(vbNullString, "フォーム名")
If hWnd <> 0 Then
Call SendMessage(hWnd, WM_COPYDATA, 0, sdtCOPYDATASTRUCT)
End If
End Function
受信側 VB.NET
'COPYDATASTRUCT構造体
Public Structure COPYDATASTRUCT
Public dwData As IntPtr '送信する32ビット値
Public cbData As Int32 'lpDataのバイト数
Public lpData As String '送信するデータへのポインタ(0も可能)
End Structure
Public Const WM_COPYDATA As Int32 = &H4A
Public Const WM_USER As Int32 = &H400
Protected Overrides Sub WndProc(ByRef m As System.Windows.Forms.Message)
Select Case m.Msg
Case WM_USER
'数値が送信されて来た
TextBox1.Text = m.WParam.ToString()
'txtInt2.Text = m.LParam.ToString()
Case WM_COPYDATA
'文字が送信されて来た
Dim mystr As COPYDATASTRUCT = New COPYDATASTRUCT()
Dim mytype As Type = mystr.GetType()
mystr = CType(m.GetLParam(mytype), COPYDATASTRUCT)
TextBox1.Text = mystr.lpData
End Select
MyBase.WndProc(m)
End Sub
Private Sub TextBox1_TextChanged(sender As System.Object, e As System.EventArgs) Handles TextBox1.TextChanged
’TextChangedイベントトラップを使って処理を実行
MessageBox.Show(Me.TextBox1.Text)
Me.TextBox1.Text = " "
End Sub
VBでしか動かせないものがある場合に使用出来ます。
VBフォームを予めOpenしておかなければならない点が我慢できるのであれば
選択肢として使えるのではないかと思います。
2014年12月26日金曜日
2013年7月18日木曜日
完全バックアップを別データベースに復元する方法
1.SQLServer Management Studio を起動
2.「データベース」を右クリックして、「新しいデータベース」を作成
3.「データベース」を右クリックして、「データベースの復元」をクリック
4.「全般」タブの復元先→復元先データベースに上で新規作成したデータベースを選択
5.「 復元用のソース」で「デバイスから」をチェックし、完全バックアップファイルを指定
6.[オプション]タブで「既存のデータベースを上書きする」をチェック
7.[OK]
8.完了
■注意1
「オプション」タブの「既存のデータベースを上書きする」のチェックを行いわないと
バックアップ セットは、既存のデータベース ‘%ls’ 以外のデータ
ベースのバックアップを保持しています。
といったエラーメッセージが表示される
■注意2
「オプション」タブの「次のデータベースファイルに復元」で
•databasename.mdf
•databasename_log.ldf
ともに、新しく作成したDBのものを参照していることを確認。間違ったパスを参照していると
サーバー’サーバ名’の復元に失敗しました。(Microsoft.SqlServer.Smo)
追加情報:
System.Data.SqlClient.SqlError:オペレーティング システム エラー3(指定されたパスが見つかりません)により、ファイル”mdf ファイルへのパス”のディレクトリ参照に失敗しました。(Microsoft.SqlServer.Smo)
といったメッセージが表示される。
2.「データベース」を右クリックして、「新しいデータベース」を作成
3.「データベース」を右クリックして、「データベースの復元」をクリック
4.「全般」タブの復元先→復元先データベースに上で新規作成したデータベースを選択
5.「 復元用のソース」で「デバイスから」をチェックし、完全バックアップファイルを指定
6.[オプション]タブで「既存のデータベースを上書きする」をチェック
7.[OK]
8.完了
■注意1
「オプション」タブの「既存のデータベースを上書きする」のチェックを行いわないと
バックアップ セットは、既存のデータベース ‘%ls’ 以外のデータ
ベースのバックアップを保持しています。
といったエラーメッセージが表示される
■注意2
「オプション」タブの「次のデータベースファイルに復元」で
•databasename.mdf
•databasename_log.ldf
ともに、新しく作成したDBのものを参照していることを確認。間違ったパスを参照していると
サーバー’サーバ名’の復元に失敗しました。(Microsoft.SqlServer.Smo)
追加情報:
System.Data.SqlClient.SqlError:オペレーティング システム エラー3(指定されたパスが見つかりません)により、ファイル”mdf ファイルへのパス”のディレクトリ参照に失敗しました。(Microsoft.SqlServer.Smo)
といったメッセージが表示される。
2012年3月8日木曜日
メモリ上のゴミ掃除アプリ empty.exe
動作が遅くなった場合に有効なアプリ empty.exe
入手方法
「Windows Server 2003 Resource Kit Tools」
これをダウンドーロ
ファイル名
「rktools.exe」をダウンロードし解凍する
その中の
rktools.msiをインストール
インストールされる場所だが32ビット版と64ビット版で以下のようになる。
32ビット版の場合:C:\Program Files\Windows Resource Kits\Tools\
64ビット版の場合:C:\Program Files (x86)\Windows Resource Kits\Tools\
■「empty.exe」をsystem32フォルダにコピーする
メモ帳を使ってバッチファイルを作成する
@echo
offempty.exe *
を入力
拡張子.batで登録完了
入手方法
「Windows Server 2003 Resource Kit Tools」
これをダウンドーロ
ファイル名
「rktools.exe」をダウンロードし解凍する
その中の
rktools.msiをインストール
インストールされる場所だが32ビット版と64ビット版で以下のようになる。
32ビット版の場合:C:\Program Files\Windows Resource Kits\Tools\
64ビット版の場合:C:\Program Files (x86)\Windows Resource Kits\Tools\
■「empty.exe」をsystem32フォルダにコピーする
メモ帳を使ってバッチファイルを作成する
@echo
offempty.exe *
を入力
拡張子.batで登録完了
2012年2月6日月曜日
スマートフォンを安く運用
イオンSIMで月980円 通信速度 100kbps ←これは基本
イオン新サービスで
音声通話プラン プラスで 月額基本料 1,290円(税込)プランS
無料通話 1,365円(最大32.5分)
超過分 21円/30秒
電話番号は変わらない
これで一応音声通話が可能
代替え案で
BlueSIPフォン
初期登録料・・・・・525円
基本料・・・・637.35円
通話料・・・・基本的に21円/分
電話番号はIPの電話番号に変わる
もう少しで今までのようにコストをかけなくてもスマートフォンをもつことができそうだ。
やはり少なからずスマホのサービスを教授できることがこれからは望ましいと思う。
イオン新サービスで
音声通話プラン プラスで 月額基本料 1,290円(税込)プランS
無料通話 1,365円(最大32.5分)
超過分 21円/30秒
電話番号は変わらない
これで一応音声通話が可能
代替え案で
BlueSIPフォン
初期登録料・・・・・525円
基本料・・・・637.35円
通話料・・・・基本的に21円/分
電話番号はIPの電話番号に変わる
もう少しで今までのようにコストをかけなくてもスマートフォンをもつことができそうだ。
やはり少なからずスマホのサービスを教授できることがこれからは望ましいと思う。
2012年2月5日日曜日
CPUの世代
最新CPUは高いので型落ちを狙います。その目安で一覧を確認。
年 コードネーム プロセス
2006年 Merom 65nm Core Micro Architecture
2007年 Penry 45nm Core Micro Architecture, SSE4.1
2008年 Nehalem 45nm Native Quad-core,メモリコントローラ統合
2010年 Westmere 32nm GPUコアを同一パッケージ化, AES-NI
2011年 SandyBridge 32nm GPUコアを1ダイに統合, AVX
2012年 IvyBridge 22nm Die stacking technology導入?
2013年 Haswell 22nm Die stacking technologyの本格導入が検討されているよう以前はこのあたりで“Larrabee”統合と言われていたようだが、現在では先送りされている
2014年? Broadwell 16nm 以前は“Rockwell”と言われていた世代
2015年? SkyLake 16nm Larrabee 2を統合するといわれているが、GenX graphicsも検討されているよう
2016年? Skymont 11nm
年 コードネーム プロセス
2006年 Merom 65nm Core Micro Architecture
2007年 Penry 45nm Core Micro Architecture, SSE4.1
2008年 Nehalem 45nm Native Quad-core,メモリコントローラ統合
2010年 Westmere 32nm GPUコアを同一パッケージ化, AES-NI
2011年 SandyBridge 32nm GPUコアを1ダイに統合, AVX
2012年 IvyBridge 22nm Die stacking technology導入?
2013年 Haswell 22nm Die stacking technologyの本格導入が検討されているよう以前はこのあたりで“Larrabee”統合と言われていたようだが、現在では先送りされている
2014年? Broadwell 16nm 以前は“Rockwell”と言われていた世代
2015年? SkyLake 16nm Larrabee 2を統合するといわれているが、GenX graphicsも検討されているよう
2016年? Skymont 11nm
2011年11月28日月曜日
DataGridviewのEnterによるタブ指定移動
久しぶりの投稿です。
DatagridviewによるEnterでのTAB移動は通常は下の段に移動します。これを横移動させる方法としては検索すると周知の通りだとおもいます。
さらにこの移動を自在にコントロールしたいと考えたのですがそこまでの需要が無いのか方法がまったくと言っていいほど見当たりませんでした。
そこで簡単に出来ないかと色々試したのですが一番簡単な方法としては次のようになりました。
まずはDatagridviewをオーバーライドします。このオーバーライドしたDatagridviewからでなければ話が先に進みません
Module Datagridview_EX
Public Class CustomDataGridView
Inherits DataGridView
Protected Overrides Function ProcessDialogKey( _
ByVal keyData As Keys) As Boolean
'Enterキーが押された際に、タブキーが押されたことにし、
'それ以外のキーの場合は、通常どおり実行します。
If (keyData And Keys.KeyCode) = Keys.Enter Then
Return Me.ProcessTabKey(keyData)
Else
Return MyBase.ProcessDialogKey(keyData)
End If
End Function
Protected Overrides Function ProcessDataGridViewKey( _
ByVal e As KeyEventArgs) As Boolean
'Enterキーが押された際に、タブキーが押されたことにし、
'それ以外のキーの場合は、通常どおり実行します。
If e.KeyCode = Keys.Enter Then
Return Me.ProcessTabKey(e.KeyCode)
Else
Return MyBase.ProcessDataGridViewKey(e)
End If
End Function
End Class
End Module
これで
CustomDataGridViewがツールボックスに新しいコンポーネントとして登録されます。
そこからですが
Return Me.ProcessTabKey(keyData)
この部分がTAB移動させるプロパティに
And Me.ProcessLeftKey(keyData)を後ろに追加する。これは矢印キーを押したことになります。
こうすることで左から順に処理されます。
それでカーソルの位置情報をから指定のTABオーダー制御すると簡単な移動であれば対処が可能となりました。
より複雑な移動は独自で関数などを作成しなければなりませので、判り次第追記しようとおもいます。
尚、Datagridviewで今いるセルの位置情報は下記で取得出来ます。
Private Sub CustomDataGridView1_CellEnter(ByVal sender As System.Object, ByVal e As System.Windows.Forms.DataGridViewCellEventArgs) Handles CustomDataGridView1.CellEnter
Me.ROWCNT.Text = e.RowIndex
Me.ColumnNo.Text = e.ColumnIndex
Me.ROWNO.Text = e.RowIndex
CustomDataGridView1.Focus()
End Sub
フォームにROWCNTのテキストBOXとColumnNoというテキストBOXを配置して下さい。
登録:
投稿 (Atom)