実行時エラー 3021、データがない場合の対処について

このQ&Aのポイント
  • 社員管理システムを作成中。フォーム上のテキストボックスに情報を入力し、登録ボタンを押すと、MYSQLサーバにデータが書き込まれるWrite処理。コンボボックスで日付を選択すると、MYSQLサーバからデータを読み込んでラベルに表示するRead処理。しかし、該当しない日付を選択すると実行時エラー 3021が発生し、処理が停止する。該当しない日付を選択してもエラーが発生せず、情報を登録する方法はあるか。
  • コンボボックスで日付を選択すると、MYSQLサーバからデータを読み込んでラベルに表示するRead処理で実行時エラー 3021が発生する。該当しない日付を選択した場合にエラーが発生しないようにする方法を知りたい。
  • Read処理で実行時エラー 3021が発生する問題がある。該当しない日付を選択してもエラーが発生せず、情報を登録する方法を知りたい。
回答を見る
  • ベストアンサー

実行時エラー 3021、データがない場合の対処について

ただいま、社員管理システムを作成しております。 【システム概要】 フォーム上のテキストボックス(Text_address、Text_name)に 住所(Text_address)、名前(Text_name)に情報を入力後、 フォーム上の登録ボタン(Cmd_save)を押すことにより、 入力した情報がMYSQLサーバに書き込まれるWrite処理。 フォームのコンボボックス(Combo1)から日付を選択し、フォーカスを失うと、 選択した日付を元に、MYSQLサーバからデータを引っ張ってきて、 フォーム上のラベル(Label_address、Label_name)へ表示させるRead処理。 今はRead処理について行き詰っております。 下記のプログラムは、見よう見まねでコーディングし、 一応、日付を見てMYSQLサーバに探しに行き、該当データ(住所、氏名)を ラベルに表示することはできます。 ただ、サーバ側に登録されていない日付を選択した場合、 実行時エラー 3021 「BOF と EOF のいずれかが True になっているか、または現在のレコードが削除されています。 要求された操作には、現在のレコードが必要です。」 とエラーが返ってきます。 選択した日付の該当データが0件のためエラーが返ってくるということはわかったのですが。。。 後々、その該当しない日付を選択し、フォーム上のテキストボックスに情報を入力後、登録ボタンを押した際、 その日付に対する情報を登録したいので、該当しない日付を選択しても、 エラーが返ってこないだけの処理をでよいのですが、 どのように処理すればよいのでしょうか? Private Sub Combo1_LostFocus()   Dim myADOcon As ADODB.Connection   Dim myrec As ADODB.Recordset   Set myADOcon = New ADODB.Connection   Set myrec = New ADODB.Recordset myADOcon.Open "Driver={MySQL ODBC 3.51 Driver};SERVER =………;" myrec.Open "select * from TestTable where Day='" + Combo1.Text + "';", myADOcon   Label1.Caption = myrec.Fields("address").Value   Label2.Caption = myrec.Fields("name").Value End Sub わかりにくい質問ですみませんが、 ご教示よろしくお願いいたします。

noname#163990
noname#163990

質問者が選んだベストアンサー

  • ベストアンサー
  • nda23
  • ベストアンサー率54% (777/1415)
回答No.1

myrec.Field をイジル前に myrec.EOF が「偽」であることを確認 しておく必要があります。   If myrec.EOF Then     Label1.Caption = ""     Label2.Caption = ""   Else     Label1.Caption = myrec.Fields("address").Value     Label2.Caption = myrec.Fields("name").Value   End If

