Take it easy!

プログラム

OracleExpress

by achi on Dec.02, 2013, under VB.NETテクニック, プログラム

 それまで自PCが最初にメールサーバーへ接続した時間を取得して出社時間、最後のチェックをもって退社時間としていた。しかしメールサーバーの停止処置によりこの作業がとん挫。

そこで自PC内でOracleExpressを稼働させ勤怠管理してみようと言う発想からスタート。

ボタン操作が必須にはなるが、Oracleへの接続を試す意味でも有効であると認識。今回は単純に出社データ追加と退社データ追加をボタンで操作する。

クラスを丸ごと記載するが特に問題は無いと思われる。

Imports System.Data.Common
Imports Oracle.DataAccess.Client
Public Class Form1
Private Sub Form1_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
‘ProviderFactoryの設定
Dim factory As DbProviderFactory = _
DbProviderFactories.GetFactory(”Oracle.DataAccess.Client”)
Dim csbuilder As DbConnectionStringBuilder = _
factory.CreateConnectionStringBuilder
csbuilder(”Data Source”) = “localhost:1521/xe”
csbuilder(”User ID”) = “OraUser”
csbuilder(”Password”) = “OraPassword”

‘データベース接続
Dim conn As DbConnection = factory.CreateConnection()
conn.ConnectionString = csbuilder.ConnectionString
conn.Open()

‘データアクセス処理
Dim cmd As DbCommand = factory.CreateCommand()
cmd.Connection = conn
cmd.CommandType = CommandType.Text
cmd.CommandText = “SELECT * FROM MyName_Table”
Dim reader As DbDataReader = cmd.ExecuteReader()
Do While reader.Read()
Label1.Text = reader.GetString(0)
Loop
‘Close
conn.Close()
conn.Dispose()

Dim My_Day As String = Format(Now, “yyyy/MM/dd”)
Dim My_Time As String = Format(Now, “HH:mm:ss”)
TextBox1.Text = My_Day
TextBox2.Text = My_Time
End Sub

Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click
‘Time Get
Dim My_Day As String = Format(Now, “yyyy/MM/dd”)
Dim My_Time As String = Format(Now, “HH:mm:ss”)
Dim My_Name As String = Label1.Text
Dim My_In As String = “IN”
Dim OraConn As New OracleConnection
Dim strSQL As String = “INSERT INTO K_OUTIN(K_NAME, K_DATE, INOROUT, K_TIME) ”
strSQL &= ” VALUES(’” & My_Name & “‘, ‘” & My_Day & “‘, ‘” & My_In & “‘, ‘” & My_Time & “‘) ”

OraConn.ConnectionString = _
“user id=OraUser;” & _
“password=OraPassword;” & _
“Data Source=localhost:1521/xe”
Dim OraCmd As New OracleCommand(strSQL, OraConn)
OraConn.Open()
OraCmd.ExecuteNonQuery()
OraConn.Close()
Label2.Text = “データ追加完了!”
End Sub
Private Sub Button2_Click(sender As System.Object, e As System.EventArgs) Handles Button2.Click
‘Time Get
Dim My_Day As String = Format(Now, “yyyy/MM/dd”)
Dim My_Time As String = Format(Now, “HH:mm:ss”)
Dim My_Name As String = Label1.Text
Dim My_Out As String = “OUT”
Dim OraConn As New OracleConnection
Dim strSQL As String = “INSERT INTO K_OUTIN(K_NAME, K_DATE, INOROUT, K_TIME) ”
strSQL &= ” VALUES(’” & My_Name & “‘, ‘” & My_Day & “‘, ‘” & My_Out & “‘, ‘” & My_Time & “‘) ”

OraConn.ConnectionString = _
“user id=OraUser;” & _
“password=OraPassword;” & _
“Data Source=localhost:1521/xe”
Dim OraCmd As New OracleCommand(strSQL, OraConn)
OraConn.Open()
OraCmd.ExecuteNonQuery()
OraConn.Close()
Label2.Text = “データ追加完了!”
End Sub

Private Sub Button3_Click(sender As System.Object, e As System.EventArgs) Handles Button3.Click
Me.Close()
Application.Exit()
End Sub

End Class

Leave a Comment more...

VisualStudio2010でSQLServer2000へ接続

