• 締切済み

Access 日報管理する データベース作成しています。

テーブルAに次のフィールドがあります。 作業日付 作業項目 メモ 作業時間 ログインID グループ名 ログインIDとグループ名は別のフォームからのデータを表示しています。 (非連結) テーブルAはフォームAで入力しています。 レコードに非連結のログインIDとグループを保存していきたいのですが, SQLとかVBAとかいろいろ調べてやっていますが, うまく出来ません。 Public Sub aiu() Dim db As Database, rst As Recordset Set db = CurrentDb Set rst = db.OpenRecordset("TテーブルA", dbOpenTable, dbAppendOnly) With rst .AddNew ![ログインID] = Forms![FテーブルA]![ログインID] '---ログイン時 ![グループ3] = Forms![FテーブルA]![グループ名] '---ログイン時 ![作業日] = Forms![F日報メイン].[埋め込み25]![作業日付] ![項目No.] = Forms![F日報メイン].[埋め込み25]![作業項目] ![メモ] = Forms![F日報メイン].[埋め込み25]![メモ] ![作業時間] = Forms![F日報メイン].[埋め込み25]![作業時間] .Update End With rst.Close db.Close Set db = Nothing End Sub いろいろ調べていますがどうしても出来ません。 申し訳ありませんがどうか教えて下さい。

みんなの回答

  • PXU10652
  • ベストアンサー率38% (777/1993)
回答No.1

 それ程難しいことではないです。隠し属性をうまく使えば、出来ます。 方法1.ログイン画面から、フォームAに遷移するときに、ログイン画面を閉じずに、見えない状態に変更し、フォームAで更新するときにログイン画面のログインIDを直接参照する。 方法2.ログイン画面から、フォームAに遷移するときに、フォームA上に表示されないテキストボックスを2つ用意して、そこに、ログインIDとログイングループの内容を保持しておき、更新時にその値を参照する。

kuma2681
質問者

お礼

ありがとうございました。 隠し属性は初めて聞きました。 違う方法ですが、何とか自力で解決いたしました. 教えていただいた方法も勉強してみます. 本当にありがとうございました.

