Access VBAでint型にnullを入れる方法について

このQ&Aのポイント
  • Accessで作成したテーブルの数値型のフィールド「金額」にnullを入れる方法について困っています。
  • 現在、値には「0」が入ってしまい、nullが挿入されません。
  • a = nullやa = ''を試しましたがうまくいきません。String型でないためスペースも入りません。目で見てデータが見えない状態であれば良いのですが、そのようにupdateをかける方法を知っている方はいらっしゃいますか?
回答を見る
  • ベストアンサー

Access VBAで int型にnullを入れる方法について

 Access で作ったテーブルの数値型のフィールド「金額」にnullを入れたいと思い、四苦八苦しています。  以下のソースを書いたのですが、値には「0」が入ってしまい、nullが挿入されません。 Dim a As Long Dim SQL1 As String If IsNull(Me.摘要_会員番号) = True Then IsNull (a) Else a = Me.摘要_会員番号 End If SQL1 = "UPDATE 個人情報入金 SET 個人情報入金.金額 = " & a & ";" DoCmd.RunSQL SQL1  その他、a=null や、a=''をやってみたのですがこれでは入らず、String型ではないので、スペースも入りません。  nullで無くても、目で見てデータが見えない状態であればいいのですが、そのようにupdateをかける方法をしっている方、是非ご教授をお願いします。

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

  • ベストアンサー
  • nicotinism
  • ベストアンサー率70% (1019/1452)
回答No.1

Dim a As variant '変数の宣言についてはヘルプにて Dim SQL1 As String If IsNull(Me.摘要_会員番号) = True Then   a = "null" Else   a = Me.摘要_会員番号 End If SQL1 = "UPDATE 個人情報入金 SET 個人情報入金.金額 = " & a 'イミディエイトウィンドウでSQL文確認 debug.print sql1 DoCmd.RunSQL SQL1 では? バックアップは取っといてくださいね

BackpackTaihen
質問者

お礼

ありがとうございました。うまくいきました。 valiantという型を知りませんでした。勉強します。

その他の回答 (1)

  • SortaNerd
  • ベストアンサー率43% (1185/2748)
回答No.2

BASICはよく分かりませんが、一般的に整数型にはNullという値は無いのではないかと思います。 代わりに-1を入れておいてはいかがでしょう。

BackpackTaihen
質問者

お礼

ご返答、ありがとうございました。

