• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:access2000で使用者を履歴に残したい。)

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

Watapo3の回答

  • Watapo3
  • ベストアンサー率76% (33/43)
回答No.4

ちょっと紛らわしい表記があった為修正です。 >以前、最新の更新日を得るDLookUpは成功したと思いますので、 ↑ DMaxを使用して抽出したんでしたね! >=DLookUp("更新者","履歴","顧客コード=" & [顧客コード] & _   " AND 更新日時 = #" & [最新更新日] & "#" ↑ 更新日というフィールド名で作成していると思いますので・・・以下に変更 =DLookUp("更新者","履歴","顧客コード=" & [顧客コード] & _   " AND 更新日 = #" & [最新更新日] & "#" 以上です。m(_ _)m

cas-jp
質問者

補足

ほにゃ~!できませーん(*_*)エラーなのです。 挿入したテキストボックスのコントロールソースにwatapo3さんの教えてくれた式をコピーし、名前を「最新更新日」をしたのに・・・。 そうそう、急遽「顧客コード」が数値型からテキスト型に変更になったため、「'」の入力を必要とするんですよね! この式だと、下記のようになるんですよね?これでだめでした。 =DLookUp("更新者","履歴","顧客コード='" & [顧客コード] & _   "' AND 更新日 = #" & [最新更新日] & "#" (ちなみに顧客コードのテキスト型に伴う履歴の書き出し等にエラーがでたので、「']を導入して今までの所(今回の以外)は、無事解決しました! どうも、AND以降の式を認識していないようです。 上記の式を記入すると、「AND」は、「and」になってしまいます。(コピーで貼り付けたら大文字で入力できたのですが、やはりエラーです。) 認識されていれば、通常「and」は、「And」とaが大文字になりますよね?? 何か、もっと基本的なところで私が間違いをしているのでしょうか? 現在、テキストに「履歴ID」←(オートナンバー)を追加して、やってみているのですが、ちゃんと最新更新者名を取ってきました!ただし、問題は、履歴が取れなくなってしまったことなのです。 変更を行うと、「実行時エラー3464、抽出条件でデータ型が一致しません」とでます。デバックを選ぶと、「履歴ID」の書き出しのところ?がエラー?みたい? DoCmd.RunSQL strSQL ここが、黄色くなってました。 プロシージャーのところで、 strSQL = "insert into 履歴 values('担当者情報','" & Me.顧客コード & _ "','" & Ctr.ControlSource & "','" & Ctr.OldValue & "',#" & Now() & "#,'" & currentuser() & "','履歴ID')"としています。 コントロールソースのところで、 =DLookUp("更新者","履歴","履歴ID=" & DMax("履歴ID","履歴"))としています。 プロシージャーの履歴IDの指定の仕方が違っているのだと思います。(T_T)が、オートナンバー型のデータに対してどのような入力をすれば良いのかわかりません。 (オートナンバーは使用できるのでしょうか?) 教えてください。よろしくお願い申し上げます。

関連するQ&A

  • ACCESS2000でとっても困っています。履歴がたくさんとれてしまうのです。

    アクセス初心者です。とても困っています。 困っているのは、履歴は書き出すのですが、複数書き出してしまうということなのです。 詳しく申し上げますと、 フォーム「テレ_sb(table:テレ)」に変更があった場合に、履歴「SF_テレ履歴(table:テレ履歴)」を書き出すことを行っています。 顧客ID毎に履歴を取るようにしているのですが、「A」ユーザーに変更を行うと、「A」ユーザーの履歴を取ってくる。ここまでは良いのですが、フォームのテレ_sb(table:テレ)に情報が入っているもの全てについて履歴を取ってしまうのです。 つまり、table:テレ(フォーム:テレ_sb)に10ユーザーの情報が入っているとすると、「A」について変更を行うと、10ユーザー全ての履歴を取ってきてしまうのです。 <<フォーム>>メイン、テレ_sb(table:テレ)、SF_テレ履歴(table:テレ履歴)があります。 テレ_sb(table:テレ)のイベントプロシージャーには以下のように書いております。上記の点、防ぐ方法をどなたかご教授ください。よろしくお願い申し上げます。 Sub History_tel() Dim Ctr As Control Dim strSQL As String For Each Ctr In Me.Controls If ((Ctr.ControlType = acTextBox) Or (Ctr.ControlType = acComboBox)) Then If Ctr.OldValue <> Ctr.Value Then strSQL = "insert into テレ履歴 select * , '" & CurrentUser & "' as 更新者 FROM テレ '" & _ "where 顧客コード = " & Me.顧客コード DoCmd.SetWarnings False DoCmd.RunSQL strSQL DoCmd.SetWarnings True Exit Sub End If End If Next Ctr End Sub Private Sub Form_BeforeUpdate(Cancel As Integer) History_tel End Sub Private Sub Form_AfterUpdate() Forms("メイン").Form.SF_テレ履歴.Requery End Sub

  • 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

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

    行き詰まってます。アドバイスお願いします。 変更した履歴を記録しようと見よう見まねで作成しました。 テーブル:履歴  変更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 宜しくお願いします。

  • 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処理がうまくいかない

    お世話になります。 T_請求に追加する追加クエリQ_家賃請求Tがあります。 どの物件を更新するかをチェックボックスで指定し、追加クエリの抽出条件にしています。 月に1度のみの操作ですが、数人でこのデータベースを触り、 何度も追加されると困るので2度目以降はエラー処理をさせたいと思っています。 Private Sub 更新_Click() Dim ret As Integer ret = MsgBox("チェック物件を請求更新します。" & vbCrLf & "よろしいですか?", _ vbYesNo + vbQuestion, "請求月次更新") If ret = vbYes Then If DCount("[契約者CD]", "[T_請求]", "[物件CD] = " & Me!物件CD & _ " AND [T_請求]![請求年月] > #" & DateSerial(Year(Date), Month(Me![処理日]) + 1, 1) & "#") _ <> 0 Then MsgBox "すでに指定物件の請求は更新されています" & vbCrLf & _ "同じ月に請求を2度更新できません" Else DoCmd.SetWarnings False DoCmd.OpenQuery "Q_家賃請求用T" MsgBox "更新されました" DoCmd.SetWarnings True End If Else If MsgBox("処理を中止しました", vbOKOnly + vbDefaultButton1 + vbExclamation) = vbOK Then Me.Undo Cancel = True End If End If End Sub 以上のようなコードを書きました。 処理が正しくできているか確認のために、動作を調べたのですが、 まったく同じ請求年月で同じ物件CDのものが保存先のテーブルに処理されてしまいます。 どの部分を直せばいいのでしょうか? 足りない情報があれば提示しますので、よろしくお願いいたします。

  • VBAの実行時エラー'2522'について

    前任者がAccess2003により作成したデータベースがあります。 CSVデータを取り込む仕組みがあるのですが、下記のエラーが出て困っています。 実行時エラー '2522': このアクションまたはメソッドを実行するには[File Name/ファイル名]引数が必要です。 どうやらVBAによるエラーだと判明しましたが、それ以上はよくわかりません。 以下のような構文になっています。 Option Compare Database ---------- Private Sub CSV取込_Click() TextConv strFileName, "マスター定義", "T_マスター" End Sub ---------- Sub TextConv(strFle, strInp, strTbl) Dim strSQL As String strSQL = "DELETE * FROM " & strTbl If MsgBox("テーブルデータを更新しますか?", 4, "テーブル更新") = vbYes Then CurrentProject.Connection.Execute strSQL DoCmd.TransferText acImportDelim, strInp, strTbl, strFle, True MsgBox "テーブルデータを更新しました" End If End Sub ---------- Private Sub 参照_Click() Dim strFileName As String strFileName = GetFileName() If Len(strFileName) > 0 Then Me.filepath = strFileName Else MsgBox "取込対象ファイルを選択してください! " End If End Sub 以上のようになっています。 デバッグを実行すると「strFle」の値がEmptyになっているのでここだとは思うのですが、どうしたらよいかわかりません。 どなたかお知恵をお貸し願えませんでしょうか。 宜しくお願いします。

  • アクセス2007 テーブルの全削除とデータ移動

    アクセス2007 テーブルの全削除とデータ移動 全テーブルを削除して、データをインポートしようとしています。 質問1. 下記のコードで、リレーションの張ってあるテーブルの削除でエラーになります。 でも、DoCmd.SetWarnings Falseの状態で、手動で削除するとエラーになりません。 だったらと思い、コードにDoCmd.SetWarnings Falseを追加したのですが、やはりエラーになります。 対処法はないでしょうか? 質問2. テーブルの中に「~TMP******」という勝手に作られたテーブルは、削除してもいいものなのでしょうか? 質問3. 削除後にインポートをしたいのですが。 手動でアクセスメニュー>外部データ>アクセス(のインポート)>現在の~~>すべて選択(テーブル)>OK これを実現するVBの記述は、どんなコードになるのでしょうか? --------------------------------------------------------------------- Private Sub 旧バージョンからデータ移動_Click() Dim i As Integer Dim tbls As DAO.TableDefs Dim tbl As DAO.TableDef '開いているフォーム全てを閉じる For i = Forms.Count - 1 To 0 Step -1 DoCmd.Close acForm, Forms(i).Name Next i Set tbls = CurrentDb.TableDefs DoCmd.SetWarnings False  '追加-------------------    ’全テーブル削除 For Each tbl In tbls If InStr(1, tbl.Name, "MSys", vbBinaryCompare) = 0 And InStr(1, tbl.Name, "~TMP", vbBinaryCompare) = 0 Then tbls.Delete (tbl.Name) End If Next DoCmd.SetWarnings True   '追加----------------   ’旧バージョンからのデータインポート   ’VBコードがわかりません End Sub ------------------------------------------------------------------------- ※旧バージョンとはアクセス本体ではなく、自分でつくったDBの旧バージョンです。 複数質問で申し訳ありませんが、よろしくお願い致します。

  • Access2000 VBAについて質問です。

    Access2000 VBAについて質問です。 下記ソースコードでUPDATE(更新)しているのですが、バチンとAccessが落ちてしまいます。 Private sub UPDATESQL() StrSQL = "SELECT * FROM T_StandardList WHERE ID = " & Me.ID Set ct = CurrentProject.Connection RS.CursorLocation = adUseClient RS.Open StrSQL, ct, adOpenDynamic, adLockOptimistic RS![filed1] = Me![Value1] RS![filed2] = Me![Value2] RS![filed3] = Me![Value3] RS![filed4] = Me![Value4]      Call CloseButton_Click Set RS = Nothing Set ct = Nothing End Sub Private Sub CloseButton_Click() DoCmd.SetWarnings False 'SQLの実行 DoCmd.RunSQL "DELETE FROM T_TempList" DoCmd.Close acForm, Me.Name DoCmd.SetWarnings True End Sub CloseButtonをクリックしても落ちることがあるので、CloseButton_Click関数が怪しいとは感じます。 どなたか詳しい方アドバイスよろしくお願いいたします。 m(_ _)m

  • Access VBA Split利用方法

    お世話になります。 VBAを勉強している最中です。 Accessを利用して、txtファイルをインポート後、テーブルの項目を配列利用して カンマ区切りにしたいのと、Splitを利用して、配列を条件分岐に利用して、テーブルに 書き込みをしたいとおもってます。 おそらく基本的なことで自分で勉強するべきと思うのですが 漠然なイメージしかない状態で、ヒントやこういう方法があるなど 教えていただけますでしょうか 基本的な使い方ですと Private Sub XXX_Click() str = Split("あああ いいい ううう")   MsgBox str(1) End Sub 上記の用な利用方法と思いますが、このような使い方ではなく test(0)のような使い方をして、条件分岐で利用したいと おもってます。 イメージとしては、下記のようなことをイメージしてます。 Public Sub Test()   Dim test() As String Dim row As String   Dim iNum1 As Long,   Dim iNum2 As Long      DoCmd.SetWarnings False   DoCmd.RunSQL "DELETE * FROM data"  DoCmd.TransferText acImportFixed, "インポート定義", "data", "d:\data.txt"   DoCmd.SetWarnings True   iNum1 = 0   iNum2 = 0   Do While xxx      If test(0) = 0 Then          iNum1 = iNum1 + 1 iNum2 = 1      Else         xxxx      End If   Loop End Sub ここでSplitを利用してどのように指定するのが望ましいのか考えてしまってます。 test = row.Split(" ") を利用する場合、どのように連結(row)させるのかが不明です。 知識不足もあり、説明がわかりづらいと思うのですが、よろしくお願いします。

  • Access csvファイルの取り込み

    Access2021 2箇所の保存先の違う所からcsvファイルの取り込みについて伺います。 csv取り込みボタンは、2つ用意しています。 1つ目のボタンに、コード記述して動作確認は正常に動作して他のボタンも正常に動作。 2つ目にのボタンに、csvの格納パス名のみ変更後コード記述して動作確認したら全てのボタンが反応しなくなりました。 動作としては、削除クエリでテーブルのデータを削除してから、指定したフォルダからcsvファイルを選択して取り込ます。 同じテーブルを使用して、格納先の違うcsvファイルを使用する操作になります。 コードは、以下の通りです。 ①ボタン1 Private Sub コマンド61_Click() '削除クエリ実行 DoCmd.SetWarnings False DoCmd.OpenQuery "テーブルデータ削除" DoCmd.SetWarnings True Dim msg As String msg = getFilePicker If msg = "" Then Exit Sub On Error GoTo err_sample DoCmd.TransferText acImportDelim, , "インポート先テーブル名", msg, True MsgBox "インポートが終了しました。", vbInformation + vbOKOnly, "処理完了" Exit Sub err_sample: Select Case Err.Number Case 3011 MsgBox "ファイルが見つかりません。処理を終了します。" Case Else MsgBox Err.Number & ":" & Err.Description End Select End Sub Function getFilePicker(Optional dTitle As String = "ファイル選択") '2003以降 Const msoFileDialogFilePicker As Integer = 3 Dim fDlg As Object Set fDlg = Application.FileDialog(msoFileDialogFilePicker) fDlg.Title = dTitle fDlg.InitialFileName = "csvインポートデータのフォルダパス名①" fDlg.AllowMultiSelect = False fDlg.Filters.Clear fDlg.Filters.Add "すべてのファイル", "*.*" fDlg.Filters.Add "CSV ファイル (*.csv)", "*.csv" fDlg.FilterIndex = 1 If fDlg.Show Then getFilePicker = fDlg.SelectedItems(1) Else getFilePicker = "" Me.Refresh End Function ②ボタン2 Private Sub コマンド62_Click() '削除クエリ実行 DoCmd.SetWarnings False DoCmd.OpenQuery "テーブルデータ削除" DoCmd.SetWarnings True Dim msg As String msg = getFilePicker If msg = "" Then Exit Sub On Error GoTo err_sample DoCmd.TransferText acImportDelim, , "インポート先テーブル名", msg, True MsgBox "インポートが終了しました。", vbInformation + vbOKOnly, "処理完了" Exit Sub err_sample: Select Case Err.Number Case 3011 MsgBox "ファイルが見つかりません。処理を終了します。" Case Else MsgBox Err.Number & ":" & Err.Description End Select End Sub Function getFilePicker(Optional dTitle As String = "ファイル選択") '2003以降 Const msoFileDialogFilePicker As Integer = 3 Dim fDlg As Object Set fDlg = Application.FileDialog(msoFileDialogFilePicker) fDlg.Title = dTitle fDlg.InitialFileName = "csvインポートデータのフォルダパス名②" fDlg.AllowMultiSelect = False fDlg.Filters.Clear fDlg.Filters.Add "すべてのファイル", "*.*" fDlg.Filters.Add "CSV ファイル (*.csv)", "*.csv" fDlg.FilterIndex = 1 If fDlg.Show Then getFilePicker = fDlg.SelectedItems(1) Else getFilePicker = "" Me.Refresh End Function ご教授の程、宜しくお願い致します。