none
構造体 RRS feed

  • 質問

  • 何度も申し訳ありません。

    '----- 処理BCD一次テーブルパラメータ -----
      Public Structure InpUKig_BCD_PARAM
        Public RecCnt As Integer                          'レコード数
    
        Public Tokuisaki() As String                        '得意先
        Public UkiDenNo() As Long                          '浮貸伝NO
        Public BCD() As String                           'バーコード
        Public Recid() As Integer                          'RECID
        Public HTyp() As Integer                          '製品区分
    
        Public Sub Initialize()
          ReDim Tokuisaki(MAXTPN * 2)
          ReDim UkiDenNo(MAXTPN * 2)
          ReDim BCD(MAXTPN * 2)
          ReDim Recid(MAXTPN * 2)
          ReDim HTyp(MAXTPN * 2)
        End Sub
    
      End Structure
    

    Private Function GetSyoriBcdData(ByVal BcdParam As InpUKig_BCD_PARAM) As Long
        'On Error GoTo ErrorHandle
    
        '----- 変数宣言 -----
        Dim rc As Long                               '戻り値
        Dim Cnt As Integer                             'レコード数
        Dim TblName As String = Nothing                       'テーブル名
    
        '----- 初期化値 -----
        GetSyoriBcdData = SUCCEED
        TblName = "#WKBCD_TBL"
    
    ReTry_Ref:
        '----- SQL構文 -----
        SQL = "select * from " & TblName
    
        '----- レコードセット作成(参照モード) -----
        rc = Open_RS_Ref(SQL, Cnn, rsBCD, Cnt)
        If rc = TIMEOUT Then
          Beep()
          MessageBox.Show("タイムアウト(他のユーザがLOCK中)です、再試行します", "京朋通知", MessageBoxButtons.OK, MessageBoxIcon.Error)
          GoTo ReTry_Ref
        ElseIf rc = FAIL Then
          MessageBox.Show("レコードセットを作成できません!!", "京朋通知", MessageBoxButtons.OK, MessageBoxIcon.Error)
          GetSyoriBcdData = FAIL
          Exit Function
        End If
        If rsBCD.RecordCount = 0 Then
          GetSyoriBcdData = FAIL
          rsBCD.Close() : rsBCD = Nothing
          Exit Function
        Else
          Do While Not rsBCD.EOF
            BcdParam.Tokuisaki(BcdParam.RecCnt) = rsBCD.Fields("wT_Tokuisaki").Value
            BcdParam.UkiDenNo(BcdParam.RecCnt) = Val(rsBCD.Fields("wT_UkiDenNo").Value)
            BcdParam.BCD(BcdParam.RecCnt) = rsBCD.Fields("wT_Bcd").Value
            BcdParam.Recid(BcdParam.RecCnt) = Val(rsBCD.Fields("wT_Recid").Value)
            BcdParam.HTyp(BcdParam.RecCnt) = Val(rsBCD.Fields("wT_HTyp").Value)
            BcdParam.RecCnt += 1
            rsBCD.MoveNext()
          Loop
        End If
    
        '----- テーブル解放 -----
        rsBCD.Close() : rsBCD = Nothing
    
        Exit Function
    ErrorHandle:
        GetSyoriBcdData = FAIL
      End Function
    

    Do While Not rsBCD.EOF文でエラーが表示されます。

    やはり、構造体の初期化が必要なのでしょうか?

    構造体の初期化を行う場合、引数があるので、どのように書けばいいのかわかりません。

    何度も申し訳ないのですが、よろしくお願いします。

     

     

     

     

    2011年5月31日 4:21

