• 締切済み

エラ-9 ” Null値が不正です!! ”の解消方法は?

Private Sub ComboBox1_Change() Dim db As Database Dim Tname As Recordset Set db = OpenDatabase("c:\Sam1.mdb ", True) Set Tname = db.OpenRecordset("Table1", dbOpenTable) N = ComboBox1.ListIndex Tname.Move N TextBox1.Text = Tname.Fields(0).Value TextBox2.Text = Tname.Fields(1).Value TextBox3.Text = Tname.Fields(2).Value Tname.Close db.Close Set Tname = Nothing Set db = Nothing End Sub エクセルよりmdbファイルを開けて、ComboBoxのリストインデクッス番号 値とmdbのレコ-ド数値が合致することから、各フィ-ルドの値をTextBox に返すプログラムを作りました。デ-タが各フィ-ルドに存在する時はう まくいくのですが、空の時(Null値の時)は”Null値が不正です!!”とい うエラ-がでて止まってしまいます。Null値はNull値として、TextBoxに 返したいのですが、どうすればよいでしょうか?

みんなの回答

  • nishi6
  • ベストアンサー率67% (869/1280)
回答No.2

TextBox1を例にして、 (1)  TextBox1.Text = "" & Tname.Fields(0).Value (2)  TextBox1.Text = IIf(IsNull(Tname.Fields(0).Value), "", Tname.Fields(0).Value) (3)  If Not IsNull(Tname.Fields(0).Value) Then    TextBox1.Text = Tname.Fields(0).Value  Else    TextBox1.Text = ""  End If (4)On Error で対応 と色々あるようです。。。ご参考に。

kenchan_h
質問者

お礼

ありがとうございます、試してみます。

回答No.1

TextBoxのTextはあくまで文字列です。 文字列にNullという値は代入できないと思います。 文字列には""(ダブルクオーテーション)がつきます。 それで、Null値は、""(ヌルストリング)にすることが必要です。 If Tname.Fields(0).Value=Null Then TextBox1.Text = "" End If ↑ 例えば、こんなのです。

kenchan_h
質問者

お礼

ありがとうございます、試してみます。