関連するQ&A

  • mysql データ登録

    phpにてmysqlにデータ登録の流れを作っているのですが、わからないことがあり投稿しました。 簡単に流れを説明しますと mysqlのテーブル(テーブル名member)の構成は id | name だとして phpのフォームで <input type="text" name="name1" value=""> <input type="text" name="name2" value=""> <input type="text" name="name3" value=""> というものを作っています。 ここでフォームのname1、name2、name3をそれぞれ入力したときにmysqlに登録されるのですが、 mysqlのなかに id | name 1 | A 2 | B 3 | C としたいのですが、下記の記述ではできません。 (INSERT INTO `member` SET `name`='$name1',`name`='$name2',`name`='$name3') エラー文はColumn 'name' specified twiceと表示されます。 レコード数は増やしたくないので、何か方法が御座いましたら教えていただけないでしょうか? まだ、PHPを勉強し始めたばかりで困っています。 宜しくお願いいたします。

    • ベストアンサー
    • PHP
  • MYSQLのDATE型をVB側で変換したい。

    いつもお世話になっております。 以前、こちらでMYSQLサーバでの日付を格納するDatetypeについてご質問させていただきました。 MYSQLとVB6.0についての質問です。 フォームを開いた際、コンボボックス「cmb_date1」には 本日から数えて4日前の日付を「yyyy年mm月dd日(aaa)」形式で表示させ、 Private Sub Form_Load() 'コンボボックスに今日~4日前の日付を表示    Dim day As Integer    For day = 0 To 3     cmb_date1.AddItem Format(Date - day, "yyyy年mm月dd日(aaa)")   Next    cmb_date1.Text = cmb_date1.List(0) End Sub それで、コンボボックス「cmb_date1」内の日付を選択し、 フォーカスを喪失した際、MYSQLサーバへ接続し、 テーブル「test」のフィールド「date」を検索し、その日付に該当するデータを フォームのラベル「Label1、Label2」へ表示する処理をしています。 Private Sub cmb_date1_LostFocus()    Dim myADOcon As ADODB.Connection    Dim myrec As ADODB.Recordset    Set myADOcon = New ADODB.Connection    Set myrec = New ADODB.Recordset    myADOcon.Open "Driver={MySQL ODBC 3.51 Driver};SERVER = サーバ名;DATABASE=DB名;  UID=ユーザー名;PWD=PASS;STMT=SET CHARACTER SET cp932; "    myrec.Open "select * from test where date='" + cmb_date1.Text + "';", myADOcon     Label1.Caption = myrec.Fields("test1").Value     Label2.Caption = myrec.Fields("test2").Value End Sub そこで質問なのですが、 上記のコーディングですと、当然ながら2009年10月14日(水)のレコードが存在しないため 『実行時エラー'3021' BOFとEOFのいずれかがTrueになっているか、または現在のレコードが 削除されています。要求された操作には、現在のレコードが必要です。』 が表示されます。 MYSQLサーバには「DATE型」で格納している日付「2009-10-14」を、 フォーム上で呼び出す際、コンボボックス「2009年10月14日(水)」を選択しても、 日付「2009-10-14」のデータを呼び出せる方法はございませんでしょうか? 今後、日付の抽出処理などを行いたいため、DatetypeはDATE型のままにしておきたいのですが・・・。 よろしくお願いいたします。

  • VB6.0 の主キーの上書き処理について

    いつもお世話になっております。 VisualBasic6.0の勉強をしています。 Text1、Text2、Commmand1 を配置したフォームを作成し、 Text1に番号、Text2に名前、を入力後、 Command1ボタンを押すと、 MySQLサーバにデータが登録される処理を作成しているのですが、 下記のプログラムでは登録は出来るのですが、 サーバ側で、主キーはText1で入力した番号にしているため、 サーバ側で登録済みの番号を入力し登録処理を行った際、 『実行時エラー'2147467259 プライマリー重複のエラーメッセージ』 が表示されます。 主キーを上書きする際は、どのような処理を加えればよいのでしょうか? Private Sub Command1_Click()  Dim cn As ADODB.Connection  Dim rs As ADODB.Recordset   Set cn = New ADODB.Connection   Set rs = New ADODB.Recordset  Dim strTBL As Variant   strTBL = "test" 'テーブル名   'Mysqlへ接続   cn.Open "Driver={MySQL ODBC 3.51 Driver};~略~   'テーブルを開く   rs.Open strTBL, cn, adOpenForwardOnly, adLockOptimistic, adCmdTable rs.AddNew       '新規レコードを追加   rs!no = Text1.Text           'ナンバーをセット   rs!Name = Text2.Text          '名前をセット  rs.Update       '更新(保存)  rs!no = Text1.Text           'ナンバーをセット  rs!Name = Text2.Text          '名前をセット  cn.Close  Set cn = Nothing  Set rs = Nothing  MsgBox "登録完了", vbOKOnly, "登録"     Text1.Text = ""            '登録後、テキストの内容を消去  Text2.Text = "" End Sub ご教示、よろしくお願いいたします

  • 日付データのエラーチェックに関して

    最近Javaを習い始め、Eclipseを使ってサーブレット/JSPを学習している者です。使っているデータベースはOracle9iです。OSはWindowsXPです。 現在、学習しているのはJSPで表示したブラウザのフォームからデータを入力して、データベースにそのデータを登録、更新などを行う作業です。 質問は入力されたデータのエラーチェックについてなのですが、データベースに日付を西暦で2009/03/05とDATE型で登録していて、その日付をブラウザから登録、更新する際に「日付は半角で西暦/月/日と入力してください」と指定して、それ以外の入力がされた場合はエラー画面を表示したいのですが、フォームから送られてくるデータはString型でそれをSimpleDateFormatメソッドを使ってDate型に変換してtryで例外処理をしてエラー画面に画面遷移すればいいと思うのですが、サーブレット内でその処理を実行しようとするとエラーになってしまいます。 どのようにソースを書けばいいのでしょうか? JSPのフォームのソース(一部) <input type="text" name="day"> サーブレットのソース(一部) public void doGet(HttpServletRequest request,HttpServletResponse response) throws ServletException, IOException { request.setCharacterEncoding("Windows-31J"); String day = request.getParameter("day"); try { ここから先が分かりません。

    • ベストアンサー
    • Java
  • エラーの意味がどうしてもわからない(PHP)

    ●質問の主旨 Parse error: syntax error, unexpected 'maker_id' (T_STRING) in C:\xampp\htdocs\shop\input_do.php on line 23 というエラーが出ます。なぜエラーが出るのか分かりません。 エラーを表示させないためには、下記のコードをどのように 書き換えればよいでしょうか?ご存知の方、ご教示願います。 ●質問の補足 1.HTMLフォームinput.php(添付画像)に情報を入力。登録ボタンを押す ↓ 2.受付画面(input_do.php)に遷移 という流れを作りたいのですが、上記のエラーが出ます。 もちろんデータベース(mydb3)やテーブル(my_items)は、 すでにphpmyadminに用意しています。 ●開発環境 windows8 xammp1.8.1 ●参考文献 たにぐちまこと 「よくわかるPHPの教科書」P200 ●コード (input.php) <!DOCTYPE html> <html lang="ja"> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> <link rel="stylesheet" type="text/css" href="style.css" /> <title>商品登録</title> </head> <body> <div id="wrap"> <div id="head"> <h1>トップページ</h1> </div> <div id="content"> <p style="margin-top: 20px"> <?php mysql_connect('localhost', 'root','') or die(mysql_eror()); mysql_select_db('mydb3') or die(mysql_error()); mysql_query('SET NAMES UTF8'); $sql = sprintf('INSERT INTO my_items SET maker_id=%d, item_name="%s", price=%d, keyword="%s", mysql_real_escape_string($_POST['maker_id']), mysql_real_escape_string($_POST['item_name']), mysql_real_escape_string($_POST['price']), mysql_real_escape_string($_POST['keyword']) ); mysql_query($sql) or die(mysql_error()); ?> </p> </div> <p>商品を登録しました</p> <div id="foot"> <p><img src="images/txt_copyright.png" width="136" height="15" alt="(C) H2O Space. MYCOM" /></p> </div> </div> </body> </html> (input_do.php) <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> <link rel="stylesheet" type="text/css" href="style.css" /> <title>商品登録</title> </head> <body> <div id="wrap"> <div id="head"> <h1>商品登録</h1> </div> <div id="content"> <p>登録する商品の情報を記入してください。</p> <form id="frmInput" name="frmInput" method="post" action="input_do.php"> <dl> <dt> <label for="maker_id">メーカーID</label> </dt> <dd> <input name="maker_id" type="text" id="maker_id" size="10" maxlength="10" /> </dd> <dt> <label for="item_name">商品名</label> </dt> <dd> <input name="item_name" type="text" id="item_name" size="35" maxlength="255" /> </dd> <dt> <label for="price">価格</label> </dt> <dd> <input name="price" type="text" id="price" size="10" maxlength="10" /> 円</dd> <dt> <label for="keyword">キーワード</label> </dt> <dd> <input name="keyword" type="text" id="keyword" size="50" maxlength="255" /> </dd> <input type="submit" value="登録する" /> </form> </div> <div id="foot"> <p><img src="images/txt_copyright.png" width="136" height="15" alt="(C) H2O Space. MYCOM" /></p> </div> </div> </body> </html>

    • ベストアンサー
    • PHP
  • phpからmysqlにデータ保存(テキストと画像)

    登録フォームを作成し、PHPにてMYSQLに情報を保存しようとしています。 テキストデータは問題なく保存できるのですが、画像データが保存できません。 いろいろ調べているのですが、テキストデータと画像データをいっぺんに保存する方法がわかりません。 なんとなくはどこらへんが問題なのかということはわかるのですが、具体的にどうすればいいかがわかりません。 アドバイスをご教示いただけないでしょうか。よろしくお願いします。 【mysqlテーブル】 create table entries ( id int not null auto_increment primary key, name varchar(255), address varchar(255), image1 MEDIUMBLOB NOT NULL, image1 MEDIUMBLOB NOT NULL, ) ENGINE=InnoDB DEFAULT CHARSET=utf8; 【touroku.php】 <?php error_reporting(E_ALL & ~E_NOTICE); if ($_SERVER['REQUEST_METHOD']=="POST") { $name = $_POST['name']; $email = $_POST['email']; $image1 = $_POST['image1']; $image2 = $_POST['image2']; $error = array(); // エラー処理 if (!filter_var($email, FILTER_VALIDATE_EMAIL)) { $error['email'] = 'メールアドレスが正しくありません'; } if ($email == '') { $error['email'] = 'メールアドレスが入力されていません'; } // エラーがなかった場合 if (empty($error)) { // DBにデータを入れる mysql_connect("localhost", "ユーザー名", "パスワード") or die("can't connect to DB: ".mysql_error()); mysql_select_db("DB名") or die("can't select to DB: ".mysql_error()); $q = sprintf("insert into entries (name, email, image1, image2) values ('%s', '%s', '%s', '%s')", mysql_real_escape_string($name), mysql_real_escape_string($email), mysql_real_escape_string($image1), mysql_real_escape_string($image2)); mysql_query($q) or die("can't run query: ".mysql_error()); // 登録完了画面に飛ぶ header("Location: http://localhost/.../thanks.html"); } } ?> <!DOCTYPE html> <html lang="ja"> <meta charset="UTF-8"> <title>登録フォーム</title> <head> </head> <body> <form method="post" action=""> <p>名前:</p> <input type="text" name="name" value="<?php echo htmlspecialchars($name); ?>"> <?php if ($error['name']) echo $error['name']; ?> <p>メールアドレス</p> <input type="text" name="email" value="<?php echo htmlspecialchars($email); ?>"> <?php if ($error['email']) echo $error['email']; ?> <br> <p>画像1:</p> <input type="file" name="image1"> <p>画像2:</p> <input type="file" name="image2"> <p><input type="submit" value="登録"></p> </form> </body> </html>

    • ベストアンサー
    • PHP
  • jQueryのclick(function()が動かない・・・?

    お世話になります。 JS初心者ですが、jQueryに手を出し勉強しているものです。 勉強の過程で登録フォームを作成しているのですが、 1. 登録フォーム1 2. 登録フォーム2 3. 確認画面 4. 完了画面 という流れになるようにPHP+jQueryでフォームを作成しています。 1と2の間で入力エラーがあった場合には、1のフォーム上に赤文字でエラー内容が表示。 2と3の間で入力エラーがあった場合には2のフォーム上でエラー表示。 としています。 更に1のフォーム上では、jQueryを使いフォームの一部をラジオボックスと 連動し表示・非表示が出来るようにしています。 そこで質問の内容なのですが、以下のコードで書くと、 1と2の間でエラーがあり、1のフォームに戻ってきた際に ラジオボックスで「表示する」を選択していて、 値もちゃんと「表示する」となっているのに、表示したい部分が 非表示になってしまいます。 PHPでのエラー処理で値はちゃんと持ってきていることは確認しましたが、、、 宜しくお願いします。 ---- ↓jQuery部分ソース --------------------------------------------- <script type="text/javascript">  $(function(){ $("#haiso").hide(); $("#show").click(function(){ $("#haiso").show(500); }); $("#hide").click(function(){ $("#haiso").hide(500); }); $("#haiso").hide(500); }); </script> --------------------------------------------------------------------- ---- ↓HTML部分ソース -----------------------------------------------   <table>    <tr>     <td>表示選択</td>     <td>         <!-- 表示選択エラー処理 -->     <? if ($_POST['samecheck'] == 1){  echo '<label for="hide">非表示</label>     <input type="radio" name="samecheck" value="1" checked="checked" id="hide">     <label for="show">非表示</label>     <input type="radio" name="samecheck" value="2" id="show"></td></tr>'; } elseif ($_POST['samecheck'] == 2) {  echo '<label for="hide">非表示</label>     <input type="radio" name="samecheck" value="1" id="hide">     <label for="show">非表示</label>     <input type="radio" name="samecheck" value="2" checked="checked" id="show"></td></tr>'; } else {     echo '<label for="hide">非表示</label>     <input type="radio" name="samecheck" value="1" checked="checked" id="hide">     <label for="show">非表示</label>     <input type="radio" name="samecheck" value="2" id="show"></td></tr>'; }     ?>        </td>    </tr>   </table>       <div id="haiso">    <table>    </table>   </div> ---------------------------------------------------------------------

  • phpでmysqlに接続してデータを登録

    入力フォームをhtmlに作って それをidとpassを入力して それをmysqlに登録したいのですが うまくできません <html> <head> <meta http-equiv="Content-Type"content="text/html;charset="utf-8"/> <title>登録</title> </head> <body> <form action="touroku.php"method="post"> 登録id :<br /> <input type="text"name="id"size="10"value="" /><br /> パス:<br /> <input type="text"name="pass"size="10"value="" /><br /> <br /> <input type="submit"value="登録する" /> </form> </body> </html> という感じに 入力フォームは作ったのですが それからそれをmysqlにどうやって登録をするのかわかりません 詳しく解説されてわかりやすいサイトなどを教えてください もしくは教えてください

  • PHPとMySQLを使ったフォームを作っていますが、うまくできないこと

    PHPとMySQLを使ったフォームを作っていますが、うまくできないことがあり書き込みさせていただきます。 わかる方、ご助力願えれば幸いです。 フォームから、送信されたデータを受け取って、MySQLに登録する際に、フォーム内に空欄があると、うまくMySQLのデータベースに追加ができなかったり、変更ができなかったりします。 コードを簡単に書くと… <?php //フォームからデータを取得 $name = $_POST['name']; $address = $_POST['address']; $age = $_POST['age']; //データベース接続処理 $db = mysql_connect("localhost","user","password"); mysql_select_db("db_name",$db); $rs = mysql_query("select * from tablename order by my_id desc",$db); //データベースへの登録 $rs = mysql_query("INSERT INTO tablename(name,address,age)VALUES('$name','$address','$age')",$db); ?> このような感じになります。 フォームには、名前、住所、年齢を入力しているわけですが、年齢が必須でないため、空欄として送られてくることもあります。 年齢に数値が入っている場合は、うまく登録されますが、空欄であった場合、特にエラーが出るわけでもなく、単に「登録されない」という状況がおきます。 データベースのテーブルのフィールドでは、ageは int(11)でNULLはYes、defaultはNULLになっております。 自分なりに調べてみたつもりですが、知りたい情報に出合うことができませんでした。 よろしくお願い致します。

    • ベストアンサー
    • PHP
  • php MySQL データ登録 方法

    以前もご質問させていただいたのですが、調べてもわからず困り果てています。 PHPとMySQLは初心者です。 PHPのバージョンはPHP 5.2.12 MySQLのバージョンは 5.1 サーバーはさくらインターネットを使用しています。 コードは下記のとおりになります。 form.php <html> <body> <form action="complete.php" method="POST"> <input type="text" name="id"> <input type="text" name="password"> <input type="text" name="first_name"> <input type="text" name="last_name"> <input type="text" name="first_kana"> <input type="text" name="last_kana"> <?php print '<select name="b_year">'."\n"; $start = date('Y') -40; $end = date('Y') -16; for ($i = $start; $i <= $end; $i++) { $selected = ""; $selected = ($_POST["b_year"] == sprintf('%04d',$i)) ? "selected":""; print '<option value="' . sprintf('%04d',$i) . '" '.$selected.'>' . sprintf("%04d",$i) . '</option>' . "\n"; } print '</select> 年' . "\n"; (文字数のためb_monthとb_dayを省略) ?> <input type="text" name="number"> <input type="text" name="height"> <input type="text" name="weight"> <input type="submit" name="regist" value="登録"> <input type="reset" name="reset" value="リセット"> </form> </body> </html> complete.php <?php ・ ・ $id = mysql_real_escape_string($_POST['id']); $password = mysql_real_escape_string($_POST['password']); $first_name = mysql_real_escape_string($_POST['first_name']); $last_name = mysql_real_escape_string($_POST['last_name']); $first_kana = mysql_real_escape_string($_POST['first_kana']); $last_kana = mysql_real_escape_string($_POST['last_kana']); $year = mysql_real_escape_string($_POST['b_year']); $month = mysql_real_escape_string($_POST['b_month']); $day = mysql_real_escape_string($_POST['b_day']); $number = mysql_real_escape_string($_POST['number']); $height = mysql_real_escape_string($_POST['height']); $weight = mysql_real_escape_string($_POST['weight']); ・ ・ $query_reg = sprintf("INSERT INTO `member` (`id`,`password`,`first_name`,`last_name`,`first_kana`,`last_kana`,`b_year`,`b_month`,`b_day`,`number`,`height`,`weight`) VALUES('$id',$password,'$first_name','$last_name','$first_kana','$last_kana',$year,$month,$day,,$number,$height,$weight"); $result_reg = mysql_query($query_reg, $link) or die(mysql_error()); if ($result_reg) { $msg = '登録しました。'; } else { $msg = '登録に失敗しました。'; } ・ ・ ・ ?> <html><body><?php print $msg; ?></body></html> とフォームを入力してデータベースに登録をするという流れです。 ご質問ですが、フォームに項目を入力して登録するとデータベースに登録がされます。 しかし、数字のみ($number、$height、$weight)の場所を未入力にするとエラーが出力されます。 エラーは 「You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near」です。 MySQLは下記のように設定しています。 id varchar(20) None password varchar(255) None first_name varchar(8) NULL last_name varchar(8) NULL first_kana varchar(8) NULL last_kana varchar(8) NULL b_year int(4) NULL b_month int(2) NULL b_day int(2) NULL number varchar(2) NULL height varchar(3) NULL weight varchar(3) NULL 未入力でもエラーが表示されずデータベースに入力されたとこだけ登録されるようにするにはどうしたらよろしいのでしょうか? お分かりの方がいらっしゃいましたらご教授お願いいたします。

    • ベストアンサー
    • PHP