回答

  • つまり、構造体の初期化が必要なのではなく、rsBCDレコードセットの初期化が必要ということです。
    • 回答としてマーク 山本春海 2011年7月4日 8:38
    2011年5月31日 6:33
  • > Do While Not rsBCD.EOF文でエラーが表示されます。

    これだけでは判りません。どんなエラーが出ますか?
    また構造体になぜここまでこだわるのか理解できません。構造体止めて、クラスにしたらいかがでしょうか?

    また、あえて構造体にこだわるなら、以下のようにすべきと思います。

    ''' <summary>
    ''' 各行ごとのアイテムを格納する構造体
    ''' </summary>
    Public Structure Item
    
    	Public Property Tokuisaki As String	' 得意先
    	Public Property UkiDenNo As Integer	' 浮貸伝NO
    	Public Property BCD As String		' バーコード
    	Public Property Recid As Integer	' RECID
    	Public Property HTyp As Integer		' 製品区分
    
    End Structure
    
    
    ''' <summary>
    ''' ' 処理BCD一次テーブルパラメータクラス
    ''' </summary>
    Public Class InpUKig_BCD_PARAM
    
    	Private _itemList As New List(Of Item)
    
    	''' <summary>Item のリスト</summary>
    	Public ReadOnly Property Items As List(Of Item)
    		Get
    			Return _itemList
    		End Get
    	End Property
    
    	''' <summary>コンストラクタ</summary>
    	Public Sub New(length As Integer)
    		_itemList.Capacity = length
    	End Sub
    
    End Class
    

     

    あとたいへん申し訳ありませんが、全般的に読んでて色々突っ込みたくなるコードです。
    一度機会を見て、以下の本を読まれてみてはいかがでしょうか?

    http://www.amazon.co.jp/dp/4774145009/

    • 回答としてマーク 山本春海 2011年7月4日 8:38
    2011年5月31日 6:45
    モデレータ
  • なんか読んでて無性にリファクタリングしたくなりましたw
    こちらの環境では動作しないですが、多分こうであろうということでざっと書き直してみました。
    当然勢いで書いたものですから動作する保証は全くありませんが、コーディングのイメージとして掴んで頂けるとありがたいです。InpUKig_BCD_PARAM は前のレスで書いたクラスを使っています。

    Private Function GetSyoriBcdData(ByVal bcdParam As InpUKig_BCD_PARAM) As Integer
    
    	Dim ret As Integer = FAIL
    	Dim tableName As String = "#WKBCD_TBL" ' テーブル名
    
    	'----- SQL構文 -----
    	Dim sql As String = "select * from " & tableName
    
    	'----- レコードセット作成(参照モード) -----
    	Dim count As Integer = 0
    	Dim rc As Integer = Open_RS_Ref(sql, cnn, rsBCD, count)
    	Try
    		If rc = TIMEOUT Then
    			Beep()
    			MessageBox.Show("タイムアウト(他のユーザがLOCK中)です、再試行します", "京朋通知", MessageBoxButtons.OK, MessageBoxIcon.Error)
    			' ここは GoTo を使わず別のロジックを考える。
    		ElseIf rc = FAIL Then
    			MessageBox.Show("レコードセットを作成できません!!", "京朋通知", MessageBoxButtons.OK, MessageBoxIcon.Error)
    			Return ret
    		End If
    		If rsBCD.RecordCount <> 0 Then
    			Dim i As Integer = 0
    			Do While Not rsBCD.EOF
    				bcdParam.Item(i).Tokuisaki = rsBCD.Fields("wT_Tokuisaki").Value
    				bcdParam.Item(i).UkiDenNo = CInt(rsBCD.Fields("wT_UkiDenNo").Value)
    				bcdParam.Item(i).BCD = rsBCD.Fields("wT_Bcd").Value
    				bcdParam.Item(i).Recid = CInt(rsBCD.Fields("wT_Recid").Value)
    				bcdParam.Item(i).HTyp = CInt(rsBCD.Fields("wT_HTyp").Value)
    				i += 1
    				rsBCD.MoveNext()
    			Loop
    			ret = SUCCEED
    		End If
    
    	Catch ex As Exception
    		Throw
    	Finally
    		'----- テーブル解放 -----
    		rsBCD.Close()
    		rsBCD = Nothing
    	End Try
    
    	Return ret
    
    End Function
    

     

    元のコードは一読するに様々な問題を孕んでいるコードです。仮に眼前のバグを潰せても、さらに新たなバグを生む危険性があります。

    あと SQL インジェクション知ってますか?状況によっては会社を潰しかねないバグです。
    コードの中で動的にクエリを生成されてますが、へこやんさんの今までのスレを読むに、どこまで考慮されておられるのか甚だ疑問に感じます。

    SQLインジェクション

    VB6 時代のコーディングはこの際完全に放棄して、VB.NET の知識とそれに準拠したコーディングを学ばれることを強くお勧めいたします。以下少し古い記事ですが、ぜひ参考にどうぞ。

    http://www.atmarkit.co.jp/fdotnet/vb6tonet2/index/index.html


    ひらぽん http://d.hatena.ne.jp/hilapon/
    • 回答としてマーク 山本春海 2011年7月4日 8:38
    2011年5月31日 7:30
    モデレータ
  • 構造体以前に、配列のサイズをどこでも指定していないんじゃないですか?

    Initializeメソッドが書かれていますけど、

    ぱっと見正しく呼ばれてるとも思えませんし・・・

    構造体内の各配列サイズが指定されていない状態で値をセットして、エラーになってるんじゃないですか?

    Redim Preserve とかで調べてみる事をお勧めします。

     

    なんにせよ今の InpUKig_BCD_PARAM の内容だと、可読性低すぎじゃないですかね。

    • 回答としてマーク 山本春海 2011年7月4日 8:39
    2011年6月1日 2:46
  • あくまでユーザー同士の情報交換が主体ですよ!

     いやぁ、私は6月4日のセッションの内容を補強する、良い情報をいただいていますよ。


     そのセッションでのネタなのですが、元々の定義では、InpUKig_BCD_PARAM というデータは、1個のレコード数、不定数の得意先、不定数の浮貸伝 NO、不定数のバーコード、不定数の RECID、不定数の製品区分から出来ている、ということになります。本当ですか?「得意先、浮貸伝 NO、バーコード、RECID、製品区分」のセットが不定数あるのではないですか?つまり、データベースからデータを持ってきていますが、データベースにこれらの項目が定義されていて、1行が1データにあたるのではないですか?それが不定数行ある、ということですよね。
     つまり、へこやんさんの定義では、データの意味が変わってしまっています。それに対してひらぽんさんの定義では、データの意味が変わっていません。データの意味を変えてしまうと、後々面倒ですよ。

     それと、元々の「Do While Not rsBCD.EOF文で、「オブジェクト参照がオブジェクトインスタンスに設定されていません」と表示されます。」ですが。。。本当に Do While 文ですか?rsBCD は、ここに提示されている中では定義されていません。よって、実行時に例外が発生するのではなく、コンパイル時にエラーが発生するはずですが?
    と、ふざけるのは止めてと。
    「rc = Open_RS_Ref(SQL, Cnn, rsBCD, Cnt)」で参照しているので、ここで何らかの例外が発生するはずですが?あるいは、初期化していない変数を使用しているという警告が出ていると思います。また、本当にヌルリが出ているなら、Open_RS_Ref(,, outByRef rsBCD,) じゃないですか?(VB って、こうだっけ?)で、「If rsBCD.RecordCount = 0 Then」をパスして、「Do While Not rsBCD.EOF」でヌルリってのは、納得いかない・・・


    Jitta@わんくま同盟
    • 編集済み Jitta 2011年6月12日 12:28
    • 回答としてマーク 山本春海 2011年7月4日 8:39
    2011年6月1日 11:29