by achi on Sep.10, 2012, under VB.NETテクニック, プログラム

 VS2010では悲しいことにデータベースエクスプローラではSQL2000がサポートされない。

 どっこらしょ、っと二種類のDB、テーブルへ接続してレコードを取得、DataGridViewへ放り込んだソース。

 備忘録として記録。

Imports System.Data.SqlClient
Public Class Form1
    Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click
        If RadioButton2.Checked Then
            Dim connectionStr As String
            Dim sqlStr As String
            Dim dtsrc As New DataTable
            Dim nsda As SqlDataAdapter
            Try
                ‘接続
                connectionStr = “Server=ServerAddress;Initial Catalog=DB_Name;User ID=User;Password=password”
                Dim tnc1 As String = “”
                Dim tnc2 As String = “”
                Dim tnc3 As String = “”
                Dim tnc4 As String = “”
                Dim dbname As String = “”
                Select Case ComboBox1.Text
                    Case anyting
                        dbname = “dbname”
                End Select
                sqlStr = “Select * From  ” & dbname & ” ”
                If TextBox1.Text <> “” Then
                    tnc1 = TextBox1.Text
                    sqlStr = sqlStr & ” Where nou_tcd = ” & tnc1 & “”
                End If
                If TextBox2.Text <> “” Then
                    tnc2 = TextBox2.Text
                    sqlStr = sqlStr & ” or nou_tcd = ” & tnc2 & “”
                End If
                If TextBox3.Text <> “” Then
                    tnc3 = TextBox3.Text
                    sqlStr = sqlStr & ” or nou_tcd = ” & tnc3 & “”
                End If
                If TextBox4.Text <> “” Then
                    tnc4 = TextBox4.Text
                    sqlStr = sqlStr & ” or nou_tcd = ” & tnc4 & “”
                End If
                ‘コネクション生成
                Using con = New SqlConnection(connectionStr)
                    ‘接続
                    con.Open()
                    ‘SqlCommand生成
                    Dim cmd = New SqlCommand(sqlStr, con)
                    nsda = New SqlDataAdapter(cmd)
                    nsda.Fill(dtsrc)
                    DataGridView1.DataSource = dtsrc
                    con.Close()
                    con.Dispose()
                End Using
            Catch ex As Exception
                MsgBox(ex.Message)
            Finally
            End Try
        ElseIf RadioButton1.Checked Then
            Dim connectionStr As String
            Dim sqlStr As String
            Dim dtsrc As New DataTable
            Dim nsda As SqlDataAdapter
            Try
                ‘接続
                connectionStr = “Server=ServerAddress;Initial Catalog=DB_Name;User ID=User;Password=password”
                Dim otherdb As String = “otherdb”
                sqlStr = “Select * From  ” & otherdb & ” ”
                ‘コネクション生成
                Using con = New SqlConnection(connectionStr)
                    ‘接続
                    con.Open()
                    ‘SqlCommand生成
                    Dim cmd = New SqlCommand(sqlStr, con)
                    nsda = New SqlDataAdapter(cmd)
                    nsda.Fill(dtsrc)
                    DataGridView1.DataSource = dtsrc
                    con.Close()
                    con.Dispose()
                End Using
            Catch ex As Exception
                MsgBox(ex.Message)
            Finally
            End Try
        End If
    End Sub
    Private Sub Button3_Click(sender As System.Object, e As System.EventArgs) Handles Button3.Click
        Me.Close()
    End Sub
    Private Sub Button4_Click(sender As System.Object, e As System.EventArgs) Handles Button4.Click
        Dim setcont1 As String = “使い方説明”
        Dim setcontal As String
        setcontal = setcont1 & vbCrLf
        MsgBox(setcontal)
    End Sub
End Class

Leave a Comment more...

ファイルサーバー内の文書をnamazuで検索

