• 締切済み

リスト外入力(NotInList)時のイベント

chayamatiの回答

  • chayamati
  • ベストアンサー率41% (257/615)
回答No.3

Vendorsのテーブル設計でVendor_Nameのインデックスプロパティに重複なしとして DoCmd.SetWarnings False DoCmd.RunSQL "INSERT INTO Vendors (Vendor_Name) SELECT NewData;" DoCmd.SetWarnings True で重複するデータははじかれるのでこれでも宜しいかと

関連するQ&A

  • Access2000 VBA - 変更の履歴が取れません

    下記コードで、If Nz(Ctr.OldValue, "") <> Nz(Ctr.Value, "") Thenの行で「指定した式には値がありません」というエラーが出てしまいます。 他のQ&Aで見つけた成功例のほぼコピペなのですが・・・・ どこが悪いのか、ご教示頂けないでしょうか? よろしくお願い致します。 __________________________________________________________________________________________ Private Sub Form_BeforeUpdate(Cancel As Integer) Dim Ctr As Control Dim strSQL As String For Each Ctr In Me.Controls If Nz(Ctr.OldValue, "") <> Nz(Ctr.Value, "") Then strSQL = "insert into 履歴 values('currentuser'," & Ctr.Value & _ ",'" & Ctr.Name & "','" & Ctr.OldValue & "',#" & Now() & "#)" DoCmd.SetWarnings False DoCmd.RunSQL strSQL DoCmd.SetWarnings True End If Next Ctr End Sub

  • access一部のフィールドを他のテーブルへVBA

    先日 https://okwave.jp/qa/q10245651.html において > table2の新しいデータとして > table1のデータをコピーしたい、 単に追加で ということであれば、という 御回答: Sub Test() Dim StrSQL As String StrSQL = "INSERT INTO table2 SELECT table1.* FROM table1;" DoCmd.SetWarnings False DoCmd.RunSQL StrSQL DoCmd.SetWarnings True End Sub ---------------------- 上記の 回答をいただき うまく稼働しました 部分的にフィールドを別テーブルに 移動するとき ここでは table1のフィールド名 IDに table2のフィールド名 bに 入っている数値 にい 1を加えた数値を 移動したいのですが Public Function Test() Dim tb1 As Table Dim tb2 As Table tb1 = table1 tb2 = table2 Dim strSQL As String strSQL = "INSERT INTO table2![ID]SELECT"("[b]"FROM tablel)+1" (table1のフィールド[b]の数値に1を加えた数値を table2のフィールド[ID]に移行する、というつもりです) DoCmd.SetWarnings False DoCmd.RunSQL strSQL DoCmd.SetWarnings True End Function 稼働しません すみません 宜しくお願い致します (ついでながら ここで でてくるb というのは テーブル table3 の IDの総和 すなわち SELECT Count(table3.ID) AS b FROM table3; 要は table3の最後のレコードの次のレコードの 番号の数値を table2のIDに移動したい というわけであります) (いずれのIDや bについても 数値型 長整数型 重複あり です)

  • ACCESSの条件で

    いつもお世話になっております(^^ゞ DoCmd.RunSQL "insert into 氏名2(氏名) select 氏名 from 氏名 where (氏名= 'あ')" を実行したいと思います。 が、'あ'の部分に変数を使うと上手くできません。 変数はどのように指定すれば良いのでしょうか? たびたびの質問で申し訳ありませんが、よろしくお願いしますm(__)m

  • 命令文が長文になります 行を分割入力出来ますか

    何度もお世話になります。 QNo.3140739 の続きです。 以下はレコード挿入のルーチンです Function 介護メモ挿入() on Error GoTo レコード挿入_Err DoCmd.SetWarnings False DoCmd.RunSQL "insert into 介護メモ (利用者,介護日,身体単位,生活単位,開始時刻,年月) values (利用者 , 日付 , 身体単位 , 生活単位 , 開始時刻,年月)", -1 DoCmd.SetWarnings True レコード挿入_Exit: Exit Function レコード挿入_Err: MsgBox Error$ Resume レコード挿入_Exit End Function これで実行は出来たのですが、文中の介護メモは実際にはフィールド数が38ある介護記録というテーブルです。長い命令文になります。 画面内に表示できるように命令文の分割をしたいのですが 以下のように変更したのですが「クエリ式'11:00:00'の構文エラー」と時刻項目は文字列扱いのようです 同様に日付項目は分数式扱い? Function 介護メモ挿入() DIM SQL文 as String SQL文 = "insert into 介護メモ (利用者,介護日,身体単位,生活単位,開始時刻,年月) values (" SQL文 = SQL文 & """" & 利用者 & """," & 日付 & "," & 身体単位 & "," & 生活単位 & "," & 開始時刻 SQL文 = SQL文 & "," & 年月 & ")" On Error GoTo レコード挿入_Err DoCmd.SetWarnings False DoCmd.RunSQL SQL文, -1 DoCmd.SetWarnings True レコード挿入_Exit: Exit Function レコード挿入_Err: MsgBox Error$ Resume レコード挿入_Exit End Function

  • AccessのRunSQLのINSERTでの確認メッセージを消す方法。

    こんにちは。 AccessのRunSQLのINSERTでの確認メッセージを出さない方法を知りたいと思っています。 下記き構文をAccess2000/VBAにて作成しましたが、 DoCmd.RunSQL "INSERT INTO test VALUES ('a','b');" 「一件追加します・・・・」という確認メッセージが表示されてしまいます。 これを出さない方法を知りたいです。 宜しくお願い致します。

  • access2000で使用者を履歴に残したい。

    履歴を取るのに「更新者=使用者」これは、currentuserですよね! 「テーブル全体を履歴に残す」バージョンでテーブルの更新者の規定値にcurrentuser()と入れればできる!と思ったのですが、テーブルではその式は利用できませんでした。モジュールに何か書き込まないとできないのでしょうか? 現在のモジュールは以下の通りです。 Sub History_a() Dim Ctr As Control Dim strSQL As String For Each Ctr In Me.Controls If Ctr.ControlType = 109 Then If Ctr.OldValue <> Ctr.Value Then strSQL = "insert into あ履歴 select * FROM あ " & _ "where 顧客コード = " & Me.顧客コード DoCmd.SetWarnings False DoCmd.RunSQL strSQL DoCmd.SetWarnings True Exit Sub End If End If Next Ctr End Sub ここで作成した使用者を顧客コードをキーに最終更新日の更新者を取り出すという、ややこしくてわけがわからなくなりそうなことも可能でしょうか?

  • 確認ダイアログを出さないでレコード追加

    MS ACCESS2000です。 今、プログラム的に(つまり自動的に)テーブルにレコードを追加したいのですが、レコードの追加を確認するダイアログが出てしまいます。 今は、以下のようにしています。 docmd.runsql("insert into レコード名 ("フィールド") value (値)") ちょっと、細かいとこ違うかもしれませんが・・・ ユーザーにダイアログを出さないように、レコードと値を追加する方法はないでしょうか?

  • Access にて DISTINCROW を使用した INSERT SELECT

    お世話様です。 Access2003 VBAにて、DoCmd.RunSQLを使用してSQL文を流す際、 普通のINSERT-SELECT文はOKですが、 そのSELECT文にDISTINCROW句を使用していると、 数百件程度のSELECT結果しかINSERTできません。 本当は数千件のSELECT結果をINSERTしたいのですが、 これを実行した場合、エラーにもならず、1レコードもINSERTされません。 ためしに、DINSTINCTROWではなく、SQL文を変更してDISTINCTにしてみたところ、 2000件以上でもINSERTできました。 DISTINCROW句を使用して数千件でもINSERTできる方法はあるでしょうか? ちなみにSELECT単体ですと、DISTINCTROWを使用していながら、 数千件でも結果を表示できます。 SQL例: str_SQL = " INSERT INTO 結果テーブル(フィールド1, フィールド2, フィールド3)  SELECT DISTINCTROW A.項目1, A.項目2, B.項目1  FROM テーブル1 A, テーブル2 B  (WHERE句はあってもなくても現象変わらず)  ORDER BY A.項目4 ASC, A.項目5 ASC " DoCmd.RunSQL (str_SQL) よろしくお願いいたします。

  • 変更履歴テーブルについて

    行き詰まってます。アドバイスお願いします。 変更した履歴を記録しようと見よう見まねで作成しました。 テーブル:履歴  変更ID、フィールド名、変更前名前、変更後名前、変更日 フォームの更新前処理で Dim ctr As Control Dim sqla As String For Each ctr In Me.Controls If ctr.ControlType = 109 Then If Nz(ctr.OldValue, "") <> Nz(ctr.Value, "") Then sqla = "insert into 履歴 values(" & Me.ID & ",'" & ctr.Name & "','" & ctr.OldValue & "','" & ctr.Value & "',#" & Now() & "#)" DoCmd.SetWarnings False DoCmd.RunSQL sqla DoCmd.SetWarnings True End If End If Next ctr としています。 これでフォームでいじって試してみると 「この操作は、このタイプのオブジェクトには実行できません。」とエラーになってしまいます。 デバッグで→If Nz(ctr.OldValue, "") <> Nz(ctr.Value, "") Then になっています。 他の形の質問を参考に作ったのですが、どこがおかしいのでしょうか? http://okwave.jp/qa/q164850.html 宜しくお願いします。

  • ACCESSのモジュールでのUNION

    ACCESS超初心者です。 モジュールでテーブルAとBテーブルBを結合しテーブルCを作成したいのですが、 DoCmd.RunSQL " SELECT * FROM TABLE_A UNION SELECT * FROM TABLE_B INTO TABLE_C; " でRunSQL実行時のエラー(2342)となってしまいます。 きっと基本的なことだと思うのですが・・・ どうぞお教えください。