テキスト広告:Amazon Primeday

AdMax右サイドバー広告

土曜日, 3月 01, 2008

[C言語orC++]ODBC(SQLGetData関数)

▼質問?
OracleのCHAR型を下記のように取得すると復帰値に1が返ってくるんだけどどうしてかな?
データベースの中身は取得できているみたいなんだ?!
復帰値 = SQLGetData( ハンドル, 番号, SQL_C_CHAR, &値, (SDWORD)sizeof( 値 ), &サイズ );

▼回答
データベースのサイズとプログラムで格納するサイズが同一サイズだとダメみたいなんだ。
プログラムのサイズを+1以上大きくする必要があるみたいなんだ。わかったかな?!

水曜日, 2月 27, 2008

[C言語orC++]ODBC(SQLFetch関数)

▼質問
SQLFetch関数の復帰値はどうみればいいの?

▼回答
1レコード読む時と複数行読む時で分ける必要があるよ。

1レコードの場合は次の様になるかな?!
short ret = 0;
HSTMT hstmt = SQL_NULL_HSTMT;
if ( (ret = SQLFetch( hstmt )) != SQL_NO_DATA_FOUND ) {
SQLGetData関数等でデータを取得


複数行の場合は次の様になるかな?!
HSTMT hstmt = SQL_NULL_HSTMT;
while ( SQLFetch( hstmt ) != SQL_NO_DATA_FOUND ) {
SQLGetData関数等でデータを取得


SQL_SUCCESS, SQL_SUCCESS_WITH_INFO, SQL_NO_DATA, SQL_STILL_EXECUTING, SQL_ERROR, or SQL_INVALID_HANDLE.

■参考サイト
SQLFetch - 次のデータ行
http://publib.boulder.ibm.com/html/as400/v5r1/ic2962/index.htm?info/cli/rzadpmst56.htm
SQLFetch Function
http://msdn2.microsoft.com/en-us/library/ms712424(VS.85).aspx
ODBC
http://itref.fc2web.com/odbc.html

月曜日, 2月 04, 2008

「VBA]最大列文字列の取得

▼質問
最大列の文字列を知りたいんだけど・・・。

Aとか、Bとか・・・???

▼回答
こんな風に取得できるよ。

Replace(Split(Excel.ActiveSheet.Columns(256).Address(True, True, Excel.XlReferenceStyle.xlA1), ":")(0), "$", "")

土曜日, 1月 26, 2008

[VBA]似たような関数・メソッド・プロパティ

▼質問
.Value と .Text は何が違うの?

▼回答
.Value :数値だけを表示する。
.Text: 書式設定を含めて出力する。します。(Range オブジェクトの場合は、値の取得のみ可能)

▼質問
StrとCStrは何が違うの?

▼回答
Str: 符号の1桁が常に確保されて表示される。
CStr: プラスのときにスペースが挿入されない。

■参考サイト
VBA 文字列操作 (パソコン便利ツール集)
http://makotowatana.ld.infoseek.co.jp/vba_character.html#vt

日曜日, 1月 13, 2008

[EXCEL]条件を満たすものだけをカウントしたい

▼質問
条件を満たすものだけをカウントしたい時の関数を知らないかい?

▼回答
COUNTIF関数を使えばできるよ。

使い方は

COUNTIF(検索範囲,検索条件)

だよ!

■参考サイト
Excel関数 条件を満たすものだけをカウントする(COUNTIF関数)
http://www.pursue.ne.jp/Document_xls/xls0022.htm

水曜日, 12月 19, 2007

[HTML]インラインフレーム(iframe)の更新

▼質問
インラインフレーム(IFRAME)を更新したいんだけど・・・どうしたらできるの?

▼回答
インラインフレームのオブジェクトの指定は次のようになる。

parent.document["インラインフレームNAME"]
(parent.document.インラインフレームNAMEでもOK)
document.frames["インラインフレームNAME"]←IEのみ有効らしい
(document.frames.インラインフレームNAMEでもOK)

これを踏まえると次の記述をすると更新が実現できる。

parent.document["インラインフレームNAME"].location.href=URL;


■参考
エレメントプロパティ/メソッド
value : フォーム部品に入っている文字列、または表示している文字列を取得・設定します。
innerHTML : 指定エレメントのHTML要素(タグの間)を取得します。
innerText : 指定エレメントの文字列を取得します。
tagName : 指定エレメントのタグ名を取得します。
click() : クリックします。クリック可能なエレメントであること。
outerHTML : 指定エレメントのHTML要素(タグ毎)の内容を取得します。

日曜日, 12月 09, 2007

[SQL]同じ構造で複数テーブルのデータを取得

▼質問
同じ構造をしたテーブルが複数あるときに、SQLで簡単にデータを取得することはできないの?

▼回答
UNIONを使えばできるよ。重複行は削除されるから気をつけてね。

重複行を有効にしたい時は、UNION ALLにすればできるよ。

SELECT * FROM テーブル1 WHERE フィールド1 = 値 UNION SELECT * FROM テーブル2 WHERE フィールド1 = 値

ORDER BY フィールド1とすると次のようなエラーになるんだ。

ORA-00904: "フィールド1": 無効な識別子です。

どうしてなんだ?

*をしている時は、フィールド番号を指定しないと駄目なんだ。

SELECT * FROM テーブル1 WHERE フィールド1 = 値 UNION SELECT * FROM テーブル2 WHERE フィールド1 = 値 ORDER BY 1 asc

フィールド名をしてしたい時は、*に全てのフィールドを

指定してやる必要があるんだ。

わかったかい?!

SELECT フィールド1,フィールド2,フィールド3 FROM テーブル1 WHERE フィールド1 = 値 UNION SELECT フィールド1,フィールド2,フィールド3 FROM テーブル2 WHERE フィールド1 = 値 ORDER BY フィールド1 asc

土曜日, 12月 01, 2007

[Excel]名前ボックスって何?

▼質問
「名前ボックス」って何?

▼回答
セルやセル範囲に名前が付けられることができるらしい。

知らんかった!

中級レベルなら知っているらしい。。。

おれって、初心者・・・。

■参考サイト
セルに名前をつける:Excel エクセルの使い方
http://www.relief.jp/itnote/archives/000208.php

操作方法は3つあるらしい。

①名前をつけたいセルを選択→[名前ボックス]に名前を入力して[Enter]キーを押す。
←ここから削除や変更はできないっぽい!? 違う名前を入力して同じ事を繰り返すと
追加されるみたい。表示上は文字列の昇順が最初に表示されるみたい。

②名前をつけたいセルを選択→メニュー[挿入]->[名前]->[定義]をクリック
→[名前の定義]ダイアログ-[名前]欄に名前を入力し、[OK]ボタンを押す。

③ショートカットキー[Ctrl]+[F3]で[名前の定義]ダイアログを表示する。

追加・削除は[名前の定義]ダイアログからしかできない?
変更は、削除してからじゃないと駄目っぽい!?

木曜日, 11月 29, 2007

[VB2005]日付関数

▼質問
月末日付を求めるにはどうしたらいいの?

▼回答
下記の方法で指定した前月の月末日付が取得できるよ。

DateSerial(年, 月, 0)

他にも下記の方法で同じように取得できるよ。

DateAdd("d", -1, CDate("yyyy/mm/dd"))

月末日の求め方
Dim lastDay As Integer = System.DateTime.DaysInMonth(Now.Year, Now.Month)

金曜日, 11月 23, 2007

[VB2005]複数テーブルのデータベース更新

▼質問
複数テーブルを更新する時にトランザクションの管理やエラーの時のロールバックや成功の時の
コミットはどうやるんだい?

▼回答
サンプルを示しておくから参考にしてくれ!

'接続内容設定
Dim strCon as String = "Data Source=サービス・ネーミング" & _
";User ID=ユーザ名" & _
";Password=パスワード"

'データベースコネクション確立
Dim con As OracleConnection = New OracleConnection(strConnection)

'データベースオープン
con.Open()

Dim txn As OracleTransaction = con.BeginTransaction(IsolationLevel.Serializable)

Try

'レコード削除
Call DeleteTable(con)
'削除関連情報更新
Call UpdateTable(con)

txn.Commit()

Catch ex As Exception

txn.Rollback()

Finally

'データベースクローズ
con.Close()
con.Dispose()
con = Nothing

End Try

Private Sub DeleteTable(ByVal con As OracleConnection)

Dim cmd As OracleCommand = Nothing

Dim strSql As String = "DELETE FROM テーブル名 " & _
"WHERE フィールド名 = 1"

Try

cmd = New OracleCommand(strSql, con)
cmd.ExecuteNonQuery()

Catch ex As Exception
Throw
Finally

If (Not IsNothing(cmd)) Then
cmd.Dispose()
cmd = Nothing
End If

End Try

End Sub

Private Sub UpdateTable(ByVal con As OracleConnection)

Dim cmd As OracleCommand = Nothing

Dim strSql As String = "UPDATE テーブル名 " & _
"SET フィールド名 = 0 " & _
"WHERE フィールド名 = 1"

Try

cmd = New OracleCommand(strSql, con)
cmd.ExecuteNonQuery()

Catch ex As Exception
Throw
Finally

If (Not IsNothing(cmd)) Then
cmd.Dispose()
cmd = Nothing
End If

End Try

End Sub


■参考サイト
Oracle Data Provider for .NETのクラス
http://otndnld.oracle.co.jp/document/products/oracle10g/101/doc_v12/win.101/B15519-01/OracleTransactionClass.htm

木曜日, 11月 22, 2007

[VB2005]印刷関連

▼質問
Excelを使った印刷はしたことがあるんだけど、テキスト文字列を直接印刷したことはないんだ。
どうしたらいいんだい!?

▼回答
PrintDocumentコンポーネント(System.Drawing.Printing名前空間)を使えばできるよ。

サンプルを教えてやるから参考にしてくれ!

ボタンのクリックイベントに下記を記述する。
'印刷処理実行
Me.PrintDocument1.Print()

PrintDocument1コンポーネントのイベントを下記のように記述すればOK!

Private Sub PrintDocument1_PrintPage(ByVal sender As System.Object, ByVal e As System.Drawing.Printing.PrintPageEventArgs) Handles PrintDocument1.PrintPage

Dim yPos As Single = 0
Dim count As Integer = 0
Dim line As String = Nothing

'フォント設定
Dim printFont As Font = New Font("MS 明朝", 10)

'ページ余白(内側部分)を取得
Dim topMargin As Single = e.MarginBounds.Top
Dim leftMargin As Single = e.MarginBounds.Left

'ページ行数取得.
Dim linesPerPage As Single = e.MarginBounds.Height / printFont.GetHeight(e.Graphics)

Dim stream As New IO.StringReader(テキスト文字列)

'文字列ストリーム印刷.
While (count < linesPerPage)
line = stream.ReadLine()
If (line Is Nothing) Then
Exit While
End If
yPos = topMargin + count * printFont.GetHeight(e.Graphics)
e.Graphics.DrawString(line, printFont, Brushes.Black, leftMargin, yPos, New StringFormat())
count += 1
End While

'追加ページの印刷があるかチェックする.
If Not (line Is Nothing) Then
e.HasMorePages = True
Else
e.HasMorePages = False
End If

stream.Close()

End Sub

■参考サイト
Windowsアプリケーションで印刷を行うには?
http://www.atmarkit.co.jp/fdotnet/dotnettips/393printdoc/printdoc.html

印刷のテストは、PDFに出力するようにすれば印刷のデバックがやり易くなるので、下記の
ソフトはお奨めだ。しかも、フリーソフトだからお得!?

XLsoft エクセルソフト : activePDF 無料 PDF 作成/変換ソフトウェア PrimoPDF 日本語版 - ホーム
http://www.xlsoft.com/jp/products/primopdf/index.html

水曜日, 11月 21, 2007

[VB2005]フォルダやファイルの列挙方法

▼質問
コンボボックスに決められたフォルダのファイルを一覧で表示したいんだ。どうしたらいいの?

▼回答
次のようにすればできるよ。

For Each strPath As String In System.IO.Directory.GetFileSystemEntries("C:\temp", "*")
Dim strDir() As String = Split(strPath, "\")
ComboBox1.Items.Add(strDir.GetValue(strDir.Length - 1))
Next strPath

■参考サイト
Visual Basic 6.0 と Visual Basic .NET とのフォルダやファイルの列挙方法の違いについて
http://www.microsoft.com/japan/msdn/vbasic/migration/tips/File/

土曜日, 11月 17, 2007

[VB2005]Namespace My(ApplicationEvents.vb)

▼質問
「Namespace My(ApplicationEvents.vb)」って何?

▼回答
・VB2005から新しく導入された機能らしい。
・「My」を使うと、いろいろなことがとても簡単にできるらしい。
・My.Applicationを使うと、開いているすべてのフォームにアクセスしたり、ハンドルしていない
すべての例外をキャッチしたりできるらしい。
↑これはいろいろできそうな機能である。使えそうである!
・My.Computerを使うと、ファイルやフォルダを簡単に制御したり、レジストリにアクセスしたり
できるらしい。

■参考サイト
VB Myの用法 - My, My.Application, My.Computer
http://homepage1.nifty.com/rucio/main/dotnet/shokyu/standard37.htm

月曜日, 11月 12, 2007

[VBA]リストボックス(ListBox)

▼質問
複数の列を表示するリストボックス(ListBox)を作成するにはどうしたらいいの?

▼回答
ユーザフォーム(UserForm)にリストボックス(ListBox)を貼り付けて次のコードを
UserForm_Initialize()に記述する。

ListBox1.Clear
ListBox1.ColumnCount = 2
ListBox1.ColumnWidths = 20 & ";" & 10
Call ListBox1.AddItem(",", 0)
ListBox1.list(0, 0) = "列1"
ListBox1.list(0, 1) = "列2"

これでもいける?

Dim column(1, 1) As Variant
column(0, 0) = "列1": column(1, 0) = "列2"
ListBox1.column() = column

▼質問
見出しを作成するにはどうしたらいいの?

▼回答
次のコードを書いてみたがエラーが発生してしまう。なぜ?

ListBox1.ColumnCount = 2
ListBox1.RowSourceType = "Value List"
ListBox1.RowSource = "列1;列2"
ListBox1.TextColumn = 3
ListBox1.ColumnWidths = 20 & ";" & 10
ListBox1.ColumnHeads = True

エラーの内容は、RowSourceTypeで実行時エラー'13'の「型が一致しません。」が発生する。
RowSourceTypeはAccessしか使えないのかな?

今度は、RowSourceTypeをコメントにして実行してみると次行のRowSourceでエラーが発生する。
エラーの内容は、実行時エラー'380'の「RowSourceプロパティを設定できません。プロパティの
値が不正です。」と・・・。

ダメダメだー!!

諦めよう。。。(T_T)

火曜日, 10月 30, 2007

[VB2005]「Option Strict On では、遅延バインディングを使用できません。」エラー

▼質問
「Option Strict On では、遅延バインディングを使用できません。」のエラーが発生する。

▼回答
問題1
Private Sub TrnPictureBox_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles PictureBox.Click
Dim x as Double
x = sender.MousePosition.X()
End Sub

対応1
x = PointToClient(MousePosition).X

問題2
Dim obj As Object
obj = OraDataBase.CreateDynaset(strSql, 0)
Debug.Print obj.Fields("FIELDS_NAME").Value

対応2
下記の参照を追加する。
参照名:Oracle InProc Server 5.0 Type Libray

Imports OracleInProcServer

Dim obj As OracleInProcServer.OraDynaset
obj = CType(CType(OraDatabase, OracleInProcServer.OraDatabase).CreateDynaset(strSql, 0), OraDynaset)
Debug.Print DirectCast(DirectCast(obj.Fields, OracleInProcServer.OraFields)("FIELDS_NAME"), OracleInProcServer.OraField).Value)

水曜日, 10月 24, 2007

[HTML]INPUTタグのdisabled

▼質問
INPUTタグでdisabledを指定しても有効にならないのはどうしてかな?

▼回答
スタイルシート(CSSファイル)などでcursorにpointerを指定していないか確認してみてくれ!

これをしているとdisabledを指定しても有効にならないんだ。

cursorのpointerをautoにしてみてくれ!!

どうだったかな?

これでも駄目でした(T_T)

FORMタグが悪さしているようです?!

諦めて他の方法にすることにしました。。。。

と、思ったら気がつきました。

下記の関数をフォームロードで処理をしていました。(T.T)

function buttonDisabled( flag ) {
var loop ;
with ( document.form1 ) {
for ( loop = 0 ; loop < elements.length ; loop++ ) {
if ( elements[loop].type == "button" ) {
elements[loop].disabled = flag;
}
}
}
}

これは、FORMタグで囲まれたボタンのみをパラメータフラグの内容でdisabledを
制御している関数で、これが悪さしていたようです。(涙)

■参考サイト
cursor CSS辞典
http://www.seo-equation.com/html/css/cursor

金曜日, 10月 12, 2007

[VB2005]数値入力制限

▼質問
テキストボックスで数値だけを入力できるようにしたいんだ。どうすればいい?

▼回答
KeyPressイベントで下記の関数を呼べばできるよ。

Public Sub KeyNumericOnly(ByRef e As System.Windows.Forms.KeyPressEventArgs)
'数値キーをチェックする.
If (Not e.KeyChar Like "[0-9]") Then e.KeyChar = ""
End Sub

これだけでは駄目なのね(?.?)

これだとバックスペースが使えなくなるのね。

だからこの関数を呼ぶ前に次のコードを記述するのね。

If (Asc(e.KeyChar) = System.Windows.Forms.Keys.Back) Then Exit Sub

他にも、プロパティのMaxLengthを指定しないと入力桁数の制限ができないのね。

これで、OKかな!?

木曜日, 10月 11, 2007

[Access]オラクルODBCドライバ

▼質問
ODBCの設定でOracle(オラクル)に接続しようとすると下記のエラーで接続できないんだ。

接続できませんでした。SQLState=IM004
[Microsoft][ODBC Driver Manager] SQL_HANDLE_ENVでのドライバの SQLAllocHandle は失敗しました。

どうしてなんだ?

▼回答
ODP.NETをインストールしたことはないかい?

それをインストールするとODBCに接続できなくなることがあるんだ。

原因は、Oracle Homeの優先順位が変わるからなんだ。

対策方法の手順は下記の通りだ。
1.「Oracle - OraDb10g_home1」→「Oracle Installation Products」→「Universal Installer」を
起動する。
2.「インストールされた製品(P)...」をクリックする。→「インベントリ」ダイアログが表示される。
3.「環境(E)」タブをクリックする。
4.「ODACHome1」より「OraClient10g_home1」の順位が上位になるように「↑」「↓」ボタンで
変更する。
5.「適用(A)」→「閉じる(C)」ボタンの順にボタンをクリックして終了。

■参考サイト
yukotan hour: 6月 2007
http://yukotan.blogspot.com/2007_06_01_archive.html

日曜日, 10月 07, 2007

[VBA]R1C1形式とA1形式

▼質問
R1C1形式をを英文字のA1形式に変換するにはどうしたらいいの?

▼回答
アクティブセルのR1C1形式・A1形式を取得するサンプルを教えておくよ。
Dim strRowCol As String
Dim strTXlA1 As String
Dim strTXlR1C1 As String
Dim strFXlA1 As String
Dim strFXlR1C1 As String

'1:1
strRowCol = Excel.ActiveCell.Row & ":" & Excel.ActiveCell.Column
'$A$1
strTXlA1 = Excel.ActiveCell.Address(True, True, Excel.XlReferenceStyle.xlA1)
'R1C1
strTXlR1C1 = Excel.ActiveCell.Address(True, True, Excel.XlReferenceStyle.xlR1C1)
'A1
strFXlA1 = Excel.ActiveCell.Address(False, False, Excel.XlReferenceStyle.xlA1)
'R[1]C[1]
strFXlR1C1 = Excel.ActiveCell.Address(False, False, Excel.XlReferenceStyle.xlR1C1)
'A$1
Debug.Print Excel.ActiveCell.Address(True, False, Excel.XlReferenceStyle.xlA1)
'R1C[1]
Debug.Print Excel.ActiveCell.Address(True, False, Excel.XlReferenceStyle.xlR1C1)
'$A1
Debug.Print Excel.ActiveCell.Address(False, True, Excel.XlReferenceStyle.xlA1)
'R[1]C1
Debug.Print Excel.ActiveCell.Address(False, True, Excel.XlReferenceStyle.xlR1C1)

水曜日, 9月 26, 2007

スクリプト

■参考サイト
【Microsoft TechNet: スクリプト センター】
http://www.microsoft.com/japan/technet/scriptcenter/scripts/default.mspx

右クリック(コンテクストメニュー)

■参考サイト
【WEBプログラミング NOW!: IE7β2(日本語版)とGoogle検索】
http://shimax.cocolog-nifty.com/search/2006/05/ie72google_ce28.html
【【JavaScript】外部プログラム実行できますか? IEの選択文字列を、Perlスクリプトに渡したい http://www.hatena.ne.jp/1131762882 という質問をしたら、JavaScriptででき.. - 人力検索はてな】
http://q.hatena.ne.jp/1131779952

日曜日, 9月 23, 2007

[VBA]月の日数

▼質問
月の日数をを知りたいんだけど・・・。どうしたらできるの?

▼回答
次の関数で取得することができるよ。

Public Function DaysInMonth(ByVal day As Date) As Integer
Dim NextMonth As Variant
Dim EndOfMonth As Variant
NextMonth = DateAdd("m", 1, day)
EndOfMonth = NextMonth - DatePart("d", NextMonth)
DaysInMonth = DatePart("d", EndOfMonth)
End Function

■参考
[AC97]指定された月の日数を取得する方法
http://support.microsoft.com/kb/109703/ja

金曜日, 9月 21, 2007

[VBA]印刷関連

▼質問
改ページ数を知りたいんだけど、どうしたらできるの?

▼回答
次のコードで取得できるよ。①が横方向の改ページ数で、②が縦方向だよ。
①Worksheets(シート名).VPageBreaks.Count
②Worksheets(シート名).HPageBreaks.Count

▼質問
改ページを削除するにはどうすればいいの?

▼回答
下記のコードを記述すればできるよ。
Worksheets(シート名).ResetAllPageBreaks

垂直方向の改ページを無くすには下記のコードを記述すると自動で行うことができる。

Worksheets(シート名).ResetAllPageBreaks
Worksheets(シート名).PageSetup.PrintArea = "A1:P" & Worksheets(シート名).range("A65536").End(xlUp).row
If (Worksheets(シート名).VPageBreaks.Count > 0) Then
ActiveWindow.View = xlPageBreakPreview
ActiveSheet.VPageBreaks(1).DragOff Direction:=xlToRight, RegionIndex:=1
ActiveWindow.View = xlNormalView
End If
ActiveWindow.LargeScroll Down:=-(Worksheets(シート名).HPageBreaks.Count + 1)

■参考
【Shun's Page】印   刷
http://t_shun.at.infoseek.co.jp/My_Page/Excel-VBA/vba_page20.htm

水曜日, 9月 19, 2007

[VBA]数値入力制限

▼質問
テキストボックスで数値だけを入力できるようにしたいんだ。どうすればいい?

▼回答
KeyPressイベントで下記の関数を呼べばできるよ。

Public Sub KeyNumericOnly(ByRef KeyAscii As ReturnInteger)
'数値キーをチェックする.
If (Not Chr(KeyAscii) Like "[0-9]") Then KeyAscii = 0
End Sub

これだけじゃ駄目だった!

日本語入力ができちゃうー!!

IMEを使えないようにするにはどうしたらいいのか調べることに・・・。

テキストボックスのプロパティIMEModeをfmIMEModeDisableにすれば良いみたい。(^^)v

このやり方のほかに次のコードでも良いみたい。

TextBox1.IMEMode = fmIMEModeDisable

00=fmIMEModeNoControl:IME のモードを変更しません (既定値)。
01=fmIMEModeOn:IME をオンにします。
02=fmIMEModeOff:IME をオフにして英語モードにします。
03=fmIMEModeDisable:IME をオフにします。このモードにするとユーザーは、キー操作によっても IME をオンにすることができなくなります。
04=fmIMEModeHiragana:全角ひらがなモードで IME をオンにします。
05=fmIMEModeKatakana:全角カタカナ モードで IME をオンにします。
06=fmIMEModeKatakanaHalf:半角カタカナ モードで IME をオンにします。
07=fmIMEModeAlphaFull:全角英数モードで IME をオンにします。
08=fmIMEModeAlpha:半角英数モードで IME をオンにします。
09=fmIMEModeHangulFull:全角ハングル モードで IME をオンにします。
10=fmIMEModeHangul:半角ハングル モードで IME をオンにします

■参考
テキストボックスで数値のみを受け取る方法
http://www.microsoft.com/japan/msdn/vbasic/migration/tips/NumericEdit/

[VBA]有効な行数を取得する

▼質問
有効な行数を取得するにはどうしたらいいの?

▼回答
A列の終端セル行を取得するには、下記のようにすると取得できる。

Worksheets(シート名).Range("A65536").End(xlUp).Row

この方法では、A列の65536行目から上(xlUp)に終端セルを検索している。

下記のように、上から検索する方法もある。

Worksheets(シート名).Range("A1").End(xlDown).Row

この場合では、途中に空白があるとそこが終端セルと判断してしまうので本当の

終端セルを取得したい場合は、前者の方法を使用した方が良い。

空白が途中に絶対無いとわかっていれば問題はないと思うが・・・。

■参考
Worksheets(シート名).Range("A1").End(direction)
directionは検索の方向を指定する。
xlToLeft:左へ検索
xlToRight:右へ検索
xlUp:上へ検索
xlDown:下へ検索

日曜日, 9月 16, 2007

[VBA]オブジェクト名でプロパティにアクセスする

▼質問
オブジェクト名でメソッドやプロパティにアクセスしたいんだけどできるの?

▼回答
できるよ!オブジェクト名で設定取得が可能だ。
Me.Controls.Item(オブジェクト名).メソッド名又はプロパティ名

木曜日, 9月 06, 2007

[VBA]時刻の設定

▼質問
Date型の変数に時刻を設定するにはどうしたらいいの?

▼回答
Dim NowDate As Date
Dim MakeDate As Date
Dim strDate As String

NowDate = Now

strDate = Format(NowDate, "yyyy") & "/" &amp; _
Format(NowDate, "mm") & "/" & _
Format(NowDate, "dd")
MakeDate = CDate(strDate)
MakeDate = DateTime.DateAdd("h", 24, MakeDate)

MsgBox Format(MakeDate, "yyyy/mm/dd hh:nn:ss")

MakeDate = DateTime.DateAdd("h", 1, MakeDate)

MsgBox Format(MakeDate, "yyyy/mm/dd hh:nn:ss")

金曜日, 8月 31, 2007

[EXCEL]アドイン

▼質問
Excelでアドインを作るにはどうしたらいいのかな?

▼回答
保存の時に「Microsoft Excel アドイン (*.xla)」を選択して保存するだけだよ。

§Excelのアドインソフトの作り方
http://members.at.infoseek.co.jp/kenchan_h/index15.html
@IT:Windows TIPS -- Tips:Excelでユーザー定義関数をアドインとして提供する
http://www.atmarkit.co.jp/fwin2k/win2ktips/471funcadin/funcadin.html

▼質問
プロパティウィンドウ(ショートカットメニュー・右クリックメニュー・メニューバー)に項目を追加するには
どうしたらいいの?

▼回答
次のプログラムをワークブックオープンのWorkbook_Open()で呼べば追加できるよ。

Dim Obj As Object
Set Obj = Application.CommandBars("Cell").Controls.Add()
With Obj
.Caption = "コマンド表示名称"
.OnAction = "プログラム名"
.BeginGroup = False ' セパレータ追加表示(True:追加表示、False:追加無し)
End With

追加したものはワークブッククローズのWorkbook_BeforeClose(Cancel As Boolean)で削除すること
が必要だよ。

Application.CommandBars("Cell").Controls("コマンド表示名称").Delete

やってみたがうまくいかなかった。(T_T)アドインファイルにするとWorkbook_BeforeCloseは呼ばれ
ないことが判明。

そこで、次のクラスファイルを作成してExcelが閉じられた時に呼ぶようにやってみた。

Option Explicit

Public WithEvents App As Application
Public WithEvents Wb As Workbook

' クラスモジュールの初期化処理(Workbook_Openで呼出すが、Bookを呼出した後でないとダメ)
Public Sub Class_Initialize()
Set App = Application
Set Wb = Application.ActiveWorkbook
End Sub

' クラス内Applicationのワークブッククローズ処理(Excel終了時に呼出される)
Private Sub App_WorkbookBeforeClose(ByVal Wb As Workbook, Cancel As Boolean)
On Error Resume Next
Application.CommandBars("Cell").Controls("コマンド表示名称").Delete
End Sub

' クラス内Workbookのワークブッククローズ処理(Book終了時に呼出される)
Private Sub Wb_BeforeClose(Cancel As Boolean)
On Error Resume Next
Application.CommandBars("Cell").Controls("コマンド表示名称").Delete
Application.DisplayAlerts = True
End Sub

標準モジュールでクラスの生成が必要

Public myApp As New クラス名

■参考サイト
Excel のメニューおよびメニュー バーをカスタマイズする方法
http://support.microsoft.com/kb/830502/ja
Office TANAKA - VBA Tips
http://officetanaka.net/excel/vba/tips/index.htm

木曜日, 7月 12, 2007

[HTML]ラジオボタンとタイトルの連動

▼質問
ラジオボタンのタイトルをクリックした時にタイトルと一緒にラジオボタンを連動させる にはどうしたらよいの?

▼回答
タイトルをラベルタグで囲って、ラジオ(input)ボタンのid属性とラベル( label )タグの for 属性を一緒
の名称にすれば実現することができるよ。

<input type="radio" id="opt_1" name="opt" value="1" checked>








火曜日, 7月 03, 2007

[ORACLE]データベース・リンク

▼質問
データベースリンクって何?

▼回答
データベースリンクとは、他のマシンのOracleデータベースを自分のマシンにマッピングする機能。

■参考サイト
Oracle・Tips集
http://ash.jp/db/ora_tips.htm
ORACLE(テクニック)
http://www.geocities.jp/principal_focuses/tech/ora/ora_tech/index.html

日曜日, 6月 10, 2007

[ORACLE]プロシージャ

▼質問
クライアントからサーバの処理を実行したいんだけど・・・。プロシージャで、できないのかな?

▼回答
実行ファイルが処理できるDLL(Windows)かSO(Unix)を作成して外部プロシージャに
定義(ライブラリ登録?)すれば実現できるよ!

自作しなくてもWindowsAPIを呼ぶことができるからいろいろできそうである。

下記のサイトにINIファイルのAPIを呼ぶサンプルがあったので実験してみた。

いっしーのプログラムヒント集
http://www.j-real.com/stone/progtips.html#Ora2

コピペしたらうまくいかなかったのでうまくいったものを下記に示しておきます。
←こんなエラーが出た!「PLS-00103: 記号"SHOW"が見つかりました」

SQL*Plusに「SYSTE]でログインして実行する。