by admin on Jun.21, 2012, under プログラム

 社内ファイルサーバーはFreeBSD4.7Rにて2003年頃に構築。当初は17GB+9GBの構成でスタートした。
 部署ごとに格納エリアを限定したが、共有モードでの開始であったため操作性が程よく、効率的な運用に見えて保存量が日増しに増加。
 2005年には容量不足を解消するために20GBを増設した。

 2010年にはディレクトリ構成の工夫も打つ手が無くなり根本的な容量不足となった。
 そこでOSのバージョンアップ(FreeBSD8.1R)と環境再構築を決意。筐体は同一だがメモリ容量を倍以上(168MB->384MB)にし、HDDも36GB+20GB+20GBとかなり余裕を持たせた。
 これにより安定運用が可能となったが、逆に保存されているファイルがあまりに多く、利用者が保存したファイルを見つけられない現象も発生するようになった。

 一時的にファイル一覧をリアルタイムで作成しファイル名を検索するcgiを用意したが利用頻度は低いと思われる。

 これらの事情からnamazuの導入を検討。
 namazuについては2000年頃にメールマガジンをDB化した実績があった。

 必要なモジュールやライブラリも含めて改めてインストールし、環境を整備した。稼働が可能な状況になったところで全文書のindex作成手順へ進む。
 しかしここで問題が発生。
 sambaによるファイルサーバーではクライアントが全てWindowsであることからCP932で統一している。ディレクトリ名やファイル名はほぼ自由に設定されていた。
 しかしnamazuはディレクトリ名やファイルを基本的にhtml化してwebでの扱いが可能な構成を前提としてデータを作成する。そうなるとCP932のディレクトリ名は環境依存文字が含まれた場合に正常な動作が期待できなくなる。この原因にたどり着くまで試行錯誤を繰り返した。
 ISO-2022JPでの検索が可能な環境でないとファイルはおろかディレクトリも掘り下げることが出来ない。namazuの制限もあって非常に苦しい状況であることがわかった。
 こうなるとサーバー内でnamazuのindex作成は不可能と言うことになる。

 そこでindex作成だけをWindowsのPCで実施出来ないか検討を始める。
 これはファイルサーバーの文書保存領域は基本的に共有であるため、アクセスが可能であることが前提となる。問題は共有エリアにある文書のindexをファイルサーバー内のどこかに格納できればいいだけとなる。

 まずはWindowsPCにnamazu環境を整える。幸いなことにMS-Officeのフィルター、PDFのフィルターが用意されていたことからPC-UNIXとそん色なく環境構築が可能になると判断。
 ファイルサーバー共有領域をnamazu作業用PCからアクセスできるよう共有設定を見直してマウント。同じくnamazuのindexを格納する領域もマウント。
 mknmzの設定でそれぞれのディレクトリへ接続して作業開始。この際の肝は–decode-base64 -Uのおまじないであった。

 ファイルサーバー内は実際には各部署を統括するエリアごとにディレクトリを配置し、その配下に各拠点のディレクトリが存在する。
 検索作業や結果表示をよりわかりやすくするため、indexもエリアごとに配置する事に決定。
 namazuのindexディレクトリをエリア単位に分けて配置する。indexはエリアを選択して検索できるように構成する。

 indexの作成が完了した段階でTopサイトの情報には更新日などの情報がないため、各indexディレクトリのlogから更新日情報だけを更新するcgiを用意。これによりいつの時点のファイルが検索対象かわかるようにした。

 ○WindowsPCでの作業
  ファイルサーバーの文書保存領域へ接続しドライブを割り当てる。
  ファイルサーバーnamazuのindex作成領域へ接続しドライブを割り当てる。
  文書保存領域内の文書を対象にmknmzを実行しindexを作成する。
 ○FreeBSDファイルサーバーでの作業
  全てのエリアのindex作成が完了次第、各エリアindexのlogから最終更新日を取得しTopページのheaderを書き換える。

 以上でファイルサーバー文書の検索サイト構築完了

 なお以降文書の追加や更新に対応するため、毎週一回mknmzを自動実行させる。
 mknmzはindexが既に存在すれば更新モードとして稼働し、index作成履歴を参照しながら差分を更新する。

Leave a Comment more...

P.D.C.A.とか自己啓発とか

by achi on Feb.15, 2011, under プログラム

 既に二年以上前に自己啓発支援と位置付けてP.D.C.A.の思考サークルを回すお手伝いが可能なようにとプログラムを作成した。

その後一部利用している声も聞いたが、果たして効果が上がっているのか大いに疑問であった。
そもそも「自己啓発」であるから、個人の意識やモチベーションに依存する。それでも支援ツールなのだから少しは貢献して欲しいと願っていた。

今見直しを進めようとしている。前回はP.D.C.A.の思考管理サークルに「なぜの繰り返し」をアドバイスした。しかしP.D.C.A.に対して「何故」を盛り込もうとすると通常の思考経路からは外れてしまう側面も持つようだ。
そこで今回は「なぜの繰り返し」に主眼を置いて開発して行こうかと考えている。
名付けて「なぜなぜヘルパー」。事象の発生に対して追記がしやすく、自分自身の「気づき」を支援することを目標にしたい。リリースはいつになるか分からないが自分なりに納期を決めている。