すべての返信

  • rsBCDとはなんでしょうか?
    2011年5月31日 5:47
  • rsBCDはテーブル名のレコードセットです。

     

    2011年5月31日 6:12
  • どのようなエラーが発生しているのでしょうか?

     


    ★良い回答には回答済みマークを付けよう! わんくま同盟 MVP - Visual C# http://d.hatena.ne.jp/trapemiya/
    2011年5月31日 6:32
    モデレータ
  • つまり、構造体の初期化が必要なのではなく、rsBCDレコードセットの初期化が必要ということです。
    • 回答としてマーク 山本春海 2011年7月4日 8:38
    2011年5月31日 6:33
  • > Do While Not rsBCD.EOF文でエラーが表示されます。

    これだけでは判りません。どんなエラーが出ますか?
    また構造体になぜここまでこだわるのか理解できません。構造体止めて、クラスにしたらいかがでしょうか?

    また、あえて構造体にこだわるなら、以下のようにすべきと思います。

    ''' <summary>
    ''' 各行ごとのアイテムを格納する構造体
    ''' </summary>
    Public Structure Item
    
    	Public Property Tokuisaki As String	' 得意先
    	Public Property UkiDenNo As Integer	' 浮貸伝NO
    	Public Property BCD As String		' バーコード
    	Public Property Recid As Integer	' RECID
    	Public Property HTyp As Integer		' 製品区分
    
    End Structure
    
    
    ''' <summary>
    ''' ' 処理BCD一次テーブルパラメータクラス
    ''' </summary>
    Public Class InpUKig_BCD_PARAM
    
    	Private _itemList As New List(Of Item)
    
    	''' <summary>Item のリスト</summary>
    	Public ReadOnly Property Items As List(Of Item)
    		Get
    			Return _itemList
    		End Get
    	End Property
    
    	''' <summary>コンストラクタ</summary>
    	Public Sub New(length As Integer)
    		_itemList.Capacity = length
    	End Sub
    
    End Class
    

     

    あとたいへん申し訳ありませんが、全般的に読んでて色々突っ込みたくなるコードです。
    一度機会を見て、以下の本を読まれてみてはいかがでしょうか?

    http://www.amazon.co.jp/dp/4774145009/

    • 回答としてマーク 山本春海 2011年7月4日 8:38
    2011年5月31日 6:45
    モデレータ
  • 「オブジェクト参照がオブジェクトインスタンスに設定されていません」と表示されます。

     

    2011年5月31日 6:50
  • つまらない事を聞いて申し訳ないのですが、レコードセットの初期化はどうのようにするのですか?

     

    2011年5月31日 6:52
  • なんか読んでて無性にリファクタリングしたくなりましたw
    こちらの環境では動作しないですが、多分こうであろうということでざっと書き直してみました。
    当然勢いで書いたものですから動作する保証は全くありませんが、コーディングのイメージとして掴んで頂けるとありがたいです。InpUKig_BCD_PARAM は前のレスで書いたクラスを使っています。

    Private Function GetSyoriBcdData(ByVal bcdParam As InpUKig_BCD_PARAM) As Integer
    
    	Dim ret As Integer = FAIL
    	Dim tableName As String = "#WKBCD_TBL" ' テーブル名
    
    	'----- SQL構文 -----
    	Dim sql As String = "select * from " & tableName
    
    	'----- レコードセット作成(参照モード) -----
    	Dim count As Integer = 0
    	Dim rc As Integer = Open_RS_Ref(sql, cnn, rsBCD, count)
    	Try
    		If rc = TIMEOUT Then
    			Beep()
    			MessageBox.Show("タイムアウト(他のユーザがLOCK中)です、再試行します", "京朋通知", MessageBoxButtons.OK, MessageBoxIcon.Error)
    			' ここは GoTo を使わず別のロジックを考える。
    		ElseIf rc = FAIL Then
    			MessageBox.Show("レコードセットを作成できません!!", "京朋通知", MessageBoxButtons.OK, MessageBoxIcon.Error)
    			Return ret
    		End If
    		If rsBCD.RecordCount <> 0 Then
    			Dim i As Integer = 0
    			Do While Not rsBCD.EOF
    				bcdParam.Item(i).Tokuisaki = rsBCD.Fields("wT_Tokuisaki").Value
    				bcdParam.Item(i).UkiDenNo = CInt(rsBCD.Fields("wT_UkiDenNo").Value)
    				bcdParam.Item(i).BCD = rsBCD.Fields("wT_Bcd").Value
    				bcdParam.Item(i).Recid = CInt(rsBCD.Fields("wT_Recid").Value)
    				bcdParam.Item(i).HTyp = CInt(rsBCD.Fields("wT_HTyp").Value)
    				i += 1
    				rsBCD.MoveNext()
    			Loop
    			ret = SUCCEED
    		End If
    
    	Catch ex As Exception
    		Throw
    	Finally
    		'----- テーブル解放 -----
    		rsBCD.Close()
    		rsBCD = Nothing
    	End Try
    
    	Return ret
    
    End Function
    

     

    元のコードは一読するに様々な問題を孕んでいるコードです。仮に眼前のバグを潰せても、さらに新たなバグを生む危険性があります。

    あと SQL インジェクション知ってますか?状況によっては会社を潰しかねないバグです。
    コードの中で動的にクエリを生成されてますが、へこやんさんの今までのスレを読むに、どこまで考慮されておられるのか甚だ疑問に感じます。

    SQLインジェクション

    VB6 時代のコーディングはこの際完全に放棄して、VB.NET の知識とそれに準拠したコーディングを学ばれることを強くお勧めいたします。以下少し古い記事ですが、ぜひ参考にどうぞ。

    http://www.atmarkit.co.jp/fdotnet/vb6tonet2/index/index.html


    ひらぽん http://d.hatena.ne.jp/hilapon/
    • 回答としてマーク 山本春海 2011年7月4日 8:38
    2011年5月31日 7:30
    モデレータ
  • ひらぽんさん いつも、いつもありがとうございます。

    このコードを( Do While Not rsBCD.EOF文)を手直しすることは、不可能でしょうか?

    できれば、この型を壊したくないのですが・・・

    構造体の書き方を変更するか、 Do While文を変更するかにしたいのですが・・・??

    手ほどきお願いします。

    無理言って申し訳ありません

     

    2011年5月31日 9:57
  • > できれば、この型を壊したくないのですが・・・

    状況によっては型の見直しも必要です。私の場合、必要とあらばクラスの改修も躊躇なく行ってます。
    またリファクタリングの結果不要になったクラスは、コードごとばっさり削除もしてます。
    本の紹介ばかりで恐縮ですが、こちらも参考になると思います。つか、エンジニアなら全ての人が読むべき本です。

    リファクタリング


    ひらぽん http://d.hatena.ne.jp/hilapon/
    2011年5月31日 10:36
    モデレータ
  • 基礎となる知識が全く足りていないように見受けられます。基礎をしっかり固めましょう。というか、何にも変わってないですよ。構造体の書き方を変更した、Try~Catch 文を追加した、それらに伴い、必要な修正を加えた、だけです。(でしょ?>ひらぽんさん)


    Jitta@わんくま同盟
    2011年5月31日 12:22
  • ですね(汗

    やってることは結局同じです。Jitta さんのおっしゃる通り、基礎からしっかり覚えることが肝心です。急がば回れですよ。
    また基礎をしっかり押さえれば、バグも少なく、またバグが発生しても原因を掴みやすいコードが書けるようになります。

    #こういう方にこそ、先日わんくまでやった TDD 道場見せてあげたいものです。(ぼそ

     


    ひらぽん http://d.hatena.ne.jp/hilapon/
    2011年5月31日 15:15
    モデレータ
  • 手ほどきお願いします。

    無理言って申し訳ありません 

    過去のスレッドもそうですが、初歩的な質問を、かなり具体的なコードで質問されていますよね。(漏洩とか大丈夫?)
    ろくに知識がない状態で現場に放り込まれたのであったとしても、フォーラムに聞く時間があるくらいなら、ちゃんと自分で学び、調べてください。

    フォーラムは速やかな解決を期待する場所でもないですし、まして、あなたの仕事・課題をそのまま解決するための場所でもありません。
    あくまでユーザー同士の情報交換が主体ですよ!

     

    念のため
    提示された部分に対して回答をもらえることがあるかもしれません。
    しかし、フォーラムに提示されたのはごく一部であり、全体を通してみたときに不都合が生じるコードになるかもしれません。
    回答を用いた、参考にしたことで不具合が発生した、損害が発生したといったことになったときの責任はコードを書いた人ではなく、コードを受け取ったあなたにあります。
    現実のあなたの職責をフォーラムを通した、インターネット上の誰かに任せて本当に問題ないのですか?(仕事であれば)


    質問スレッドで解決した場合は、解決の参考になった投稿に対して「回答としてマーク」のボタンを押すことで、同じ問題に遭遇した別のユーザが役立つ投稿を見つけやすくなります。
    2011年5月31日 16:00
    モデレータ
  • 構造体以前に、配列のサイズをどこでも指定していないんじゃないですか?

    Initializeメソッドが書かれていますけど、

    ぱっと見正しく呼ばれてるとも思えませんし・・・

    構造体内の各配列サイズが指定されていない状態で値をセットして、エラーになってるんじゃないですか?

    Redim Preserve とかで調べてみる事をお勧めします。

     

    なんにせよ今の InpUKig_BCD_PARAM の内容だと、可読性低すぎじゃないですかね。

    • 回答としてマーク 山本春海 2011年7月4日 8:39
    2011年6月1日 2:46
  • あくまでユーザー同士の情報交換が主体ですよ!

     いやぁ、私は6月4日のセッションの内容を補強する、良い情報をいただいていますよ。


     そのセッションでのネタなのですが、元々の定義では、InpUKig_BCD_PARAM というデータは、1個のレコード数、不定数の得意先、不定数の浮貸伝 NO、不定数のバーコード、不定数の RECID、不定数の製品区分から出来ている、ということになります。本当ですか?「得意先、浮貸伝 NO、バーコード、RECID、製品区分」のセットが不定数あるのではないですか?つまり、データベースからデータを持ってきていますが、データベースにこれらの項目が定義されていて、1行が1データにあたるのではないですか?それが不定数行ある、ということですよね。
     つまり、へこやんさんの定義では、データの意味が変わってしまっています。それに対してひらぽんさんの定義では、データの意味が変わっていません。データの意味を変えてしまうと、後々面倒ですよ。

     それと、元々の「Do While Not rsBCD.EOF文で、「オブジェクト参照がオブジェクトインスタンスに設定されていません」と表示されます。」ですが。。。本当に Do While 文ですか?rsBCD は、ここに提示されている中では定義されていません。よって、実行時に例外が発生するのではなく、コンパイル時にエラーが発生するはずですが?
    と、ふざけるのは止めてと。
    「rc = Open_RS_Ref(SQL, Cnn, rsBCD, Cnt)」で参照しているので、ここで何らかの例外が発生するはずですが?あるいは、初期化していない変数を使用しているという警告が出ていると思います。また、本当にヌルリが出ているなら、Open_RS_Ref(,, outByRef rsBCD,) じゃないですか?(VB って、こうだっけ?)で、「If rsBCD.RecordCount = 0 Then」をパスして、「Do While Not rsBCD.EOF」でヌルリってのは、納得いかない・・・


    Jitta@わんくま同盟
    • 編集済み Jitta 2011年6月12日 12:28
    • 回答としてマーク 山本春海 2011年7月4日 8:39
    2011年6月1日 11:29
  • 返答が遅くなって申し訳ありません。

    私が定義している構造体の意味が、途中で変わってしまってるということですか?内容を見直します。

     

    コンパイル時にエラーが発生するはずですが?  → コンパイル時にはエラーは出ていません。

    Open_RS_Refのルーチンで、初期化していない変数がしようされていないかチェックしてみます。

    助言ありがとうございます。

    どうしてもわからないときは、助けて下さい。ありがとうございます。

     

     

    2011年6月3日 3:15
  • > 私が定義している構造体の意味が、途中で変わってしまってるということですか?内容を見直します。

    そもそも構造体の定義を根本的に見直す必要があるということです。Jitta さんが指摘されている

    > 「得意先、浮貸伝 NO、バーコード、RECID、製品区分」のセットが不定数あるのではないですか?

    これ、よ~く考えてみてください。これが判れば構造体に配列を持たせるのではなく、構造体の配列(リストが望ましい)を用意すべきなのが理解できるはずです。もっとも ADO.NET ならわざわざ構造体なんか用意する必要は全くなく DataTable ひとつ用意しとけば十分事足りそうですが・・・

    データをどう保持すべきか、責任をどこに持たせるのか、設計をよく考慮する必要があると思います。


    ひらぽん http://d.hatena.ne.jp/hilapon/
    2011年6月3日 3:57
    モデレータ
  • 私が定義している構造体の意味が、途中で変わってしまってるということですか?

     いいえ、「途中で」変わっているのではありません。「根本で」変わってしまっています。

     もう一度書きます。
    InpUKig_BCD_PARAM というデータは、
    1個のレコード数、
    不定数の得意先、
    不定数の浮貸伝 NO、
    不定数のバーコード、
    不定数の RECID、
    不定数の製品区分
    から出来ている、ということになります。本当ですか?そうではなく、
    不定数の「得意先、浮貸伝 NO、バーコード、RECID、製品区分」
    ではないですか?

     なぜこういうことを書くかというと、得意先の1番目と、バーコードの1番目に、何の関係があるのですか?ということです。へこやんさんの定義では、「10個の得意先と、6個のバーコードを持つ」という定義でも成り立つし、「得意先1番目を表すバーコードは、2番目と6番目です」ということも出来てしまいます。今、仕様を知っていて、コードを書いているへこやんさんは、そんなこと思われないでしょう。しかし、数年後、このコードを改修することになった人がどう思うかはわかりません。しかし、「「得意先・・・製品区分」×不定数」と定義した場合、その様なことは起こりませんし、起こせません。どちらかというと、「起こせない」という方が重要です。つまり、それだけバグの混入を防げるし、バグが発生したときの原因を排除できる、ということです。あなたが今苦労していることを、数年後の、もしかしたら自分にさせますか?

     せっかく .NET Framework を使っているのですから(でしたよね?)、新しい機能を使いましょうよ。新しい機能は、昔苦労したことを楽にするために追加されています。List<T> クラスを使えば、Redim する必要はありません。いつでも好きなだけ数を追加できます。他の変数で数を覚えておく必要もありません。List<T>.Count で最新の数を取り出せます。


    Open_RS_Refのルーチンで、初期化していない変数がしようされていないかチェックしてみます。

     いえ、とりあえず「rc = Open_RS_Ref(SQL, Cnn, rsBCD, Cnt)」の行にブレークポイントを張り、デバッグ実行してください。rsBCD を「ウォッチ」して、この行以降 Nothnig “ではない”ことを、「ステップ実行」しながら確認してください。Nothnig になったら、何時、なぜなるのか、誰がそうしているのか、調べてください。コードを見て調べるより、この方が早いです。


    Jitta@わんくま同盟
    2011年6月3日 13:46