ここから-------------------------------------------------------------------------------->

-- DLLファイルの名称定義 ディレクトリは環境によって変えてください
create or replace library kernel32 is 'c:\windows\system32\kernel32.dll';
/
show errors;

-- APIのGetPrivateProfileIntA(Iniファイルから数値を取り出す)
create or replace function GetIniInt(
lpApplicationName CHAR,
lpKeyName CHAR,
nDefault BINARY_INTEGER,
lpFileName CHAR
) RETURN BINARY_INTEGER AS
EXTERNAL
LIBRARY kernel32 NAME "GetPrivateProfileIntA"
LANGUAGE C
CALLING STANDARD C;
/
show errors;

-- APIのGetPrivateProfileStringA(Iniファイルから文字列を取り出す)
create or replace function GetIniString( --この関数名は好きなものを付けられます
lpApplicationName String,
lpKeyName String,
lpDefault String,
lpReturnedString OUT String,
nSize BINARY_INTEGER,
lpFileName String
) RETURN BINARY_INTEGER AS
EXTERNAL
LIBRARY kernel32
NAME "GetPrivateProfileStringA"
LANGUAGE C
CALLING STANDARD C;
/
show errors;

<-------------------------------------------------------------------------------- lus="" sql=""> @C:\Work\プロシージャ\CRE_SP_INI.sql
ライブラリが作成されました。
エラーはありません。
ファンクションが作成されました。
エラーはありません。
ファンクションが作成されました。
エラーはありません。
SQL>

