トップ回答者
エラーメッセージ表示

質問
回答
-
>その関数をcallしてるのですが、callする時にエラーが表示されます。
エラーはデバッグ実行でステップインして確認していますか?
rc = Open_RS_Upd(Cnn, TBLName, CNDstr, COLnam, COLval, COLtyp, COLpro)
の箇所でブレークポイントを貼って、プログラムをデバッグモードで実行して
ブレークポイントでとまったら、ステップイン実行(そのメソッドの中に入る)でどこでエラーが
発生しているのかを確認してください。
ステップイン実行に割り当てられたキーは、メニュー「デバッグ」の「ステップイン」で確認できます。
- 回答としてマーク 京太郎 2011年2月17日 3:02
すべての返信
-
object型から全てのクラスが派生しています。string型も例外ではありません。基底クラス(継承元のクラス)より派生したクラスは、基底クラスの内容を含みますから、基底クラスより機能が豊富になります。したがって、object型をより機能の豊富なstring型に型変換(これをキャストと言います)するには、object型にはなくstring型にしかない部分が問題になります。このような継承元から継承先(派生先)へのキャストをダウンキャストと言います。コンパイルは通りますが、実行時にエラーになります。
#わかりやすく説明できていないかもしれませんので、わかりにくければまた質問して下さい。とりあえずダウンキャストについて調べられると良いと思います。
★良い回答には回答済みマークを付けよう! わんくま同盟 MVP - Visual C# http://d.hatena.ne.jp/trapemiya/ -
Public Function Open_RS_Upd(ByRef cn As ADODB.Connection, ByRef TBLName As String, ByRef CNDstr As String, ByRef COLnam() As String, ByRef COLval() As String, ByRef COLtyp() As String, ByRef COLpro() As String) As Boolean
On Error GoTo ErrorHandle'----- 変数宣言 -----
Dim RS As ADODB.Recordset
Dim i As Integer
Dim COLlist As String = Nothing
Dim OriginData As Integer
Dim RepCOLnam As String'----- 初期化 -----
Open_RS_Upd = TrueFor i = 0 To MAXCOL - 1
If COLnam(i) = Nothing Then
Exit For
End If
If i = 0 Then
COLlist = Space(1) & COLnam(i)
Else
COLlist = COLlist & "," & COLnam(i)
End If
NextRS = New ADODB.Recordset
RS.ActiveConnection = cn
RS.CursorLocation = ADODB.CursorLocationEnum.adUseClient
RS.CursorType = ADODB.CursorTypeEnum.adOpenKeyset
RS.LockType = ADODB.LockTypeEnum.adLockPessimisticSQL = "select " & COLlist & " from " & TBLName & " with(UPDLOCK) " & "where " & CNDstr
Clipboard.Clear()
Clipboard.SetText(SQL)RS.Open(SQL)
If RS.EOF Then
Open_RS_Upd = NOREC '存在しない
RS.Close() : RS = Nothing
Exit Function
Else
Do While Not RS.EOF
'----- 項目の設定 -----
For i = 0 To MAXCOL - 1
If COLnam(i) = Nothing Then
Exit For
End If'----- Pre-fix の COLval の処理 -----
If UCase(Strings.Left(COLval(i), 4)) = "FROM" Then
RepCOLnam = Mid(COLval(i), 5, 20)
COLval(i) = RS(RepCOLnam).Value '置換カラムの値より、COLval(i)をリセット
End If'----- 現在値の取込み -----
If COLtyp(i) = "N" Then '<数値型>
OriginData = Val(RS(COLnam(i)))
If COLpro(i) = "+" Then '加算
COLval(i) = Format(OriginData + Val(COLval(i)))
ElseIf COLpro(i) = "-" Then '減算
COLval(i) = Format(OriginData - Val(COLval(i)))
ElseIf COLpro(i) = "R" Then '置換
ElseIf COLpro(i) = "X" Then 'NOP
End If
Else '<文字列>
End If'----- 更新値のセット -----
If COLval(i) <> "X" Then
RS(COLnam(i)).Value = COLval(i)
End If
Next
RS.Update() 'レコードの更新
RS.MoveNext() '次のデータ
Loop
End If'----- テーブル解放 -----
RS.Close() : RS = NothingExit Function
ErrorHandle:
Dim ErrLoop As ADODB.Error
Dim ErrNum'----- Error Object の最初の Error Number を取り出す -----
For Each ErrLoop In Cnn.Errors
ErrNum = ErrLoop.Number
Exit For
Next
If CLng(ErrNum) = TIMEOUT Then
Open_RS_Upd = TIMEOUT
Else
Open_RS_Upd = False
End If
cn.Errors.Clear()
End Functionを作成して、その関数をcallしてるのですが、callする時にエラーが表示されます。
呼び出してるところは下記のところです。(rc:戻り値)
rc = Open_RS_Upd(Cnn, TBLName, CNDstr, COLnam, COLval, COLtyp, COLpro)
下記は定義の一部です。
Public TBLName As String 'テーブル名
Public CNDstr As String 'WHERE句の内容
Public COLdmy As String 'ダミーカラム名(削除の時使用、どのカラムでも可)
Public COLnam(MAXCOL) As String 'カラム名リスト
Public COLval(MAXCOL) As String 'カラム値リスト
Public COLtyp(MAXCOL) As String 'データ型(N 数値型 A or "" 文字型)[変更モード]のみ使用
Public COLpro(MAXCOL) As String '演算タイプ(+:加算,-:減算,R:置換,X:処理なし)[変更モード]のみ使用 -
>その関数をcallしてるのですが、callする時にエラーが表示されます。
エラーはデバッグ実行でステップインして確認していますか?
rc = Open_RS_Upd(Cnn, TBLName, CNDstr, COLnam, COLval, COLtyp, COLpro)
の箇所でブレークポイントを貼って、プログラムをデバッグモードで実行して
ブレークポイントでとまったら、ステップイン実行(そのメソッドの中に入る)でどこでエラーが
発生しているのかを確認してください。
ステップイン実行に割り当てられたキーは、メニュー「デバッグ」の「ステップイン」で確認できます。
- 回答としてマーク 京太郎 2011年2月17日 3:02