関連するQ&A

  • access リストボックスから文章を選び、テーブルに挿入

    > > テーブルとして、 > > テーブル:T_患者 > 患者ID 氏名 > 1 あいうえお > 2 かきくけこ > > テーブル:T_具体策 > 具体策ID 具体策 > 1 観察項目A > 2 観察項目B > 3 観察項目C > 4 観察項目D > 5 援助項目A > 6 援助項目B > > テーブル:T_看護計画 > 患者ID 具体策 > 1 観察項目A > 1 観察項目B > > とあったとします。 > > で、フォームとして > > フォーム:F_看護計画入力 ※メイン/サブフォーム形式 >  メインフォーム:患者情報 >  サブフォーム:看護計画の情報 > > フォーム:F_看護計画選択>>  リストボックス:具体策 >   値集合ソース:SELECT 具体策 FROM T_具体策 >   複数選択:標準  ※これで、複数選択ができるようになります。 >  コマンドボタン:追加 >   > とあり、F_看護計画入力のコマンドボタンで、F_看護計画選択に画面遷移し、リストボックスで > 選択した後に、コマンドボタン:追加をクリックすると、テーブル:T_看護計画にデータを追加します。 > > コマンドボタン:追加 のクリック時イベント > > Dim dbs As DAO.Database > Dim rst As DAO.Recordset > Dim varItm As Variant > > Set dbs = Application.CurrentDb > Set rst = dbs.OpenRecordset("テーブル12") > > For Each varItm In Me!具体策.ItemsSelected > rst.AddNew > rst!患者ID = Forms!F_看護計画入力!患者ID > rst!具体策 = Me!具体策.ItemData(varItm) > rst.Update > Next varItm > > rst.Close > dbs.Close > Set rst = dbs.OpenRecordset("テーブル12") のところで、エラーが出て、存在しませんとでます。これは何をいみしているのですか? とりあえず、つくってみました。そこで、("テーブル12")とはなんなんでしょうか?存在しませんとでます。

  • 複数のデータベースを使う場合

    php4 + MYSQL4.0.2で作業しています。 1つのサーバーにある、複数のデータベースに接続する方法を教えてください。 DB1:テーブルhoge(ID、name) DB2:テーブルhogehoge(ID, hogeID, comment) このような場合、データベースが全てDB1に入っているとすれば、 $con = mysql_connect(host, user, pass); sql="SELECT name, comment" . " FROM hogehoge INNER JOIN hoge ON hogehoge.hogeID = hoge.ID"; $rst = mysql_db_query(DB1, $sql, $con); $col = mysql_fetch_array($rst); print($col['name'] . $col['comment']); となりますが、 テーブルhogeとhogehogeが、異なるデータベースに存在する場合はどのようにすればよいのでしょうか? 以上、よろしくお願いいたします。

    • ベストアンサー
    • MySQL
  • Access VBAでパラメータクエリをSQL文へ

    すみません、、初めて質問しますが、 お手柔らかに宜しくお願い致します。 1.集計クエリ1    ID--Group化 出庫数--合計 日付--Where条件 2..集計クエリ2  ID--Group化 入庫数--合計 日付--Where条件 3.出力用クエリ  ID 商品名 集計クエリ1の合計 集計クエリ2の合計  IDと左結合で、上記のクエリを作成 デザインビューでは1~3は完成しており、 VBA上で1と2を3のSQLに置き換えるところで悩んでおります。。 どなたか教えてください。 ちなみに1.集計クエリの下記のように試してみましたが、 Dim dbs As DAO.Database Dim qdf As QueryDef Dim rst As DAO.Recordset Set qdf = dbs.QueryDefs("Q_データ抽出をしたいクエリ") With qdf .Parameters("[Forms]![f_DataEx]![txt_YearStart]") = "2011" .Parameters("[Forms]![f_DataEx]![txt_MonthStart]") = "02" .Parameters("[Forms]![f_DataEx]![txt_DayStart]") = "23" .Parameters("[Forms]![f_DataEx]![txt_YearEnd]") = "2011" .Parameters("[Forms]![f_DataEx]![txt_MonthEnd]") = "02" .Parameters("[Forms]![f_DataEx]![txt_DayEnd]") = "23" Set rst = .OpenRecordset End With 上記で求めた"rstを基にSQL文が実行できれば、実現できそうなんですが、 うまく行きません。 言葉足らずの内容もあるかと思いますが、宜しくお願い致します。

  • アクセス テーブルデータ他のテーブルにコピーVBA

    win10 access365のmdbファイルにおいて table1のフィールド1がID 数値型 長整数型 値要求あり 重複あり フィールド2が氏名 短いテキスト型 225 値要求なし 重複あり  table2;フィールド1がID 数値型 長整数型 値要求あり 重複あり フィールド2が氏名 短いテキスト型 225 値要求なし 重複あり  上記に置いて table2の新しいデータとして table1のデータをコピーしたい、 ただしtable1には レコードは1行だけとします (table1にレコードが複数行ある場合の最新レコードだけtable2にコピーも出来れば知りたいです) アクセス付属の更新クエリーでは、どうも うまくいきません sqlにおいて UPDATE table1, table2 SET table2.ID = [table1]![ID], table2.氏名 = [table1]![氏名]; 上記動作しません Function table1から2() Dim db As DAO.Database Dim rst As Recordset Dim TB As Table Dim Rdset As Recordset On Error Resume Next Set db = DBEngine(0)(0) Set Rdset = db.OpenRecordset("table2", DB_OPEN_TABLE) Rdset.AddNew Rdset![ID] = Table![table1]![ID] Rdset![氏名] = Table![table1]![氏名] Rdset.Update End Function table1, table2を それぞれ 同名のフォームを作り Function table1から2() Dim db As DAO.Database Dim rst As Recordset Dim fm As Form Dim Rdset As Recordset On Error Resume Next Set db = DBEngine(0)(0) Set fm = Forms![table1] If Rdset.BOF Then Exit Function Else Set Rdset = db.OpenRecordset("table2", DB_OPEN_TABLE) Rdset.AddNew Rdset![ID] = Forms![table1]![ID] Rdset![氏名] = Forms![table1]![氏名] Rdset.Update End If End Function いずれも table2のデータ更新が なされていません すみません 宜しくお願い致します

  • データベースから複数の条件を指定して抽出するには

    VB初心者です。よろしくお願いします。 今、座席予約システムを作っています。その際、複数の条件を指定して、その条件に合うIDを抽出しようとしていますが、うまくいきません。具体的には、テーブル:[T-映画]の中にある、フィールド:[映画名]とフィールド:[時間帯]がそれぞれ一致したときに、同じテーブルにあるフィールド[映画ID]のデータを抽出するという処理です。 コードは次の通りです。 Private Sub Command1_Click() Dim db As ADODB.Connection Dim rst3 As ADODB.Recordset Set db = New ADODB.Connection db.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;" _ & "Data Source =データベースへのパス\zaseki.mdb" db.Open Set rst3 = New ADODB.Recordset rst3.Open "[T_映画]", db, adOpenKeyset, adLockReadOnly With rst3 .Filter = "映画名= ' " & Module1.mojiB & " ' " ☆☆ If .RecordCount = 0 Then MsgBox "その映画は登録されていません" Else rst3.Filter = "時間帯 =' " & Module1.mojiC & " ' " If rst3.RecordCount = 0 Then MsgBox "その映画は登録されていません" Else Module1.eigaID = rst3.Fields("映画ID") End If End If End With rst3.Close db.Close Set db = Nothing Set rst3 = Nothing End Sub ☆☆の部分で映画名があるにも関わらずカウントしてくれません。 変数Module1.mojiB には、String型の映画名が Module1.mojiC には、String型の時間帯がそれぞれ入っています。 フィールド[映画名]、[時間帯]の型はテキスト型です。 よろしくお願いします。

  • Accessのデータベースを使用した社員のログ管理

    OS:WindowsXP Access Version:Access2003 Table:[Tログ管理] (フィールド)ID/ログイン日/ログイン時/ログアウト日/ログアウト時/社員番号 Form:[ログイン]    [メインメニュー] コマンドボタン:”ログイン”([ログイン]フォームに配置)         ”終了”([メインメニュー]フォームに配置) Accessでデータ管理システムを構築しております。 数十名の社員が使用する予定です。 そこで、どの社員がいつ・何時に使用したのかログ管理をしたいと考えております。 考えている方法として、 (1)Access(システム)を起動すると、[ログイン]フォームが表示されます。”ログイン”コマンドボタンをクリックします。 (2)すると、[Tログ管理]のID(オートナンバー)/ログイン日/ログイン時/職員番号にそれぞれ登録されます。 (3)”ログイン”コマンドボタンをクリックした後は、[メインメニュー]フォームが表示され、[ログイン]フォームは閉じます。 (4)[メインメニュー]フォームには、作業の内容を題したコマンドボタンを配置予定です。そして一番下に”終了”コマンドボタンを配置、クリックすると先ほどの[Tログ管理]から社員番号の入ったレコードを検索し、ログアウト日・ログアウト時を登録したいのです。 この「ログイン」コマンドボタンのクリック時イベントに下記のようなコードを記述しました。このコードで(2)(3)の動作はしてくれます。 ************* Public Sub ログイン_Click() Dim mySID as Object Dim CN as ADODB.Connection Dim RS as ADODB.Recodset Set mySID=CreateObject("Wscript.Network") Set CN=CurrentProject.Connection Set RS=New ADODB.Recordset RS.Open "Tログ管理",CN,adOpenKeyset,adLockOptimistic RS.AddNew RS!ログイン日=Date RS!ログイン時=Now RS!職員番号=mySID.UserName RS.Update RS.Close: Set RS=Nothing CN.Close: Set CN=Nothing DoCmd.OpenForm"メインメニュー",acNormal DoCmd.Close acForm,"ログイン" End Sub ************************** ”終了”コマンドボタンのクリック時イベントに(4)の作業をしてくれるコードを記述したいのですが、FilterやFindの使い方がよくわからなくて、前に進めません。。。 社員番号から検索せずにオートナンバーのIDを引数で渡す方法もありなのかな?と思ったのですが、初心者のため、どちらが効率的なのかわからないので、効率的な方法がありましたらどうか教えてください。 初心者なので、誤字脱字・読みにくい箇所があると思いますが、どうぞご容赦ください。 丁寧に教えてもらえると助かります、よろしくお願いいたします★

  • アクセスで多対多のデータベースを作る場合で(長文です)

    今、グループが70個、人が100人くらいのデータベースを作成中です。1つのグループには3人の人が属し、1人1~7のグループに属します。 1対多ならまだ考えやすいのですが、多対多ということで、悩んでいます。 とりあえず今は、グループの情報を管理するテーブル、人の情報を管理するテーブルと、グループIDと人IDの組み合わせをテーブルにして、この三つをつなぐことで様々な作業をするようにしています。そこで困った問題が二つ発生しました。 ・作業の都合上、ある人がどのグループに所属しているかというのを紙ベースで一覧にしなければならなくなりました。イメージとしては下のような感じです。 レポートでもフォームでも何でもいいのですが、このような形でデータを出すことは出来ないでしょうか? (地道に手作業で写すしかないでしょうか) ┌──┬────┐ │名前│グループ│ ├──┼─────┤ │○○│A B D │ ├──┼─────┤ │××│B E   │ ├──┼─────┤ ・各グループで、各人10点満点の点数を持っており、その平均点を元に色々作業をしたいことがあります。(同じ人でもグループ毎に点数が異なるので、今はその点数をグループIDと人IDの組み合わせを管理するテーブルに入れて一緒に管理しています。)クエリやフォームなどで、平均点を計算させてグループを管理しているテーブルに書き込むことは出来ないでしょうか。 長文申し訳ございませんが、宜しくお願いいたします。

  • 日報計算

    お世話になっております。 うまく説明できませんが以下のデータがありますが、 ID 日付 社員ID 開始 終了  時間 残業 1 12/1 001   8:00 17:00  8 2 12/2 001   17:00 20:00  3 本当は下のように作りたいです。 ID 日付 社員ID 開始 終了  時間 残業 1 12/1 001   8:00 17:00  8 2 12/2 001   17:00 20:00     3 ですのでSQLでつくってみました SQL = ("SELECT T_作業日報明細.日付, T_作業日報明細.個人ID,Min(T_作業日報明細.[Start Time]) AS [Start Timeの最小], Max(T_作業日報明細.[End Time]) AS [End Timeの最大], Sum(T_作業日報明細.時間) AS 時間の合計" & "FROM T_作業日報明細" & "GROUP BY T_作業日報明細.日付, T_作業日報明細.個人ID;") ですが以下のコードはVBAでどいう風に書けばいいか分かりません。 もし日付と社員IDが同じなら 時間の合計 = EndTimeの最大 - StartTimeの最小 - Me.休憩 If 時間の合計 <= 8 Then Me.残業 = 0 Me.勤務時間 = 時間の合計 Else Me.残業 = 時間の合計 - 8 Me.勤務時間 = 8 End If そうではない場合 Soukinmu = EndTime - StartTime - Me.休憩 If Soukinmu <= 8 Then Me.残業 = 0 Me.勤務時間 = Soukinmu Else Me.残業 = Soukinmu - 8 Me.勤務時間 = 8 End If めちゃくちゃだと思いますがご指導をよろしくお願い致します。

  • Accessのリンクテーブル

    すみません、教えてください。 Accessで複数端末から一つのMDBにデータ登録をさせる為に、VBAでツールを作っています。以下のように記述をして いるのですが、MDBを閉じるたびに、リンク先のDBを認識しなくなってしまいます。テーブルでリンクを貼りなおすとまた動くようになるのですが、どうしたらリンクを貼りなおせずにできるようになるのか、どなたか教えてください。どうかお願いいたします。 Dim LinkDB as Database Dim RST AS Recordset Set LinkDB = WorkSpaces(0).OpenDatabase("リンク先のDBの名前") Set RST = LinkDB.OpenRecordset("テーブル名",DbOpenTable)

  • Access2003での排他制御

    Access2003での排他制御 顧客管理をAccess2003で行っています。 新規で登録するときに顧客IDの重複チェックを[顧客ID_LostFocus]内で DCountを使って行っています。 [cmd登録_Click]で Set db = CurrentDb Set rst = db.OpenRecordset("顧客情報") With rst .AddNew ![顧客id] = me.txt顧客ID.value ![顧客住所] = me.txt顧客住所.value ![顧客TEL] = me.txt顧客TEL.value ・ ・ ・ .Update End With 以上の処理を行っています。 (1)Aさんが新規登録で顧客IDを入力 (2)重複されていないので顧客名や住所の入力をおこなう。 (3)Bさんが同じ顧客IDで新規登録 このケースの場合、 Aさんはまだ登録処理が済んでいない(登録ボタンを押していないためテーブルに反映されていない) ので(3)ではBさんの顧客IDは重複されていません。 Aさんが入力中の顧客IDをBさんが入力した時に「他のユーザーが使用しています」みたいな メッセージを表示するにはどのようにしたらよろしいでしょうか?? 文章が上手く書けなくてもうしわけありません、 何卒宜しくお願いいたします。

専門家に質問してみよう