• 締切済み

「タイプ初期化子が例外をスローしました」エラー何?

ネット検索で調べましたが、どうしてもわからないので、質問いたします。 VB2010ですが、デバッグで起動すると「タイプ初期化子が例外をスローしました」というエラーが出てしまい、プログラムが起動しません。 ご教授のほどよろしくお願いいたします。 1.スタートアップフォーム    ○frmMENU    ○LOADするときに標準モジュールを呼び出します。     その呼び出し文でエラーになります。 Private Sub frmMENU_Load(ByVal eventSender As System.Object, ByVal eventArgs As  System.EventArgs) Handles MyBase.Load gINIT()  ← ここでエラーになります Me.Text = gSysName Show() End Sub 2.標準モジュール Public Sub gINIT() gSysName = "システム" DS = "Provider=""Microsoft.Jet.OLEDB.4.0"";" DS &= "Data Source=""" gMDB = "C:\MDB\ABC.MDB""" End Sub

noname#134268
noname#134268

みんなの回答

回答No.1

クラスのSharedなフィールドの初期化に例外が発生した場合や, クラスのSharedなコンストラクタの実行時に例外が発生した場合に, System.TypeInitalizationExceptionはCLIによって投げられます。 ちなみに,.NET Framework的にはVBのModuleは単に全メンバがSharedなクラスなので, Moduleにフィールドを持たせて初期化に失敗すると,TypeInitializationExceptionが発生します。 この時,InnerExceptionプロパティに発生した例外が含まれます。 ref) http://msdn.microsoft.com/ja-jp/library/system.typeinitializationexception.aspx このため,TypeInitializationExceptionではなく,InnerExceptionプロパティの情報から, 例外が発生した原因を突き止める必要があります。 # 例外オブジェクトの型とかスタックトレースとかは重要な情報。

noname#134268
質問者

お礼

大変ありがとうございました。 お蔭様で解決に至りました。