関連するQ&A

  • DAOでフィールドの値を変更する

    MDBファイルにDAOでアクセスし、フィールド(今回の場合Fields(4))の値をTextBox内の値に変更する方法がわかりません。 Dim WS As DAO.Workspace Dim DB As DAO.Database Dim RS As DAO.Recordset 'レコードを特定する処理 RS.Fields(4).Value = TextBox.Text RS.Update どのように直せばいいのでしょうか??

  • VB.NETでテーブルを作成

    VB.NETとAcceseを使用してフォームの入力内容に基にボタンをしてDBにテーブルを作成するプログラムを作成していますが上手くいきません。 どのようにすれば上手くいくのか教えてください。 よろしくお願いします。 Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click Dim Cn As New OleDb.OleDbConnection() Cn.ConnectionString = "Provider=Microsoft.Jet.OleDb.4.0;Data Source=" & Application.StartupPath & "\products.mdb" Cn.Open() Dim mysql As New OleDb.OleDbCommand() mysql.Connection = Cn mysql.CommandText = "CREATE TABLE '" & TextBox1.Text & "' ('" & TextBox2.Text & "' '" & ComboBox1.Text & "' NOT NULL,'" & TextBox2.Text & "' '" & ComboBox2.Text & "','" & TextBox3.Text & "' '" & ComboBox3.Text & "',PRIMARY KEY('" & TextBox1.Text & "'))" Cn.Close() End Sub

  • Visual Basic 2008 変数をDBへ登録するには?

    初歩的な質問ですいません。 AccessのDBへデータを登録したいのですが ラジオボタンの情報をどうやってうまく登録するか考えました。     Dim r as integer If RadioButton1.Checked = True Then r = 1        Else   RadioButton2.Checked = True r = 2 ここでラジオボタン1ならrに1を代入してちがうなら2を代入する データを追加 RS.AddNew() RS.Fields("a").Value = ComboBox1.Text RS.Fields("b").Value = ComboBox2.Text RS.Fields("c").Value = ComboBox3.Text RS.Fields("d").Value = r RS.Update() RS.Close() CN.Close() MsgBox("登録しました") End If この時、rの値をDBのdフィールドに登録したいのですが できません。 このRに入っている値を登録する方法を教えてください。 もっと簡単な方法があればそちらもご指導下さい。

  • データ型が一致しない?

    エクセルのVBAでユーザーフォームから、アクセスのデータを取得して ユーザーフォームのテキストボックス、コンボボックスに取得させたデータ を表示させようとしています。 TextBox1に顧客IDを0001234のように7桁の数字を入力すると、アクセスの 「T_メイン」テーブルからIDが一致するレコードを取得して、フィールド「クライアント名」、 フィールド「営業所」、フィールド「担当者」のデータをテキストボックスや コンボボックスに表示させたいのです。 それで、以下のようなコードを記入しました。 Private Sub TextBox1_Change() Dim cn As ADODB.Connection Dim rs As ADODB.Recordset Dim SelCmd As String If Len(TextBox1.Value) = 7 Then Set cn = New ADODB.Connection cn.ConnectionString = "Provider=Microsoft.jet.OLEDB.4.0;" _ & "Data Source=D:\管理表.mdb" cn.Open SelCmd = "SELECT * FROM T_メイン " _ & "WHERE 顧客ID = " & TextBox1.text Set rs = New ADODB.Recordset rs.Open SelCmd, cn, adOpenKeyset, adLockOptimistic TextBox2.Value = rs!クライアント名 ComboBox2.Value = rs!営業所 ComboBox3.Value = rs!担当者 rs.Close Set rs = Nothing cn.Close Set cn = Nothing End If End Sub しかし、これを実行させると、 rs.Open SelCmd, cn, adOpenKeyset, adLockOptimistic の部分でエラーがでてしまいます。 「抽出条件でデータ型が一致しません」のエラーメッセージです。 アクセス側の顧客IDの部分はテキスト型ですし、TextBoxもテキスト ですから、一致しているのでないでしょうか? なぜなんでしょう? 参考書とかネットとか見様見真似でやってるので、ものすごく変な部分が あるのかもしれませんが、どうかご教授願います。

  • NULLを含むフィールド値の条件分岐

    どなたかご存知の方はご教示願います。 使用言語はVB6_SP5、DBはMdb(アクセス97形式)です。 ADOでDBに接続し、レコードセットを取得しそのレコードの任意のフィールドの値により処理を3通りに分けたいのです。(値はNULL、"1"、"9" の3つです。) IF文で条件分岐を行いたいのですが、うまく振り分けができずにおります。 IF ISNULL(RS.FIELDS("HHH").VALUE) THEN NULLの場合の処理 ELSE "1"の場合の処理 END IF ' "9" の場合はなにもしない 結果は全てNULLの場合の処理を実行してしまいます。 どこを修正すれば宜しいのでしょうか?

  • 別のMDBのフォームを開く操作をしているのですがエラーになってしまいま

    別のMDBのフォームを開く操作をしているのですがエラーになってしまいます (Access2003 SP3を使用) Function keisan() Dim obj As Access.Application Dim db_name As String Dim tmpDB As Database Dim tabname As String Dim tdynaset as Recordset Dim KeisanKekka as Boolean ’MDBのフォームを開く db_name="c:\keisan.mde" Set obj = GetObject(db_name) obj.DoCmd.OpenForm "計算", acNormal, , , , acDialog obj.Application.Quit Set obj = Nothing '計算結果をもってくる Set tmpDB = OpenDatabase(db_name)'ここでエラー**** Set tdynaset = tmpDB.OpenRecordset("select 計算結果 from データ", dbOpenSnapshot, dbForwardOnly) KeisanKekka = Nz(tdynaset.Fields(0), False) tdynaset.Close Set tdynaset = Nothing tmpDB.Close Set tmpDB = Nothing End Function これで1回目は上手くできるのですが2回目からOpenDatabaseのところでエラーになってしまいます 「実行時エラー3045 c:\keisan.mdbは既に使用されているので、使用できませんでした」 GetObjectの解放はしているのになぜこのようなエラーがでてしまうのでしょうか・・・ 別のPCでもやってみたのですが同じエラーが起こりました どうかよろしくお願いします

  • ADOを使いDBへ読み書きしたい

    VB初心者です。よろしくお願いします。 今、VBのActiveXドキュメントを使い、ブラウザ上で利用できるシステムを作ろうと思っています。その際、Textboxに入力されたデータをADOを使いAccess2003に格納したいのですが、うまくいきません。DAOではうまくいきました。 コードは以下の通りです。 Private Sub Command1_Click() Dim db As ADODB.Connection Dim rst1 As ADODB.Recordset Set db = New ADODB.Connection db.ConnectionString= "Provider=Microsoft.Jet.OLEDB.4.0;" _ & "Data Source = 'データへのパス'\zaseki3.mdb" db.Open MsgBox ("接続成功") Set rst1 = New ADODB.Recordset ☆☆rst1.Open "T-利用者", db,adOpenForwardOnly,adLockOptimistic   With rst1 .AddNew .Fields("氏名") = Text1 .Update End With rst1.Close db.Close Set db = Nothing Set rst1 = Nothing End Sub ☆☆のところでエラーが発生します。エラー内容は次の通りです。  実行時エラー'-2147217900(80040e14)': SQLステートメントが正しくありません。'DELETE'などを使用してく ださい。 環境は Windows XP, VB6.0, Access2003  です。 よろしくお願いします。

  • テキストボックスに入れた内容をAccessのテーブルに登録する方法を教えてください。

    はじめまして。 VBでフォームに作ったテキストボックス(text1、text2、text3)に値を入れてコマンドボタンを押したらAccessのテーブルに値を登録できるようにしたいのですが上手くいきません。自分で調べながらコーディングしたのですが上手く動かずどうすれば動くのかVBのコーディングを教えていただきたいです。よろしくお願いします。 [Accessのファイル名] db1.mdb [db1.mdbのテーブル名] ListName [ListNameの各項目] 名前、住所、生年月日 [VBのフォーム] text1.textbox、text2.textbox、text3.textbox Add.command [コーディングの内容] Microsoft DAO 3.6 Object Library参照設定 Private Sub Add_Click() Dim strSQL As String Dim dbName As String Dim dbs As DAO.Database Dim myset As DAO.Recordset Dim ws As DAO.Workspace Set ws = DBEngine.Workspaces(0) Set dbs = ws.OpenDatabase("C:\db1.mdb") If Dir("C:\db1.mdb") <> "" Then strSQL = "INSERT INTO Listname (名前,生年月日, _ 住所) values(text1.text, text2.text, text3.text)" Me.AutoRedraw = True Set myset = dbs.OpenRecordset(strSQL) End If End Sub ※無効な処理です。というエラーが出ます。

  • コンボボックスの値取得について

    テーブルはAccess2003で作成 VBは6を使用しています。 Access2003で作成したテーブル(t_KEN)の県名をコンボボックス(cmbKen)に表示させ、選択したひとつの県名とその県コードを テキストボックス(txtKENMEI.text、txtKenCode.text)に格納したいと思います。 以下の様にコンボボックスに県名を表示する所までは できたのですが、そこから選択した県名と県コードをそれぞれの テキストボックスに格納する所がわかりません。 初歩的過ぎるのかもしれませんが、初心者であり何卒ご教授頂けます様 お願いいたします。 テーブル(t_KEN) KENCODE KENMEI 1 北海道 2 青森県 3 岩手県 4 秋田県 ・  ・ ・  ・ ・  ・ Private Sub cmbKen_GotFocus() Dim DB As Database Dim RS As Recordset Set DB = OpenDatabase("c:\TEST\jdb.mdb") Set RS = DB.OpenRecordset("t_KEN") Do Until RS.EOF Me.cmbKen.AddItem RS.Fields("KENMEI") RS.MoveNext Loop 'ここ以降の記述が困ってます。 txtKENMEI.Text=・・・ txtKenCode.Text=・・・ RS.Close Set RS = Nothing DB.Close Set DB = Nothing End Sub

  • <IMPUT TYPE="file">入力フィ-ルドのクリア

    <FORM NAME="form1"> <IMPUT TYPE="text" NAME="text1"> <IMPUT TYPE="file" NAME="file1"> </FORM> 入力フィ-ルドを<INPUT TYPE="reset">を使わずに クリアしたいのですが textフィ-ルドは this.form1.text1.value=""; でクリアできるのですが fileフィ-ルドは this.form1.file1.value=""; では、クリアできません "reset"と同じようにどうすればクリア出来ますか。 よろしくお願いします。

専門家に質問してみよう