• ベストアンサー

VBAで データベースにデータを取り込みたい

患者データベースを作っています。 患者情報には患者ID、患者氏名、レントゲン画像、撮影日等のフィールドがあ ります。 一人の患者に写真は複数枚あるので、患者IDでリレーションシップをとってお り、テーブルはT-患者情報、T-画像情報の2つにわけています。 このデータベースに新規で患者情報と画像情報を入れます。 通常は入力フォームからですが、このデータベースには入力フォームが存在し ません。 患者情報はtxtファイル(この中に患者ID、患者氏名、撮影日等が記入されてい る)とjpegファイル(これがレントゲン画像)に入っています。 この2つのファイルがフロッピーディスクの中に入った状態です。 テキストファイル内のデータは下記のような感じです。 (例:Img0001.text) 患者ID: 1 患者氏名:ヤマダ タロウ 撮影日:H15.01.01 txtファイル内には、患者情報は一名分しか入れてありません。 このような場合、txtファイル内の患者情報をデータベースに取り込むにはどの ようにすればよいですか? コマンドボタンからのクリックイベントによって処理させる予定です。 ご指導よろしくお願いします。

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

  • ベストアンサー
  • PAPA0427
  • ベストアンサー率22% (559/2488)
回答No.2

以下の方法で試してみて下さい。 Dim cn As ADODB.Connection Dim rs As ADODB.Recordset Set cn = Application.CurrentProject.Connection Set rs = "T-患者情報", cn, adOpenKeyset, adLockOptimistic sql = "患者ID = " & ID rd.FindFirst sql if rs.NoMatch then rs.AddNew rs!患者ID = ID rs!患者氏名 = name rs.Update else msgbox("患者IDが重複してます。") End If rs.Close cn.Close

tattann
質問者

お礼

最後に問題が生じましたが、 "T-患者情報"を[]で囲んで"[T-患者情報]"にしたらうまく動作しました。 ありがとうございました。 大変助かりました。

tattann
質問者

補足

早速コードを試してみたのですが、 Set rs = "T-患者情報", cn, adOpenKeyset, adLockOptimistic の部分でコンパイルエラーが発生して、修正候補がステートメントの最後と言われます。 一旦、Set rs = New ADODB.Recordsetにして それからrs.Open "T-患者情報"にしても結局そこの部分でエラーがでます。 エラーの内容は SQLステートメントが正しくありません。 DELETE,INSERT,PROCEDURE,SELECT,UPDATEを使用してください。 との事です。 最初の部分でつまづいてしまって 後がすすみません。 ご指導お願いします。

その他の回答 (4)

  • 2ch
  • ベストアンサー率51% (64/125)
回答No.5

select * from T-患者情報

  • 2ch
  • ベストアンサー率51% (64/125)
回答No.4

DCount関数を使用して、痛い目にあったことあり バージョンの違うアクセスとのリンクテーブルでDCountを使用したら、ばぐった ADOでSQL文の発行ならマルチにいけていい感じだ

  • maruru01
  • ベストアンサー率51% (1179/2272)
回答No.3

>ところでデータのチェックをしたいのですがどのよう >にしたらいいでしょうか レコードセットを使用しなくてもDCount関数で出来ます。 Dim ret As Long ret = DCount("患者ID","T-患者情報","患者ID = " & ID) If ret > 0 Then   MsgBox "既に存在している。" End If という感じです。

  • maruru01
  • ベストアンサー率51% (1179/2272)
回答No.1

こんにちは。maruru01です。 いろいろ方法はあると思いますので、一例です。 テキストファイルからの読み込みはOpenステートメントで行い、中のデータを一旦変数に格納します。 そして、そのデータをテーブルへSQLで追加します。 SQLの追加をコードで書くには、 Dim SQL As String 'SQL文を格納する変数 SQL = "(SQL文を記述)" DoCmd.RunSQL SQL という風にします。 テーブルへの追加はADOのレコードセットを使用しても出来ます。 詳細はヘルプやいろんなサイトや本を見て下さい。 サイトを1つ紹介します。そこからリンクをたどっていろいろなサイトを見つけて下さい。 http://www.mahoutsukaino.com/

参考URL:
http://www.mahoutsukaino.com/
tattann
質問者

補足