キーワードはP.D.C.A. 自己啓発 自己研鑚 ジレンマ モチベーション

Leave a Comment more...

カレンダプログラム

by achi on Oct.29, 2010, under プログラム

 ちょうど一年ほど前の2009/10に出かけた先で急に三か月先のカレンダを見たくなって急きょ作ったプログラム。
 その後仕事でも使えないかと試行錯誤を繰り返して、ある程度形になったところでリリース。

 このプログラムは、今月から六カ月間のカレンダを表示し、指定した日付で情報を保存できる機能を持たせた。
 一年経過すると記録したファイルもかなり増えている。

 今回「どこかに書いたなぁ」と不確かな記憶でファイルを保存しているフォルダを開いてみるものの、ファイルの一覧を見ただけでげっそりしてしまい、結局中身まで確認できないでいた。
 もちろんこのファイルの中には不要なものも存在するはずだが、きっと重要な記録もはるはず。
 そこでこのカレンダプログラムを少しだけ改良する事にした。端的に言えば機能を追加した訳だが。

 カレンダを表示しながら決められたボタンを押すと保存されているファイルの一覧が表示される。
 どれかファイルを選択すると内容を表示する、と言う単純なものだ。
 もちろん選択ファイルの削除も実施する。
 とりあえず一旦保存した情報の価値を考えて内容を更新する事は考えていない。

 と言う事で久しぶりのリリース。
  MyCalenderVer.2.0 

Leave a Comment more...

CIntとRoundの予想外結果

by achi on May.14, 2009, under プログラム

 ごく常識的に利用してきたCInt関数とRound関数。

ある日部下から指摘を受けて妙な現象に遭遇。

計算結果が期待どおりになっていないと報告を受ける。

調べてみると、「まるめ」を行っている為に期待した四捨五入とは異なる結果が格納されている事が判明した。MS-KBで調べてみると、独自の誤差を調整する目的で偶数に近い方でまるめ処理が行われているような事が記載されている。

ここでCIntとRoundが使えないことになる。

これまで信頼して利用していただけに、この結果には残念な思いが残るが、それだけ浮動小数点の扱いは慎重に行うべきだと言う事か。

ASPも.NETもオリジナルの四捨五入関数が必要だな。

念のため、現役SEにも尋ねてみた。すると返答は、

「業界では常識だよ」との事。もっと早く教えてくれよ。。。

2 Comments more...

効率を追求すると逆効果

by achi on Apr.28, 2009, under プログラム

  2009年1月に着手したプログラムがある。
社内で利用するものだが、一旦社外のサーバーへ接続してデータを取得。その後データを自動編集して全銀フォーマットに成形するものである。

初期段階で基幹データ処理を委託している業者のサーバーへの接続手続きがあって、そこで当然IDとパスワードをエントリする必要が発生する。
利用する部署はその手の管理に疎い(と勝手に想像・・・)人が多いため、それらの管理はこちらで実施する事としてまず当面はIDもパスワードもプログラム内に埋め込もうと考えた。
もちろん本稼働時には仕組を変えたい。

最初に接続して圧縮されたデータを取得し、取得完了後に圧縮ファイルの解凍までを操作せずに流すようにしてみた。
この時作られたプログラムファイルを逆アセンブリとダンプで解析したところ・・・

 なんと!!!
IDもパスワードも丸見え!!!

予想はしていたものの、実際に見えるとびっくりするもんだ。。。
いくら内部だけで利用するとは言え、こんな仕様ではあまりに危険だと感じて、何とかせねば、とずっと試行錯誤していたわけである。

数日前に「文字を別のコードなどで置き換えてはどうかな」と考え始め、まずはChr関数を使ってダイレクトに表記しない方法を試してみる。
しかし変数に格納する段階で変数が定数的に確定扱いになっているようで、コンパイルするとまんま記述されてしまう事が判明。

う~ん、と悩んで部下にも正直に相談して、何と部下から一つのヒントが出てきた。

「変数と言う物は可変扱いですから、構造的に二段階くらいで変数を置き換えてはどうでしょう」

う~ん、何だか意味がよくわかんねぇけど、とにかくやってみるか。。。

