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

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

ただいまの
回答率

90.32%

  • C#

    7726questions

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

  • Visual Studio

    2007questions

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

  • Access

    472questions

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

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

解決済

回答 1

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 442

sinzanmon15

score 6

 前提・実現したいこと

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

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

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

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

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

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

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

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

デバックすると 
⇒ CommSQL.DB_Insert(adl_data);位置で

●オブジェクトインスタンスの作成にはnewキーワードを使用します。
●メソッドを呼び出す前にオブジェクトがNULLでいいかどうか確認して下さい。
と表示されます。

 該当のソースコード

--子画面--
 //新規登録ボタン
        private void btnNewInput_Click(object sender, EventArgs e)
        {

            //データグリッドビューに反映する際の形式指定
            adl_data.Number = tbNumber.Text;
            adl_data.FamilyName = tbFamilyName.Text;
            adl_data.Name = tbName.Text;
            adl_data.FamilyNameKana = tbFamilyNameKana.Text;
            adl_data.NameKana = tbNameKana.Text;
            adl_data.Keisyo = tbKeisyo.Text;

※一部所略
            //ここでDBに追加する
            CommSQL.DB_Insert(adl_data);

            this.DialogResult = DialogResult.OK;

            this.Close(); 
         }
---作成したクラス---


        //登録関数(書き込み)
        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;
        }
  • 気になる質問をクリップする

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

質問への追記・修正、ベストアンサー選択の依頼

  • y_waiwai

    2018/07/27 15:24

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

    キャンセル

  • sinzanmon15

    2018/07/27 15:28

    CommSQL.DB_Insert(adl_data);のコードで上記のエラー文が出ます

    キャンセル

  • SurferOnWww

    2018/07/27 17:01 編集

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

    キャンセル

回答 1

checkベストアンサー

0

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

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2018/07/27 15:37 編集

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

    キャンセル

  • 2018/07/27 15:39

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

    キャンセル

  • 2018/07/27 15:45

    ありがとうございます。
    エラーがなくなりました!!!!
    newしないと使えない事やsutaticを忘れたました、、、すいませんでした。

    エラーがなくなったのですがDBに追加できないのはなぜでしょうか?

    キャンセル

  • 2018/07/27 15:48 編集

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

    キャンセル

  • 2018/07/27 16:15

    これで送れるものだと思っていましたお恥ずかしい。
    Accessのmdbにたいして実行する部分はこれで指定いけばいいですか?

    string connectString = @"Provider=Microsoft.Jet.OLEDB.4.0;
    Data Source=..\..\DataList.mdb";

    ●「insertSQL」の中身の確認ですね。してみます。

    キャンセル

  • 2018/07/27 16:55

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

    キャンセル

  • 2018/07/27 17:05

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

    キャンセル

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

  • ただいまの回答率 90.32%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

同じタグがついた質問を見る

  • C#

    7726questions

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

  • Visual Studio

    2007questions

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

  • Access

    472questions

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