プロシージャの作成
名前:SP_INI_TEST
ソース

ここから-------------------------------------------------------------------------------->

(
dat in out varchar2,
ret out int
) as
begin
ret := GetIniInt('intl','iCountry', 0, 'c:\windows\win.ini');
dbms_output.put_line(ret);
ret := GetIniString('intl','sCountry', 'Default', dat, 255, 'c:\windows\win.ini'); dbms_output.put_line(dat ' ' ret);
end;

<-------------------------------------------------------------------------------- lus="" sql=""> variable dat varchar2(255)
SQL> variable ret NUMBER
SQL> execute SP_INI_TEST( :dat, :ret )

こんなエラーが出た!
「ORA-28595: Extprocエージェント : DLLパスが無効です」

Oracle Net Servicesの拡張機能の使用
http://otndnld.oracle.co.jp/document/products/oracle10g/102/doc_cd/network.102/B19208-02/advcfg.htm

上記の「表 13-5 listener.oraファイルの外部プロシージャ設定」を読むとリスナーの設定が
必要のようだ。
「Net Manager」→「リスナー」→「LISTENER」→「その他のサービス」→「環境」

"EXTPROC_DLLS=ANY"
うまくいかん!

行番号 = 1 列番号 = 32 エラー・テキスト = PLS-00103: 記号"BEGIN"が見つかりました。 次のうちの1つが入るとき: ( ; is with authid as cluster compress order using compiled wrapped external deterministic parallel_enable pipelined

■参考サイト 外部プロシージャのコール http://otndnld.oracle.co.jp/document/products/oracle10g/102/doc_cd/appdev.102/B19248-02/adfns_extern_proc.htm
OKLab - Oracle PL/SQL入門
http://www.oklab.org/oracle/plsql.xhtml

土曜日, 6月 09, 2007

[tool]Windowsでリモートシェル

▼質問
LAN(2重化)の2枚挿しの時にリモートシェルが片方しか実行されない。

▼回答
リモートシェルが起動する時、RSHSVC.EXEは接続されているIPアドレスを優先的に取得し、
2つのLANが正常に接続されている時は、ネットワークの詳細設定で設定されている優先順位
によって決まるようだ。

起動時につながっていたLANに障害が発生した時は、RSHSVC.EXEを再起動しなくては正常な
LANに繋げにいくことはできない。

自動でリモートシェルを切替えるには面倒なようだ。(>_<);

■rshコマンド http://www.microsoft.com/technet/prodtechnol/windowsserver2003/ja/library/ServerHelp/da116a07-36a0-4b8d-885e-eec3b8ed33fe.mspx?mfr=true

■サービス登録方法(SC.EXE)
sc Create RshSvc binPath= "C:\WINDOWS\system32\RSHSVC.EXE" start= auto DisplayName= "Remote Shell Service"

■参考サイト
Windows Services for UNIX
http://www.microsoft.com/japan/technet/interopmigration/unix/sfu/default.mspx
リモートコンソール関係1
http://www.netwave.or.jp/~jun-n/reskit/remote1.htm
Remote Shell Services in SFU
http://technet.microsoft.com/en-us/library/B3877C5F-D844-F417-AD77-992E03F41BA3.aspx
Windowsに対してrshを行う手順
http://www.buk-u.com/rsh/
RSH Daemon - TetraPod
http://www.xvi.jp/item/146

金曜日, 5月 04, 2007

[VC++]ping

▼質問
ビルドしたら下記のエラーが出た。
「error LNK2019: 未解決の外部シンボル _IcmpSendEcho@32 が関数 "unsigned long __cdecl 関数名(unsigned long,int)" (mailto:YAKKH@Z) で参照されました。 オブジェクト名.obj

▼回答
IcmpSendEcho関係をリンクするライブラリがないと思われる。
下記のサイトでIP Helper APIを使うためには、Platform SDKをインストールと書いてあった。

IPHLPAPIを使ってWindowsでネットワーク設定いじるプログラムを書く
http://www.geekpage.jp/programming/iphlpapi/

Windows Platform SDKのインストール方法もこのサイトに説明されていた。感謝!感謝!

Windows Platform SDKのインストール
http://www.geekpage.jp/programming/platform-sdk/

VC++2005なのでこっちの説明の方が良さそうである。

Visual C++ Express Editionを使ってみる(Windows Platform SDK編)
http://freepg.fc2web.com/cpp/topic_vce_001.html

「IPHlpApi.Lib」をリンクした解決した。

■参考サイト
IPHLPAPI(IP Helper API)の使い方 [自作ping]
http://www.geekpage.jp/programming/iphlpapi/send-icmp.php

▼質問
ビルドしたら下記のエラーが出た。
「error LNK2019: 未解決の外部シンボル _inet_addr@4 が関数 "unsigned long __cdecl 関数名(char *,int)" (?関数名@@YAKPADH@Z) で参照されました。 オブジェクト名.obj 」

▼回答
IPアドレスをLong型の数値に変換するinet_addr関数を使用すると「Ws2_32.lib」をリンクしないと
いけないようだ。

木曜日, 5月 03, 2007

[VC++]文字列

▼質問
wchar_t型からchar型に変換するにはどうしたらいいの?

▼回答

TCHAR * str1 = TEXT("テスト");
TCHAR str2[32];
lstrcpy(str2 , str1);


■参考サイト
方法 : さまざまな文字列型間で変換する
http://msdn2.microsoft.com/ja-jp/library/ms235631(VS.80).aspx

水曜日, 5月 02, 2007

[VC++]oo4o接続・設定

▼質問
リビルドすると下記のエラーが発生する。
「fatal error C1083: include ファイルを開けません。'oracl.h': No such file or directory ファイルパス 行番号」

▼回答
オラクルがインストールされた下記のパスのどちらかを「構成プロパティ」→「C/C++」→「全般」→
「追加のインクルード ディレクトリ」に追加する。
クライアントインストール:\oracle\product\10.2.0\client_1\oo4o\CPP\INCLUDE
オラクルインストール:\oracle\product\10.2.0\db_1\oo4o\CPP\INCLUDE

▼質問
リビルドで下記のエラーが出る。
「error LNK2019: 未解決の外部シンボル "__declspec(dllimport) public: int __thiscall ODynaset::Close(void)" (__imp_?Close@ODynaset@@QAEHXZ) が関数 __catch$_ファイル名@4$0 で参照されました。 オブジェクトファイル名」

▼回答
オラクルがインストールされた下記のパスのどちらかを「構成プロパティ」→「リンカ」→「入力」→
「追加の依存ファイル」に追加する。
クライアントインストール:\oracle\product\10.2.0\client_1\oo4o\CPP\LIB\ORACLM32.LIB
オラクルインストール:\oracle\product\10.2.0\db_1\oo4o\CPP\LIB\ORACLM32.LIB

[C言語orC++]VC++2005へのバージョンアップ

▼質問
C言語で書かれたソースをVC++2005でリビルドすると下記のエラーが出る。
「警告 1 warning C4996: 'strcpy' が古い形式として宣言されました。 ファイルパス 行番号」

▼回答
VC++2005のランタイムから既存標準関数のセキュリティが持つ脆弱性の対応で
新しい関数が提供されたため。

回避策として次のコードを記述すると無効にできる。
#pragma warning(disable : 4996)

他の回避方法として次の#defineのどちらかを定義すればと書いてあったので
試してみたが警告は消えなかった。なぜ?

#define _CRT_SECURE_CPP_OVERLOAD_STANDARD_NAMES 1
#define _CRT_SECURE_NO_DEPRECATE 1

理由はわからないがヘッダファイルの「stdafx.h」に記述したら消えたぞ!
記述の場所は、ヘッダーファイルが記述している前にしないといけないみたい。

「_CRT_SECURE_CPP_OVERLOAD_STANDARD_NAMES」の定義は消えない
警告もあるので「_CRT_SECURE_NO_DEPRECATE」を使った方が良いみたい。(^^)v

プロジェクトのプロパティでも定義できるようなのでそちらも試してみました。

「構成プロパティ」->「C/C++」->「プリプロセッサ」->「プリプロセッサの定義」の
末尾に 追加する。

この他にも下記の関数も変更になったようだ。

従来の関数:セキュアな関数
strcpy:strcpy_s
strncpy:strncpy_s
printf:printf_s
asctime:asctime_s
ctime:ctime_s

■参考サイト
Visual C++ 2005 C/C++ランタイム ライブラリ新機能概要
http://www.microsoft.com/japan/msdn/security/demo/runtime.aspx
CRT のセキュリティ強化
http://msdn2.microsoft.com/ja-jp/library/8ef0s5kh(VS.80).aspx


;_CRT_NONSTDC_NO_DEPRECATE;_USE_32BIT_TIME_T

▼質問
ライブラリのリンクってどうやってやるの?

▼回答
こんな方法があるよ。

プロジェクトのプロパティでライブラリのファイルを絶対パス(フルパス)で直接設定する方法と
ライブラリファイルとパスを分けて設定する方法があるよ。

前者
「構成プロパティ」->「リンカ」->「入力」->「追加の依存ファイル」に「絶対パス(フルパス)」
を指定する。

後者
「構成プロパティ」->「リンカ」->「入力」->「追加の依存ファイル」にリンクするライブラリ
ファイルを指定して、そのライブラリまでのパスを下記のプロパティに設定する。
「構成プロパティ」->「リンカ」->「全般」->「追加のライブラリ ディレクトリ」

月曜日, 4月 30, 2007

[VC++]Win32API関連

▼質問
HINSTANCEの取得方法ってないの?

▼回答
Win32APIのGetModuleHandle関数を使えば取得できるよ。引数に0を指定すれば自プロセスが
取得できるんだ。

HINSTANCE hinstDLL;
hinstDLL = ::GetModuleHandle(0);

[C++]DLLパスの取得方法(VB取得方法)

・DLL側の記述方法

#include "TCHAR.H"

TCHAR szModuleFilePath[ _MAX_PATH + 1 ] = _T( "" );

BOOL APIENTRY DllMain(
HINSTANCE hinstDLL, // DLL モジュールのハンドル
DWORD fdwReason, // 関数を呼び出す理由
LPVOID lpvReserved // 予約済み
)
{
::GetModuleFileName( hinstDLL, szModuleFilePath, _MAX_PATH );

switch ( fdwReason )
{
case DLL_PROCESS_ATTACH: //DLLがロードされた時に呼び出される.
break;
case DLL_THREAD_ATTACH: //新たなスレッドを作成した時に呼び出される.
break;
case DLL_THREAD_DETACH: //作成されたスレッドが終了した時に呼び出される.
break;
case DLL_PROCESS_DETACH: //DLLがアンロードされた時に呼び出される.
break;
default:
break;
}
return TRUE;
UNREFERENCED_PARAMETER( hinstDLL );
UNREFERENCED_PARAMETER( lpvReserved );
}

SAMPLE_API char* APIENTRY getPath()
{
return (char*)szModuleFilePath;
}

SAMPLE_API void APIENTRY getVBAPath( OLECHAR* path )
{
char wModuleFilePath[sizeof( szModuleFilePath )];
memset( wModuleFilePath, 0x00, sizeof( wModuleFilePath ) );
strcpy( wModuleFilePath, getWchar_tToChar( szModuleFilePath ) );
SysFreeString( *path );
*path = SysAllocString( (OLECHAR*)wModuleFilePath );
}

・メモ
APIENTRYは、windef.hに「#define APIENTRY WINAPI」として定義されている。
#define SAMPLE_API extern "C" __declspec(dllexport)

・VB2005側の呼出し方法
Public Declare Auto Function getPath Lib "ファイル名.dll" () As System.Text.StringBuilder

Dim path As System.Text.StringBuilder = クラス名.getPath()
Dim getPath as String = path.ToString

・VBA側の呼出し方法
Public Declare Sub getVBAPath Lib "ファイル名.dll" (ByRef path As String)

Dim path As String
Call getVBAPath(path)


▼質問
関数毎にファイルを分けてプログラミングするとDLLのパスがうまく取得できない。どうすればいいの?

▼回答
下記のようにすれば取得できるよ。

TCHAR szModuleFilePath[ _MAX_PATH + 1 ] = _T( "" );
HINSTANCE hinstDLL = ::GetModuleHandle(TEXT("DLLファイル名.dll"));
::GetModuleFileName( hinstDLL, szModuleFilePath, _MAX_PATH );

日曜日, 4月 29, 2007

[C++]Hello World

■Hello World(標準出力)
・Java
public class Test {
public static void main(String[] args) {
System.out.println( "Hello, Java !!" );
}
}

・C++
#include
using namespace std;
int main()
{
cout << "Hello, C++ !!" << endl;
}

・C言語
#include
main()
{
printf("Hello World\n");
}

[C++]変数・定数

▼質問
enum E_ERROR { ERR_00 = 0, ERR_01 = -1, ERR_02= -2, ERR_03 = -3 };
を「E_ERROR::ERR_00」のように使用すると下記の警告が出る。
「警告 1 warning C4482: 非標準の拡張機能が使用されています: enum 'E_ERROR' が限定名で使用されます c:\パス\ファイル名.cpp 行番号 」

▼回答
「E_ERROR::」を外すと問題ない?下記の様にして呼べば良さそうである。

・定義の記述
namespace NS_DEF
{
enum { ERR_00 = 0, ERR_01 = -1, ERR_02= -2, ERR_03 = -3 };
}

・呼び方
NS_DEF::ERR_00

・参考
namespace NS_DEF
{
#define NUM 100 // NS_DEF::NUMにはならない。
}
マクロ定義は名前空間に含めることができない。

■参考サイト
●C++編(言語解説) 第18章 名前空間
http://www.geocities.jp/ky_webid/cpp/language/018.html

定数の定義にはconstを使う方が優れている。理由は、 #defineによる定数定義と違い、
constの場合はデータ型がはっきりしているからだそうだ。

■参考サイト
C++ reference
http://www.asahi-net.or.jp/~wv7y-kmr/memo/old/cpp_bas.html

[VC++]ビルドエラー

▼質問
リビルドすると下記のエラーが出る。
「エラー 1 error PRJ0050: 出力の登録に失敗しました。レジストリを変更するための適切なアクセス許可があるかどうかを確認してください。 ○○○」

▼回答
同じ名前でレジストリに登録されておかしくなったみたい?別名で作成したらうまくいった。

こんな方法よりプロジェクトのプロパティの設定を直した方が良さそうである。
プロジェクトの「構成プロパティ」→「リンカ」→「全般」→「出力の登録」を「いいえ」にする。

ATLプロジェクトの「出力の登録」について
http://connect.microsoft.com/VisualStudio/feedback/ViewFeedback.aspx?FeedbackID=100332

土曜日, 4月 28, 2007

[VB2005]VB.NETからの変更点メモ

▼質問
VB.NETで指定していたウィンドウハンドルのMe.hWndがエラーになるんだ。
候補リストからそれらしき名前のものを探しても見つからないんだ。どうして?

▼回答
どうしてか判らないが、Me.Handleを指定すればいいんだ。

[C++]VBA・VB2005への型変換

[Wtypes.hに含まれるアンマネージ型]:[アンマネージC言語型]:[マネージクラス名]:[説明][HANDLE]:[void*]:[System.IntPtr]:[32ビット]

[BYTE]:[unsigned]:[char]:[System.Byte]:[8ビット]

[SHORT]:[short]:[System.Int16]:[16ビット]

[WORD]:[unsigned]:[short]:[System.UInt16]:[16ビット]

[INT]:[int]:[System.Int32]:[32ビット]

[UINT]:[unsigned]:[int]:[System.UInt32]:[32ビット]

[LONG]:[long]:[System.Int32]:[32ビット]

[BOOL]:[long]:[System.Int32]:[32ビット]

[DWORD]:[unsigned]:[long]:[System.UInt32]:[32ビット]

[ULONG]:[unsigned]:[long]:[System.UInt32]:[32ビット]

[CHAR]:[char]:[System.Char]:[ANSIにより装飾]

[LPSTR]:[char*]:[System.StringまたはSystem.StringBuilder]:[ANSIにより装飾]

[LPCSTR]:[Const]:[char*]:[System.StringまたはSystem.StringBuilder]:[ANSIにより装飾]

[LPWSTR]:[wchar_t*]:[System.StringまたはSystem.StringBuilder]:[Unicodeにより装飾]

[LPCWSTR]:[Const]:[wchar_t*]:[System.StringまたはSystem.StringBuilder]:[Unicodeにより装飾]

[FLOAT]:[Float]:[System.Single]:[32ビット]

[DOUBLE]:[Double]:[System.Double]:[64ビット]


[クラス名]:[説明]:[Visual Basic のデータ型]:[C# のデータ型]:[C++ マネージ拡張のデータ型]:[JScript のデータ型]
●整数
[Byte]:[8ビット符号なし整数]:[Byte]:[byte]:[char]:[Byte]

[SByte]:[8ビット符号付き整数(非CLS準拠)]:[SByte(非組み込み型)]:[sbyte]:[signed char]:[SByte]

[Int16]:[16ビット符号付き整数]:[Short]:[short]:[short]:[short][Int32]:[32ビット符号付き整数]:[Integer]:[int]:[intまたはlong]:[int]

[Int64]:[64ビット符号付き整数]:[Long]:[long]:[__int64]:[long]

[UInt16]:[16ビット符号なし整数(非CLS準拠)]:[UInt16(非組み込み型)]:[ushort]:[unsigned short]:[UInt16]

[UInt32]:[32ビット符号なし整数(非CLS準拠)]:[UInt32(非組み込み型)]:[uint]:[unsigned intまたはunsigned long]:[UInt32]

[UInt64]:[64 ビット符号なし整数(非CLS準拠)]:[UInt64(非組み込み型)]:[ulong]:[unsigned __int64]:[UInt64]

●浮動小数点数
[Single]:[単精度 (32 ビット) 浮動小数点数]:[Single]:[float]:[float]:[float]
[Double]:[倍精度 (64 ビット) 浮動小数点数]:[Double]:[double]:[double]:[double]

●論理型
[Boolean]:[ブール値 (true または false)]:[Boolean]:[bool]:[bool]:[bool]

●その他
[Char]:[Unicode (16 ビット) 文字]:[Char]:[char]:[wchar_t]:[char]

[Decimal]:[96ビット10進値]:[Decimal]:[decimal]:[Decimal]:[Decimal]

[IntPtr]:[基になるプラットフォームによってサイズが決まる符号付き整数 (32 ビットのプラットフォームでは 32 ビット値、64 ビットのプラットフォームでは 64 ビット値) ]:[IntPtr(非組み込み型)]:[IntPtr(非組み込み型)]:[IntPtr(非組み込み型)]:[IntPtr]

[UIntPtr]:[基になるプラットフォームによってサイズが決まる符号なし整数 (32 ビットのプラットフォームでは 32 ビット値、64 ビットのプラットフォームでは 64 ビット値)(非CLS準拠)]:[UIntPtr(非組み込み型)]:[UIntPtr(非組み込み型)]:[UIntPtr(非組み込み型)]:[UIntPtr]

●クラス オブジェクト
[Object]:[オブジェクト階層構造のルート]:[Object]:[object]:[Object*]:[Object]
[String]:[Unicode 文字の不変固定長文字列]:[String]:[string]:[String*]:[String]


[整数型のサイズ]:[Visual Basic 6.0 の型と識別子の型文字]:[Visual Basic 2005 の型と識別子の型文字]:[共通言語ランタイム (CLR) の型]

[8ビット、符号付き]:[(なし)]:[SByte (なし)]:[System.SByte]

[8ビット、符号なし]:[Byte (なし)]:[Byte (なし)]:[System.Byte]

[16ビット、符号付き]:[Integer (%)]:[Short (なし)]:[System.Int16]

[16ビット、符号なし]:[(なし)]:[UShort (なし)]:[System.UInt16]

[32ビット、符号付き]:[Long (&)]:[Integer (%)]:[System.Int32]

[32ビット、符号なし]:[(なし)]:[UInteger (なし)]:[System.UInt32]

[64ビット、符号付き]:[(なし)]:[Long (&)]:[System.Int64]

[64ビット、符号なし]:[(なし)]:[ULong (なし)]:[System.UInt64]

32 ビット システムでは、32 ビット整数の演算の方が、16 ビットまたは 64 ビットの整数演算よりも高速です。つまり、Visual Basic 2005 では、Integer と UInteger は、効率の優れた基本的な数値型です。Visual Basic 2005 に移行するときに Long 宣言を Integer(Int32) に変更すると、アプリケーションのパフォーマンスを向上させることができます。

■参考サイト
プラットフォーム呼び出しによるデータのマーシャリング
http://msdn.microsoft.com/library/ja/default.asp?url=/library/ja/cpguide/html/cpconmarshalingdatawithplatforminvoke.asp
.NET Framework クラス ライブラリの概要
http://msdn.microsoft.com/library/ja/default.asp?url=/library/ja/cpguide/html/cpconthenetframeworkclasslibrary.asp

[VBA or VB2005]VBAとVBで同じ処理をしたいとき?

▼質問
VBAとVBで同じ処理をしたいときはどうしたらいいのだろう?

▼回答
VCでDLLを作成してWin32APIのように呼ぶしかないのかな?

このサイトに.NETでCOMとして作成してVBA側で参照設定をして使用できる方法もあると
書いてあるがどうなんだろう?

(このサイトはいろんな情報が充実していてすごい!すばらしい!!)
http://7ujm.net/VB/VBAVBnetActiveX.html

VB2005で試しにやってみたらCOMの登録でアセンブリの警告が出た!

作成方法
①プロジェクトの作成でクラスライブラリ(DLLの作成)を選ぶ。
②クラスファイルにコードを記述する。
③プロジェクトのプロパティから「コンパイル」を選択して「COM相互運用機能の登録(I)」を
チェックする。
④「スタート」→「全てのプログラム(P)」→「Microsoft Visual Studio 2005」→「Visual Studio Tools」
→「Visual Studio 2005 コマンド プロンプト」を起動してCOMの登録を行う。
C:\>regasm ○○○○○.dll /tlb /codebase
※解除方法:C:\>regasm ○○○○○.dll /unregister

ここで下記の問題?警告が発生!
「RegAsm : warning RA0000 : 署名されていないアセンブリを /codebase を使用して登録すると、同じコンピュータにインストールされるその他のアプリケーションとの競合が生じる可能性があります。/codebase スイッチは署名されたアセンブリのみに使用できます。アセンブリに厳密な名前を付けて、再登録してください。型は正常に登録されました。アセンブリは 'C:\○○○\○○○\○○○.tlb' にエクスポートされ、タイプ ライブラリは正常に登録されました。」

▼質問
アセンブリって何だ?

▼回答
署名のため機能らしい。

アセンブリを厳密名で署名するには?[VS 2005のみ]
http://www.atmarkit.co.jp/fdotnet/dotnettips/495strongname2005/strongname2005.html方法 : アセンブリに署名する (Visual Studio)
http://msdn2.microsoft.com/ja-jp/library/ms247123(VS.80).aspx

とりあえず実行してみたら下記のエラーが発生した。
「"ファイルまたはアセンブリ名 ○○○、またはその依存関係の 1 つが見つかりませんでした。"」

下記のサイトの手順で「<新規作成>」から適当なキー・ファイル「○○○_StrongName_Key」を
指定してパスワード無しでやったらうまく登録できたぞ!!ヤッター!!

アセンブリを厳密名で署名するには?[VS 2005のみ]
http://www.atmarkit.co.jp/fdotnet/dotnettips/495strongname2005/strongname2005.html

動かしてみたら今度はオートメーションエラーが発生!(;_;)...

パスが通っているところに移動して登録したら動いたが・・・。下記のエラーでうまくいかない。
「"ファイルまたはアセンブリ名 ○○○、またはその依存関係の 1 つが見つかりませんでした。"」

ここで、実験終了!この方法はとりあえず諦める事にしました。

Visual Basic 6.0 から Visual Basic .NET または Visual Basic 2005 アセンブリを呼び出す方法
http://support.microsoft.com/default.aspx?scid=kb;ja;817248

↑このサイトを読んでいたら通常のクラスとCOMクラスの作成方法に違いがあることが判明!

このサイトの説明文も一部間違っているが。。。。(重要なところ!)
9.[テンプレート] で [クラス] をクリックします。
→9.[テンプレート] で [COMクラス] をクリックします。

もう一度とトライしてみたがまたもエラーでした。でもエラーの内容が変わった。
「"ActiveX コンポーネントはオブジェクトを作成できません。"」



■参考サイト
プログラミング色々
http://7ujm.net/index.html
Microsoft Win32 と Microsoft .NET Framework API との対応
http://www.microsoft.com/japan/msdn/net/general/win32map.aspx
Visual Basic .NET How-To インデックス
http://www.microsoft.com/japan/msdn/howto/howtoVB.asp

金曜日, 4月 27, 2007

[VC++]メモ

▼質問
UNREFERENCED_PARAMETERって何?returnの後に記述している?何だ!

▼回答
UNREFERENCED_PARAMETERマクロらしい。引数として受け取った変数を1度も使用しなかった
ときにでるコンパイル時の警告を回避するためのものらしい。

土曜日, 4月 21, 2007

[VBA]Validation

「アプリケーション定義またはオブジェクト定義のエラーです。」のエラーがでる。
.Validation.Add Type:=Excel.XlDVType.xlValidateDecimal, AlertStyle:=Excel.XlDVAlertStyle.xlValidAlertStop, Operator:=Excel.XlFormatConditionOperator.xlGreater, Formula1:="-999999999"


xlValidateCustom:任意の数式を使用してデータを検証します。
xlValidateDate:日付値
xlValidateDecimal:数値
xlValidateInputOnly:値が変更された場合のみ検証を行います。
xlValidateList:指定したリストに値が存在する必要があります。
xlValidateTextLength:文字列の長さ
xlValidateTime:時間値
xlValidateWholeNumber:全数値


xlValidAlertInformation:情報アイコン
xlValidAlertStop:停止アイコン
xlValidAlertWarning:警告アイコン

▼回答
どこでもいいからselectしないと駄目みたい。うまくいくときもあるのはよくわからない?

http://www.keep-on.com/excelyou/2002lng4/200208/02080364.txt

土曜日, 4月 14, 2007

[VBA]

変数宣言の強制Option Explicit
配列インデックスの下限値を指定Option Base [01]
デフォルトは1
文字列比較の優先順位を指定Option Compare [TextBinary]
デフォルトはBinaryBinary A < B < E < Z < a < b < e < z
Text (A=a) < (B=b) < (E=e) < (Z=z)

金曜日, 4月 13, 2007

[VB.NET]CheckedListBox

Public Sub setCheckedListBoxSelected(ByRef oCListBox As CheckedListBox)
Dim value As Boolean = oCListBox.GetItemChecked(oCListBox.SelectedIndex) 'oCListBox.SetItemChecked(oCListBox.SelectedIndex, CBool(IIf(value.Equals(True), False, True))) oCListBox.SetItemCheckState(oCListBox.SelectedIndex, CType(IIf(value.Equals(True), CheckState.Unchecked, CheckState.Checked), System.Windows.Forms.CheckState)) If (oCListBox.SelectedIndex >= 0) Then oCListBox.SetSelected(oCListBox.SelectedIndex, False) oCListBox.Show()
End Sub

気になる記事

http://itpro.nikkeibp.co.jp/article/COLUMN/20070410/267878/?ST=biz_shinzui
バグの発生率を示す数式があるという話だった。開発工数や進捗の度合い、プログラムの本数などに基づき、ある数式で計算するとバグの発生率が算出でき、実際に発生するバグとの誤差は5%の範囲に収まるという。
プログラムの品質は、作成に時間がかかった部分があまり高くない

火曜日, 4月 10, 2007

[VB.NET]Option Strict OnとOffの比較(OO4O接続)

■OO4Oを使用したデータベース接続方法でOption StrictをOnにした時とOffにした時での
比較をしてみる。

Option StrictをOffにしたとき

Dim oraDb As OracleInProcServer.OraDatabase
Dim oraDynaset As OracleInProcServer.OraDynaset
Dim fieldValue as Integer

oraDynaset = oraDb.CreateDynaset("select * from table", 0&)
If oraDynaset.RecordCount > 0 Then
fieldValue = oraDynaset.Fields("FIELDNAME").Value
End If

Option StrictをONにすると次のようになる。

Dim oraDb As OracleInProcServer.OraDatabase
Dim oraDynaset As OracleInProcServer.OraDynaset
Dim fieldValue as Integer

oraDynaset = CType(oraDb.CreateDynaset("select * from table", 0&), OracleInProcServer.OraDynaset)
If oraDynaset.RecordCount > 0 Then
fieldValue = CInt(DirectCast(DirectCast(oraDynaset.Fields, OracleInProcServer.OraFields)("FIELDNAME"), _ OracleInProcServer.OraField).Value)
End If

比較してみるとOption StrictはOffにした方が良さそうである。(^^)v

■参考サイト
KEN's .NET [特集4] Option Strict Onのススメ
http://www5b.biglobe.ne.jp/~yone-ken/VBNET/special/sp04_OptionStrictOn.html

土曜日, 4月 07, 2007

[VB.NET]メモ

メンバ=定数=等価なキャラクタ文字:説明
CrLf=vbCrLf=Chr(13) + Chr(10):キャリッジ リターン文字とライン フィード文字の組み合わせ。
Cr=vbCr=Chr(13):キャリッジ リターン文字。
Lf=vbLf=Chr(10):ライン フィード文字。
NewLine=vbNewLine=Chr(13) + Chr(10):改行文字。
Tab=vbTab=Chr(9):タブ文字。

Option Strict Onの時、以下の項目が禁止され、ビルド時にエラーになる。
・明示的なキャスト演算子を使用しない縮小変換
・遅延バインディング
・Object 型での=、<>、TypeOf~Is~、およびIs以外の演算
・宣言でのAs句の省略

■関連サイト
http://www.atmarkit.co.jp/fdotnet/vb6tonet2/vbnet2_13/vbnet2_13_01.html

土曜日, 3月 03, 2007

[Java]SQL関連

▼質問
NUMBER型のフィールドにnullを指定するにはどうすればいいの?

▼回答
setStringメソッドでnullを指定するか、setNullメソッドでTypes.NUMERIC を指定すればできるよ。

PreparedStatement pstmt = null;
pstmt.setString( parameterIndex, null );
pstmt.setNull( parameterIndex, Types.NUMERIC );

金曜日, 2月 16, 2007

[Java]ポップアップメニュー(JPopupMenu)

▼質問
ポップアップメニューを、タイトル名と選択メニューの間にセパレーターを挟んだ感じで表示したいんだ。
どうしたらいいんだ?

▼回答
サンプルだよ!参考にしてくれ!!表示したいコンポーネントのマウスクリックイベントに追加すれば
右クリックで表示されるよ。

if ( javax.swing.SwingUtilities.isRightMouseButton(e) ) {
// 右クリック時の処理
JPopupMenu popupMenu = new JPopupMenu();

JLabel label = new JLabel( "タイトル");
label.setAlignmentX( JPopupMenu.CENTER_ALIGNMENT );
label.setHorizontalAlignment( JLabel.CENTER );
label.setFont( new java.awt.Font( "Monospaced", java.awt.Font.BOLD, 14 ) );
popupMenu.add( label );

JSeparator[] separator = new JSeparator[2];
for ( int i = 0 ; i < separator.length ; i++ ) {
separator[i] = new JSeparator( SwingConstants.HORIZONTAL );
popupMenu.add( separator[i] );
}

JMenuItem menuItem = new JMenuItem( "選択メニュー" );
menuItem.setHorizontalAlignment( JLabel.LEFT );
menuItem.setFont( new java.awt.Font( "Monospaced", java.awt.Font.PLAIN, 12 ) );
menuItem.setActionCommand( "選択メニュー" );
popupMenu.add( menuItem );

menuItem.addMouseListener( new java.awt.event.MouseAdapter() {
public void mouseClicked( java.awt.event.MouseEvent evt ) {
// マウスがクリックされたときのイベント処理
}
});
menuItem.addMouseListener( new java.awt.event.MouseAdapter() {
public void mousePressed( java.awt.event.MouseEvent evt ) {
// コンポーネント上でマウスボタンが押されると呼ばれるイベント処理

}
});
menuItem.addMouseListener( new java.awt.event.MouseAdapter() {
public void mouseReleased( java.awt.event.MouseEvent evt ) {
// コンポーネント上でマウスボタンが放されると呼ばれるイベント処理

}
});

if ( e.isPopupTrigger() ) {
popupMenu.show( e.getComponent(), e.getX(), e.getY() );
}

} else if( javax.swing.SwingUtilities.isMiddleMouseButton(e) ) {
// 中ボタンクリック時の処理

} else if( javax.swing.SwingUtilities.isLeftMouseButton(e) ) {
// 左クリック時の処理

}

木曜日, 2月 15, 2007

[Java]コンポーネントの操作不可

■JButton
  JButton.setEnabled( false );

■JTextField
  JTextField.setEditable( false );

■JSpinner
((JSpinner.DefaultEditor)JSpinner.getEditor()).getTextField().setEditable( false );
JSpinner.getComponent(0).setEnabled( false );
JSpinner.getComponent(1).setEnabled( false );

イベント処理でチェックが必要!
JSpinner.getComponent(1).addMouseListener( new java.awt.event.MouseAdapter() {
public void mouseClicked( java.awt.event.MouseEvent evt ) {
if ( !evt.getComponent().isEnabled() ) return;
}
});

■JCheckBox
  JCheckBox.setEnabled( false );

■JFormattedTextField
  JFormattedTextField.setEditable( false );

[Java]is関連

■isValidメソッド
 レイアウトの処理が済んでいるかチェックする.

■isShowingメソッド
  オブジェクトが表示されているかをチェックする.

水曜日, 2月 07, 2007

[Java]ファイル入出力ストリーム関連

public int FileRead( String fname ) {
int ret = 0;
BufferedReader reader = null;

if ( fname == null ) return -1;

try {
reader = new BufferedReader( new FileReader( fname ) );
String line = null;
while ( (line = reader.readLine()) != null ) {
System.out.println( line );
ret++;
}
}
catch ( FileNotFoundException e ) {
System.out.println( "ファイルが見つかりません。" );
ret = -2;
}
catch ( IOException e ) {
System.out.println( "入出力エラーです。" );
ret = -3;
}
finally {
try {
if ( reader != null ) reader.close();
}
catch ( Exception e ) {}
}
return ret;
}

火曜日, 1月 16, 2007

[JavaScript]

currentElementNo = 0;
function nextElement( keyCode ) {
if (keyCode == 13) {
currentElementNo++;
currentElementNo %= document.formA.elements.length;
if ( document.formA.elements[currentElementNo].type != 'button') {
document.formA.elements[currentElementNo].focus();
} else {
currentElementNo++;
}
}
}

HTML部
'<'body onkeydown="nextElement(event.keyCode); return true;">

土曜日, 1月 13, 2007

[Java]メモ4

▼質問
splitメソッドでピリオドを指定すると配列が返ってこないんだ?どうやって指定すればいいの?!
ピリオドは、プログラムで重要な意味を持っているのはわかるんだが・・・。
String value = "1.2";
String[] splits = value.split( "." );

▼回答
¥マークを頭に二つ付ければよいようだ。
String value = "1.2";
String[] splits = value.split( "¥¥." );

■参考サイト
http://www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?topic=19125&forum=12&3

▼質問
ラベルをボタンスタイルに表示することは可能なの?

▼回答
可能だよ!
setBorderメソッドを使えばボタンをしたラベルが作成できるんだ。
クリックされたイベントもaddMouseListenerで登録すればボタン(ラベル)がクリックした時の
処理もすることができるんだ。

下記のプログラムは、種別によってスタイルを変えたいときに使用できる.
ボタン(ラベル)の上にきた時に種別1で呼び出してボタンが選択された状態にするのに使用できる.
private void setLabelStyle( JLabel label, int kind ) {

if ( kind == 1 ) {
label.setBorder( new CompoundBorder( new LineBorder( Color.RED, 3 ),
new BevelBorder( BevelBorder.RAISED ) ) );
}
else {
label.setBorder( new CompoundBorder( new LineBorder( Color.BLACK, 2 ),
new BevelBorder( BevelBorder.RAISED ) ) );
}

}

▼質問
「-Infinity」って何だ?

▼回答
「Infinity」は、無限大という文字列らしい。
正の無限大は「Infinity」で、負の無限大は「-Infinity」となるらしい。

■参考サイト
http://java.sun.com/j2se/1.5.0/ja/docs/ja/api/java/lang/Double.html

土曜日, 12月 23, 2006

[Java]Collection

▼質問
Mapオブジェクトを復帰値として可変で返却しているんだ。それを連続で格納しているんだけど
うまくかないんだ?

▼回答
Mapは、keyとvalueを組にして要素として保持しているからだよ!

Mapは、要素の順番を保持しなかったり、同一keyの要素は複数保持できなかったりするから
使い方には気をつけたほうがいいぞ。

前回値をclearメソッドで削除していなかったのが原因だったみたい。

例1)
TestMap testMap = new TestMap();
Map map = testMap.getMap();
例2)
TestMap testMap = new TestMap();
Map map = new HashMap();
map.putAll( testMap.getMap() );