自己流の二層変数(そんな名称でいいんかい・・・)をつくり出した。
こんな感じ。

Dim Str1 As String = “0123456789.”
Dim Str2 As String = “abcdefghijklmnopqrstuvwxyz”
Dim Str3 As String = “ABCDEFGHIJKLMNOPQRSTUVWXYZ”
Dim ipad1 As Integer = 2, ipad2 As Integer = 10, ipad3 As Integer = 3, ipad4 As Integer = 11
Dim ipad5 As Integer = 2, ipad6 As Integer = 7, ipad7 As Integer = 9, ipad8 As Integer = 11
Dim ipad9 As Integer = 4, ipada As Integer = 5, ipadb As Integer = 3, ipadc As Integer = 4
Dim ServAdr As String = “”
ServAdr = Microsoft.VisualBasic.Mid(Str1, ipad1, 1) & Microsoft.VisualBasic.Mid(Str1, ipad2, 1) & Microsoft.VisualBasic.Mid(Str1, ipad3, 1) & Microsoft.VisualBasic.Mid(Str1, ipad4, 1) & _
Microsoft.VisualBasic.Mid(Str1, ipad5, 1) & Microsoft.VisualBasic.Mid(Str1, ipad6, 1) & Microsoft.VisualBasic.Mid(Str1, ipad7, 1) & Microsoft.VisualBasic.Mid(Str1, ipad8, 1) & _
Microsoft.VisualBasic.Mid(Str1, ipad9, 1) & Microsoft.VisualBasic.Mid(Str1, ipada, 1) & Microsoft.VisualBasic.Mid(Str1, ipada, 1) & Microsoft.VisualBasic.Mid(Str1, ipad8, 1) & _
Microsoft.VisualBasic.Mid(Str1, ipadb, 1) & Microsoft.VisualBasic.Mid(Str1, ipadc, 1)

これは接続先のIPアドレスだけを定義する部分だが、同じ理論でIDもパスワードも格納してみて、ランタイムには平文では記述されていないことは確認できた。
もちろんこれで完璧なセキュリティ対策ではないのだが。。。

こんな風に考えると、効率を求めてロジックを組むことに慣れていると、意外な落し穴に気づかない事になる。

Leave a Comment more...

アンマネージDLL関数

by achi on Feb.17, 2009, under プログラム

 圧縮書庫を解凍する手順をコーディングしていて、外部関数の扱いに戸惑った。

 インストールしたのだが内部的に参照できない。

 フリーで配布されているDLLで参照できない関数が存在することも知らなかったが、その方法についても全く無知。

 これら「アンマネージ関数」の扱い方法を学んだ。

 しかしアンマネージかどうかという判断はどこですればよいのやら・・・

 「まずは参照してみなさい」ってかぁ。。。

1 Comment more...

P.D.C.A.自己啓発支援プログラム

by achi on Dec.15, 2008, under プログラム

 目的:ある事象について「P.D.C.A.」と「何故の繰り返し」を実践し根本原因へいち早くたどり着くことを支援する目的を持つ「自己啓発・自己分析支援アプリケーション」
仕様:Form1->エントリ及びベースフォーム
Form2->データファイル参照及び簡易印刷用フォーム
Form3->データファイル読み込み及び一覧参照
Form4->Form3での選択データビジュアル表示及び分析テンプレート
概要:保存されたデータを元にForm4にて最終分析・評価を行う。
作業進捗フェーズに応じたP.D.C.A.の実践を評価する。->第一段階
P.D.C.A.各項目の妥当性と問題点の把握分析->第二段階
何故項目の評価により解決策へのステップアップ->第三段階

※本プログラムの主目的は個人レベルでのスパイラルアップによる問題解決力向上のための意識改革支援です。
「カイゼン」を意識して積極的な行動を目指す”個人の方のため”に作成いたしました。

LZH形式で三つのファイルを書庫にしています。
My Documentsなどにフォルダを作成して配置してご利用ください。データファイルは本体と同じフォルダ内に作成されます。

動作確認はWindows2000,WindowsXP/SP3,WindowsXP64ED,WindowsVistaです。
VisualStudio.NET2003で作成しました。

ダウンロードはこちらから

Leave a Comment more...

MDB内に指定したテーブルが存在するか

by achi on Dec.15, 2008, under VB.NETテクニック