関連するQ&A

  • VBA null判定

    Accessでテキストボックスの値をテーブルへ書き込むVBAを作成しているのですが、Null判定がうまくいきません。 ◎環境 OS:Windows7Pro Var:Access2010 DB:MySQL5.6 Private Sub cmdSubmit_Click() Dim Rst As DAO.Recordset Dim ErrT As String Set Rst = CurrentDb.OpenRecordset("m_plan", dbOpenDynaset) '各テキストボックス、Null判定 If IsNull(txtPid) Then MsgBox "プランID[" & txtPid & "]が未入力です" Call txtCrer Exit Sub End If If IsNull(txtPName) Then MsgBox "プラン名が未入力です" Call txtCrer Exit Sub End If If IsNull(txtPsdate) Then Me!txtPsdate = #01/01/2010# End If If IsNull(Me!txtPedate) Then Me!txtPedate = #01/01/2010# End If Debug.Print "プランID["; Me.txtPid & "]" Debug.Print "プラン名[" & Me!txtPName & "]" Debug.Print "開始日[" & Me!txtPsdate & "]" Debug.Print "終了日[" & Me!txtPedate & "]" ↑↑↑↑↑↑↑↑↑ ここで、Null判定を行ってますが、データがあるにも関わらず、処理が続行されたり、Null判定結果が起動するたびに変わります。 On Error GoTo err With Rst .MoveLast .AddNew .Fields("PlanID") = Me!txtPid .Fields("PlanName") = Me!txtPName .Fields("PlanSt") = CDate(Me!txtPsdate) .Fields("PlanEn") = CDate(Me!txtPedate) .Fields("P_Remaks") = Me!txtPbikou .Update End With Rst.Close Set Rst = Nothing err: MsgBox "DBエラー" Debug.Print Rst.Type Debug.Print err.Description Call txtCrer End Sub ただし、下記判定だけのボタンとプロシージャーでは、正常に判定されます。 判定だけの、プロシージャー 'Null判定テスト Private Sub cmdtest_Click() If IsNull(txtPid) Then Debug.Print "[" & txtPid & "]" & "Nullです。" Else Debug.Print "[" & txtPid & "]" & "Not Nullです。" End If If IsNull(txtPName) Then Debug.Print "[" & txtPName & "]" & "Nullです。" Else Debug.Print "[" & txtPName & "]" & "Not Nullです。" End If If IsNull(txtPsdate) Then Debug.Print "[" & txtPsdate & "]" & "Nullです。" Else Debug.Print "[" & txtPsdate & "]" & "Not Nullです。" End If Debug.Print "===============================" End Sub どこが間違っているかまったくわかりません、アドバイスを頂けましたら幸いです。

  • Access2000のVBAについて

    下記のプログラムだと挿入が可能になります。 Private Sub 削除_コマンド_Click() If IsNull(Me.社員コード) Then MsgBox ("社員コードが入力されていません") Else Dim strSQL As String strSQL = "INSERT INTO 社員情報テーブル(社員コード,作成日) " _ & " VALUES ('" & Me.社員コード & "', now());" DoCmd.RunSQL strSQL End If End Sub しかし、下記のプログラムだとinsert文の『Me.社員コード』で エラーが発生します。 エラーメッセージは 『メソッドまたはデータメンバが見つかりません』 と表示されます。 上と下とどう違うのでしょうか。 Private Sub 削除_コマンド_Click() If IsNull(Me.社員コード) Then MsgBox ("社員コードが入力されていません") Else Dim strSQL As String strSQL = "INSERT INTO 社員情報テーブル(社員コード,氏名(氏),作成日) " _ & " VALUES ('" & Me.社員コード & "','" & Me.氏名(氏) & "', now());" DoCmd.RunSQL strSQL End If End Sub

  • Access VBA での Null と "" 

    以前組んだAccessVBA(ADPファイルにて使用)でのコードの中に、入力値のチェックとして -------------------------- Dim value as String If me!TextBoxA = "" then 'ここでテキスト未入力時の処理 Else   ’テキストが入力されているのでここで正常な処理 value = me!TextBoxA.value End If --------------------------- という記述をしていました。 今でしたら、これに加えてIsNullや他の仕組みを併用するのですが、 今まで上のものでも問題なく使えていました。つまり、  If me!TextBoxA = "" then  だけで、テキストボックスの未入力をきちんと検出していました。 ところが、最近新しいPCを導入したところ、  「Nullが不正です」 のメッセージが出るようになりました。 恐らくIf文で入力値の””が検出されず、Elseの部分で、Valueに代入しようとしたため、「Nullが不正」となったのだと思います。 本来はこちらの方が正しいと思うのですが、わからないのは今までなぜ Nullが不正とならなかったのか、です。 因みに、問題なく使えていたPCの組み合わせとしては、  ・XP(SP3) Office2010Pro(Access2010)   ・XP(SP3) Office2002Pro(Access2002) + AccessRuntime2007  ・XP(SP3) Officeなし + AccessRuntime2010  ・・・など、あらゆる組み合わせで10台ほど、問題なく動いていました。  (OSはすべて32Bit.エデイションはProやHomeなど混在) そして、問題となったPCは  ・XP(SP3)Pro Office2010Pro(Access2010) です。しかも、購入した直後は問題なかったものの、つい先日急にダメになったとの事でした。 何かきっかけとなった事はなかったか聞いてみましたが、心当たりはないとの事。 また、ネットワーク上にある同一ファイルをそれぞれのPCで個別に開いてみても、 やはり、Nullを検出するのは今回の新しいPCだけです。 何が原因なのかが気になって仕方ありません。 このような違いが起こる要因としてどのようなことが考えられるでしょうか。

  • Access VBA

    Access2003を使用しています。 単純な質問かもしれませんがよろしくお願いします。 ログイン画面を作成しておりログイン自体はできたのですが、ログインしたときに ログイン画面を自動的に閉じたいのですが、うまくいきません。 現在の仕様では、ログイン画面(frm_ログイン)とメイン画面(frm_main)があり ログインに成功するとメイン画面が開くようになっています。 ーー以下VBAコードーー Private Sub rogin_Click() Dim a If IsNull(Me.[UserName]) Then MsgBox "IDが未入力です" Me.[UserName].SetFocus ElseIf IsNull(Me.[password]) Then MsgBox "パスワードが未入力です" Me.[password].SetFocus Else a = DLookup("パスワード", "tbl_ユーザー", "ユーザー名='" & Me.[UserName] & "'") If IsNull(a) Then MsgBox "該当する ユーザー名 は存在しません" Me.[UserName].SetFocus ElseIf StrComp(a, Me.[password], vbBinaryCompare) = 0 Then On Error GoTo Err_rogin_Click Dim stDocName As String Dim stLinkCriteria As String stDocName = "frm_main" DoCmd.OpenForm stDocName, , , stLinkCriteria Else MsgBox "パスワードが違います" Me.[password].SetFocus End If End If Exit_rogin_Click: Exit Sub Err_rogin_Click: MsgBox Err.Description Resume Exit_rogin_Click End Sub ーー以上ーー 長くなって申し訳ないのですが、どのようにすればログイン後にログイン画面(frm_ログイン)を閉じるようにできるのでしょうか? よろしくお願いします。

  • AccessVBA値の入替えNullの使い方が不正

    以前こちらで教えていただいのですが、 http://okwave.jp/qa/q8086569.html 以下のクエリを実行すると、「Nullの使い方が不正です」とのエラーが出てしまいます。 ------------------------------------ テーブル名「T9」 フィールド:顧客番号(テキスト)/ 売上金額(通貨) / 売上月(テキスト テーブル名「T9A」 フィールド:顧客番号(テキスト)/ 集約先番号(テキスト) ●標準モジュール Public Function Bango(sSrc As String) As String   Dim rs As New ADODB.Recordset   Dim sR As String   sR = sSrc   rs.Source = "SELECT * FROM T9A WHERE 顧客番号='" & sSrc & "';"   rs.Open , CurrentProject.Connection, adOpenForwardOnly, adLockReadOnly   If (Not rs.EOF) Then sR = Bango(rs("集約先番号"))   rs.Close   Bango = sR End Function ●クエリ SELECT Bango(顧客番号) AS 集約番号, Sum(売上金額) AS 売上金額計, 売上月 FROM T9 GROUP BY Bango(顧客番号), 売上月; ------------------------------------ 当初は、テーブル「T9A」には集約先番号を持つ顧客番号のみにするはずでしたが、 便宜上、集約先番号の有無にかかわらず、すべての顧客番号が入ったテーブルを使います。 そのため、「T9A」の集約先番号にはNullがあり、 Nullに対しては、同行の顧客番号を返すように対応したいです。 If IsNull(集約先番号) Then・・・とやるのかな?と浮かびましたが、うまくいかず、困っております。 何卒ご指南くださいますよう、お願いいたいます。

  • Access VBA  複数検索方法(初心者)  

    下記の様に検索すると、 "テキスト名称"と"テキスト分類"の2つのテキストボックスを使用して検索ですが、 1つのテキストボックス"テキストA"で両方(名称・分類)又は2つ以上を検索させるには、どのようにしたら良いでしょうか? <テキストボックス1つでテーブル全部を検索したい> ご教授お願い致します。(Access2000) Private Sub コマンド17_Click() Dim st As String If Not IsNull(Me.テキスト名称) Then st = st & " AND 名称 like'*" & Me.テキスト名称 & "*'" End If If Not IsNull(Me.テキスト分類) Then st = st & " AND 分類 like '*" & Me.テキスト分類 & "*'" End If st = Mid(st, 6) DoCmd.OpenReport "レポート", acViewPreview, , st End Sub

  • VBA ADOに関して

    お世話になります。 VBAに関して質問があります。 ADOでDBから値を取得する際、 TEXT型の値が全く取れてきません。 どなたか取得方法をご教授下さい。 宜しくお願い致します。 DB:Sybase OS: RedHat 8.0 Dim rs As ADODB.Recordset Dim sql As String sql = "select * from " & tblName //dbはADODB.Connection Set rs = db.Execute(sql) Do While Not rs.EOF //ここでTEXT型だと、取れてきません。  If IsNull(rs.Fields('Field名').Value) Then End If rs.MoveNext Loop

  • アクセスを教えて下さい

    アクセスを教えて下さい。 Microsoft Visual Basic に以下入力したのですがうまくいきません。 ある数字0~999999までの数字を登録数字より、数字以上、数字未満で抽出したいのですがうまくいきません。 If IsNull(Me!数字以上) Or IsNull(Me!数字未満) Then key(1) = "" Else Dim MyStr1, MyStr2 As String MyStr1 = (Me!数字以上) MyStr2 = (Me!数字未満) key(1) = "登録数字 between #" & MyStr1 & "# " _ & "and #" & MyStr2 & "#" End If 初心者で時間が経つばかりで前に進みません。 宜しくお願い致します。

  • access VBAで検索および抽出が出来ません・・・

    VBA初心者なのですが、あるサンプルデータを参考に顧客管理のフォームを作成しています。 検索条件が未入力なら全リストを、条件入力すれば検索・抽出したいのです。 未入力の場合は全リストが表示されていますが、条件入力すると真っ白になります・・・ リストボックスで表示するようにしています。 なぜ出来ないのか、どなたか詳しく教えてください。宜しくお願いします。 ______________________________________ Private Sub subSetFiler() Dim strWhere As String '変数の初期設定 strWhere = "" 'フリガナを部分一致で検索 If IsNull(Me![txtFurigana]) <> True Then If strWhere <> "" Then strWhere = strWhere & " And" End If strWhere = strWhere & "tm01_Kokyaku.tm01_Furigana Like'*" & Me![txtFurigana] & "*'" End If '物件を部分一致で検索 If IsNull(Me![txtBukken]) <> True Then If strWhere <> "" Then strWhere = strWhere & " And" End If strWhere = strWhere & "tm01_Kokyaku.tm01_Bukken Like '*" & Me![txtBukken] & "*'" End If 'Where文字列の加工 If strWhere <> "" Then strWhere = "Where" & strWhere End If 'リストボックスノ値集合ソース更新 Me![1stKokyakuCode] = Null Me![1stKokyakuCode].RowSource = "SELECT [tm01_Kokyaku].[tm01_Code] AS コード, [tm01_Kokyaku].[tm01_KokyakuName] AS 顧客名, [tm01_Kokyaku].[tm01_Bukken] AS 物件名, [tm01_Kokyaku].[tm01_Gouchi] AS 号地, [tm01_Kokyaku].[tm01_Address1] AS 住所, [tm01_Kokyaku].[tm01_Tel] AS 電話番号 " & _ "FROM tm01_Kokyaku" & _ strWhere & " " & _ "ORDER BY [tm01_Kokyaku].[tm01_Bukken], [tm01_Kokyaku].[tm01_Gouchi]" Me![1stKokyakuCode].Requery

  • うまく処理されません(ACCESSのVBA)

    イベント事業を管理するデータベースを作っています。 メインのテーブルを表示するフォームから、チェック(Yes/No型)された項目だけを抽出したクエリ「記事抽出」があります。 ここから、「行事名」「会場」「月1」「日1」という各フィールドのデータを以下のコードのように変数に代入していきたいのです。 チェックした数が少ないときはうまくいくのですが、20個くらいチェックすると、ループの途中で抜けてしまいます。このとき、エラーメッセージは表示されません。 原因として考えられることがあればお教えください。 説明が不足しているようでしたら、補足のほうで説明したいと思いますのでよろしくお願いします。 Dim cnn As New ADODB.Connection Dim rst As New ADODB.Recordset Dim i As Integer Dim gyouji(50) As String '行事名 Dim kaijyou(50) As String '会場 Dim tuki1(50) As Integer '月1 Dim nichi1(50) As Integer '日1 Set cnn = CurrentProject.Connection i = 0 With rst    .Open "記事抽出", cnn, adOpenKeyset, adLockOptimistic, adCmdTableDirect    Do Until .EOF      gyouji(i) = !行事名      kaijyou(i) = !会場      If IsNull(!月1) Then        tuki1(i) = 0      Else        tuki1(i) = !月1      End If      If IsNull(!日1) Then        nichi1(i) = 0      Else        nichi1(i) = !日1      End If      .MoveNext      i = i + 1    Loop    .Close End With cnn.Close