関連するQ&A

  • focusメソッドを使ってもカーソルが点滅しない

    フォームをロードし、下記のようにしてもカーソルが点滅しません。その解決方法を教えてください。 Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load TextBox1.Focus() End Sub

  • 「Me」を「Form1」にするとエラーになる理由

    VB2008です。 Public Class Form1 Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load Me.Text = "a" Form1.Text = "a" ’←「Form1.Text」に波線ができる。 End Sub End Class というように、 「Me」を「Form1」にすると 「既定のインスタンスからそれ自体を参照できません。'Me' を使用してください。」 となります。 VBAなら「Me」を「Form1」にしてもエラーにならないのに、 どうしてVBだとエラーになるのでしょうか?

  • エラーでつまってます・・・お助け下さい

    VS2003.NETで開発中の初心者です。 以下のコード(Form1.vb)を実行すると次のエラーがポップアップされ“oADP.Fill(oDS, "ROOT")”のラインで止まります。 <エラー> 'System.Data.OleDb.OleDbException' のハンドルされていない例外が system.data.dll で発生しました。 どこがおかしいのかわかりません。 詳しい方がいましたら、ご教授下さいませ。 ---------------------------- Imports System.Data.OleDb Public Class Form1  Inherits System.Windows.Forms.Form  Private oConn As OleDb.OleDbConnection = New OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0" & ";Data Source=..\USER.mdb") 「Windows フォーム デザイナで生成されたコード」   Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load    '--DataAdapterの設定    Dim oADP As OleDb.OleDbDataAdapter    oADP = New OleDb.OleDbDataAdapter("SELECT *FORM TALK WHERE Node=0 ORDER BY No", oConn)    '--DataSetの設定    Dim oDS As New DataSet    oADP.Fill(oDS, "ROOT")        ・        ・        ・ ----------------------------

  • MDBのフィールド数が多いとエラーになります。

    下記のコードは、 (1)フォームロード時にアクセスのデータベースにアクセスし、データグリッドビューに表示 (2)フォーム上のデータグリッドビューを編集 (3)データベースに登録ボタン押下すると、フォーム上にあるデータグリッドビューをアクセスのデータベースに反映(update) という作業を行うプログラムです。 このコードを実行した場合、アクセスのデータベース(登録.mdb)のフィールド数の100以上になると、「クエリーが複雑すぎます」とのエラーが出て、データベース(登録.mdb)の更新が行えません。 何とかエラーを出なくする方法は無いでしょうか? PC環境はWINXP+VS2008です。 Imports System.IO Imports System.Data Imports System.Windows.Forms Public Class Form1 Public dAdp As OleDb.OleDbDataAdapter Public dSet As DataSet = New DataSet("T_資料") Public Sub Form1_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load ''▼フォームロード時の処理 Dim cn1 As New OleDb.OleDbConnection("Provider=""Microsoft.Jet.OLEDB.4.0"";Data Source=" & Application.StartupPath & "\登録.mdb;") Dim cmd1 As New OleDb.OleDbCommand("SELECT * FROM T_資料", cn1) cn1.Open() dAdp = New OleDb.OleDbDataAdapter("SELECT * FROM T_資料", cn1) dAdp.Fill(dSet, "T_資料") Me.DataGridView1.DataSource = dSet.Tables("T_資料") cn1.Close() End Sub Public Sub cmd_Db_reg_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmd_Db_reg.Click '▼「データベースに登録」ボタンを押下したときの処理 Try Dim Builder As New OleDb.OleDbCommandBuilder(dAdp) Builder.GetUpdateCommand() dAdp.Update(dSet.Tables("T_資料")) MessageBox.Show("更新に成功しました。") Catch ex As Exception MessageBox.Show("更新に失敗しました。" + vbCr + ex.Message) End Try End Sub End Class

  • datagridviewでたまに例外・・

    モジュールからフォームの関数を呼び出し時にたまに以下の例外が発生しており、 なぜ例外が発生するのか原因がわからず困っています。 オブジェクト参照がオブジェクト インスタンスに設定されていません。 場所 System.Windows.Forms.DataGridViewIntLinkedList.Remove(Int32 integer) 場所 System.Windows.Forms.DataGridView.SetSelectedRowCore(Int32 rowIndex, Boolean selected) 場所 System.Windows.Forms.DataGridView.ClearSelection() 場所 System.Windows.Forms.DataGridView.set_SelectionMode(DataGridViewSelectionMode value) 以下のようなフォームがありgridset()はタイマーで動いているモジュールの関数より呼び出されます。 Public Class frmTest Private Sub frmTest_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load gFrmTest = Me End Sub Public Function gridset() dataGridView1.SelectionMode = DataGridViewSelectionMode.RowHeaderSelect ☆例外発生箇所    ・    ・ End Function End Class Module Modtest //以下はタイマーで何回も呼ばれる関数 Public Function aaa() As Integer gfrmTest.gridset() End Function End Module 環境はvb.net 2008です。 ご教示いただけますと助かります。 よろしくお願いします。

  • Elseifのコードが分かりません。(至急)

    急ぎのため再度の質問失礼します。 3つの数字すべてが7のとき、メッセージ1を出し、 どれか2つだけが7のときは、メッセージ2を出し、 どれか1つだけが7のときは、メッセージ3を出し、 どこにも7が含まれていないときは、メッセージ4を出すようにEndifを使って書きたいのですが、正しいコードを教えて下さい。 Public Class Form1 Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load Randomize() End Sub Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click Me.Close() End Sub Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click PictureBox1.Visible = False Label4.Visible = False Label1.Text = CStr(Int(Rnd() * 10)) Label2.Text = CStr(Int(Rnd() * 10)) Label3.Text = CStr(Int(Rnd() * 10)) If End If End Sub Private Sub Label1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Label1.Click End Sub Private Sub Label3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Label3.Click End Sub Private Sub Label5_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Label5.Click End Sub End Class よろしくお願いします。

  • データグッドビュー編集後のエラーについて

    VB初心者です。 (1)フォームロード時にアクセスのデータベースにアクセスし、データグリッドビューに表示 (2)フォーム上のデータグリッドビューを編集 (3)データベースに登録ボタン押下すると、フォーム上にあるデータグリッドビューをアクセスのデータベースに反映(update) というプログラムを作成中ですが、データベースに登録ボタンを押下すると「オブジェクト参照がオブジェクト インスタンスに設定されていません。」とのエラーが出ます。 ネットで色々調べたのですが、よくわかりませんでした。 このエラー内容が分かる方、ご教示の程よろしくお願いします。 PC環境はWINXP+VS2008です。 Imports System.IO Imports System.Data.OleDb Public Class Form1 Dim dAdp As OleDb.OleDbDataAdapter Dim dSet As DataSet = New DataSet("T_資料") Public Sub Form1_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load '▼フォームロード時の処理 Dim cn1 As New OleDb.OleDbConnection("Provider=""Microsoft.Jet.OLEDB.4.0"";Data Source=" & Application.StartupPath & "\登録.mdb;") Dim cmd1 As New OleDb.OleDbCommand("SELECT * FROM T_資料", cn1) cn1.Open() Dim dAdp As OleDb.OleDbDataAdapter dAdp = New OleDb.OleDbDataAdapter("SELECT * FROM T_資料", cn1) dAdp.Fill(dSet, "T_資料") DataGridView1.DataSource = dSet.Tables("T_資料") End Sub Public Sub cmd_Db_reg_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmd_Db_reg.Click '▼「データベースに登録」ボタンを押下したときの処理 Try Dim adapter As New tourokuDataSetTableAdapters.T_資料TableAdapter() dAdp.Update(dSet, "T_資料") MessageBox.Show("更新に成功しました。") Catch ex As Exception MessageBox.Show("更新に失敗しました。" + vbCr + ex.Message) End Try End Sub End Class

  • このコードはどこが間違っていますか?(至急)

    急ぎのため再度の質問失礼します。 (zのn乗)-(xのn乗+yのn乗)の計算をさせて、答えが0のときにメッセージを表示したいのですが、どのようなコードを書けばいいのでしょうか? Option Explicit On Public Class Form1 Dim x As Long Dim y As Long Dim z As Long Dim n As Long Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click Me.Close() End Sub Private Sub TextBox1_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TextBox1.TextChanged End Sub Private Sub TextBox2_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TextBox2.TextChanged End Sub Private Sub TextBox3_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TextBox3.TextChanged End Sub Private Sub TextBox4_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TextBox4.TextChanged End Sub Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click x = TextBox1.Text y = TextBox2.Text z = TextBox3.Text n = TextBox4.Text TextBox5.Text = (z ^ n) - (x ^ n + y ^ n) If (TextBox5 .Text= 0) Then Label6.Visible = True End If End Sub Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load End Sub Private Sub Label6_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Label6.Click End Sub End Class このコードだと答えが必ず-1になってしまうのですが、どこを直せばいいのでしょうか? 正しいコードを教えて下さい。 よろしくお願いします。

  • データベースの更新を行うには?

    はじめまして。下記の問題についてご教授願いします。 ■環境 OS:XP SP2 開発環境:VSDE2008(SP1)のVB2008 .NET Framework:3.0 データベース:Access2002でmdb作成 ■概要 プロジェクト作成後、フォームにデータテーブルの列の要素をドロップし、 バインディングによりフォームを作成しています。 起動時に入力フォームにデータを入力しBindingNavigatorコントロールにより新規追加/削除/保存を行うプログラムです。 ■問題点 新規追加→データを入力→保存 の場合はデータベースは更新されるのですが、 データベースに保存されているデータを編集→保存 の場合は"InvalidOperationExceptionはハンドルされませんでした。 更新には、変更された行を含む DataRow コレクションが渡されたとき、有効な UpdateCommand が必要です。"とエラーになり更新できません。 データベースに保存されているデータを削除→保存 の場合は"InvalidOperationExceptionはハンドルされませんでした。 更新には、変更された行を含む DataRow コレクションが渡されたとき、有効な DeleteCommand が必要です。"とエラーになり更新できません。 TableAdapterを使用しているのですが、UpdateCommand,DeleteCommandは作成作成されないのでしょうか? ■コード Imports System.Data.OleDb Public Class CustomerForm Private Sub CustomerForm_Load(ByVal sender As_ System.Object,ByVal e As System.EventArgs) Handles MyBase.Load Dim strSQL As String = "SELECT * From customer" Dim Cn As New OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0/以下省略) Me.CustomerTableAdapter.Fill(Me.OrderDataSet.customer) End Sub Private Sub BindingNavigatorMoveFirstItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles       BindingNavigatorMoveFirstItem.Click CustomerBindingSource.MoveFirst() End Sub Private Sub BindingNavigatorMovePreviousItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles BindingNavigatorMovePreviousItem.Click CustomerBindingSource.MovePrevious() End Sub Private Sub BindingNavigatorMoveNextItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles BindingNavigatorMoveNextItem.Click CustomerBindingSource.MoveNext() End Sub Private Sub BindingNavigatorMoveLastItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles BindingNavigatorMoveLastItem.Click CustomerBindingSource.MoveLast() End Sub Private Sub BindingNavigatorAddNewItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles BindingNavigatorAddNewItem.Click CustomerBindingSource.AddNew() End Sub Private Sub BindingNavigatorDeleteItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles BindingNavigatorDeleteItem.Click If MsgBox("削除してもよろしいですか", MsgBoxStyle.YesNo + MsgBoxStyle.DefaultButton2) = MsgBoxResult.Yes Then CustomerBindingSource.RemoveCurrent() End If End Sub Private Sub CustomerBindingNavigatorSaveItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles CustomerBindingNavigatorSaveItem.Click, Me.FormClosing Me.Validate() If HandleInputError() = False Then If TypeName(e) = "FormClosingEventArgs" Then DirectCast(e, FormClosingEventArgs).Cancel = True End If Return End If Me.CustomerBindingSource.EndEdit() Me.TableAdapterManager.UpdateAll(Me.OrderDataSet) End Sub ■データベースファイル order.mdb 商品テーブル id name address phoneの4列 idが主キーでオートナンバーに設定してます。

  • System.Timers.Timer について

    下記のようなコードで動いていますが、 TestFunc に独自の引数を渡したいと考えています。 どうすれば実現できるでしょうか? 引数以外(メンバ変数等)では対応できていますので、 引数の方法だけ教えてほしいです。 Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load timer = New System.Timers.Timer() AddHandler timer.Elapsed, New ElapsedEventHandler(AddressOf TestFunc) timer.Interval = 1000 timer.Start() End Sub Public Sub TestFunc(ByVal sender As Object, ByVal e As ElapsedEventArgs) Console.WriteLine(DateTime.Now) End Sub