‘MDB内に指定したテーブルが存在するか
    ‘Table存在確認関数
    Private Function isExistsTable(ByVal strTableName As String)
        Dim objCat, objTable
        objCat = CreateObject(”ADOX.Catalog”)
        objCat.ActiveConnection = CONN
        isExistsTable = False
        For Each objTable In objCat.Tables
            If objTable.Type = “TABLE” Then
                If objTable.Name = strTableName Then
                    isExistsTable = True
                    Exit For
                End If
            End If
        Next
        objCat = Nothing
    End Function

1 Comment more...

開いているExcelBookとSheetをチェック

by achi on Dec.15, 2008, under VB.NETテクニック

‘開いているExcelBookとSheetをチェック
 ’とりあえずBook名を引数に開いているかどうか
Imports Excel = Microsoft.Office.Interop.Excel
    ‘ExcelOpen検知関数
    ‘Open: fExcelOpen(ExFileName) = True
    Private Function fExcelOpen(ByVal ExFileName As String) As Boolean
        Dim oExcel As Excel.Application
        Dim oBooks As Excel.Workbooks
        Dim oBook As Excel.Workbook
        Dim fsts As Boolean = “False”
        Dim oSheets As Excel.Sheets
        Dim oSheet As Excel.Worksheet
        Try
            ‘別プロセスのExcelを取得する
            ‘GetObjext第1引数のファイルパスは省略する
            oExcel = GetObject(, “Excel.Application”)
            ‘開いているブックを全て取得する
            oBooks = oExcel.Workbooks
            ‘ブック毎に確認
            For Each oBook In oBooks
                If oBook.Name = ExFileName Then
                    fsts = True
                End If
            Next
        Catch ex As Exception
            MessageBox.Show(ex.Message)
        Finally
            ‘COMコンポーネントの解放
            If Not oSheet Is Nothing Then
                System.Runtime.InteropServices.Marshal.ReleaseComObject(oSheet)
                oSheet = Nothing
            End If
            If Not oSheets Is Nothing Then
                System.Runtime.InteropServices.Marshal.ReleaseComObject(oSheets)
                oSheets = Nothing
            End If
            ‘COMコンポーネントの解放
            If Not oBook Is Nothing Then
                System.Runtime.InteropServices.Marshal.ReleaseComObject(oBook)
                oBook = Nothing
            End If
            If Not oBooks Is Nothing Then
                System.Runtime.InteropServices.Marshal.ReleaseComObject(oBooks)
                oBooks = Nothing
            End If
            If Not oExcel Is Nothing Then
                System.Runtime.InteropServices.Marshal.ReleaseComObject(oExcel)
                oExcel = Nothing
            End If
        End Try
        Return fsts
    End Function

2 Comments more...

簡単エディタ

by achi on Nov.25, 2008, under プログラム

最近歳のせいか物忘れが激しくなってきた。ふとした事もしばらく他の事を考えると忘れてしまう。大切な用事でも、だ。
そこで簡単にメモに残せるものを作ってみた。
付箋やメモ帳など便利なツールもそれなりに存在するが、日付や時間、簡単にタイトルだけ、なんて言うわがままな保存方法にはなかなか対応できない。
この「簡単エディタ」は、何も書かずにボタンを押すだけでも日付と時間を記録する。もちろんそれだけでは何があったのかを思い出す事は難しいだろう。
そこで「タイトルだけ」というものも用意している。詳細に中身を残したければ自由に記述でき、印刷も可能。

ただし記録した内容は個別に消すことはできない。
記録するファイルは単純なテキストファイルであるため、後で中身を直接編集することや、不必要な項目だけ削除などが可能。

まあ、性格に合っていると感じた方のみお使い下さい。

LZHで圧縮しています。どこかフォルダを作成して保存し、直接起動させます。
記録用のファイルは本体と同じフォルダ内に作成されます。

動作確認はWindows2000,WindowsXP/SP3,WindowsVistaです。Framework1.1が必要です。
VisualStudio.NET2003で作成しました。

ダウンロードはこちらから

1 Comment more...

フォーム間連携

