質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Visual Studio

Microsoft Visual StudioはMicrosoftによる統合開発環境(IDE)です。多種多様なプログラミング言語に対応しています。

Access

Accessはマイクロソフトによるリレーショナルデータベース管理システムです。オブジェクト指向のアプリケーション作成に対応しており、テーブルや編集をはじめ、クエリ生成、入力フォーム作成、レポート作成など一通りの機能を備えています。

Q&A

解決済

1回答

4764閲覧

データベースにレコードを追加する方法

sinzanmon15

総合スコア14

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Visual Studio

Microsoft Visual StudioはMicrosoftによる統合開発環境(IDE)です。多種多様なプログラミング言語に対応しています。

Access

Accessはマイクロソフトによるリレーショナルデータベース管理システムです。オブジェクト指向のアプリケーション作成に対応しており、テーブルや編集をはじめ、クエリ生成、入力フォーム作成、レポート作成など一通りの機能を備えています。

0グッド

0クリップ

投稿2018/07/27 06:06

編集2018/07/27 07:11

前提・実現したいこと

初歩的な事を聞いて申し訳ないですがご教示いただけるとありがたいです。

pc:Windows 7
DB:Accessはmdb
開発環境:Visual Studio2008

MainForm:親画面
●親画面には表示用のDataGridViewを設置してます。

InputForm:子画面
●入力項目を設置してます。

●課題で住所録を作成しています。
先輩の指示のもと現状行動に手を加えて作成していくことを前提に作成してますので、
作り方が変なところや無駄な部分も多いと思います。

●親画面に設置した「登録ボタン」⇒子画面の入力画面を開き⇒子画面の「新規登録ボタン」で
DataGridViewにはレコードは追加されるのですが、DBにレコードが追加されません。

以下のエラーメッセージが発生しました。

発生している問題・エラーメッセージ

デバックすると ⇒ CommSQL.DB_Insert(adl_data);位置で ●オブジェクトインスタンスの作成にはnewキーワードを使用します。 ●メソッドを呼び出す前にオブジェクトがNULLでいいかどうか確認して下さい。 と表示されます。

該当のソースコード

C# Visual Studio2008

1--子画面-- 2 //新規登録ボタン 3 private void btnNewInput_Click(object sender, EventArgs e) 4 { 5 6 //データグリッドビューに反映する際の形式指定 7 adl_data.Number = tbNumber.Text; 8 adl_data.FamilyName = tbFamilyName.Text; 9 adl_data.Name = tbName.Text; 10 adl_data.FamilyNameKana = tbFamilyNameKana.Text; 11 adl_data.NameKana = tbNameKana.Text; 12 adl_data.Keisyo = tbKeisyo.Text; 13 14※一部所略 15 //ここでDBに追加する 16 CommSQL.DB_Insert(adl_data); 17 18 this.DialogResult = DialogResult.OK; 19 20 this.Close(); 21 } 22
---作成したクラス--- //登録関数(書き込み) public string DB_Insert(AddressDataList al) { string sql = "INSERT INTO 登録者情報(" + /*テーブル名*/ "登録番号," + "姓," + "名," + "姓カナ," + "名カナ," + "敬称," + "郵便番号," + "住所1," + "住所2," + "生年月日," + "性別," + "電話," + "携帯電話," + "メールアドレス," + "URL," + "画像ファイル名," + "備考," + "メール送信," + "印刷," + ")" + "VALUS(" + "{0}," + "{1}," + "{2}," + "{3}," + "{4}," + "{5}," + "{6}," + "{7}," + "{8}," + "{9}," + "{10}," + "{11}," + "{12}," + "{13}," + "{14}," + "{15}," + "{16}," + "{17}," + "{18}," + "{19}," + ")"; string insertSQL = string.Format(al.Number,al.FamilyName,al.Name ,al.FamilyNameKana,al.NameKana,al.Keisyo ,al.PostalCode1,al.Address1,al.Address2 ,al.dtpBirthday,al.sex,al.Phone,al.MobilePhone ,al.EMail1,al.URL, sql, al.ImgName, al.Remarks ,al.MailSending,al.Print); return insertSQL; }

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

y_waiwai

2018/07/27 06:24

どの行でそのエラーが出るんでしょうか
sinzanmon15

2018/07/27 06:28

CommSQL.DB_Insert(adl_data);のコードで上記のエラー文が出ます
退会済みユーザー

退会済みユーザー

2018/07/27 08:01 編集

前のスレッドでも言いましたけど、こういう質問は「先輩」に聞くべきだと思います。「先輩の指示」とか「現状」とか言われても、そういう質問者さん独自の事情・状況は第三者は知る由もないことです。どうしてもここで聞きたいなら https://teratail.com/help/question-tips に目を通してもらって、それに書いてあるような「何がわからないかわからない人から質問を受けても、答える側も困ってしまいます」という状態にならないようにお願いします。
guest

回答1

0

ベストアンサー

一部割愛されているせいかもしれませんが、メッセージとこのコードだけからすると、CommSQLがインスタンス化されていないのではないでしょうか。
var comm = new CommSQL();みたいなことをしていますか?

投稿2018/07/27 06:34

papinianus

総合スコア12705

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

sinzanmon15

2018/07/27 06:37 編集

ご回答ありがとうございます。 「CommSQL」のインスタンスはしていませんでした。
papinianus

2018/07/27 06:39

"public string DB_Insert"はstaticではないようなので、newしないと使えませんよね。もちろんstaticにする選択肢もあると思います。
sinzanmon15

2018/07/27 06:45

ありがとうございます。 エラーがなくなりました!!!! newしないと使えない事やsutaticを忘れたました、、、すいませんでした。 エラーがなくなったのですがDBに追加できないのはなぜでしょうか?
papinianus

2018/07/27 06:59 編集

え?このコードまだ書きかけでしょ? ```csharp //登録関数(書き込み) public string DB_Insert(AddressDataList al) ``` コメントが嘘をついているのですが、この関数内に登録や書き込みの処理は一切ありません。SQLを作っているだけです。accessに対して、SQLを実行する部分が皆無です。 あと、`insertSQL`の中身も見たほうがいいです、実行できるSQLができているように思えません。
sinzanmon15

2018/07/27 07:15

これで送れるものだと思っていましたお恥ずかしい。 Accessのmdbにたいして実行する部分はこれで指定いけばいいですか? string connectString = @"Provider=Microsoft.Jet.OLEDB.4.0; Data Source=....\DataList.mdb"; ●「insertSQL」の中身の確認ですね。してみます。
papinianus

2018/07/27 07:55

どうやってAccessに接続するのかにもよりますが、それは接続文字列しか作ってないので、周辺含め適宜検索して(例えばhttp://okwakatta.net/code/ado15.htmlなど)みてください
sinzanmon15

2018/07/27 08:05

ご丁寧にありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問