Dim cn As ADODB.Connection Dim rs As ADODB.Recordset Set cn = Application.CurrentProject.Connection Set rs = "T-患者情報", cn, adOpenKeyset, adLockOptimistic rs.AddNew rs!患者ID = ID rs!患者氏名 = name rs.Update rs.Close cn.Close 上記のようにしました。 ありがとうございました。 ところでデータのチェックをしたいのですがどのようにしたらいいでしょうか。 患者ID100のヤマダタロウがデータベースに既存するとします。 でFDから取り込むファイルの中が、患者ID100でヤマシタハナコとします。 患者IDは重なる事はないので、あきらかにエラーです。 一旦データベースを開いて、その比較を行いたいのですがやり方がいまいちわかりません。

関連するQ&A

  • アクセス2000 データの画像の表示方法

    テーブルに患者ID、患者氏名、撮影日、撮影部位、レントゲン写真のデータを作成します。 フォームでそのデータの内容を表示する際に、レントゲン写真はそのまま表示されず、クリックした際にIEが立ちあがって表示されます。 私が実現したいのは フォームで表示させる段階で、すでにレントゲン写真が見えてるという感じです。 どこに設定を施せばよろしいのですか? 宜しければ教えてください。 お願いします。

  • 【VBA】フォームの作り方

    サークルの活動管理表を作っています。 以下のようなエクセルの一覧に 「フォームでテキストを入力→ピボットテーブルで集計」 の流れです。 役職にはR,Tなどのアルファベットが5種類ほど入ります。 エクセル上ではこんな形でデータベースになっています。 ここに追加していくためのフォームです。 年 月 日 氏名ID 氏名 役職 区分ID 区分 金額

  • ACCESS・VBAが全く分かりません。

    次のようなことをやるにはどういうコードを書けばいいですか? (患者情報テーブル) ID 氏名 1  阿部 2  伊藤 3  宇治 (表示フォーム) ID  1    氏名 阿部  表示フォームのIDを1から2へ変更したら、 自動的に氏名も阿部から伊藤へ変わってほしいのです。 これを実現する方法を教えて下さい。 それと、ユーザーが任意で指定できるのはIDだけにしたいので、 氏名はテキストボックスでなくてラベルで充分なのですが、 アクセスではラベルの表示をVBAで変えることはできるのでしょうか。 エクセルならそれができましたよね。

  • 特定条件の全データを指定データに一括追加したい

    以下の2つのテーブルがあります T_個人情報 T_履歴情報 それぞれのフィールドは以下になります T_個人情報 【ID】オートナンバー、【個人番号】テキスト、【氏名】テキスト…【チェック20】yes/no T_履歴情報 …、【個人番号】テキスト、【オーダー番号】テキスト、【ポイント】テキスト… ※各テーブルの【個人番号】はリレーション F_処理フォーム フォームAにて【テキスト01】非連結、【テキスト02】非連結、【コマンド01】コマンドボタン <実現したい事> F_処理フォームにてT_個人情報のチェック20がONの該当者のみに以下の処理 【コマンド01】クリック→【テキスト01】に入力したデータを【オーダー番号】に 【テキスト02】に入力したデータを【ポイント】に、それぞれ追加したい。 例) T_個人情報  001,123456,テスト次郎,…,yes  002,123457,テスト三郎,…,yes F_処理フォーム  テキスト01:55555 テキスト02:1000 コマンドボタン T_履歴情報  …,123456,1111,200  …,123456,2222,500  …,123456,1133,800  …,123457,1233,100   ↓   ↓  …,123456,55555,1000  …,123456,1111,200  …,123456,2222,500  …,123456,1133,800  …,123457,55555,1000  …,123457,1233,100 よろしくお願いします

  • VBAとデータベースの接続・呼び出し

    VBAについての質問です。 ACCSESSに従業員テーブルを作り、 従業員Noとパスワードを10件登録しておく VBフォーム上ではテキストボックスを用いて Text_従業員NoとText_パスワードを作成しておく ACCESSデータベースと接続し VBフォーム上Text_従業員Noに「2」と入力し 従業員テーブルに登録されている従業員No「2」を検索。 VBフォーム上Text_パスワードに従業員テーブルの従業員No「2」に 登録されているパスワードを入力し、従業員Noとパスワードが 一致している場合、認証され中へ入れる このようなものをSQLを用いて作りたいのですが、 いまいちよく分かりません。 分かる方いらっしゃいましたら 優しい回答お願いいたします。

  • Access2002_メソッドまたはデータメンバが見つかりません

    社員情報を入力・変更していくためのフォームがあります。 そのフォームが立ち上がる際  ・新規入力画面を表示させる  ・フォーカスを[データ入力更新日]テキストボックスに合わせておく という操作をさせたく下記のようなコードを書きました。 Private Sub Form_Open(Cancel As Integer)  DoCmd.GoToRecord Record:=acNewRec  Me.txt_データ入力更新日.SetFocus End Sub フォームを立ち上げようとすると「.txt_データ入力更新日」が反転されタイトルで書いたエラーメッセージが表示されます。 試しに他のテキストボックスにフォーカスがいくよう変更してみるとエラーは起こらず 指定したテキストボックスにフォーカスが置かれてフォームが開きました。 [txt_データ入力更新日]の名前はプロパティからコピペしているので間違っておりません。 名前が違っている以外にどんなことが考えられるでしょうか? よろしくお願い致します。 テキストボックスの名前は間違いありません。

  • ユーザ管理データベース

    教えてgooやYahooで使われているようなマイページ プログラムをPerlとテキストファイルで作りました。 それはそれで一応できあがったのですが、 これを今度はデータベースソフトで作り直したいと 考えています。データベースはいまのところACCESSです。将来的にはデジエなんかよさそうに思っています。 Perlで組んでいると流れはわかるのですが、 ACCESSだとイマイチ流れがわかりません。 Perlだと、 ユーザID、PW入力 ↓ ユーザデータを管理しているファイルとマッチング ↓ 合致しているユーザとデータを保持しているファイルとマッチング ↓ マッチしているユーザの情報を画面表示 という流れです。 AさんにはAさんの情報が見られるように、BさんにはBさんの情報が見られるようにしたいのです。 データベースでやれば簡単にできそうな流れなのですが、ユーザIDとパスワード入れてマッチングするところでなにも思い浮かびません。 簡単なサンプルプログラムなどあるととても参考になります。またはヒントでも結構なのでご教授ください。

  • テキストボックスから一致したデータを抽出したい。

    初心者です。Access2003で、 (1)テーブルで「氏名」、「住所」のデータを作成。 (2)フォームでテキストボックス(txt_入力)とコマンドボタンを作成。 (3)押下時で開くようなフォームを作成(F_データリスト) テキストボックス(txt_入力)に氏名を入力し、テーブルと一致したものだけを抽出したい。 以下のように記述するとコマンド45押下でパラメータの入力画面がでてしまします。助けてください。 Private Sub コマンド45_Click() On Error GoTo Err_コマンド45_Click Dim stDocName As String Dim stLinkCriteria As String stDocName = "F_データリスト" stLinkCriteria = "[氏名]=" & " Me![txt_入力]" DoCmd.OpenForm stDocName, , , stLinkCriteria 以下省略。

  • Access VBAで自動連番を振るには

    【テーブル名】T_株券管理 【フォーム名】F_株主入力 【フィールド名】株主ID(テキスト型)(主キー) フォームに入力する際にオートナンバーを使用せずに、 レコードが切り替わると「株主ID」が「00001」「00002」「00003」・・・・というように1づつ発番されるようにしたく、AccessVBAの本を読んだり、ネットでDmax等調べているのですが、必要な情報が探せずに困っています。 本当はオートナンバーでIDを振っても良いのですが、レコードの削除等行った時に歯抜けになってしまうので、うる覚えで申し訳ないのですが・・・確か、フォームのテキストボックスのプロパティ、コードビルダでVBを「レコードが移動した際に」→「株主IDが0の場合に”00001”を、0でない場合には既存の数値に+1した数値をテーブルT_株券管理の”株主ID”に入力する。」といった感じの記述がしてあったと思います。VB初心者なので、説明が上手くできずにすみません。 このような記述方法はありますでしょうか?

  • オートシェイプのような作図入りデータベースを作りたい

    現在Accessでデータベースを作成しているのですが、エクセルで言うオートシェイプのような作図を、レコード上のフォームのひとつに描く必要が出てきました。 そこで質問なのですが、そのような方法はあるのでしょうか。 また、ない場合はどのようなデータベースを使うことで対応できるようになりますでしょうか。 図解すると ・レコード→フォームA(テキスト情報のみ)      →フォームB(テキスト情報のみ)      →フォームC(テキスト情報+任意の作図描画) ・フォームCを呼び出すと、作図情報も一緒に出てくる。 という形になります。 出来ればMS Office関連商品だけで出来れば嬉しいのですが‥。 どうぞご教授ください。よろしくお願いします。