by achi on Nov.25, 2008, under VB.NETテクニック

 データグリッドへ表示した列の内容を別のフォームへ渡す。

 渡す側のフォーム(データグリッド表示後)
    Public Form4 As New Form4
    Public MeArray As New ArrayList
    Public Sub New(ByVal fr As Form4)
        MyBase.New()
        Form4 = fr
        InitializeComponent()
    End Sub
    Private Sub myDataGrid_DoubleClick(ByVal sender As Object, ByVal e As System.EventArgs) Handles DataGrid1.CurrentCellChanged
        Const RowRule As Integer = 18 ‘RowCount固定している。実際にはTable.Rows.Count - 1 など
        Dim cm As CurrencyManager = CType(DataGrid1.BindingContext(DataGrid1.DataSource, DataGrid1.DataMember), CurrencyManager)
        Dim dr As DataRow = CType(cm.Current, DataRowView).Row
        For i As Integer = 0 To RowRule
            MeArray.Add(dr.ItemArray(i))
        Next
        If Form4 Is Nothing = False Then
            Form4.OurArray = Me.MeArray
        End If
        Form4.Show()
        Me.Hide()

    End Sub

 受け取り側のフォーム
    ‘Form3の配列を取得
    Private Form3 As Form3
    Private mHensu As New ArrayList
    Public Property OurArray() As ArrayList
        Get
            Return mHensu
        End Get
        Set(ByVal Value As ArrayList)
            For i As Integer = 0 To 18 ‘行の項目数を固定しているため
                mHensu.Add(Value(i))
            Next
        End Set
    End Property

Leave a Comment more...

ファイルサーバー接続&ドライブ割り当て

by achi on Nov.25, 2008, under VB.NETテクニック

ファイルサーバーに接続してログインし、必要なフォルダをドライブ割り当てして作業するケースでの手法。作業後はドライブを切断する。

Imports System.Data.OleDB
    Public Declare Function WNetAddConnection2 Lib “mpr.dll” Alias “WNetAddConnection2A” (ByRef lpNetResource As NETRESOURCE, ByVal lpPassword As String, ByVal lpUserName As String, ByVal dwFlags As Integer) As Integer
    Public Declare Function WNetCancelConnection Lib “mpr.dll” Alias “WNetCancelConnection2A” (ByVal lpName As String, ByVal lpPlof As Integer, Optional ByVal fForce As Boolean = False) As Boolean
    Public Structure NETRESOURCE
        Public dwScope As Integer
        Public dwType As Integer
        Public dwDisplayType As Integer
        Public dwUsage As Integer
        Public lpLocalName As String
        Public lpRemoteName As String
        Public lpComment As String
        Public lpProvider As String
    End Structure
    Private Const RESOURCE_CONNECTED As Integer = &H1
    Private Const RESOURCETYPE_ANY As Integer = &H0
    Private Const RESOURCEDISPLAYTYPE_SHARE As Integer = &H3
    Private Const CONNECT_UPDATE_PROFILE As Integer = &H1
    Public Function ConnectSrv(ByVal pstrRemoteName As String, ByVal pstrUID As String, ByVal pstrPWD As String) As Long
        Dim typNetResource As NETRESOURCE
        Dim lngRet As Long
        With typNetResource
            .dwScope = RESOURCE_CONNECTED
            .dwType = RESOURCETYPE_ANY
            .dwDisplayType = RESOURCEDISPLAYTYPE_SHARE
            .lpLocalName = “Z:” ‘実際には空きドライブを検索するのがベター
            .lpRemoteName = pstrRemoteName
        End With
        lngRet = WNetAddConnection2(typNetResource, pstrPWD, pstrUID, CONNECT_UPDATE_PROFILE)
        If lngRet = 0 Then
            TextBox1.Text = “Connected”
        Else
            TextBox1.Text = “Disconnect”
        End If
    End Function
    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        Dim Cn As New OleDbConnection(”Provider=Microsoft.Jet.OLEDB.4.0;Data Source=Z:\xxx\xxx.mdb”) ‘今回はmdbを操作
        Dim SQLCm As OleDbCommand = Cn.CreateCommand
        Dim Adapter As New OleDbDataAdapter(SQLCm)
        Dim Table As New DataTable
        SQLCm.CommandText = “SELECT * FROM xxx ORDER BY xxx.xxx”
        Adapter.Fill(Table)
        DataGrid1.DataSource = Table

        ‘実作業

        Table.Dispose()
        Adapter.Dispose()
        SQLCm.Dispose()
        Cn.Dispose()
    End Sub
    Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
        Dim RmHost As String = “\\サーバーアドレス\フォルダ”
        Dim RmUID As String = “ユーザー名”
        Dim RmPWD As String = “パスワード”
        ConnectSrv(RmHost, RmUID, RmPWD)
    End Sub
    Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button3.Click
        Dim result As Boolean
        result = WNetCancelConnection(”Z:”, CONNECT_UPDATE_PROFILE, True)
        Debug.WriteLine(result.ToString())
        If result = “0″ Then
            TextBox1.Text = “Disconnect”
        Else
            TextBox1.Text = “Connected”
        End If
    End Sub
    Private Sub Button4_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button4.Click
        WNetCancelConnection(”Z:”, CONNECT_UPDATE_PROFILE, True)
        Me.Close()
    End Sub

