テキスト広告:Amazon Primeday

水曜日, 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:下へ検索