上の2つのやり方は同じ結果が得られる。

■参考サイト
http://www.atmarkit.co.jp/fjava/javatips/098java012.html

土曜日, 12月 09, 2006

[Java]Look&Feel

// 外観を設定します
try {
UIManager.setLookAndFeel("com.sun.java.swing.plaf.windows.WindowsLookAndFeel");
} catch (ClassNotFoundException e1) {
// TODO 自動生成された catch ブロック
e1.printStackTrace();
} catch (InstantiationException e1) {
// TODO 自動生成された catch ブロック
e1.printStackTrace();
} catch (IllegalAccessException e1) {
// TODO 自動生成された catch ブロック
e1.printStackTrace();
} catch (UnsupportedLookAndFeelException e1) {
// TODO 自動生成された catch ブロック
e1.printStackTrace();
}
// 外観を変更します
SwingUtilities.updateComponentTreeUI(this);
// サブコンポーネントの推奨サイズおよびレイアウトに合わせて
// この Window をサイズ変更するように設定
pack();

■参考サイト
http://www.hellohiro.com/swinglookandfeel.htm

火曜日, 11月 28, 2006

[Java]Calendarクラス

▼質問
日付を表示するダイアログ内でCalendarクラスをaddしたんだけど次のエラーが出るんだ!?