19 Comments more...

文字列切断関数

by achi on Nov.25, 2008, under VB.NETテクニック

 VB.NETを使用していて、標準のPrintDocumentコントロールを使用すると、用紙幅を検知できないため、自動で折り返しが利かない。逃げの手ではあるが強制的に改行させる関数を作ってみた。

    ‘文字列切断関数
    ‘ rsltStr = fStrCut(MyString,Keta)
    Private Function fStrCut(ByVal MyString As String, ByVal Keta As Integer) As String
        If Keta < 0 Or Keta > 70 Then
            fStrCut = MyString
            MsgBox(”正しい桁ではない”, vbOKOnly, “Column Error”)
            Exit Function
        End If
        If Len(MyString) < Keta Then
            fStrCut = MyString
            Exit Function
        End If
        ‘文字列の長さ
        Dim stringLen As Integer = Len(MyString)
        If stringLen = Keta Then
            fStrCut = MyString
            Exit Function
        End If
        ‘行数
        Dim rowCount As Integer = Fix(stringLen / Keta)
        ‘最後の行の長さ
        Dim lastRowLen As Integer = stringLen Mod Keta
        ‘出力用文字列を格納する動的配列
        Dim stringArray As New ArrayList
        ‘文字列切り出し
        For fi As Integer = 0 To rowCount - 1
            Dim fk As Integer = Keta * fi + 1
            Dim str As String = Microsoft.VisualBasic.Strings.Mid(MyString, fk, Keta) & vbCrLf
            stringArray.Add(str)
        Next fi
        If lastRowLen <> 0 Then
            Dim ostr As String = Microsoft.VisualBasic.Strings.Right(MyString, lastRowLen)
            If ostr <> “” And lastRowLen <> Keta Then
                stringArray.Add(ostr)
            End If
        End If
        Dim returnStr As String = “”
        For fj As Integer = 0 To stringArray.Count - 1
            returnStr = returnStr & stringArray(fj)
        Next fj
        Return returnStr
    End Function

Leave a Comment more...

シューティングスター(ゲーム)

by achi on Nov.05, 2008, under プログラム

 その昔、BASICで公開されていたゲームプログラムをVB6でアレンジしたもの。動作にはランタイムが必要です。

またこのゲームは弱視の方々を意識して作られています。音声が必要な場合、スピーチエンジンが別途必要です。スクリーンリーダーなどをお使いの方は音声が重複することがありますので、リーダーの音声を一時的に停止することをおすすめします。
MS Agentの”マーリン”も同時にインストールされます。
インストーラーで提供しています。

ダウンロードはこちらから

動作確認:WindowsXP/SP3,WindowsXP64ED,WindowsVista
Thanks for Sakura.

2 Comments more...

ASP(ActiveServerPages)スケジュール管理

by achi on Nov.05, 2008, under プログラム

ASPによる「スケジュール管理」です。簡易な機能に限定して提供します。Windows95/98及びWindowsNT4.0環境での動作を確認しています。

ダウンロードはこちらから

Leave a Comment more...

曜日計算(ゼラーの公式)

by achi on Nov.05, 2008, under プログラム

JavaScript曜日計算

西暦年月日を与えると曜日を数値で返すスクリプト。「ゼラーの公式」をそのままスクリプトにしています。
ただし日付の妥当性は評価していませんので、実際に利用する場合は工夫が必要。
以下のサイトで説明しております。

http://worldstep.net/files/youbi.html

Leave a Comment more...

Looking for something?

Use the form below to search the site:

Still not finding what you're looking for? Drop a comment on a post or contact us so we can take care of it!

Visit our friends!

A few highly recommended friends...

Archives

All entries, chronologically...