月曜日, 12月 29, 2008
[VB2005]Excel処理の高速化
大量のデータをデータベースから読込んでExcelのシートに表示したいんだ。
ループしてValueにデータを格納すると遅くなるんだ。
一括してデータを格納する方法はないのか?!
▼回答
一括してデータを貼り付ける方法はあるよ。
まず、セルの行と列を2次元にしたデータ領域を作成するんだ。
Dim value(5, 2) As String
この領域にデータを格納して、次の様にRangeに貼り付ける範囲を指定して
Range("A1:B5").Value = value
Valueに2次元配列を格納すれば、配列に格納したイメージのままセルに
データが貼り付けられるんだ。
金曜日, 12月 26, 2008
[VB2005]ExcelのA1形式で列名取得
Excelの参照形式で表示されるA1形式の数字以外の列名を取得したいんだ。
どうしたらできるか教えてくれ!
▼回答
サンプルを示すから参考にしてくれ!!
Public Shared Sub GetExcelA1Address(ByRef strA1() As String)
Dim xlApp As Excel.Application = Nothing
Try
xlApp = CreateObject("Excel.Application")
If IsNothing(xlApp) Then Exit Sub
xlApp.Workbooks.Add()
xlApp.WindowState = Excel.XlWindowState.xlMinimized
xlApp.Visible = False
xlApp.DisplayAlerts = False
xlApp.ScreenUpdating = False
Dim wWorksheet As Excel.Worksheet = _
CType(xlApp.ActiveWorkbook.ActiveSheet, Excel.Worksheet)
ReDim strA1(256)
'最大列数分ループする。
For i As Integer = 1 To 256
strA1(i) = Replace(Split(CType(wWorksheet.Columns(i), _
Excel.Range).Address(False, True, Excel.XlReferenceStyle.xlA1), _
":")(0), "$", "")
Next i
GC.Collect()
Catch ex As Exception
Finally
If (Not IsNothing(xlApp)) Then xlApp.Quit()
xlApp = Nothing
GC.Collect()
End Try
End Sub
火曜日, 12月 16, 2008
[VBA]CopyFromRecordsetでAccessのメモ型が読込めない
CopyFromRecordsetでAccessのメモ型が読込めない!
どうしてなのか教えてくれ!
▼回答
まずは、データベースのオープンの仕方を調べてみてくれ!
下記のようになっていなか調べてみてくれ!
con.Open ("Driver={Microsoft Access Driver (*.mdb)}; DBQ=C:\db1.mdb")
ここで問題なのは、Driver=の部分なんだ。
これはODBC接続でデータベースに行っていることを示している。
このODBC接続に不具合があるようなんだ。
だから、これをOLDB接続に替えればうまくいくと思うよ。
その方法を書きに示しておくから参考にしてくれ!
con.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\db1.mdb;"
■参考サイト
[XL2000]DAO3.6でCopyFromRecordsetを使用するとデータが欠ける
http://support.microsoft.com/kb/414048/ja
ADOの接続文字列に設定するPROVIDERとDRIVERの記述方法の違い --Access Club 超初心者 FORUM--
http://www.accessclub.jp/bbs3/0222/superbeg70904.html
土曜日, 12月 13, 2008
[VB2005]2つのDataGridのスクロールを連動させる
2つのDataGridのスクロールを連動させるにはどうしたら良いんだ。
DataGridのScrollイベントでスクロールのValue値を設定したんだがうまくいかないんだ。
Private Sub DataGrid2_Scroll(ByVal sender As Object, ByVal e As System.EventArgs) Handles DataGrid2.Scroll
Dim obj As DataGrid = CType(sender, DataGrid)
CType(Me.DataGrid1.Controls.Item(0), HScrollBar).Value = CType(obj.Controls.Item(0), HScrollBar).Value
End Sub
スクロールだけ動いて、グリッドの内部が動かないんだ。
Refresh等のイベントを呼んでも駄目だったんだ。
どうしたらよいか教えてくれ!
▼回答
DataGridを継承した独自のクラスを作成するしか方法はないようだ。
独自クラスでスクロールを行うパブリックメソッドを作成して
引数にValue値を与えてそのメソッドの中でGridHScrolled
メソッドをコールすればいいんだ。
Public Class CustomDataGrid
Inherits DataGrid
'''
''' 水平スクロールバーのスクロールイベントを呼び出しNewValueを設定します。
'''
''' スクロールバーの新しい値
Public Sub GridHScroll(ByVal newValue As Integer)
Dim args As New ScrollEventArgs(ScrollEventType.LargeIncrement, newValue)
GridHScrolled(Me, args)
End Sub
End Class
■参考サイト
DataGrid内の指定された行までスクロールする: .NET Tips: C#, VB.NET, Visual Studio
http://dobon.net/vb/dotnet/datagrid/gridvscrolled.html
▼質問
片方に垂直スクロールがあると少しずれるんだ。
どうしたらよいか教えてくれ!
▼回答
垂直スクロールを表示させてから、それを非表示にすればいいんだ。
Visibleは設定ができないようだから、次の例のようにWidthを0に設定すればいいんだが・・・。
CType(Me.DataGrid1.Controls.Item(1), VScrollBar).Width = 0
これだけでは駄目なんだ。
もうひとつ、連動する相手側のサイズをあらかじめスクロールの幅分だけ短くしてないとうまく
いかないから気をつけてくれ!
金曜日, 12月 05, 2008
[VBA]DAO or ADO の Close
DAOやADOのデータベース接続で失敗した時に作成しようとしたDatabaseやRecordsetの
クローズがされているかチェックしてクローズしたいんだ。
どうやったらできるか教えてくれ!
▼回答
下記にそのサンプルを示しておくから参考にしてくれ!!
Dim db As Database
Dim rs As Recordset
If (Not rs Is Nothing) Then rs.Close
If (Not db Is Nothing) Then db.Close
[VBA]DAOからADOへの移植
DAO から ADO への移植 1
http://www.microsoft.com/japan/msdn/data/techmat/ado/dao2ado.aspx
Takenoff Labs >> LotusScriptからRDBのデータをやりとりする
http://takenoff.com/notes/lotusscript/20081125002012.html
accessのVBAの記述についていくつか質問です。 - 教えて!goo
http://oshiete1.goo.ne.jp/qa432565.html
水曜日, 12月 03, 2008
[VBA]QueryTable
QueryTableって何?
どうやって使うの?
▼回答
ODBCのデータソースを使って簡単にデータベースにアクセスできる関数なんだ。
サンプルを示しておくから参考にしてくれ!
If (Worksheets(シート名).QueryTables.Count <= 0) Then
With Worksheets(シート名).QueryTables.Add( _
Connection:="ODBC;DSN=データソース;UID=ユーザ;PWD=パスワード", _
Destination:=Worksheets(シート名).Range("A1"))
.Sql = Array("SELECT * FROM " & tableName)
.Refresh BackgroundQuery:=False
End With
else
Selection.QueryTable.Sql = Array("SELECT * FROM " & tableName)
Selection.QueryTable.Refresh BackgroundQuery:=False
End If
■参考サイト
[XL97]外部データベースにアクセスする方法
http://support.microsoft.com/kb/408061/ja
▼質問
QueryTableを使って簡単にデータベースにデータを登録したいんだ。
どうやってできるか教えてくれ!
▼回答
サンプルを示しておくから参考にしてくれ!
maxRow = Worksheets(シート名).Range("A65536").End(xlUp).row
maxCol = Worksheets(シート名).Rows(1).End(xlToRight).Column
desCol = maxCol + 1
For Each objQuery In Worksheets(シート名).QueryTables
objQuery.Delete
Next
With Worksheets(シート名).QueryTables.Add( _
Connection:="ODBC;DSN=データソース名;UID=ユーザー;PWD=パスワード", _
Destination:=Worksheets(シート名).Cells(1, desCol))
.Sql = "DELETE FROM テーブル名 WHERE 条件)
.Refresh
Do While .Refreshing
DoEvents
Loop
.Parent.Names(.Name).Delete
.Delete
End With
Worksheets(シート名).Cells(1, desCol).ClearContents
For i = 2 To maxRow
strValue = ""
For j = 1 To maxCol
If (strValue <> "") Then strValue = strValue & ", "
strValue = strValue & "'" & Worksheets(シート名).Cells(i, j).Value & "'"
Next j
With Worksheets(シート名).QueryTables.Add( _
Connection:="ODBC;DSN=データソース名;UID=ユーザー;PWD=パスワード", _
Destination:=Worksheets(シート名).Cells(1, desCol))
.Sql = "INSERT INTO テーブル名 VALUES(" & strValue & ")"
.Refresh
Do While .Refreshing
DoEvents
Loop
.Parent.Names(.Name).Delete
.Delete
End With
Worksheets(シート名).Cells(1, desCol).ClearContents
Next i
■参考サイト
■QueryTables.Add/.Deleteと.Names().Delete - 半角チルダ
http://blog.goo.ne.jp/end-u/e/2fd0b68b8cb29e4b80dc7182a800fc9c
▼質問
Refreshで次のエラーが出るんだ。
「バックグラウンドでデータが更新中であるため、この操作は行えません。」
どうやったら回避できるか教えてくれ!
▼回答
それは、SQLの処理が終わる前に実行しているSQLの処理を止めるような
処理が実行されているからなんだ。
だから、SQLの実行が終了したのを確認してから次の処理を実行しなくてはいけないんだ。
そのサンプルを次に示しておくから参考にしてくれ!
Refreshの後に次のコードを書けばいいんだ。
Do While .Refreshing
DoEvents
Loop
金曜日, 11月 28, 2008
[VB2005]SaveFileDialog
SaveFileDialogコンポーネントを使ってCSVファイルを保存しているんだけど
ディレクトリを変更して保存するとアプリケーションがフリーズするんだ。
どうしてか教えてくれ!
▼回答
SaveFileDialogコンポーネントを使ってディレクトリを操作するとSaveFileDialogコンポーネントの
InitialDirectoryが変わってしまうことが原因だと思うよ。
だから、次の様にInitialDirectoryのバックアップをしてから最後にまた戻せばいいんだ。
Dim bakDir As String = SaveFileDialog1.InitialDirectory
SaveFileDialog1.InitialDirectory = bakDir
日曜日, 11月 23, 2008
[SQL]記号文字列操作
次の文字列を挿入・更新をSQL文でする方法がわからないから教えてくれ!
!"#$%&()=~{`+*}_?><\'
▼回答
挿入・更新はシングルクウォーテーションを2つ並べてSQL文を作ればいいんだ。
▼質問 次のSQL文を実行するとうまくカウントされないんだ。
SELECT COUNT(*) FROM テーブル名 WHERE フィールド = '!"#$%&()=~{`+*}_?><\'''
どうしたらできるか教えてくれ!
▼回答
LIKE文を使えばできるよ。
SELECT COUNT(*) FROM テーブル名 WHERE フィールド LIKE '!"#$%&()=~{`+*}_?><\%'
日曜日, 11月 09, 2008
[VB2005]EXCELの幅設定・折り返し設定
EXCELの幅を設定したり、折り返し設定をしたいんだ。
どうやったらできるか教えてくれ!
▼回答
次を参考にしてくれ!
Dim xlApp As Object = CreateObject("Excel.Application")
Dim wWorksheet As Excel.Worksheet = CType(xlApp.ActiveWorkbook.ActiveSheet, Excel.Worksheet)
CType(wWorksheet.Cells(1, 1), Excel.Range).ColumnWidth = 10
CType(wWorksheet.Cells(1, 1), Excel.Range).WrapText = True
wWorksheet.Cells(1, 1) = "あいうえおかきくけこ"
木曜日, 10月 30, 2008
[EXCEL]ADO関連
ADO(Microsoft Active X データ オブジェクト)の基本的な使い方を教えて欲しいんだ。
▼回答
基本的な使い方のサンプルを次に示しておくから参考にしてくれ!!
①参照設定あり
Microsoft ActiveX Data Objects 2.X Library
[変数宣言]
Dim cn As ADODB.Connection
Dim rs As ADODB.Recordset
[オブジェクト生成]
Set cn = New ADODB.Connection
Set rs = New ADODB.Recordset
②参照設定なし
[変数宣言]
Dim cn As Object
Dim rs As Object
[オブジェクト生成]
Set cn = CreateObject("ADODB.Connection")
Set rs = CreateObject("ADODB.Recordset")
③Fieldsプロパティ
[書式]
recordset.Fields.Item(0)
recordset.Fields.Item("name")
recordset.Fields(0)
recordset.Fields("name")
recordset(0)
recordset("name")
recordset![name]
④上書きサンプル
strSQL = "SELECT COUNT(*) FROM " & strTBL & " WHERE フィールド名= 値"
Set rs = cn.Execute(strSQL)
count = rs.Fields(0)
rs.Close
If (count = 1) Then
'更新
strSQL = "SELECT * FROM " & strTBL & " WHERE フィールド名= 値"
rs.Open strSQL, cn, adOpenForwardOnly, adLockOptimistic 'SQL文を実行
rs!フィールド名= 値
rs.Update '更新(保存)
rs.Close
Else
'新規作成
strSQL = "SELECT * FROM " & strTBL
rs.Open strSQL, cn, adOpenKeyset, adLockOptimistic 'テーブルを開く
rs.AddNew '新規レコードを追加する
rs!フィールド名= 値
rs.Update '更新(保存)
rs.Close
End If
■参考サイト
VB ADO 操作
http://www.red.oit-net.jp/tatsuya/vb/ADO.htm
アクセスVBA講座_ADO_Recordsetオブジェクトの作成
http://www.geocities.jp/cbc_vbnet/ADO/recordset.html
火曜日, 10月 21, 2008
[VB2005]OpenOfficeをエクセル(Excel)のように使用する
VBでOpenOfficeのCalcをエクセル(Excel)のように操作したいんだ。
どうやったらできるかサンプルが欲しいんだ。
何か良い情報があったら教えてくれ!
▼回答
良さそうなサンプルがあったから試してみてくれ!
でも、サンプルはCalcじゃなくてWriterだけど・・・。
これで、雰囲気は掴めるかな?!
Calcのサンプルを作成してみたので参考にしてみてくれ!!
Sub HelloWorldExampleCalc()
Dim myCalc As Object, mySheet As Object, myCell As Object
myCalc = StarDesktop.loadComponentFromURL("private:factory/scalc", "_blank", 0, dummyArray)
mySheet = myCalc.getCurrentController().getActiveSheet()
myCell = mySheet.getCellByPosition(0, 1)
myCell.String = OOoMess111
myCell = mySheet.getCellByPosition(0, 2)
myCell.Value = 100
myCell.CharColor = OOoRGB(0, 200, 0)
myCell = mySheet.getCellByPosition(0, 3)
myCell.Formula = "=A3*2"
myCell.CharWeight = OOOawtFontWeightBOLD
mySheet.getCellByPosition(0, 4).CellBackColor() = OOoRGB(0, 200, 0)
Dim oBorderLine As Object = CreateUnoStruct("com.sun.star.table.BorderLine")
Dim oTableBorder As Object = CreateUnoStruct("com.sun.star.table.TableBorder")
With oBorderLine
.Color = RGB(0, 0, 0)
.OuterLineWidth = 1
End With
With oTableBorder
.IsLeftLineValid = True
.IsTopLineValid = True
.IsRightLineValid = True
.IsBottomLineValid = True
.LeftLine = oBorderLine
.TopLine = oBorderLine
.RightLine = oBorderLine
.BottomLine = oBorderLine
End With
mySheet.getCellRangeByName("A2:B3").TableBorder() = oTableBorder
MsgBox(OOoMess105)
myCalc.close(True)
End Sub
インターフェイス・プロパティ・メソッドの一覧を表示するマクロがあったので、こちらも
参考にしてみてくれ!!
sub Main
Dim dbg As object
dbg = CreateUnoService("com.sun.star.sheet.SpreadsheetDocument")
MsgBox(dbg.Dbg_SupportedInterfaces)
MsgBox(dbg.Dbg_Properties)
MsgBox(dbg.Dbg_Methods)
end sub
■参考サイト
OOoMacros
http://www.ooomacros.org/index.php
OOoBasic/Tutorial/kakeibo/macro - ...?
http://hermione.s41.xrea.com/pukiwiki/pukiwiki.php?OOoBasic%2FTutorial%2Fkakeibo%2Fmacro
OpenOffice.org 操作術 第 3 回 中本担当分原稿 OpenOffice.org の表 ...
http://bd.tank.jp/nikkei/article3_1.pdf
7. 表計算ドキュメント (StarSuite 8 Basic プログラミングガイド) - Sun Microsystems
http://docs.sun.com/app/docs/doc/819-1332/faail?l=ja&a=view
土曜日, 10月 18, 2008
[VB2005]MonthCalendarのDateChangedイベントが周期的に発生する
MonthCalendarでDateChangedイベントが周期的に発生するんだ。
これはどうしてなんだ?
▼回答
参考サイトより
カレンダーの本日を更新するために約2分間隔でマシン日付をチェックするために発生している
イベントに同期しているらしい。これは、MonthCalendarコントロールのバグらしい。
ユーザが明示的に操作した時にだけイベントを発生させたいなら、DateChangedではなく、DateSelectedイベントを使えばよいようだ。
確かに、DateSelectedイベントを使えば問題ないことがわかった。
DateChangedイベントとDateSelectedイベントの違いは何なんだ?と思って説明を並べてみた。
MonthCalendar.DateChanged イベント
MonthCalendar で選択された日付が変更された場合に発生します。
MonthCalendar.DateSelected イベント
ユーザーがマウスを使用して明示的に日付を選択した場合に発生します。
これを読む限り、通常操作の場合はDateSelected イベントを使えばよいことになるな!
DateChanged イベントを使うのはどんな時なのかと考えてみると、選択された特定の日に
何かをしたい時のイベント処理が考えられるのかな?!
よく考えると、単純に選択(操作)と変更(動作)の違いか!!
■参考サイト
MonthCalendar で予期せぬ DateChanged イベントが発生する
http://blogs.wankuma.com/jeanne/archive/2005/09/02/18244.aspx
DataGridViewの年月日項目に今日の日付が自動設定される?
http://www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?topic=41347&forum=7
金曜日, 9月 26, 2008
[VB2005]Load後のイベント処理(初期表示処理)
初期表示で特定のコントロールにフォーカスをしたいんだ。
そこで、Loadイベントの最後でFocusイベントを入れたんだが、うまくいかないんだ。
どうやったらできるか教えてくれ!
▼回答
フォームのイベントには、Loadイベントの後に実行されるイベントがあるんだ。
それは、フォームが初めて表示されるたびに発生するイベントなんだ。
だから、初期表示に1回だけ実行したい処理は、そこに入れればいいんだ。
そのイベントとは、Shownイベントだ。
■参考サイト
Form メンバ (System.Windows.Forms)
http://msdn.microsoft.com/ja-jp/library/system.windows.forms.form_members(VS.80).aspx
月曜日, 9月 15, 2008
[VB2005]DataGridの行の高さを固定にする
DataGridの高さを固定にしたいんだ。どうやったらできるか教えてくれ!
▼回答
DataGridの高さを制御するには、Layoutイベントで高さを制御すればできるんだ。
行を追加する後に、現在値の高さをPreferredRowHeightプロパティに設定する。
LayoutイベントでSetRowHeight関数を呼んでやることで制御できる。
PreferredRowHeightプロパティに現在値(前回値)を設定する。
If (Me.DataGrid1.VisibleRowCount > 0) Then
Me.DataGrid1.PreferredRowHeight = _
GetRowHeight(i, Me.DataGrid1.PreferredRowHeight, Me.DataGrid1)
End If
行の高さを取得・設定する関数
Private Sub SetRowHeight()
'全行数分ループする
For i As Integer = 0 To Me.DataGrid1.VisibleRowCount - 1
If (Me.DataGrid1.PreferredRowHeight <> _
GetRowHeight(i, Me.DataGrid1.PreferredRowHeight, Me.DataGrid1)) Then
SetRowHeight(i, Me.DataGrid1.PreferredRowHeight, Me.DataGrid1)
End If
Next i
End Sub
Public Function GetRowHeight(ByVal Row As Integer, ByVal height As Integer, ByVal oDG As DataGrid) As Integer
Dim p As Reflection.PropertyInfo = _
GetType(DataGrid).GetProperty("DataGridRows", _
Reflection.BindingFlags.FlattenHierarchy Or _
Reflection.BindingFlags.IgnoreCase Or _
Reflection.BindingFlags.Instance Or _
Reflection.BindingFlags.NonPublic Or _
Reflection.BindingFlags.Public Or _
Reflection.BindingFlags.Instance Or _
Reflection.BindingFlags.Static)
Dim obj As Object = _
CType(p.GetValue(oDG, _
Reflection.BindingFlags.Instance Or Reflection.BindingFlags.Static Or _
Reflection.BindingFlags.GetProperty Or Reflection.BindingFlags.Public Or _
Reflection.BindingFlags.SuppressChangeType, _
Nothing, Nothing, Nothing), Object)
If (Row < propertyinfo =" _" object =" _" type =" _" height =" height">
■参考サイト
VBレスキュー(花ちゃん)のVB.NET・VB2005用掲示板
http://hanatyan.sakura.ne.jp/vbnetbbs/wforum.cgi?no=7871&reno=7851&oya=7850&mode=msgview&page=0
DataGridの行の高さを文字列にあわせて設定する: DOBON.NETプログラミング掲示板過去ログ
http://dobon.net/vb/bbs/log3-27/15680.html
日曜日, 9月 14, 2008
[VB2005]DataGridの幅を固定にする(操作不可)
▼質問
DataGridのヘッダを表示すると列の幅が変更できるんだ。これを、固定表示にしたいんだ。
どうやったらできるか教えてくれ!
▼回答
DataGridには、列の幅を固定にするプロパティはないんだ。だから固定にはできないんだ。
だけど、カスタムコントロールを作成して列の幅の変更操作をできないようにすればできるよ。
その方法の一部を下記に示しておくから参考にしてくれ!
DataGridTextBoxColumnの参考例
Public MyWidth As Integer = 0
Public MyWidthFlag As Boolean = False
'''
''' コントロールの幅を取得または設定します。
'''
''' コントロールの幅。
Public Property CustomWidth() As Integer
Get
Return MyWidth
End Get
Set(ByVal value As Integer)
Me.MyWidth = value
End Set
End Property
'''
''' コントロールの幅を固定にできるかの有無を示す値を取得または設定します。
''' 幅を固定にできる場合は true。それ以外の場合は false。既定値は false です。
'''
''' コントロールの幅を固定にできるかの有無。
Public Property CustomWidthFlag() As Boolean
Get
Return MyWidthFlag
End Get
Set(ByVal value As Boolean)
Me.MyWidthFlag = value
End Set
End Property
Private Sub DataGridCustomTextBoxColumn_WidthChanged( _
ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.WidthChanged
Dim obj As DataGridCustomTextBoxColumn = _
CType(sender, DataGridCustomTextBoxColumn)
If (obj.MyWidthFlag) Then obj.Width = obj.MyWidth
End Sub
■参考サイト
DataGridの列の幅をユーザーが変更できないようにする: .NET Tips: C#, VB.NET, Visual Studio
土曜日, 9月 13, 2008
[VB2005]DataGridBoolColumnのチェックボックスを制御する
DataGridにチェックボックを表示するためにDataGridBoolColumnを使ってチェックボックスを
作成したんだけど、プログラムからチェックボックスのチェックを表示・非表示するやり方が
わからないんだ。どうやったらできるか教えてくれ!
▼回答
MouseClickイベントに下記のコードを記述すればできるから参考にしてくれ!!
Dim dg As DataGrid = CType(sender, DataGrid)
Dim row As Integer = dg.CurrentCell.RowNumber : Dim col As Integer = dg.CurrentCell.ColumnNumber
If (dg.TableStyles.Item(0).GridColumnStyles(col).GetType.Name = "DataGridBoolColumn") Then
Dim BoolColumn As DataGridBoolColumn = _
CType(dg.TableStyles.Item(0).GridColumnStyles(col), DataGridBoolColumn)
Dim Bind As BindingManagerBase = _
Me.BindingContext(DirectCast(dg.DataSource, DataTable))
Dim value As Boolean = False
Dim drv As DataRowView = _
CType(DirectCast(Bind.Current, DataRowView), DataRowView)
Dim value As Boolean = _
CBool(IIf(CType(BoolColumn.PropertyDescriptor.GetValue(drv), Boolean), _
False, True))
BoolColumn.PropertyDescriptor.SetValue(drv, value)
End If
BoolColumn.DataGridTableStyle.SelectionBackColor = SystemColors.Window
■参考サイト
VB コントロールのデータ連結
http://homepage1.nifty.com/rucio/main/VBdotNet/Database/Database6.htm
金曜日, 9月 12, 2008
[VB2005]DataGridを編集可能で新規追加行(*行)を非表示にする
▼質問
DataGridを編集可能にすると新規追加行(*行)が表示されるんだ。
これを表示しないようにする方法はないのか教えてくれ!
▼回答
あるよ!下記のサイトを参考にしてくれ!
■参考サイト
DataGridの一番下の新しい行(*行)が表示されないようにする: .NET Tips: C#, VB.NET, Visual Studio
http://dobon.net/vb/dotnet/datagrid/allownew.html
おーすばらしい!!できた。
関数にしてみた。
Public Sub SetAllowNew(ByVal b As Boolean, ByVal oDG As DataGrid)
Dim objCurrencyManager As CurrencyManager = _
CType(oDG.BindingContext(oDG.DataSource, oDG.DataMember), CurrencyManager)
'DataViewを取得する
Dim objDataView As DataView = CType(objCurrencyManager.List, DataView)
'新しい行の追加を設定する
objDataView.AllowNew = b
End Sub▼質問
「CurrencyManager」って何?▼回答オブジェクトのプロパティ値とコントロールのプロパティ値との間の単純バインディングの
リストを管理するオブジェクトらしい。
▼質問
新規追加行は表示されずに編集は可能になったんだけど・・・。
これだと、全てのセルが編集可能になってしまって困るんだ。
特定のセルだけを編集可能にするにはどうしたらいいの?
▼回答
DataGridのCurrentCellChangedイベント、MouseClickイベント、MouseDownイベント、
MouseUpイベントでカレントセルをチェックするればできるよ。
こんな関数を作成してみたから、参考にしてくれ!
各イベントで呼ぶだけでOKだ!!
Private Sub CheckCurrentCell(ByVal sender As Object, _
ByVal e As System.Windows.Forms.MouseEventArgs)
Dim dg As DataGrid = CType(sender, DataGrid)
Dim row As Integer = dg.CurrentCell.RowNumber
Dim col As Integer = dg.CurrentCell.ColumnNumber
Select Case dg.CurrentCell.ColumnNumber
Case 対象列番号
Case Else
End Select
End Sub
月曜日, 9月 01, 2008
[VB2005]SystemColorsからBrushの変換
SystemColorsで使っている色をBrushクラスに変換したいんだ。どうしたらできるんだい。
▼回答
SolidBrushクラスを使用してやればできるよ。下記を参考にしてくれ!
Dim b As Brush = New SolidBrush(SystemColors.ActiveCaption)
月曜日, 8月 11, 2008
[VB2005]DataGridのセルの色替え
DataGridのセルの色を替えたいんだけど・・・どうしたらできるの?
▼回答
DataGridTextBoxColumnを継承してオリジナルのクラスを作成すればできるよ。
細かいところは、次のサンプルを参照してくれ!!
Public Class DataGridCustomTextBoxColumn
Inherits DataGridTextBoxColumn
Private MyBackColor As Color = SystemColors.Window
Private MyForeColor As Color = SystemColors.WindowText
'/******************************************************************************/
' Paint処理
'/******************************************************************************/
Protected Overloads Overrides Sub Paint(ByVal g As Graphics, _
ByVal bounds As Rectangle, _
ByVal [source] As CurrencyManager, _
ByVal rowNum As Integer, _
ByVal backBrush As Brush, _
ByVal foreBrush As Brush, _
ByVal alignToRight As Boolean)
'基本クラスのPaintメソッドを呼び出す。
MyBase.Paint(g, bounds, source, rowNum, _
New SolidBrush(MyBackColor), _
New SolidBrush(MyForeColor), alignToRight)
End Sub
'''
''' コントロールの背景色を取得または設定します。
'''
'''コントロールの背景色を表す System.Drawing.Color。
Public Property BackColor() As Color
Get
Return MyBackColor
End Get
Set(ByVal value As Color)
MyBackColor = value
End Set
End Property
'''
''' コントロールの前景色を取得または設定します。
'''
'''コントロールの前景色を表す System.Drawing.Color。
Public Property ForeColor() As Color
Get
Return MyForeColor
End Get
Set(ByVal value As Color)
MyForeColor = value
End Set
End Property
End Class
■参考サイト
DataGrid内の特定のセルの色を変える: .NET Tips: C#, VB.NET, Visual Studio
http://dobon.net/vb/dotnet/datagrid/coloredcell.html
[VB2005]DataGridのDataGridBoolColumn
DataGridにチェックボックスをDataGridBoolColumnを使って表示したんだが・・・
半透明の状態で表示されるんだ。どうしてか教えてくれ!
▼回答
DataColumnのDataTypeに、「GetType(Boolean)」が設定されているかチェックしてくれ!!
■参考サイト
@IT:.NET TIPS DataGridコントロールの入力項目でチェック・ボックスを使用するには? - C# VB.NET Windowsフォーム
http://www.atmarkit.co.jp/fdotnet/dotnettips/105dgchkbox/dgchkbox.html
水曜日, 8月 06, 2008
[VB2005]Application.myappのエラー
既存の画面をコピーして画面を作成しようとしたら次のエラーがでるんだ。
「カスタム ツール エラー: ファイルの生成に失敗しました: XML ドキュメント (1,1) でエラーが発生しました。 Application.myapp」
どうしたら解決するか教えてくれ!
▼回答
俺には、わからんかった。(>_<)
結局、バックアップしてあったファイルを上書きして対処したよ!
▼追記
この問題の原因がわかった。(^^)v
プロジェクトファイル(「プロジェクト名.vbproj」)から下記のコードが削除されていることがわかった。
これを、下記の前にコピーしたら解決した。
■参考サイト
MyApplicationCodeGeneratorの警告 - MSDN フォーラム
http://forums.microsoft.com/MSDN-JA/ShowPost.aspx?PostID=324276&SiteID=7
木曜日, 7月 31, 2008
[VB2005]DataGridのヘッダとデータのスタイル
DataGridのヘッダとデータのスタイルを変更することはできないの?
▼回答
できないよ!でも方法がないわけじゃないみたいだけど・・・。
参考サイトを覗いてみてくれ!!
この方法がいやなら、DataGridをヘッダとデータで分けて作成すればできるよ。
■参考サイト
DataGridの列ヘッダテキストの配置方法のみを変更する: .NET Tips: C#, VB.NET, Visual Studio
http://dobon.net/vb/dotnet/datagrid/aligncolumnheaderonly.html
月曜日, 7月 28, 2008
[VB2005]DataGrid関連
DataGridを追加すると紺色の帯が上の部分に表示されるんだけど?!
これは何?消せないの?
▼回答
グリッドの上部に表示できるキャプション(=タイトル)だよ。
消し方は、プロパティの「CaptionVisible 」を「False」に設定するか、次のコードを書くかどちらかだね!
Me.DataGrid1.CaptionVisible = False
▼質問
タイトルを表示したいんだけど・・・サンプルはないかな?
▼回答
とりあえず、次に示しておくから参考にしてくれ!
Dim objDataSet As New DataSet
Dim objDataTable As DataTable = New DataTable("objDataTable")
DataGrid1.TableStyles.Clear()
DataGrid1.DataSource = Nothing
Dim strName() As String = {"タイトル1", "タイトル2", "タイトル3"}
Dim intColumnWidth() As Integer = {50, 100, 150}
Dim TableStyle As DataGridTableStyle = New DataGridTableStyle()
For i As Integer = 0 To strName.Length - 1
'タイトル名称設定
Dim DataColumn As DataColumn = New DataColumn
DataColumn.ColumnName = strColumnName(i)
objDataTable.Columns.Add(DataColumn)
DataColumn.Dispose()
DataColumn = Nothing
'タイトルスタイル設定
Dim TextBoxColumn As DataGridTextBoxColumn = New DataGridTextBoxColumn
TextBoxColumn.MappingName = strName(i)
TextBoxColumn.HeaderText = strName(i)
TextBoxColumn.Width = intColumnWidth(i)
TableStyle.GridColumnStyles.Add(TextBoxColumn)
TextBoxColumn.Dispose()
TextBoxColumn = Nothing
Next i
TableStyle.MappingName = "objDataTable"
TableStyle.AllowSorting = False
TableStyle.HeaderFont = DataGrid1.HeaderFont
DataGrid1.TableStyles.Add(TableStyle)
TableStyle.Dispose()
TableStyle = Nothing
objDataSet.Tables.Add(objDataTable)
DataGrid1.DataSource = objDataSet.Tables("objDataTable")
▼質問
タイトルは、表示できたんだけど・・・。グリッドの左に表示されている列の幅を制御したいんだ!
どうしたらいいか教えてくれ!!
▼回答
それは、「行ヘッダー」って言うんだ。プロパティの「RowHeaderWidth」を設定すれば幅を制御
できるよ。行ヘッダーを非表示にしたい時は、「RowHeadersVisible」を「False」に設定すれば
非表示にできるんだ。「RowHeaderWidth」を、「0」に設定しても非表示にはならないから気を
つけてくれ!あと、15以下を設定しても幅は最小幅が決まっているので最小幅以下には変わら
ないから気をつけてくれ!
▼質問
今度は、データをグリッドに表示したいんだ。どうしたらいいの?
いろいろやってみたが、うまくいかないんだ!
DataGridの内容をDataSetにバインドできればできそうな気がするんだけど・・・。
▼回答
いいとこついてるね!それで、できるよ!
こうやってやればいいんだ。
Dim objDataSet As New DataSet
Dim objDataTable As DataTable = DirectCast(DataGrid1.DataSource, DataTable)
objDataSet.Tables.Add(objDataTable.Copy())
これで、データを追加する準備が整ったから、次に、このコードを書いて行が追加できるよ!
objDataTable.Rows.Add(New [Object]() {"データ1", "データ2", "データ3"})
▼質問
セルを選択すると選択した内容が反転表示するんだ。行毎で選択したいんだ!どうしたらいいの?
▼回答
DataGridの「Paint」イベントに次のコードを追加するとできるぞ!試してみてくれ!!
Me.DataGrid1.Select(Me.DataGrid1.CurrentCell.RowNumber)
■参考サイト
DataGrid コントロール (Windows フォーム)
http://msdn.microsoft.com/ja-jp/library/keb37h7b(VS.80).aspx
DataGridのレコードセレクタについて - Insider.NET
http://www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?topic=9895&forum=7
DataGridの中身をDataSetにテーブルとして保存する方法 (初心者) -OKWave
http://okwave.jp/qa2114885.html
@IT:.NET TIPS DataGridコントロールを行選択モードにするには? - C# VB.NET Windowsフォーム
http://www.atmarkit.co.jp/fdotnet/dotnettips/126dgselline/dgselline.html
Visual Basic .NET を使用して DataTable 間で DataRow をコピーする方法
http://support.microsoft.com/kb/305346/ja
金曜日, 7月 04, 2008
個人情報保護対策(定義・プライバシーポリシー/ステートメント)
個人情報ドットコム:個人情報保護対策:個人情報定義
http://www.kojinjoho.com/privacymesure/01.html
■プライバシーポリシー
個人情報ドットコム:個人情報保護対策:プライバシーポリシー
http://www.kojinjoho.com/privacymesure/02.html
■プライバシーステートメント
個人情報ドットコム:個人情報保護対策:プライバシーステートメント
http://www.kojinjoho.com/privacymesure/03.html
木曜日, 7月 03, 2008
[PHP]WordPressとMySQLのインストール or トラブルシューティング
ブログツールのWordPressをWindowsで動かしたいんだ。どうやったらいいか教えてくれ!
▼回答
ここでは、IISでPHPが動いていることを前提に話すから、そこまではやっておいてくれ!
1.MySQLを下記のサイトからダウンロードする。
今回はバージョン4.1.22のmysql-4.1.22-win32.zipをダウンロードした。
http://dev.mysql.com/downloads/mysql/4.1.html
2.ダウンロードしたファイルを解凍する。Setup.exeファイルができる。
3.「Setup.exe」をダブルクリックすると対話形式でインストールができる。その手順を下記に示す。
①「Next >」ボタンを押下する。
②「Custom」を選択し、「Next >」ボタンを押下する。
③インストールディレクトリの変更がなければ、「Next >」ボタンを押下する。
インストールディレクトリを変更したい時は、ここで「Change」ボタンをクリックし指定する。
④インストール内容を確認し、「Install」ボタンを押下する。
⑤「Skip Sign-Up」を選択し、「Next >」ボタンを押下する。
⑥「Finish」ボタンを押下する。
⑦「Next >」ボタンを押下する。
⑧「Detailed Configuration」を選択し、「Next >」ボタンを押下する。
⑨「Developer Machine」を選択し、「Next >」ボタンを押下する。
⑩「Multifunctional Database」を選択し、「Next >」ボタンを押下する。
⑪テーブルスペースのドライブとディレクトリの場所を確認し、「Next >」ボタンを押下する。
⑫「Decision Support(DSS)/OLAP」を選択し、「Next >」ボタンを押下する。
⑬ネットワークオプションを確認し、「Next >」ボタンを押下する。
⑭「Manual Selected Default Character Set / Collation」を選択する。
Character Setから「sjis」を選択し、「Next >」ボタンを押下する。
⑮Windowsオプションを確認し、「Next >」ボタンを押下する。
⑯「Modify Security Settings」のみがチェックされていることを確認する。
パスワードを入力し、「Next >」ボタンを押下する。
⑰「Execute」ボタンを押下する。
⑱「Finish」ボタンを押下し、MySQLのインストールは終了です。
4.WordPressを下記のサイトからダウンロードする。
今回はバージョン2.3.3のwordpress-2.3.3-ja.zipをダウンロードした。
http://ja.wordpress.org/releases/
2.ダウンロードしたファイルをIISが動いているホームディレクトリに解凍する。
例: C:\InetPub\wwwroot\wordpress
3.「インターネット インフォメーション サービス」 から仮想ディレクトリの設定をする。
設定方法については省略する。下記参照。
http://phponwindows.net/WordPress.aspx
4.WordPress用のデータベースをMySQLに作成する。
実行した手順を下記に示す。コマンドプロンプトから次の実行を行う。
①ログイン
C:\>mysql -u root -p
Enter password: *****
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 2 to server version: 4.1.22-community-nt
Type 'help;' or '\h' for help. Type '\c' to clear the buffer.
②データベースの作成
mysql> create database wordpressdb;
Query OK, 1 row affected (0.02 sec)
mysql> show create database wordpressdb;
+-------------+----------------------------------------------------------------------+
Database Create Database
+-------------+----------------------------------------------------------------------+
wordpressdb CREATE DATABASE `wordpressdb` /*!40100 DEFAULT CHARACTER SET sjis */
+-------------+----------------------------------------------------------------------+
1 row in set (0.02 sec)
③ユーザーの作成
mysql> grant all on wordpressdb.* to 'user'@'localhost' identified by 'pass';
Query OK, 0 rows affected (0.17 sec)
5.
▼質問
次のエラーが出てデータベースに接続できないんだ。どうしてなのか教えてくれ!
C:\Program Files\MySQL\MySQL Server 4.1\bin>mysqladmin ping -u root -p
Enter password: *****
mysqladmin: connect to server at 'localhost' failed
error: 'Can't connect to MySQL server on 'localhost' (10061)'
Check that mysqld is running on localhost and that the port is 3306.
You can check this by doing 'telnet localhost 3306'
タスクマネージャにもmysql.exeがいるのに?!なぜ、つながらない!!
▼回答
も一度、インストールしなおせばうまくいくかもよ!
もう一回、インストールしてみることにしよう!
うまくつながった!v(^^)v
▼質問
http://localhost/wordpress/wp-admin/install.phpを実行すると次のエラーが出る。
「データベース接続確立のエラー」
▼回答
次のコマンドを試してみてくれ!
SET PASSWORD FOR root@localhost = OLD_PASSWORD('*****')
水曜日, 7月 02, 2008
[C#]ファイル操作
C#でファイルを操作したいんだ。どうやったらできるか教えてくれ!
▼回答
主に2通りのやり方があるんだ。そのやり方のサンプルを示しておくから参考にしてくれ!
private void FileTest()
{
if (!System.IO.Directory.Exists("Dir")) System.IO.Directory.CreateDirectory("Dir");
string fileName = string.Format(@"Dir\{0}.txt", System.DateTime.Now.ToString("yyyyMMddHHmmss"));
string contents = "";
for (int i = 0; i < 5; ++i)
{
contents = contents + string.Format("Test file RowNo. {0}\n", i + 1);
}
System.IO.File.WriteAllText(fileName, contents);
}
private void StreamWriterTest()
{
if (!System.IO.Directory.Exists("Dir")) System.IO.Directory.CreateDirectory("Dir");
string fileName = string.Format(@"Dir\{0}.txt", System.DateTime.Now.ToString("yyyyMMdd"));
System.IO.StreamWriter sw = new System.IO.StreamWriter(fileName);
string contents = "";
for (int i = 0; i < 5; ++i)
{
contents = contents + string.Format("Test file RowNo. {0}\n", i + 1);
}
sw.WriteLine(contents);
sw.Close();
}
private void StreamReaderTest()
{
if (!System.IO.Directory.Exists("Dir")) System.IO.Directory.CreateDirectory("Dir");
string fileName = string.Format(@"Dir\{0}.txt", System.DateTime.Now.ToString("yyyyMMdd"));
System.IO.StreamReader sr = new System.IO.StreamReader(fileName);
string line;
while ((line = sr.ReadLine()) != null)
{
Console.WriteLine(line);
}
sr.Close();
}
土曜日, 6月 21, 2008
[PHP]WindowsでPHP
WindowsにPHPをインストールしたいんだ。インストール手順を教えてくれ!
▼回答
1.PHPを下記のサイトからダウンロードする。
今回はバージョン3.2.3のphp-4.2.3-Win32.zipをダウンロードした。
http://jp.php.net/releases/index.php
2.ダウンロードしたファイルをC:\に解凍し、フォルダ名をphpにする。
3.解凍してできた下記のファイルを複製しファイル名をphp.iniに変更する。
4.変更したphp.iniファイルの設定内容を変更する。
①magic_quotes_gpc を修正する。
; Magic quotes for incoming GET/POST/Cookie data.
; magic_quotes_gpc = On
magic_quotes_gpc = Off
②文字コードを修正する。
; As of 4.0b4, PHP always outputs a character encoding by default in
; the Content-type: header. To disable sending of the charset, simply
; set it to be empty.
;
; PHP's built-in default is text/htmldefault_mimetype = "text/html"
;default_charset = "iso-8859-1"
default_charset = "Shift_JIS"
③PHPの拡張関係のディレクトリを設定する。
; Directory in which the loadable extensions (modules) reside.
; extension_dir = ./
extension_dir = "C:\php\extensions"
④マルチバイト(日本語など)が使えるように設定する。
;Windows Extensions;Note that MySQL and ODBC support is now built in, so no dll is needed for it.
;
;extension=php_bz2.dll
;extension=php_ctype.dll
;extension=php_cpdf.dll
;extension=php_curl.dll
;extension=php_cybercash.dll
;extension=php_db.dll
;extension=php_dba.dll
;extension=php_dbase.dll
;extension=php_dbx.dll
;extension=php_domxml.dll
;extension=php_dotnet.dll
;extension=php_exif.dll
;extension=php_fbsql.dll
;extension=php_fdf.dll
;extension=php_filepro.dll
;extension=php_gd.dll
;extension=php_gettext.dll
;extension=php_hyperwave.dll
;extension=php_iconv.dll
;extension=php_ifx.dll
;extension=php_iisfunc.dll
;extension=php_imap.dll
;extension=php_ingres.dll
;extension=php_interbase.dll
;extension=php_java.dll
;extension=php_ldap.dll
;extension=php_mbstring.dll
extension=php_mbstring.dll
;extension=php_mcrypt.dll
;extension=php_mhash.dll
;extension=php_ming.dll
;extension=php_mssql.dll
;extension=php_oci8.dll
;extension=php_openssl.dll
;extension=php_oracle.dll
;extension=php_pdf.dll
;extension=php_pgsql.dll
;extension=php_printer.dll
;extension=php_shmop.dll
;extension=php_snmp.dll
;extension=php_sockets.dll
;extension=php_sybase_ct.dll
;extension=php_tokenizer.dll
;extension=php_w32api.dll
;extension=php_xslt.dll
;extension=php_yaz.dll
;extension=php_zlib.dll
⑤マルチバイトを利用する際は「日本語」であると設定する。
[mbstring]
;mbstring.internal_encoding = EUC-JP
;mbstring.http_input = auto
;mbstring.http_output = SJIS
;mbstring.detect_order = auto
;mbstring.substitute_character = none
;mbstring.language = Japanese
mbstring.internal_encoding = SJIS
mbstring.http_input = auto
mbstring.http_output = SJIS
mbstring.encoding_translation = On
mbstring.detect_order = auto
mbstring.substitute_character = none;
5.作成したINIファイルと下記のファイルをウィンドウズのsystem32フォルダにコピーする。
C:\php\php.ini
C:\php\php4ts.dll
C:\php\dllsの全てのdllファイル
6.IISの設定をする。
①「インターネット インフォメーション サービス」から「既定の Web サイト」を選択し、プロパティ
ウィンドウを表示する。
② 「ホーム ディレクトリ」タブをクリックする。
③「構成(G)...」ボタンを押下する。
④「追加」ボタンを押下する。
⑤下記の設定をする。
実行ファイル:「C:\php\sapi\php4isapi.dll」
拡張子:「.php」
動詞:制限を選択する。
:GET,HEAD,POST,TRACE
ファイルの存在を確認する:チェックを外す。
⑥「OK」ボタンを押下する。
⑦「適用(A)」ボタンを押下する。
■参考サイト
2php : PHPのインストール(Windows)
http://2php.jp/php/install_php_windows.html
Windows で PHP > インストール・設定方法(IIS 編) @みっちーわーるど
http://www1.mahoroba.ne.jp/~mitt/itmemo/php/04.htm
水曜日, 6月 18, 2008
[VB→C#]VB 6 Functions to C#
VB 6 Functions | C# code |
Abs | System.Math.Abs |
Array | New Object() { } |
Asc, AscB, AscW | Microsoft.VisualBasic.Strings.Asc |
Atn | System.Math.Atan |
Choose | Interaction.Choose |
CBool | System.Convert.ToBoolean |
CByte | System.Convert.ToByte |
CCur | System.Convert.ToDecimal |
CDate | System.Convert.ToDateTime |
CDbl | System.Convert.ToDouble |
Chr | (char) |
CInt | System.Convert.ToInt32 |
CLng | System.Convert.ToInt64 |
Cos | System.Math.Cos |
Command | Interaction.Command |
CreateObject | CreateObject or New Instance in .NET |
CStr | System.Convert.ToString |
CurDir | FileSystem.CurDir |
Date | DateTime.Today |
DateAdd | Microsoft.VisualBasic.DateAndTime.DateAdd |
DateDiff | Microsoft.VisualBasic.DateAndTime.DateDiff |
DatePart | Microsoft.VisualBasic.DateAndTime.DatePart |
DateSerial | Microsoft.VisualBasic.DateAndTime.DateSerial |
DateValue | Microsoft.VisualBasic.DateAndTime.DateValue |
Day | Microsoft.VisualBasic.DateAndTime.Day |
DDB | Financial.DDB |
Dir | FileSystem.Dir |
Environ | Interaction.Environ |
Eof | FileSystem.EOF |
Exp | System.Math.Exp |
FileAttr | FileSystem.FileAttr |
FileDate | FileSystem.FileDateTime |
FileLen | FileSystem.FileLen |
Filter | Microsoft.VisualBasic.Strings.Filter |
Fix | Microsoft.VisualBasic.Conversion.Fix |
FormatCurrency | Microsoft.VisualBasic.Strings.FormatCurrency |
FormatDateTime | Microsoft.VisualBasic.Strings.FormatDateTime |
FormatNumber | Microsoft.VisualBasic.Strings.FormatNumber |
FreeFile | FileSystem.FreeFile |
FV | Financial.FV |
GetAllSettings | Interaction.GetAllSettings |
GetAttr | FileSystem.GetAttr |
GetObject | Microsoft.VisualBasic.Interaction.GetObject |
Hex | Microsoft.VisualBasic.Conversion.Hex |
Hour | Microsoft.VisualBasic.DateAndTime.Hour |
IIF | Interaction.IIf |
Input | FileSystem.InputString |
InputBox | Microsoft.VisualBasic.Interaction.InputBox |
InStr, InstrB | Microsoft.VisualBasic.Strings.InStr |
InStrRev | Microsoft.VisualBasic.Strings.InStrRev |
Int | Microsoft.VisualBasic.Conversion.Int |
Ipmt | Financial.IPmt |
IRR | Financial.IRR |
IsArray | Microsoft.VisualBasic.Information.IsArray |
IsDate | Microsoft.VisualBasic.Information.IsDate |
IsEmpty | Microsoft.VisualBasic.Information.IsEmpty |
IsMissing | Information.IsNothing |
IsNull | System.Convert.IsDBNull |
IsNumeric | Microsoft.VisualBasic.Information.IsNumeric |
IsObject | Information.IsReference |
Join | Microsoft.VisualBasic.Strings.Join |
LBound | Microsoft.VisualBasic.Information.LBound |
LCase | System.String.ToLower |
Left, LeftB | System.String.Substring(0,..) |
Len, LenB | Strings.Len |
Loc | FileSystem.Loc |
Lof | FileSystem.LOF |
Log | System.Math.Log |
LTrim | System.String.TrimStart |
Mid, MidB | System.String.Substring |
Minute | Microsoft.VisualBasic.DateAndTime.Minute |
Mirr | Financial.MIRR |
Month | Microsoft.VisualBasic.DateAndTime.Month |
MonthName | Microsoft.VisualBasic.DateAndTime.MonthName |
MsgBox | System.Windows.Forms.MessageBox.Show |
Now | System.DateTime.Now |
NPer | Financial.NPer |
PMT | Financial.Pmt |
PPMT | Financial.PPmt |
PV | Financial.PV |
Oct | Microsoft.VisualBasic.Conversion.Oct |
QBColor | Information.QBColor |
Rate | Financial.Rate |
Replace | Microsoft.VisualBasic.Strings.Replace |
RGB | Microsoft.VisualBasic.Information.RGB |
Right, RightB | System.String.Substring |
Rnd | Microsoft.VisualBasic.VBMath.Rnd |
Round | System.Math.Round |
RTrim | System.String.TrimEnd |
Second | Microsoft.VisualBasic.DateAndTime.Second |
Seek | FileSystem.Seek |
Sgn | System.Math.Sign |
Shell | Interaction.Shell |
Sin | System.Math.Sin |
SLN | Financial.SLN |
Space | new String(' ',...) |
SPC | FileSystem.SPC |
Split | Microsoft.VisualBasic.Strings.Split |
Sqr | System.Math.Sqrt |
Str | Conversion.Str |
StrConv | Strings.StrConv |
StrComp | System.String.Compare |
String | New String() |
StrReverse | Microsoft.VisualBasic.Strings.StrReverse |
Switch | Interaction.Switch |
Syd | Financial.SYD |
Tab | FileSystem.TAB |
Tan | System.Math.Tan |
Time | Microsoft.VisualBasic.DateAndTime.TimeOfDay |
Timer | Microsoft.VisualBasic.DateAndTime.Timer |
TimeSerial | Microsoft.VisualBasic.DateAndTime.TimeSerial |
TimeValue | Microsoft.VisualBasic.DateAndTime.TimeValue |
Trim | System.String.Trim |
TypeName | Microsoft.VisualBasic.Information.TypeName |
UBound | Microsoft.VisualBasic.Information.UBound |
UCase | System.String.ToUpper |
Val | Conversion.Val |
VarType | Microsoft.VisualBasic.Information.VarType |
Weekday | Microsoft.VisualBasic.DateAndTime.Weekday |
WeekdayName | Microsoft.VisualBasic.DateAndTime.WeekdayName |
Year | Microsoft.VisualBasic.DateAndTime.Year |
DoEvents | System.Windows.Forms.Application.DoEvents() |
CallByName | UNSUPPORT |
CVErr | UNSUPPORT |
Error | UNSUPPORT |
GetAutoServerSettings | UNSUPPORT |
GetAutoServerSettings | UNSUPPORT |
IMEStatus | UNSUPPORT |
IsError | UNSUPPORT |
LoadPicture | UNSUPPORT |
LoadResPicture | UNSUPPORT |
LoadResData | UNSUPPORT |
LoadResString | UNSUPPORT |
■参考サイト
Netcoole Migration Solutions
http://www.netcoole.com/default.htm
[C#]日付関連(日数・・・)
2つあるDateTime型の日付範囲の日数を知りたいんだけど・・・。どうしたらよいの?
▼回答
C#で簡単にやるには次の様にすると良いよ!
Microsoft.VisualBasic.DateAndTime.DateDiff(Microsoft.VisualBasic.DateInterval.Day,fromDate, toDate,Microsoft.VisualBasic.FirstDayOfWeek.System,Microsoft.VisualBasic.FirstWeekOfYear.System)
なぜか?C#では、パラメータの4と5がないとエラーになる。
■参考サイト
DateDiffをC#で使いたい。: DOBON.NETプログラミング掲示板過去ログ
http://dobon.net/vb/bbs/log3-14/7944.html
金曜日, 6月 06, 2008
[C言語]プリプロセッサ命令
__DATE__マクロには現在の日付が月/日/年 というフォーマットで入る
__TIME__マクロには現在の時刻が時/分/秒 というフォーマットで入る
_cplusplusはC++のソースコードをコンパイルしているときに定義される
__STDC__はC言語のソースコードをコンパイルしているときに定義される。C++のソースをコンパイルしているときにもおそらく定義される
■参考サイト
プリプロセッサ命令
http://www.cppll.jp/cppreference/preproc_details.html
[C++]エラーメッセージを取得する
予期しないエラーでアプリケーションが終了したんだ。
そのときのエラー内容を取得したいんだ。どうしたらいいの?
▼回答
GetLastError関数とFormatMessage関数で次の様に取得できるよ。
#include
#include
#include
using namespace std;
try {
throw "Exception";
bool b;
if (b) throw 10.1;
else throw 100;
}
catch ( ... ) {
LPTSTR lpBuffer = NULL;
BOOL result = FormatMessage( FORMAT_MESSAGE_ALLOCATE_BUFFER FORMAT_MESSAGE_FROM_SYSTEM FORMAT_MESSAGE_IGNORE_INSERTS,
NULL, GetLastError(), MAKELANGID( LANG_NEUTRAL, SUBLANG_DEFAULT ),
(LPTSTR)&lpBuffer, 0, NULL );
CString str = (LPCTSTR)lpBuffer;
str.Replace( "\r\n", "" );
logprintf( "エラー番号:%d,エラー内容:%s", GetLastError(), str );
// MessageBox( NULL, lpBuffer, "Last Error Message", MB_ICONHANDMB_OK );
LocalFree( lpBuffer );
// cout << "Exception : " << e << '\n'; exit( EXIT_FAILURE );
}
■参考サイト
peslab C,C++
http://peslab.blog70.fc2.com/category5-1.html
FormatMessage 関数
http://msdn.microsoft.com/ja-jp/library/cc428939.aspx
[C/C++]なんとエラーメッセージが取得出来た
http://blogs.wankuma.com/ch3cooh/archive/2008/03/22/129144.aspx
木曜日, 6月 05, 2008
[C++]例外処理(try文)
アプリケーションがメッセージを出して死んじゃうんだ。どう対処したらよいの?
とりあえず、途中でメッセージを出して止まらないようにしたいんだ。
▼回答
try文を使ってエラーをキャッチすればエラーで止まることは対処できると思うよ。
次の方法は、あらゆる型の例外を受け取ることができるよ。
try {
}
catch ( ... ) {
}
finally {
}
■参考サイト
例外処理
http://wisdom.sakura.ne.jp/programming/cpp/cpp35.html
月曜日, 6月 02, 2008
[C#]longのキャスト
次の様にするとエラーになるんだ。
long型のキャストはどうしたらよいんだい?
DataRow oRow = oDataSet.Tables[0].Rows[0];
long count = (long)(oRow[0]);
▼回答
次の様にすればうまくいくぞ!
DataRow oRow = oDataSet.Tables[0].Rows[0];
long count = Convert.ToInt64(oRow[0]);
変換先の型名→Convertクラス名
int→Convert.ToInt32
uint→Convert.ToUInt32
short→Convert.ToInt16
usort→Convert.ToUInt16
long→Convert.ToInt64
ulong→Convert.ToUInt64
float→Convert.ToSingle
double→Convert.ToDouble
sbyte→Convert.ToSByte
byte→Convert.ToByte
bool→Convert.ToBoolean
char→Convert.ToBoolean
date→Convert.ToDateTime
decimal→Convert.ToDecimal
string→Convert.ToString
■参考サイト
C# の庭園(Data)
http://www.apfield.jp/csgarden/data.html
木曜日, 5月 22, 2008
[C#]構造体
構造体(struct)で作成した変数を関数に渡してその中身をその関数の中で取得して
データを取得したいんだけど・・・うまく値がセットされないんだ!?
どうしてだい?
▼回答
C#のstructは、C/C++のstructとは違うものなんだ。
C#での構造体は、値型でクラスは、参照型なんだ。
値型とは、情報を引き渡すときに情報をコピーする方式のデータ型である。
参照型とは、データの実体がある場所を保存しておき、情報を引き渡す必要がある場合は、
データの本体をコピーせず、データの場所だけを伝えるという方式である。
構造体で参照渡しをしたい時は、関数の引数と呼び出し側の引数に「ref」を付けるんだ。
public struct ユーザ定義名
{
public int num;
public string name;
}
public void Test( ref ユーザ定義名 user )
{
user.num = 1;
user.name = "テスト";
}
ユーザ定義名 getUser;
Test( ref getUser );
■参考サイト
@IT:連載 改訂版 C#入門 第5章 C#のデータ型
http://www.atmarkit.co.jp/fdotnet/csharp_abc2/csabc2_005/cs2_005_03.html
青島のしま~Blue Islands~ : .NET Tips
http://www.takebay.net/~daigo-ao/paddlewiki.pl/title_2E4E45542054697073.html
水曜日, 5月 21, 2008
[C#]object型のキャスト
次のプログラムで 「指定されたキャストは有効ではありません。」のエラーが出る。どうして?
string sql = "SELECT * FROM テーブル名";
OracleDataAdapter objAdapter;
objAdapter = new OracleDataAdapter(sql, objOraConn);
DataSet objOraDataSet;
objOraDataSet = new DataSet("objDataSet");
// Fill the DataSet
objAdapter.Fill(objOraDataSet, "テーブル名");
DataRow objRow = objOraDataSet.Tables[0].Rows[0];
int val = (int)objRow["フィールド名"]; ← ここでエラー
▼回答
次の2つを使い分けてやればOK?!
Convert.ToInt32(objRow["フィールド名"]);
((IConvertible)objRow["フィールド名"]).ToInt32(null);
■参考サイト
object型のキャストについて: DOBON.NETプログラミング掲示板過去ログ
http://dobon.net/vb/bbs/log3-16/9607.html
日曜日, 5月 18, 2008
[VB→C#]My.Computer.FileSystem関連
「My.Computer.FileSystem」関連の処理をVBからC#に移植しようと思うんだが・・・。
うまくいかないんだ。
▼回答
「My.Computer.FileSystem」を「Microsoft.VisualBasic.FileIO」に変換すれば問題ないよ。
名前空間のインポートに「Microsoft.VisualBasic.FileIO」を宣言すると次のエラーになる。
「エラー 1 'FileSystem' は、'Microsoft.VisualBasic.FileIO.FileSystem' と 'Microsoft.VisualBasic.FileSystem'' 間のあいまいな参照です。 ファイルパス」
「'Microsoft.VisualBasic」と「Microsoft.VisualBasic.FileIO」は共存できないようだ。
そこで考えた。
名前空間のインポートに「using FileIO = Microsoft.VisualBasic.FileIO;」を宣言して、
「My.Computer」を「FileIO」に変換すれば問題ないことがわかった。
土曜日, 5月 17, 2008
[VB→C#]INIファイル関連(WIN32API)
INIファイル関連の関数宣言を教えてくれ!
▼回答
サンプルを示しておくから参考にしてくれ!!
[VB]
' INIファイルから値を取得する関数の宣言
Public Declare Auto Function GetPrivateProfileString Lib "kernel32" _
Alias "GetPrivateProfileString" ( _
ByVal nSize As UInt32, _
' INIファイルから値を取得する関数の宣言
Public Declare Auto Function GetPrivateProfileInt Lib "kernel32" _
Alias "GetPrivateProfileInt" ( _
' INIファイルに値を設定する関数の宣言
Public Declare Auto Function WritePrivateProfileString Lib "kernel32" _
Alias "WritePrivateProfileString" ( _
[C#]
// INIファイルから値を取得する関数の宣言
[DllImport("kernel32.dll")]
public static extern uint GetPrivateProfileString(
string lpAppName,
string lpKeyName,
string lpDefault,
StringBuilder lpReturnedString,
uint nSize,
string lpFileName);
// INIファイルから値を取得する関数の宣言
[DllImport("kernel32.dll")]
public static extern uint GetPrivateProfileInt(
string lpAppName,
string lpKeyName,
int nDefault,
string lpFileName);
// INIファイルに値を設定する関数の宣言
[DllImport("kernel32.dll")]
public static extern uint WritePrivateProfileString(
string lpAppName,
string lpKeyName,
string lpString,
string lpFileName);
[C#]VBからの移植でのエラー
VBからC#に移植しているんだけど。
次のコードで、次のエラーが出るんだ。どういう意味なのかな?
DataSet objDataSet = new DataSet("objDataSet");
~ 略 ~
DataRow objRow = objDataSetOra.Tables(0).Rows(0);
「エラー 1 'System.Data.DataSet.Tables' は 'プロパティ' ですが、'メソッド' のように使用されています。 ファイルパス」
▼回答
VBとC#で配列の文法が違うから気を付けた方がいいよ。
DataRow objRow = objDataSetOra.Tables[0].Rows[0];
▼質問
次のエラーが出るんだ。
「エラー 1 'objRow' は '変数' ですが、'メソッド' のように使用されています。 ファイルパス」
▼回答
これも、上記の回答と同じだよ。
[C#]型変換(キャスト)
次のプログラムで
public string cnvString(double data) {
return data.ToString();
}
下記のエラーになるんだ。どうしてなんだ?
「エラー 1 メソッド グループ 'ToString' を非デリゲート型 'string' に変換することはできません。このメソッドを呼び出すことはできません。 ファイルパス」
次の様にするとエラーは出なくなるんだ。何か違う気がする・・・。
public string cnvString(double data) {
string s = data.ToString();
return s;
}
▼回答
VBやC言語で言う共通関数(値を渡して結果を返すだけの処理)のようなものならstaticを
付けてあげれば問題ないと思うよ。
public static string cnvString(double data) {
return data.ToString();
}
静的変数・静的メソッドはクラスごとに唯一つの実体を持ち、すべてのオブジェクトの間で共有される。
また、数学関数や数学定数などのインスタンスを持つ必要のない関数を定義する場合にも使う。
クラス内に処理実態とデータが含む場合はstaticにしてはいけない。
■参考サイト
静的変数・静的メソッド(C# によるプログラミング入門)
http://ufcpp.net/study/csharp/oo_static.html
金曜日, 5月 16, 2008
[C#]Oracle参照エラー
下記のエラーが出るんだ。どうしたらいいんだ?!
「エラー 1 型または名前空間名 'Oracle' が見つかりませんでした。using ディレクティブまたはアセンブリ参照が不足しています。 ファイルパス」
▼回答
ソリューション エクスプローラの参照設定から次の手順で設定するんだ。
参照設定を選択し、プロパティウィンドウ(右クリック)から「参照の追加」を選択するんだ。
「.NET」タブからコンポーネント名「Oracle.DataAccess」を選んで「OK」をクリックして終了だ。
ODP.NETのインストールとバージョンに注意してくれ!
■参考サイト
Oracle 散策
http://www.okisoft.co.jp/esc/db/ora04.html
[C#]デファイン or インクルード
デファイン(#define)を定義するインクルードファイル(ヘッダファイル)ってないの?
▼回答
C#には、拡張子が(.h)のようなヘッダファイル(インクルード)は存在しないよ。
■参考サイト
C# 言語と .NET Framework の概要
http://msdn.microsoft.com/ja-jp/library/z1zx9t92(VS.80).aspx
[C#]C#の日付型
C#にDate型はないの?
▼回答
Date型はないけど日付型を扱うにはSystem名前空間にあるDateTime型を使うんだ。
使用方法には、次に上げる2通りがあるぞ!
プログラムの最初で「using System;」と宣言する方法と、
プログラムの中で「System.DateTime」とする方法だ。
前者の方が、プログラムがスッキリして一般的に使われる
方法だと思うから、その方法をお勧めするよ!
木曜日, 5月 15, 2008
[C#]VBからC#への移植方法
1.「’(シングルコーテイション)」を置換で「//(ダブルスラッシュ)」にする。
2.「Imports」を「using」に変換し、行の最後に「;(セミコロン)」を付ける。
3.「Public」を「public」に「Private」を「private」に置換する。
4.「Public Class クラス名 ~ End Class」を「public class クラス名 { ~ }」にする。
5.「Public Enum 列挙名 ~ End Enum」を「public enum 列挙名 { ~ }」にし、列挙子の間を
「,(カンマ)」で区切る。
6.「Public Structure 構造体名 ~ End Structure」を「public struct 構造体名 { ~ }」にし、
メンバの型を次の様に変換する。
Public 変数名 As Integer → public int 変数名;
Public 変数名 As String → public string 変数名;
Public 変数名 As Long → public long 変数名;
Public 変数名 As Double → public double 変数名;
Public 変数名 As Boolean → public bool 変数名;
Public 変数名 As Date → public System.DateTime 変数名;
7.コンストラクタ「Sub New() ~ End Sub」を「public クラス名() { ~ }」にする。
8.下記の様に置換する。
「New」 → 「new」
「True」 → 「true」
「False」 → 「false」
「.ToString」 → 「.ToString()」
「Try ~ Catch ex As Exception ~ Finally ~ End Try」 →
「try { ~ } catch (Exception ex) { ~ } finally { ~ }」
※注意:using Systemが必要!
「GoTo」 → 「goto」
「Nothing」 → 「null」
9.「IsDBNull」関数を下記に置き換え実装する。
public static bool IsDBNull(object data)
{
これよくなかった!
if (data == null) return true;
return false;
return Microsoft.VisualBasic.Information.IsDBNull(data);
}
10.「Format」関数を下記に置き換え実装する。
public static string Format(object data, string format)
{
これ間違えだった!
return String.Format(format, data);
return Microsoft.VisualBasic.Strings.Format(data, format);
}
11.配列宣言の型を次の様に変換する。
「Dim val(2) As Integer」 → 「int[] val = new int[2];」
12.「Select Case 」文を次の様に変換する。
Select Case 変数名
Case 値
Case Else
End Select
switch ( 変数名 ) {
case 値:
default:
}
13.「For」文を次の様に変換する。
For i as Integer = 0 To 10
Next i
for ( int i = 0 ; i <= 10 ; i++ ) { } 14.「& _」を使った文字列の連結を「+」に変換する。 15.下記に示すものを削除し、プログラムの処理を変更する。 「On Error GoTo」 16.「Err.Number」を「Microsoft.VisualBasic.Information.Err().Number」とするか次の様にする。 ソリューション エクスプローラの参照設定から「参照の追加」より「Microsoft.VisualBasic」を 追加し、「Err.Number」を「Information.Err().Number」とする。 このやり方ではエラーの取得は駄目みたい(>_<)
17.定数宣言を次の様に変更する。
「Public Const 定数名 As Integer = 0」 → 「public const int 定数名 = 0」
18.VB定数を次の様に変更する。
「Chr(13)」 or 「vbCr」 → 「\r」 : キャリッジリターン文字
「Chr(10)」 or 「vbLf」 → 「\n」 : ラインフィード文字
「Chr(13) + Chr(10)」 or 「vbCrLf」 or 「vbNewLine」 → 「\r\n」 : キャリッジリターンとラインフィードの組合せ
「Chr(9)」 or 「vbTab」 → 「\t」 : タブ文字
「Chr(0)」 or 「vbNullChar」 or 「vbNullString」 → 「\0」 : 値 0 を持つ文字
「Chr(8)」 or 「vbBack」 → 「\b」 : バックスペース文字
土曜日, 5月 10, 2008
[VB2005]コントロールを名前で探す
コントロールを名前で探すにはどうしたらいいんだい。
▼回答
次の様にすれば直接コントロールを操作できるようになるよ。
CType(Me.Controls.Find(名前, True)(0), コントロール名)
■参考サイト
VB.NET - フォーム内のコントロールを名前で探して取得する
http://jeanne.wankuma.com/tips/vb.net/form/findcontrol.html
金曜日, 5月 09, 2008
[VB2005]別ウィンドウ(別EXE)の最前面表示
別ウィンドウ(別EXE)で起動したアプリを最前面に表示したいんだ。どうしたらよいのか?
▼回答
次のAPIを使えばできるぞ!
API名は『BringWindowToTop』だ。
次にサンプルを示しておくから参考にしてくれ!!
'ウィンドウを最前面に表示する関数宣言
Declare Function BringWindowToTop Lib "user32.dll" Alias "BringWindowToTop" (ByVal hWnd As Int32) As Int32
'最上位フォーム設定解除
Me.TopMost = False
'プロセスを起動する.
prs = Process.Start(起動EXEパス, パラメータ)
'最上位フォーム設定
BringWindowToTop(CInt(prs.MainWindowHandle))
prs.WaitForExit()
prs.Dispose()
prs.Close()
'最上位フォーム設定
Me.TopMost = True
木曜日, 5月 01, 2008
[VBA]QueryTable
Oracleからのデータバックアップで次のプログラムで実行しているんだが・・・。
「Selection.QueryTable.Refresh BackgroundQuery:=False」
どうやってODBCやSQL文の設定をしているかわからん!?
教えてくれ~!!
▼回答
一度「外部データの取込み」をやると、その時の操作が設定してしまい
変更ができないみたいなんだ。
だから、汎用的にやるには次のプログラムがお勧めだよ!?
With Worksheets(シート名).QueryTables.Add(Connection:="ODBC;DSN=データソース名;UID=ユーザ名;PWD=パスワード名", Destination:=Worksheets(シート名).Range("A1"))
.Sql = Array("SELECT * FROM テーブル名")
.Refresh
End With
水曜日, 4月 30, 2008
[VC2005]GetGmtTmとGetLocalTmでエラー
GetGmtTmとGetLocalTmメソッドで次のエラーが出る。
「Debug Assertion Failed! Program: パスZZZZ.exe File: パス\atltime.inl Line: 999
Expression: _atl_condVal
For information on how your program can cause an assertion failure. see the Visual C++
documentation on asserts.
(Press Retry to debug the application)」
▼回答
インクルードやデファインを次の様にすれば上手く行くよ!
#pragma warning(disable: 4996)
#define _SECURE_ATL 0
#include
#include
#include
#include
#include
#define ATLTIME_INLINE inline
#include
#include
#define ATLCOMTIME_INLINE inline
#include
■参考サイト
A problem with ATL::CTime.GetLocalTm() - MSDN Forums
http://forums.microsoft.com/MSDN/ShowPost.aspx?PostID=126206&SiteID=1
ワーニングを抑制する方法 - #pragma warning - VC++
http://www.ailight.jp/blog/sha256/archive/2005/05/04/6684.aspx
木曜日, 4月 24, 2008
[C言語]Run-Time Check Failure #2エラー
次のエラーが発生する。
「Run-Time Check Failure #2 - Stack around the variable 'xxx' was corrupted」
▼回答
「xxx」を使っているサイズをチェックすることぐらいかな?!
多分、格納しようとしているサイズが「xxx」より大きいじゃないのかな!?
金曜日, 4月 18, 2008
[VB2005]OO4Oの警告
次の警告が出る。どうして?
警告 1 '_IOraBindVariable.GetPersistentPointer' の引数のうち少なくとも 1 つをランタイム マーシャラでマーシャリングできません。したがってこのような引数はポインタとして渡され、アンセーフ コードの使用が必要になります。
警告 2 プロパティ get アクセス操作子 'ResultCode' (有効な戻り値の型のない型 'OracleInProcServer._IExDispatch' 上) がタイプ ライブラリ インポータで見つかりました。インポータはこのプロパティをメソッドとしてインポートすることを試行します。
警告 3 '_IOraBlob._ReadCPP' の引数のうち少なくとも 1 つをランタイム マーシャラでマーシャリングできません。したがってこのような引数はポインタとして渡され、アンセーフ コードの使用が必要になります。
警告 4 'OraBlob._ReadCPP' の引数のうち少なくとも 1 つをランタイム マーシャラでマーシャリングできません。したがってこのような引数はポインタとして渡され、アンセーフ コードの使用が必要になります。
警告 5 '_IOraClob._ReadCPP' の引数のうち少なくとも 1 つをランタイム マーシャラでマーシャリングできません。したがってこのような引数はポインタとして渡され、アンセーフ コードの使用が必要になります。
警告 6 'OraClob._ReadCPP' の引数のうち少なくとも 1 つをランタイム マーシャラでマーシャリングできません。したがってこのような引数はポインタとして渡され、アンセーフ コードの使用が必要になります。
警告 7 '_IOraBfile._ReadCPP' の引数のうち少なくとも 1 つをランタイム マーシャラでマーシャリングできません。したがってこのような引数はポインタとして渡され、アンセーフ コードの使用が必要になります。
警告 8 'OraBfile._ReadCPP' の引数のうち少なくとも 1 つをランタイム マーシャラでマーシャリングできません。したがってこのような引数はポインタとして渡され、アンセーフ コードの使用が必要になります。
▼回答
Oracle InProc Server 5.0 Type Library (oip10.tlb) を追加してリビルドすると1度目はでないようだ。
2度目のリビルドで発生することがわかったが・・・。何の解決にもならない。。。
ん~わからない。
毎回、リビルドするたびに削除してリビルドして追加してリビルドするのか!?
めんどくせー!!
もう少し調べて次の様にすることにした。
プロジェクトプロパティ→コンパイル→「ビルド イベント」ボタンのビルド前と後で次のイベントを
実行するようにした。
ビルド前に実行するコマンド ライン
Copy $(ProjectDir)*.dll $(ProjectDir)\obj\Release
Copy $(ProjectDir)*.cache $(ProjectDir)\obj\Release
ビルド後に実行するコマンド ライン
Copy $(ProjectDir)obj\Release\*.dll $(ProjectDir)
Copy $(ProjectDir)obj\Release\*.cache $(ProjectDir)
完璧じゃないけど・・・少しはましになったかも?!
無視してもいい警告だからリビルドしてビルドするだけども良いかも?!
それにしても、よくわからん!!
火曜日, 4月 15, 2008
[C#]Windowアプリケーションの基本機能
フォームに「閉じる」ボタンを貼ったんだけど、「閉じる」ボタンがクリックした時の
イベント処理の方法がわからないんだけど。
VBだとMeなんだけど...
▼回答
C#は、thisを使って次の様に記述するんだ。
this.Close();
■参考サイト
[C#][VB]フォームを閉じる
http://jeanne.wankuma.com/tips/form/close.html
月曜日, 4月 14, 2008
[VB2005]PrintDocumentコントロール
印刷の前に出るメッセージの表示名はどうやったら変更できるの?
▼回答
DocumentNameプロパティを変更すれば表示が変わるよ。
Me.PrintDocument1.DocumentName = "表示名"
[VB2005]文字サイズチェック
データベースに文字列を格納する時に下記のエラーが出るんだ。
ORA-12899: 列"○×△□"."テーブル名"."フィールド名"の値が大きすぎます(実際: 256、最大: 255)
文字列のサイズをチェックをして、格納サイズより大きい時は
格納サイズより大きい部分は削除したいんだ。どうしたらできるんだい。
文字数のチェックはMaxLengthプロパティに値を入れておけば
自動的にやってくれてはいるんだけど...
▼回答
こんなのできたよ。
Public Shared Function ChkByte(ByVal strValue As String, ByVal byteSize As Integer) As Boolean
If (System.Text.Encoding.GetEncoding("Shift-JIS").GetByteCount(strValue) <= byteSize) Then ChkByte = True
End Function
Public Shared Function GetByte(ByVal strValue As String, ByVal byteSize As Integer) As String
Dim hEncoding As System.Text.Encoding = System.Text.Encoding.GetEncoding("Shift-JIS")
Dim bBytes As Byte() = hEncoding.GetBytes(strValue)
Dim count As Long
For i As Long = Len(strValue) To 1 Step -1
If (ChkByte(Mid(strValue, 1, Len(strValue) - count), byteSize)) Then
Return System.Text.Encoding.GetEncoding("Shift-JIS").GetString(bBytes, 0, Len(strValue) - count)
End If
count = count + 1
Next i
Return strValue
End Function
■参考サイト
VB.NET 全角・半角でのLEFT関数 - Insider.NET
http://www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?topic=24347&forum=7&start=8
木曜日, 4月 03, 2008
[VB2005]閉じるボタンのキャンセル
閉じるボタン(「×」ボタン)をクリックされても閉じないようにするにはどうしたらいいの?
▼回答
FormClosingイベントで次のコードを記述すればできるらしいよ。(^^;
If (e.CloseReason = CloseReason.UserClosing) Then
e.Cancel = True
End If
■参考サイト
ウィンドウの閉じるボタンを押しても終了させない
http://katamari.jp/index.php?dev%2Fvb%2F%A5%A6%A5%A3%A5%F3%A5%C9%A5%A6%A4%CE%CA%C4%A4%B8%A4%EB%A5%DC%A5%BF%A5%F3%A4%F2%B2%A1%A4%B7%A4%C6%A4%E2%BD%AA%CE%BB%A4%B5%A4%BB%A4%CA%A4%A4
日曜日, 3月 30, 2008
[VB2005]ReadOnlyコンボボックス
Inherits System.Windows.Forms.ComboBox
Private blnReadOnly As Boolean = False
Private iSelectedIndex As Integer = Me.SelectedIndex
'-------------------------------------------------------------------------------
'
' コンストラクタ処理
'
Public Sub New()
End Sub
'-------------------------------------------------------------------------------
'
' デストラクタ処理
'
Protected Overrides Sub Finalize()
MyBase.Finalize()
End Sub
'-------------------------------------------------------------------------------
'
' 概要 : 読み取り専用かどうかを示す値を取得または設定します。
'
' 戻り値 : 読み取り専用の場合は true。それ以外の場合は false。既定値は false です。
'
Public Property ControlReadOnly() As Boolean
Get
Return blnReadOnly
End Get
Set(ByVal value As Boolean)
Me.Enabled = True
If (value) Then
Me.BackColor = SystemColors.Control
iSelectedIndex = Me.SelectedIndex
Else
Me.BackColor = SystemColors.Window
End If
blnReadOnly = value
End Set
End Property
Protected Overrides Sub OnMouseUp(ByVal e As System.Windows.Forms.MouseEventArgs)
If (blnReadOnly) Then Me.Parent.Focus() : Return
MyBase.OnMouseUp(e)
End Sub
Protected Overrides Sub OnMouseDown(ByVal e As System.Windows.Forms.MouseEventArgs)
If (blnReadOnly) Then Me.Parent.Focus() : Return
MyBase.OnMouseDown(e)
End Sub
Protected Overrides Sub OnMouseClick(ByVal e As System.Windows.Forms.MouseEventArgs)
If (blnReadOnly) Then Me.Parent.Focus() : Return
MyBase.OnMouseClick(e)
End Sub
Protected Overrides Sub OnGotFocus(ByVal e As System.EventArgs)
If (blnReadOnly) Then Me.Parent.Focus() : Return
MyBase.OnGotFocus(e)
End Sub
End Class
[VB.NET or VB2005]カラー名称
システムのカラー名称を指定したいんだけどどうやったらできるの?
▼回答
次の様に指定すればできるよ。
Me.BackColor = SystemColors.Window
■参考サイト
Control.BackColor プロパティ (System.Windows.Forms)
http://msdn2.microsoft.com/ja-jp/library/system.windows.forms.control.backcolor(VS.80).aspx
システムカラー名称 ARGB値
ActiveBorder FFD4D0C8
ActiveCaption FFC0C0C0
ActiveCaptionText FF0E1010
AppWorkspace FF808080
Control FFE0DFE3
ControlDark FF9D9DA1
ControlDarkDark FF716F64
ControlLight FFF1EFE2
ControlLightLight FFFFFFFF
ControlText FF000000
Desktop FF585768
GrayText FFACA899
Highlight FFB2B4BF
HighlightText FF000000
HotTrack FF648BCB
InactiveBorder FFD4D0C8
InactiveCaption FFFFFFFF
InactiveCaptionText FFA2A1A1
Info FFFFFFE1
InfoText FF000000
Menu FFFFFFFF
MenuText FF000000
ScrollBar FFD4D0C8
Window FFFFFFFF
WindowFrame FF000000
WindowText FF000000
Transparent FFFFFF
AliceBlue FFF0F8FF
AntiqueWhite FFFAEBD7
Aqua FF00FFFF
Aquamarine FF7FFFD4
Azure FFF0FFFF
Beige FFF5F5DC
Bisque FFFFE4C4
Black FF000000
BlanchedAlmond FFFFEBCD
Blue FF0000FF
BlueViolet FF8A2BE2
Brown FFA52A2A
BurlyWood FFDEB887
CadetBlue FF5F9EA0
Chartreuse FF7FFF00
Chocolate FFD2691E
Coral FFFF7F50
CornflowerBlue FF6495ED
Cornsilk FFFFF8DC
Crimson FFDC143C
Cyan FF00FFFF
DarkBlue FF00008B
DarkCyan FF008B8B
DarkGoldenrod FFB8860B
DarkGray FFA9A9A9
DarkGreen FF006400
DarkKhaki FFBDB76B
DarkMagenta FF8B008B
DarkOliveGreen FF556B2F
DarkOrange FFFF8C00
DarkOrchid FF9932CC
DarkRed FF8B0000
DarkSalmon FFE9967A
DarkSeaGreen FF8FBC8B
DarkSlateBlue FF483D8B
DarkSlateGray FF2F4F4F
DarkTurquoise FF00CED1
DarkViolet FF9400D3
DeepPink FFFF1493
DeepSkyBlue FF00BFFF
DimGray FF696969
DodgerBlue FF1E90FF
Firebrick FFB22222
FloralWhite FFFFFAF0
ForestGreen FF228B22
Fuchsia FFFF00FF
Gainsboro FFDCDCDC
GhostWhite FFF8F8FF
Gold FFFFD700
Goldenrod FFDAA520
Gray FF808080
Green FF008000
GreenYellow FFADFF2F
Honeydew FFF0FFF0
HotPink FFFF69B4
IndianRed FFCD5C5C
Indigo FF4B0082
Ivory FFFFFFF0
Khaki FFF0E68C
Lavender FFE6E6FA
LavenderBlush FFFFF0F5
LawnGreen FF7CFC00
LemonChiffon FFFFFACD
LightBlue FFADD8E6
LightCoral FFF08080
LightCyan FFE0FFFF
LightGoldenrodYellow FFFAFAD2
LightGray FFD3D3D3
LightGreen FF90EE90
LightPink FFFFB6C1
LightSalmon FFFFA07A
LightSeaGreen FF20B2AA
LightSkyBlue FF87CEFA
LightSlateGray FF778899
LightSteelBlue FFB0C4DE
LightYellow FFFFFFE0
Lime FF00FF00
LimeGreen FF32CD32
Linen FFFAF0E6
Magenta FFFF00FF
Maroon FF800000
MediumAquamarine FF66CDAA
MediumBlue FF0000CD
MediumOrchid FFBA55D3
MediumPurple FF9370DB
MediumSeaGreen FF3CB371
MediumSlateBlue FF7B68EE
MediumSpringGreen FF00FA9A
MediumTurquoise FF48D1CC
MediumVioletRed FFC71585
MidnightBlue FF191970
MintCream FFF5FFFA
MistyRose FFFFE4E1
Moccasin FFFFE4B5
NavajoWhite FFFFDEAD
Navy FF000080
OldLace FFFDF5E6
Olive FF808000
OliveDrab FF6B8E23
Orange FFFFA500
OrangeRed FFFF4500
Orchid FFDA70D6
PaleGoldenrod FFEEE8AA
PaleGreen FF98FB98
PaleTurquoise FFAFEEEE
PaleVioletRed FFDB7093
PapayaWhip FFFFEFD5
PeachPuff FFFFDAB9
Peru FFCD853F
Pink FFFFC0CB
Plum FFDDA0DD
PowderBlue FFB0E0E6
Purple FF800080
Red FFFF0000
RosyBrown FFBC8F8F
RoyalBlue FF4169E1
SaddleBrown FF8B4513
Salmon FFFA8072
SandyBrown FFF4A460
SeaGreen FF2E8B57
SeaShell FFFFF5EE
Sienna FFA0522D
Silver FFC0C0C0
SkyBlue FF87CEEB
SlateBlue FF6A5ACD
SlateGray FF708090
Snow FFFFFAFA
SpringGreen FF00FF7F
SteelBlue FF4682B4
Tan FFD2B48C
Teal FF008080
Thistle FFD8BFD8
Tomato FFFF6347
Turquoise FF40E0D0
Violet FFEE82EE
Wheat FFF5DEB3
White FFFFFFFF
WhiteSmoke FFF5F5F5
Yellow FFFFFF00
YellowGreen FF9ACD32
土曜日, 3月 29, 2008
[Windows]バッチ
バッチからイベントログに情報を書込みたいんだ。どうしたらできるの?
▼回答
eventcreateコマンドを使えばできるよ。でも、このコマンドが使えるOSは、Windows XP と
Windows Server 2003だから気をつけてね。
•
/s computer イベントの出力先であるリモート コンピュータの名前または IP アドレスを指定します。デフォルトのコンピュータは、ローカル コンピュータです。
•
/u domain\user指定したユーザーのアクセス許可を使用してコマンドを実行します。デフォルトのユーザーは、現在のユーザーです。
•
/p password /u パラメータで指定したユーザー アカウントのパスワードを指定します。
•
/l イベントを作成するログの名前を指定します。APPLICATION または SYSTEM のみを指定できます。
•
/so source nameイベントを生成する "ソース" 名を指定します。任意の文字列を指定できますが、通常はプログラム名が指定されます。
•
/t 作成するイベントの "種類" を指定します。有効なイベントの種類は、Error (エラー)、Warning (警告)、Infomation (情報) です。
•
/id EventIDイベントの "イベント ID" を指定します。1 ~ 1000 の範囲の整数である必要があります。ID が一意になる必要はないため、これらを使用して、プログラムからの終了コードなどを識別できるエラー番号を記録することをお勧めします。
•
/d description 新しく作成されるイベントに使用する "説明" を指定します。文字列に複数の単語を指定する場合は、二重引用符 (") で囲みます。
•
/? コマンド プロンプトでヘルプを表示します。 注 : /t、/id、および /d の各オプションの値は必須指定であり、/l オプションや /so オプションの値を追加指定できます。
"アプリケーションが失敗しました" という説明が付いたエラー イベントをアプリケーション ログに作成するには、eventcreate /t error /id 1000 /l application /d "アプリケーションが失敗しました" とコマンドを指定します。
■参考サイト
@IT:Windows TIPS -- Tips:イベント・ログに任意の文字列を出力する
http://www.atmarkit.co.jp/fwin2k/win2ktips/489evtout/evtout.html
土曜日, 3月 22, 2008
マイクロソフトの開発者向けツールバー
http://www.microsoft.com/japan/msdn/silverlight/downloads.aspx
Microsoft Internet Explorer Developer Toolbar (英語)
Web アプリケーションのデバッグが非常に効率的に行えるツールです。
■参考サイト
13種類のブラウザ用人気ツールバー徹底検証――開発者/マーケターに便利かどうか【後半】 Web担当者Forum
http://web-tan.forum.impressrd.jp/e/2008/02/20/2637
日曜日, 3月 16, 2008
土曜日, 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月 12, 2008
月曜日, 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