Calendar calendar = Calendar.getInstance();
calendar = (Calendar)パラメータでもらったCalendarオブジェクト変数.clone();
calendar.add( Calendar.DATE, 1 );

java.lang.NullPointerException
at java.util.GregorianCalendar.getCurrentFixedDate(Unknown Source)
at java.util.GregorianCalendar.add(Unknown Source)

▼回答
時刻に変更したら回避できた?!なぜ?
calendar.add( Calendar.HOUR_OF_DAY, 24 );

▼質問
1970/01/01 00:00:00 からの通算秒をカレンダーオブジェクトに変換するにはどうするの?

▼回答
下記のようにすれば1970/01/01 00:00:00からの通算秒が設定できる。

Calendar calendar = Calendar.getInstance( TimeZone.getTimeZone( "JST" ) );
calendar.set( Calendar.YEAR, 1970 );
calendar.set( Calendar.MONTH, 0 );
calendar.set( Calendar.DATE, 1 );
calendar.set( Calendar.HOUR_OF_DAY, 0 );
calendar.set( Calendar.MINUTE, 0 );
calendar.set( Calendar.SECOND, 0 );
calendar.set( Calendar.MILLISECOND, 0 );
calendar.add( Calendar.SECOND, 通算秒 );

又は、

Calendar calendar = Calendar.getInstance( TimeZone.getTimeZone( "JST" ) );
calendar.setTimeInMillis( 0 );
calendar.add( Calendar.SECOND, 通算秒 );

土曜日, 11月 11, 2006

[Java]オブジェクトのコピー

▼質問
クラス間でメソッドのパラメータにクラスオブジェクト渡しているんだけど、そのオブジェクトが
完全な独立した形でコピーされないんだ?どうしたらいいの?!

▼回答
cloneメソッドを実装しなくてはいけないようだ!?

複写の方法にも2つの方法があるようだ。

1.シャローコピー(shallow copy)変数共有系?
2.ディープコピー(deep copy)完全独立系?

・・・・

■参考サイト
オブジェクトの複写
http://www.asahi-net.or.jp/~DP8T-ASM/java/tips/ObjectCopy.html

金曜日, 11月 10, 2006

[Java]イベントテンプレート

■キーイベント
JFormattedTextField textField = new JFormattedTextField();
textField.addKeyListener( new java.awt.event.KeyAdapter() {
public void keyTyped( java.awt.event.KeyEvent evt ) {
// キーが入力された時の処理
JFormattedTextField tf = (JFormattedTextField)evt.getComponent();
System.out.println( tf.getText() );
}
});

JFormattedTextField textField = new JFormattedTextField();
textField.addKeyListener( new java.awt.event.KeyAdapter() {
public void keyReleased( java.awt.event.KeyEvent evt ) {
// キーが放された時の処理
JFormattedTextField tf = (JFormattedTextField)evt.getComponent();
System.out.println( tf.getText() );
}
});

■フォーカスイベント
JFormattedTextField textField = new JFormattedTextField();
textField.addFocusListener( new java.awt.event.FocusAdapter() {
public void focusLost( java.awt.event.FocusEvent evt ) {
// フォーカスを失った時の処理
JFormattedTextField tf = (JFormattedTextField)evt.getComponent();
System.out.println( tf.getText() );
}
});

木曜日, 10月 19, 2006

[SQL関連]文字列操作

▼質問
テーブルでDATE型でない年(YEAR)月(MONTH)日(DAY)が別々で存在するフィールドがあるんだ。
これを連結してDATE型に変換したいんだ。
SQL文で文字列を連結するにはどうしたらいいの?

▼回答
文字列の結合には2種類があるようだ。

String1、String2には、文字列型のフィールドを指定するかシングルコーテイション''で文字列を
指定する。

①普通の連結:引数を単純に連結する。
CONCAT(String1, String2, ...)
②特殊な連結:第1引数のseparator(セパレータ:区切り文字)で以降の引数を連結する。
CONCAT_WS(separator, String1, String2, ...)

②CONCAT_WSは、oracleは使えないみたい。MySqlだけなの?

オラクルでこうするとできるようだ。
to_date(YEAR || '.' || MONTH || '.'|| DAY || ' 00:00:00', 'yyyy.mm.dd hh24:mi:ss')

■参考サイト
【SMART! ウェブ講座】~文字列関数
http://www.rfs.jp/sb/sql/03/02.html

火曜日, 10月 17, 2006

[Java]メモ3

▼質問
ButtonGroupで作成したボタングループを、プログラムから選択させたい時はどうやるんだい?

▼回答
2つのラジオボタンを選択されていない状態で生成してから、ラジオボタン2を選択された状態にする。

ButtonGroup buttonGroup = new ButtonGroup();
JRadioButton radioButton1 = new JRadioButton( "ラジオボタン1", false );
JRadioButton radioButton1 = new JRadioButton( "ラジオボタン2", false );
buttonGroup.add( radioButton1 );
buttonGroup.add( radioButton2 );
buttonGroup.setSelected( radioButton2.getModel(), true );

▼質問
選択されたラジオボタンをすべて解除するにはどうしたらいいの?

▼回答
ButtonGroupを作成し直す?!しかないのかな・・・?
removeしてaddする。。。。

removeしてaddするだけでは駄目のようだ。
setSelectedメソッドでfalseをセットしてやらないと解除できないみたい。

ButtonGroup buttonGroup = new ButtonGroup();
JRadioButton[] radioButton = new JRadioButton[2];

~略~

for ( int i = 0 ; i < radioButton.length ; i++ ) {
if ( radioButton[i].isSelected() ) {
buttonGroup.remove( radioButton[i] );
radioButton[i].setSelected( false );
buttonGroup.add( radioButton[i] );
}
}

▼質問
テキストフィールドの入力文字数をバイト長で制限したいんだけどどうやればいいの?

▼回答
public class LimitedJTextField extends javax.swing.JTextField {

public LimitedJTextField( int limit ) {
this.setDocument( new ByteLengthLimitedDocument( limit ) );
}

static class ByteLengthLimitedDocument extends javax.swing.text.PlainDocument {

private int limit;

public ByteLengthLimitedDocument( int limit ) {
this.limit = limit;
}

public void insertString( int offs, String str, AttributeSet a ) throws BadLocationException {

if ( str == null ) return;

String text = this.getText( 0, getLength() );
byte[] bytes = text.getBytes();

if ( bytes.length >= limit ) return;

super.insertString( offs, str, a );

}
}

}

■参考サイト
http://java-house.jp/ml/archive/j-h-b/020938.html

▼質問
同じような処理でクラスを分けなくて済む方法はないのかな?

クラスのタイプを判断して処理を分けたいんだ。

▼回答
getClassメソッドを使えばできるよ!

cとdはparentを継承して作成されている。
Object parent;
Object c;
Object d;
public void setParent(Object obj) {
parent = obj;
if ( parent.getClass().equals( c ) ) {
c = (c)obj;
}
else if ( parent.getClass().equals( d ) ) {
d = (d)obj;
}
}

■参考サイト
http://www.asahi-net.or.jp/~dp8t-asm/java/tips/HowToGetClass.html

日曜日, 10月 15, 2006

[Java]フォーマット

▼質問
数値をフォーマットしたい時はどうすんだい?

▼回答
DecimalFormatクラスを使用すればできるよ。使用方法は次のようになるよ。

DecimalFormat decimalFormat = new DecimalFormat( "###.0" );
String str = decimalFormat.format( 1234 );

▼質問
文字列をフォーマットしたい時はどうすんだい?

▼回答


▼質問
テキストフィールドの入力値をフィルタしたい時はどうすればいいの?

▼回答

JFormattedTextFieldクラスを使うとこうなるけど・・・。
文字数でしか入力制限ができない。。。

private MaskFormatter setMaskFormatter( int length ) {
MaskFormatter mf = null;
try {
String format = "";
for ( int i = 0 ; i < length-1 ; i++ ) format = format + "*";
mf = new MaskFormatter( format );
mf.setPlaceholderCharacter('_');
} catch (ParseException e) {
// TODO 自動生成された catch ブロック
e.printStackTrace();
}
return mf;
}
MaskFormatter mf = null;
try{
mf = new MaskFormatter("〒###-####");
mf.setPlaceholderCharacter('_');
}catch(ParseException pe){
}
JFormattedTextField ftf3 = new JFormattedTextField(mf);
ftf3.setColumns(10);

private MaskFormatter setMaskFormatter() {
MaskFormatter mf = null;
try {
mf = new MaskFormatter("###-##-####");
mf.setPlaceholderCharacter('_');
} catch (ParseException e) {
// TODO 自動生成された catch ブロック
e.printStackTrace();
}
return mf;
}


小数点を含む数値の入力のフォーマットはこうするとできたぞっ!

JFormattedTextField ftf = new JFormattedTextField();
DecimalFormat df = new DecimalFormat( "0.00" );

// 整数部分の最小桁数を設定する.
df.setMinimumIntegerDigits( 1 );
// 整数部分の最大桁数を設定する.
df.setMaximumIntegerDigits( 1 );
// 小数部分の最小桁数を設定する.
df.setMinimumFractionDigits( 2 );
// 小数部分の最大桁数を設定する.
df.setMaximumFractionDigits( 2 );
NumberFormatter nf = new NumberFormatter( df );
// 編集時には必要に応じてリテラル文字がスキップする.
nf.setAllowsInvalid( false );
nf.install( ftf );

■参考サイト
【Java:Swing:JFormattedTextField】
http://www.javadrive.jp/tutorial/jformattedtextfield/index.html

▼質問
入力ベリファイア(InputVerifier)って何?

▼回答
フォーカスが移動した時に実行され、trueになるまでフォーカスが移動できないみたい!?

JFormattedTextField tf = new JFormattedTextField();
tf.setInputVerifier( new InputVerifier() {
public boolean verify( javax.swing.JComponent input ) {
System.out.println( "InputVerifier" );
boolean returnValue = false;
JFormattedTextField tf = (JFormattedTextField)input;
try {
Integer.parseInt( tf.getText() );
returnValue = true;
}
catch ( NumberFormatException e ) {
tf.setText( "" );
returnValue = false;
}
return returnValue;
}
});

▼質問
JFormattedTextFieldでNumberFormatterをinstallしたんだけど・・・。
入力したものをクリアするためにsetText( "" )したんだけどうまくいかないんだ!
どうしたらうまくいくのか教えてくれ!!

▼回答
こうやるとできるよ(^^)v
JFormattedTextField ftf = new JFormattedTextField();
PlainDocument doc = new PlainDocument();
doc.insertString( 0, "", ftfgetDocument().getDefaultRootElement().getAttributes() );
ftf.setDocument( doc );

悲しい・・・お知らせです。

この方法では、設定したフォーマットが削除されてしまうことがわかりました。(;_;)

回避方法は、もう一度フォーマットし直す方法しか見つけれなかった。

とほほ。。。

日曜日, 10月 08, 2006

[Java]文字化け

▼質問
インプットフィールドの全角文字が文字化けする。

入力文字:12345678901234567890
文字化け後:?P?Q?R?S?T?U?V?W?X?O?P?Q?R?S?T?U?V?W?X?O

▼回答
String strText = request.getParameter( "TEXT" );
String strToText = new String ( strText.getBytes( "ISO8859_1" ), "JISAutoDetect" );


■参考サイト
【HTMLエンコード処理】
http://ash.jp/java/htmlencode.htm
【JAVA】
http://hisa-net.ddo.jp/php/java/encode.php

木曜日, 9月 14, 2006

[Java]JSpinnerメモ

▼質問
表示内容(文字列)の横配置(水平位置)はどうすればいいの?

▼回答
下記の方法で出来そう?

JSpinner DateYSpinner = new JSpinner( new SpinnerDateModel( new Date(), null, null, Calendar.YEAR ) );
java.awt.Container cont = (java.awt.Container)( DateYSpinner.getComponent(2) );
java.awt.Component comp = cont.getComponent(0);
javax.swing.JTextField field = (javax.swing.JTextField)comp;
field.setHorizontalAlignment( javax.swing.JTextField.CENTER );

一行で記述すると
((javax.swing.JTextField)( (java.awt.Container)( YearSpinner.getComponent(2) ) ).getComponent(0)).setHorizontalAlignment( javax.swing.JTextField.CENTER );
こんな感じになる。わかりずらいな~(^^;

関数にするとこんな感じかな?パラメータにJSpinnerのオブジェクトと、alignmentに
javax.swing.JTextField.CENTERを指定して呼べばいい感じかな?
private void setHorizontalAlignment( JSpinner spinner, int alignment ) {
java.awt.Container container = (java.awt.Container)( spinner.getComponent(2) );
java.awt.Component component = container.getComponent(0);
javax.swing.JTextField field = (javax.swing.JTextField)component;
field.setHorizontalAlignment( alignment );
}

■参考サイト
http://homepage1.nifty.com/algafield/jpr/srcs/SpinnerDemo.java

【書式付きテキストフィールド】
http://web.sfc.keio.ac.jp/~tetsu/j2se1.5/ja/guide/swing/1.4/ftf.html

▼質問
JSpinnerの「▲」「▼」ボタンのイベントを取得するにはどうしたらいいんだ?

▼回答
こんなコードを書いてまずは解析してみたらいいよ!
JSpinner spinner = new JSpinner();
java.awt.Component c0, c1, c2;
c0 = spinner.getComponent(0); // button
c1 = spinner.getComponent(1); // button
c2 = spinner.getComponent(2); // panel containing textfield
System.out.println(c0.toString());
System.out.println(c1.toString());
System.out.println(c2.toString());

出力結果
javax.swing.plaf.basic.BasicArrowButton[,0,0,0x0,invalid,alignmentX=0.0,alignmentY=0.5,border=javax.swing.border.CompoundBorder@d1329,flags=4194600,maximumSize=,minimumSize=,preferredSize=,defaultIcon=,disabledIcon=,disabledSelectedIcon=,margin=javax.swing.plaf.InsetsUIResource[top=2,left=14,bottom=2,right=14],paintBorder=true,paintFocus=true,pressedIcon=,rolloverEnabled=true,rolloverIcon=,rolloverSelectedIcon=,selectedIcon=,text=,defaultCapable=true]
javax.swing.plaf.basic.BasicArrowButton[,0,0,0x0,invalid,alignmentX=0.0,alignmentY=0.5,border=javax.swing.border.CompoundBorder@650892,flags=4194600,maximumSize=,minimumSize=,preferredSize=,defaultIcon=,disabledIcon=,disabledSelectedIcon=,margin=javax.swing.plaf.InsetsUIResource[top=2,left=14,bottom=2,right=14],paintBorder=true,paintFocus=true,pressedIcon=,rolloverEnabled=true,rolloverIcon=,rolloverSelectedIcon=,selectedIcon=,text=,defaultCapable=true]
javax.swing.JSpinner$ListEditor[,0,0,0x0,invalid,layout=javax.swing.JSpinner$ListEditor,alignmentX=0.0,alignmentY=0.0,border=,flags=9,maximumSize=,minimumSize=,preferredSize=]
JavaのAPIを解析するのは面白いね!Javaの奥深さがわかってきた感じがしてきて楽しくなってきた。(^^)

わかるってすばらしい!!

マウスクリックイベントの登録をすると下記のようになる。
c0.addMouseListener( new java.awt.event.MouseAdapter() {
public void mouseClicked( java.awt.event.MouseEvent evt ) {
}
});
c1.addMouseListener( new java.awt.event.MouseAdapter() {
public void mouseClicked( java.awt.event.MouseEvent evt ) {
}
});

■参考サイト
http://www.javaworld.com/javaforums/showflat.php?Cat=&Board=javabeginner&Number=3300&page=31&view=collapsed&sb=7&o=

▼質問
NumberEditorで作成したスピナーを入力不可にしたんだけど・・・。
どうすればいいの?

▼回答
こうすればいいみたい!
((JSpinner.NumberEditor)spinner.getEditor()).getTextField().setEditable( false );

■参考サイト
【Java Swing JSpinner - てんぷらメモ】
http://terai.xrea.jp/Swing/SpinnerEditor.html

▼質問
NumberEditorで値を設定したい時はどうするんだい!

▼回答
こうすれば表示は変わったけど、spinner.getValue()の値が反映されないみたい!!
JSpinner.NumberEditor numberEditor = (JSpinner.NumberEditor)spinner.getEditor();
numberEditor.getTextField().setText( value );

次のようにするとgetValue()の値がちゃんと反映されるよ!
みそは、commitEdit()だよ~ん!!

try {
JSpinner.NumberEditor numberEditor = (JSpinner.NumberEditor)spinner.getEditor();
numberEditor.getTextField().setText( value );
numberEditor.commitEdit();
}
catch ( ParseException e ) {
e.printStackTrace();
}

▼質問
setValueでこんなエラーが出るんだ?!
java.lang.IllegalArgumentException: invalid sequence element
at javax.swing.SpinnerListModel.setValue(Unknown Source)
at javax.swing.JSpinner.setValue(Unknown Source)

▼回答
SpinnerListModelで設定している最大値・最小値の範囲が超えている可能性があるから!
チェックしてみるといいよ!!

▼質問
SpinnerNumberModelの最大値を再設定したいんだけど!うまくいかないんだ!?
この方法では駄目なのかな?

String Maximum = String.valueOf(10);
((SpinnerNumberModel)Spinner.getModel()).setMaximum(Maximum);

String Maximum = String.valueOf(10);
JSpinner.NumberEditor numberEditor = (JSpinner.NumberEditor)Spinner.getEditor();
((SpinnerNumberModel)numberEditor.getModel()).setMaximum(Maximum);

▼回答
もう一度、SpinnerNumberModelオブジェクトを生成してJSpinnerのsetModelメソッドに
設定すればうまくできるよ。

SpinnerNumberModel model = new SpinnerNumberModel( InitNum, Minimum, Maximum, Step );
Spinner.setModel( model );

[JSP]

▼質問
<%! %>って何?<% %>と何が違うの?

▼回答
JSP内で共通する宣言を使用する時にその内容を記述する書き方だよ。

木曜日, 8月 24, 2006

[Java]Javadoc

▼質問
@seeタグって何?

▼回答
関連項目を記述するタグ。主に関連するクラスなどを記述する。

[Java]Swing関連

▼質問
JScrollPaneのスクロールバー上下・左右にあるボタンのワンクリックの移動量を設定するには
どうしたらいいの?

▼回答
JScrollBarクラスのsetUnitIncrement()メソッドで1クリックの移動量(増加量)を設定できる。

下記のサンプルは、水平スクロールを常に表示し移動量を設定するプログラムである。

JScrollPane scrollPane = new JScrollPan
(javax.swing.ScrollPaneConstants.VERTICAL_SCROLLBAR_NEVER,
javax.swing.ScrollPaneConstants.HORIZONTAL_SCROLLBAR_ALWAYS);
JScrollBar scrollBar = new JScrollBar();
// scrollBar = scrollPane.getVerticalScrollBar()
// scrollBar.setUnitIncrement(n);
scrollBar = scrollPane.getHorizontalScrollBar();
scrollBar.setUnitIncrement(n);

▼質問
JScrollPaneを右にスクロールすると、レイアウトで区切った左側部分が隠れる。

▼回答
作成したJScrollPaneの部分をPanelに追加してやるとうまくいったが、左側が今度は隠れてしまった。
setOpaqueメソッドで制御すればできそうだが。。。

調べてみると、JScrollPaneとPanelの混在は駄目みたい。とほほ・・・。

JScrollPaneのときは、JPanelを継承したもの使い。Panelのときは、ScrollPaneの組み合わせしか
駄目みたい。。。。

とりあえずPanelをJPanelに修正したが、スクロールがうまく動かなく、表示領域以外のところが
見れなかった。

調べてみると、次のコードを入れてみるとよいことがわかったので試しに入れてみた。

Dimension size = new Dimension( x, y );
this.setMaximumSize( size );
this.setMinimumSize( size );
this.setPreferredSize( size );

すると、うまく動いてくれた。よかった。(*^^*)v

▼質問
JButtonで複数行の文字列を表示するにはどうすればいいの?

▼回答
テキストに¥nを入れても駄目なのね?(>_<)

テキストにHTML(Hyper Text Markup Language)形式で記述をするとできるのね!

javax.swing.JButton jbutton = new javax.swing.JButton(""<""HTML"">""

1行目
2行目

");


▼質問
ダイアログのFramとJDialogの関係?JFramとDialogの関係ってあるの?

▼回答
public class TestDialog extends Fram {
private MainDialog dialog = null;
// コンストラクタ
public TestDialog() {
Dimension dim = new Dimension( 100, 100 );
dialog = new DataDialog( MizuASetDataDialog.this, title, true );
Dimension ScreenSize = getToolkit().getScreenSize();
dialog.setBounds( (ScreenSize.width/2) - (dim.width/2), (ScreenSize.height/2) - (dim.height/2), dim.width, dim.height );
dialog.setResizable( false );
dialog.setSize( dim );

// ダイアログのクローズ処理
dialog.addWindowListener( new WindowAdapter() {
public void windowClosing( WindowEvent e ) {
dialog.dispose();
dialog = null;
return;
}
});

dialog.show();
}
private class MainDialog extends Dialog {
// コンストラクタ
public MainDialog( Fram owner, String title, boolean modal ) {
super( owner, title, modal );
}
}
}

▼質問
Javaにはスピンボックスはないの?

▼回答
あるよ!J2SE1.4からSwingコンポーネントのJSpinner(スピナー)が追加されたよ!!

■参考サイト
http://www.javainthebox.net/laboratory/JDK1.4/Swing/Spinner/Spinner.html

▼質問
ラジオボタンはどうやってコーディングするの?

▼回答
JRadioButtonとButtonGroupを使って作成するんだ。

JRadioButton radio1 = new JRadioButton("radio1", true);
JRadioButton radio2 = new JRadioButton("radio2");
JRadioButton radio3 = new JRadioButton("radio3");

ButtonGroup group = new ButtonGroup();
group.add(radio1);
group.add(radio2);
group.add(radio3);

火曜日, 8月 22, 2006

[Java]メモ2

▼質問
Serializableインターフェイスって何?直列化(シリアライズ)って何?

▼回答
・Serializable=直列化=シリアライズ
・ファイル化でできるようなバイト列に変換することをいう。
・オブジェクトの表すデータを、ファイルとしてセーブしたり、ネットワークで送信したりすることが
できるようになる。
・「implements」宣言に加えるだけで、該当するクラスが直列化可能になる。
・直列化したくないインスタンス変数がある場合は「transient」キーワードを使用する。

▼質問
javax.swing.JButtonのsetSizeメソッドを使ってもボタンのサイズが変更されない。

▼回答
JComponentの派生クラスには、柔軟なレイアウト調整を可能にするために、最大、最小、
最適の3つのサイズプロパティを持っているらしい。

これらの3種類のサイズプロパティを変更するには、
setMaximumSize, setMinimumSize, setPreferredSize
といったメソッドを使うといいらしい。

Dimension size = new Dimension(100, 100);
button.setMaximumSize(size);
button.setMinimumSize(size);
button.setPreferredSize(size);

■参考
【[JavaHouse-Brewers:25641] JButton のサイズ変更】
http://java-house.jp/ml/archive/j-h-b/025641.html

▼質問
16進のカラーコードをカラー型にするにはどうしたらいいの?

▼回答
下記のようにすれば変換できるよ。
Color color = Color.decode( "0xFFFFFF" );

▼質問
GridLayoutに0行や0列を指定してもうまくいくんだ!なぜ?

▼回答
GridLayoutでは、0行や0列を指定するといくつでも追加できる仕様らしいんだ?!
行か列が可変でわからない時は、0を指定するとよいということだね!便利だ!!

木曜日, 8月 17, 2006

[Windows]バッチなど

▼質問
バッチ・ファイルで日付を取得して、ファイル名で使用したいときはどうするの?

▼回答
【@IT:Windows TIPS -- Tips:バッチ・ファイル中で日付をファイル名に使用する】
http://www.atmarkit.co.jp/fwin2k/win2ktips/419batchdate/batchdate.html

%date:~0,4%%date:~5,2%%date:~8,2%

図式表示されたディレクトリ構造を出力する。
tree > D:\Tree\tree%date:~0,4%%date:~5,2%%date:~8,2%.txt

[Eclipse]Pluginなど

▼質問
JavaScriptを編集するにはどうすればいいの?

▼回答
【@IT:Java TIPS -- EclipseでJavaScriptを編集する】
http://www.atmarkit.co.jp/fjava/javatips/035eclipse012.html

▼質問
『Could not create the Java virtual machine.』というエラーメッセージが表示されるが
どうすればいいのか?

▼回答
設定した起動オプションに問題があるのでその辺を調べるとよい。

[Apache]構築関連

▼質問
ショートカットのリンク先に指定するパラメータのには何が指定できるの?
Apacheeの標準インストールでは、
「スタート」→「プログラム」→「Apache HTTP Server」→「Control Apache Server」
に登録されているショートカットのリンク先は以下のようになっている。
「Start」 :"C:\Program Files\APACHE~1\Apache\Apache.exe" -w -n "Apache" -k start
「Stop」 :"C:\Program Files\APACHE~1\Apache\Apache.exe" -w -n "Apache" -k stop
「Restart」 :"C:\Program Files\APACHE~1\Apache\Apache.exe" -w -n "Apache" -k restart

▼回答
"C:\Program Files\APACHE~1\Apache\Apache.exe":Apache.exeのフルパス
-w:
-n:
"Apache":サービス名
-k:
start/stop/restart:起動方法

火曜日, 7月 25, 2006

[Java]サーブレット(Servlet)

▼質問
Eclipseで『サーブレットの作成』をすると作成の途中で選択する下記の項目は何?
どんな時に使用するの?
・init
・toString
・getServletInfo
・doPost
・doPut
・doDelete
・destroy
・doGet

▼回答
・init
サーブレットが実行される時に最初に一度だけ呼び出される初期化メソッド。
・toString
オブジェクトの文字列表現を返すメソッド。
・getServletInfo
作者、バージョン、著作権といったServletに関する情報を取得するメソッド。
・doPost
FORMタグで指定するmethod属性に対するPOST送信の取得メソッド。
・doPut
HTTPメソッドのPUTは、FTPのようにファイルをサーバにアップロードできるらしい。
その要求に対するメソッド。
・doDelete
HTTPメソッドのDELETEは、HTTPサーバのファイルを削除することができるらしい。
その要求に対するメソッド。
・destroy
サーブレットが終了される時に最後に一度だけ呼び出される終了メソッド。
・doGet
FORMタグで指定するmethod属性に対するGET送信の取得メソッド。

月曜日, 7月 10, 2006

[Java]画像・印刷・PDF

http://www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?topic=19714&forum=12&5

【OpenOffice.orgとJooReportsを利用してJavaからPDFを出力する】
http://codezine.jp/a/article.aspx?aid=131&res=2

【ImageIO (Java 2 プラットフォーム SE v1.4.0)】
http://java.sun.com/j2se/1.4/ja/docs/ja/api/javax/imageio/ImageIO.html

【dW : Web services : Webサービス・プログラミングのヒントと秘訣:
                    添付ファイル無しでバイナリー・データを送信】
http://www-06.ibm.com/jp/developerworks/webservices/041008/j_ws-tip-noattach.html

【J2SE, v1.4 の新機能 Image I/O】
http://www.javainthebox.net/laboratory/JDK1.4/Graphics/ImageIO/ImageIO.html

setUseCache
ImageInputStream および ImageOutputStream の作成時に、ディスクベースのキャッシュファイルを
使用する必要があるかどうかを示すフラグを設定します。

火曜日, 7月 04, 2006

[Java]数学演算

▼質問
四捨五入・切り上げ・切り捨てをする方法はないのか?

▼回答
あるよ。Mathクラスのメソッドの中にあるんだ。
四捨五入:Math.round(a)
切り上げ:Math.ceil(a)
切り捨て:Math.floor(a)

■参考サイト
【Java:Javaプログラム入門(クラスライブラリ編):
    Mathクラス:切り上げ/切捨て/四捨五入を求める(ceil, floor, round)】
http://www.javadrive.jp/library/math/index7.html

月曜日, 7月 03, 2006

[Web共通]キャッシュ

■HTML
<'meta content="no-cache" http-equiv="Cache-Control">

■JSP
キャッシュ用のインクルードファイルを作成してインクルードすると良いらしい。

jspファイル
<%@ page include="NoCache.inc" %>

NoCache.inc
<%! private String getHTTPDate() {
java.text.SimpleDateFormat formatter =
new java.text.SimpleDateFormat("E, dd MMM yyyy hh:mm:ss zzz", java.util.Locale.US);
formatter.setTimeZone(java.util.TimeZone.getTimeZone("GMT"));
return formatter.format(new java.util.Date());
}
%><%
response.setHeader("Expires", getHTTPDate());
response.setHeader("Pragma","no-cache");
response.setHeader("Cache-Control","no-cache");
%>

■参考サイト
【ブラウザキャッシュでパフォーマンス向上 ―負荷分散装置の落とし穴に注意-】
http://www.atmarkit.co.jp/fjava/rensai2/webopt12/webopt12.html

■Java
・アプレットのキャッシュを削除する方法。
【Java Runtime Environment (JRE) のキャッシュを消去する -1.5.0-】
http://java.com/ja/download/help/5000020300.xml

・アプレットのキャッシュを制御する方法。
【アプレットキャッシュ】
http://java.sun.com/j2se/1.3/ja/docs/ja/guide/misc/appletcaching.html

土曜日, 7月 01, 2006

[Java]フォント

▼問題
フォント名を知るにはどうすればいいの?

▼回答
次のコードを実行すれば分かるよ。
String FontNames[] = GraphicsEnvironment.getLocalGraphicsEnvironment().getAvailableFontFamilyNames();
for (int i = 0 ; i < FontNames.length ; i++) {
System.out.print(FontNames[i] + "\n");
}

■結果
Arial
Arial Black
Arial Narrow
Book Antiqua
Bookman Old Style
Century
Century Gothic
Comic Sans MS
Courier New
Default
Dialog
dialog.plain
DialogInput
dialoginput.plain
Garamond
Georgia
Haettenschweiler
HGP創英角ゴシックUB
HGP創英角ポップ体
HGPゴシックE
HGS創英角ゴシックUB
HGS創英角ポップ体
HGSゴシックE
HG丸ゴシックM-PRO
HG創英角ゴシックUB
HG創英角ポップ体
HG正楷書体-PRO
HGゴシックE
Impact
Lucida Bright
Lucida Console
Lucida Sans
Lucida Sans Typewriter
Lucida Sans Unicode
Marlett
Microsoft Sans Serif
Monospaced
monospaced.plain
Monotype Corsiva
MS Outlook
MS UI Gothic
Myriad Condensed Web
Myriad Web
Myriad Web Pro
Myriad Web Pro Condensed
OCRB
Palatino Linotype
SansSerif
sansserif.plain
Serif
serif.plain
Symbol
Tahoma
Times New Roman
Trebuchet MS
Verdana
Webdings
Wingdings
Wingdings 2
Wingdings 3
MS ゴシック
MS 明朝
MS Pゴシック
MS P明朝

土曜日, 6月 10, 2006

[Java]イベント処理

Javaのイベント処理を実装するのは少し面倒である。欲しいイベントのリスナーオブジェクト(???Listener)を
インターフェイスに実装する必要があるからだ。初心者には見つけるのが大変である。
(implements-クラスにインターフェイスの実装を指定する)

MouseWheelListener ->ScrollPane または JScrollPane をスクロールする際に使用する。


▼MouseMotionListenerインターフェイス

■登録メソッド
addMouseMotionListener
■イベント定義
public void mouseDragged(MouseEvent e) {}
public void mouseMoved(MouseEvent e) {}



▼質問
MouseListenerインターフェースを実装すると使わないメソッドまで宣言して定義しなくてはならないけど
必要なものだけ宣言したい。そんな便利なものはないのか?

▼回答
MouseAdapterクラスを実装すればできる。クラスなのでextendsしなくてはならない。
  //リスナーの登録
XXX.addMouseListener(new myListener());

//イベントクラスの再定義
public class myListener extends MouseAdapter{
public void mouseClicked(MouseEvent e){

}
}

▼質問
JListとJScrollPaneで作成したスクロールの「▼」「▲」ボタンのイベント処理はどうやるの?

▼回答
JScrollPaneからスクロールバーのオブジェクトを取得すればできるよ。

JScrollPane scrollPane = new JScrollPane();
//垂直スクロールの場合
JScrollBar vscr = this.scrollPane.getVerticalScrollBar();
vscr.setVisible(true);
vscr.addAdjustmentListener(new AdjustmentListener() {
public void adjustmentValueChanged(AdjustmentEvent e) {
System.out.println("イベントが起きたよ!->addAdjustmentListener");
}
});

//水平スクロールの場合
JScrollBar hscr = this.scrollPane.getHorizontalScrollBar();
hscr.setVisible(true);
hscr.addAdjustmentListener(new AdjustmentListener() {
public void adjustmentValueChanged(AdjustmentEvent e) {
System.out.println("イベントが起きたよ!->addAdjustmentListener");
}
});

木曜日, 5月 25, 2006

[HTML]メモ

▼質問
ボタン名称を改行(折返し)表示したい。

▼回答
「 」を入れると折り返される。


■参考
「&#数字;」や「&キーワード;」を指定すると特殊文字などが表示できる。
【HTMLの特殊文字 : IT用語辞典 e-Words】
http://e-words.jp/p/r-htmlentity.html

水曜日, 5月 24, 2006

[JSP]jspを動かす(Tomcat)

■サーブレット・コンテナのTomcatをインストール

■関連サイト
【The Ja-Jakarta Project - Tomcat翻訳】
http://www.jajakarta.org/tomcat/
【連載:Tomcatを使う「JSPプログラミング」 第1回】
http://www.atmarkit.co.jp/fjava/rensai/jsp01/jsp01.html

▼質問
クラスのフォルダ位置を設定するにはどうするのか?

▼回答
Tomcatの下記フォルダ内にある「wrapper.properties」ファイルを編集する。
「\jakarta-tomcat-3.3.2\conf\jk」
ファイル内の「wrapper.class_path」に下記を追加する。
「wrapper.class_path=$(wrapper.tomcat_home\classes)\」

▼質問
web.xmlに記述する要素って何?




▼回答
イベントリスナは、要素を使ってイベントが発生するときに起動されるリスナクラスを定義する。
要素は、要素と 要素のすぐ後ろで定義し、要素の
すぐ前に記述します。それぞれのイベントタイプに複数のリスナクラスを定義できる。

月曜日, 5月 15, 2006

[Java]グラフィック(透過色)

▼質問
Javaで図形を描画したりするときに色を透過したい。

▼回答
Colorクラスのカラー設定にアルファ値が設定できるからそれを使えば実現できる。

例)赤を透過指定して描画する。
public void paint(Graphics g){
Color c = new Color(Color.red.getRed(), Color.red.getGreen(), Color.red.getBlue(), 32);
g.setColor(c);
//g.setColor(Color.red);
g.fillRect(0, 0, 100, 100);
}

土曜日, 5月 13, 2006

[Java]変数・定数・配列・文字列・日付・時刻

▼質問
JavaでVBみたいなEnum型はないのか?

▼回答
ないみたい!?でも、バージョン1.5からサポートされるらしい。

列挙型
http://wisdom.sakura.ne.jp/programming/java/java5_6.html

Javaの疑問 - Javaをはじめて疑問におもったこと。
http://www.hyuki.com/yukiwiki/wiki.cgi?Java%a4%ce%b5%bf%cc%e4

▼質問
JavaにVBやC言語のような構造体はないのか?

▼回答
ないみたい!クラスのオブジェクトを使って実現するみたい!?

http://homepage3.nifty.com/teranet/jac/JavaAndC.html

▼質問
文字列を数値に変換するにはどうしたらよいのか?

▼回答
2種類の方法があるらしい。
String str;
int a = Integer.valueOf(str).intValue();
int b = Integer.parseInt(str);

■参考サイト
【Javaの道:(2.文字列から数、数から文字列へのデータ変換)】
http://www.javaroad.jp/java_number2.htm

▼質問
日付を表示するにはどうしたらよいのか?

▼回答
Date tm = new Date();
SimpleDateFormat sdf = new SimpleDateFormat("yyyy'年'MM'月'dd'日'");
System.out.println(sdf.format(tm));
sdf.applyPattern("yyyy/MM/dd");
System.out.println(sdf1.format(tm));

▼質問
Javaには、可変配列のようなものはないのか?VBのようなRedim Preserve(動的配列)のような後から
サイズ変更ができるようなもの!

▼回答
あるよ!ArrayListクラスが実行時の動的配列が可能なクラスだ。

▼質問
YYYY/MM/DD形式とYYYYMMDD形式の日付をDate型で取得したいときはどうするんだい?

▼回答
こんな関数を作ってみたけど、どうかな?

■呼び方
Calendar testCalendar = Calendar.getInstance();
String strDate = "20000101";
testCalendar = setCalendar( strDate );
if ( testCalendar == null ) System.out.println( "NULL" );
Date date = testCalendar.getTime()
strDate = "2006/09/09";
testCalendar = setCalendar( strDate );
if ( testCalendar == null ) System.out.println( "NULL" );
Date date = testCalendar.getTime()


■変換関数
private Calendar setCalendar( String strDate ) {
int year = 0, month = 0, date = 0;
Calendar makeCalendar = Calendar.getInstance();
if ( strDate.split( "/" ).length > 2 ) {
// YYYY/MM/DD形式
if ( strDate.split( "/" ).length < 3 ) return ( null );
String[] val = strDate.split("/");
year = Integer.valueOf( val[0] ).intValue();
month = Integer.valueOf( val[1] ).intValue();
date = Integer.valueOf( val[2] ).intValue();
}
else {
// YYYYMMDD形式
if ( strDate.length() < 8 ) return ( null );
year = Integer.valueOf( strDate.substring( 0, 4 ) ).intValue();
month = Integer.valueOf( strDate.substring( 4, 6 ) ).intValue();
date = Integer.valueOf( strDate.substring( 6, 8 ) ).intValue();
}
makeCalendar.set( year, month, date );
return ( makeCalendar );
}

この関数にはバグがあった。(^^;
カレンダークラスに値をセットする時は月をマイナス1しないといけないのね!
逆に値をゲットする時はプラス1をしないと駄目なのね!

修正すると下記の箇所が
makeCalendar.set( year, month, date );
から
makeCalendar.set( year, month-1, date );
なる。

▼質問
日付のフォーマットで23時間制と24時間制を指定するにはどうしたらいいの?

▼回答
23時間制は、Hを指定するとできるよ。24時間制は、kだよ。

▼質問
日数を求めたい時はどうするんだい!

▼回答
こんな関数を作ってみたけど、どうかな?

private int getDays( Date from, Date to ) {
Calendar fromDate = Calendar.getInstance(); // 日付(From)
fromDate.setTime( from );

Calendar toDate = Calendar.getInstance(); // 日付(To)
toDate.setTime( to );

// ミリ秒取得
long diff = (toDate.getTime()).getTime() - (fromDate.getTime()).getTime();
int days = (int)(diff / (24*60*60*1000));

return days;
}

■参考サイト
【[JavaHouse-Brewers:28526] Re: 日数の計算】
http://java-house.jp/ml/archive/j-h-b/028526.html

▼質問
カレンダークラスを生成するときに、タイムゾーンを指定しないとどうなるの?
Calendar calendar = Calendar.getInstance();
Calendar calendar = Calendar.getInstance(TimeZone.getTimeZone("JST"));

▼回答


▼質問
小文字を大文字に変換するにはどうするの?

▼回答
文字列クラスのtoUpperCaseを使えば変換できるよ。だけど、英文字だけしか変換されないよ!
数字は大文字にならないみたい・・・。

ネットで探したらこんなサンプルがあった。(^^)v
■参考サイト
http://www7a.biglobe.ne.jp/~java-master/samples/string/HankakuNumberToZenkakuNumber.html

▼質問
final変数って何だ?Eclipseを使っていると警告の候補として出てくるから
そのままわからずに使っていたけど・・・(^^;←そんなんでよいのかと怒られそうだが。。。

▼回答
finalをつけて宣言すると、変数に値を代入しても値が変わらないから、間違えて代入しても
プログラムの意味が変わらないようにできるメリットがあるようだ。

メソッドの入力パラメータには、finalをつけた方がよいと言うことなのかな?

■参考サイト
【[java] final 変数を使う】
http://www.soi.wide.ad.jp/class/20030028/slides/03/32.html
【[Java Memo] About final】
http://www02.so-net.ne.jp/~komori/doc/java/final.html

金曜日, 5月 12, 2006

[Java]メモ1

▼質問
『シリアライズ可能クラス MessageBox は long 型の static final serialVersionUID
フィールドを宣言していません。』のメッセージが出る。

▼回答
Eclipse3.1以降のデフォルトでのシリアライズ可能クラスチェックの警告。
『ウィンドウ(W)』→『設定』→『Java』→『コンパイラー』→『エラー/警告』
→『潜在的なプログラミングの問題(P)』→『serialVersionUIDなしのシリアライズ可能クラス(Z)』
を『警告』から『無視』にするといいらしい。

■参考サイト
http://ivory.ap.teacup.com/applet/omron58/msgcate6/archive

▼質問
『serialVersionUID』って何?

▼回答
『!』の警告アイコンをクリックするとメニューが表示するので、その中から『デフォルト・シリアル・バージョン
IDの追加』をクリックすると下記のコードが追加されて警告が消えた。

/**
*
*/
private static final long serialVersionUID = 1L;

他のメニューにある『生成シリアル・バージョンIDの追加』で追加しても同じ結果が得られた。

/**
*
*/
private static final long serialVersionUID = 8219119111923576514L;

【>Java オブジェクト直列化仕様: 4 - クラス記述子】
http://java.sun.com/j2se/1.4/ja/docs/ja/guide/serialization/spec/class.doc6.html

■参考サイト
【SaikyoLine.jp: serialVersionUIDって。】
http://saikyoline.jp/weblog/archives/2005/09/serialversionui.html
【SuppressWarnings (Java 2 Platform SE 5.0)】
http://www.ep.u-tokai.ac.jp/~nakazato/API/1.5.0/docs/ja/api/java/lang/SuppressWarnings.html

▼質問
CanvasクラスにPanelクラスを追加することはできるのか?

▼回答
できない?!PanelクラスにCanvasクラスに追加することは可能である。

▼質問
Panelに追加したCanvasがrepaintしても再描画されない。

▼回答
removeらしい。「createImage」、「getGraphics」、「drawImage」を使用しての
ダブルバッファリングの仕方に問題があったようだ。前回のイメージを取得して描画するという事を考えて
処理をしないと描画されないのはなぜなのかがわからない。ドツボにはまる!

▼質問
描画したCanvasに透明のLabelを貼りたい。

▼回答
うまくできなかったが、CanvasをComponentに変えたらうまくいった!?透明のLabelにはSwingのラベル
クラスのJLabelを使用した。このラベルは、デフォルトで透過状態になっている。

class Test extends Component
{
public Test() {
this.setLayout(null);
JLabel jlabel = new JLabel("JLabel");
jlabel.addMouseListener(jlabel);
this.add(jlabel).setBounds(0, 0, 100, 20);
}
}

■参考サイト
【アプリケーション・フレーム/Hello World】
http://www.asahi-net.or.jp/~DP8T-ASM/java/tips/AppFrameHelloWorld.html

▼質問
Javaには、VBのような参照渡し(ByRef)とか値渡し(ByVal)はあるの?

▼回答
Javaでは、オブジェクトと配列を渡すと参照渡しでそれ以外は値渡しらしい。

■参考サイト
【Q&Aピックアップ「はじめから学ぶJava」】~値渡しと参照渡しの違い
http://edu.nikkeibp.co.jp/edu/column/c_qa/41221/index.html
【VB 値型と参照型】
http://homepage1.nifty.com/rucio/main/dotnet/shokyu/standard34.htm
【Chapter 01 基本構文の変化 - @IT】~引数の値渡し(ByVal)と参照渡し(ByRef)のデフォルト
http://www.atmarkit.co.jp/fdotnet/vb6tonet2/vbnet2_01/vbnet2_01_03.html

▼質問
extendsに複数のクラスを継承させたいがっ!できないのか?

▼回答
できない。方法としては、段階的に継承するか?!インターフェイスを使ってするらしい。

▼質問
テキストフィールド(TextField)の初期状態で日本語入力にしたができるのか?

▼回答
できるみたい。このサイトの通りにやったらうまくできました。素晴らしい♪感謝!感謝!感謝!ですね!!

【【Swing】 IMEの切り替え】
http://dev105.souko105.net/index.php?%A1%DASwing%A1%DB%20%A3%C9%A3%CD%A3%C5%A4%CE%C0%DA%A4%EA%C2%D8%A4%A8

TextField txt = new TextField(5);
txt.addFocusListener(new FocusAdapter() {
public void focusGained(FocusEvent e) {
e.getComponent().getInputContext().setCharacterSubsets(new Character.Subset[] { InputSubset.KANJI });
}
public void focusLost(FocusEvent e) {
e.getComponent().getInputContext().setCharacterSubsets(null);
}
});