- ベストアンサー
VBAで データベースにデータを取り込みたい
患者データベースを作っています。 患者情報には患者ID、患者氏名、レントゲン画像、撮影日等のフィールドがあ ります。 一人の患者に写真は複数枚あるので、患者IDでリレーションシップをとってお り、テーブルはT-患者情報、T-画像情報の2つにわけています。 このデータベースに新規で患者情報と画像情報を入れます。 通常は入力フォームからですが、このデータベースには入力フォームが存在し ません。 患者情報はtxtファイル(この中に患者ID、患者氏名、撮影日等が記入されてい る)とjpegファイル(これがレントゲン画像)に入っています。 この2つのファイルがフロッピーディスクの中に入った状態です。 テキストファイル内のデータは下記のような感じです。 (例:Img0001.text) 患者ID: 1 患者氏名:ヤマダ タロウ 撮影日:H15.01.01 txtファイル内には、患者情報は一名分しか入れてありません。 このような場合、txtファイル内の患者情報をデータベースに取り込むにはどの ようにすればよいですか? コマンドボタンからのクリックイベントによって処理させる予定です。 ご指導よろしくお願いします。
- みんなの回答 (5)
- 専門家の回答
質問者が選んだベストアンサー
以下の方法で試してみて下さい。 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
その他の回答 (4)
- 2ch
- ベストアンサー率51% (64/125)
select * from T-患者情報
- 2ch
- ベストアンサー率51% (64/125)
DCount関数を使用して、痛い目にあったことあり バージョンの違うアクセスとのリンクテーブルでDCountを使用したら、ばぐった ADOでSQL文の発行ならマルチにいけていい感じだ
- maruru01
- ベストアンサー率51% (1179/2272)
>ところでデータのチェックをしたいのですがどのよう >にしたらいいでしょうか レコードセットを使用しなくてもDCount関数で出来ます。 Dim ret As Long ret = DCount("患者ID","T-患者情報","患者ID = " & ID) If ret > 0 Then MsgBox "既に存在している。" End If という感じです。
- maruru01
- ベストアンサー率51% (1179/2272)
こんにちは。maruru01です。 いろいろ方法はあると思いますので、一例です。 テキストファイルからの読み込みはOpenステートメントで行い、中のデータを一旦変数に格納します。 そして、そのデータをテーブルへSQLで追加します。 SQLの追加をコードで書くには、 Dim SQL As String 'SQL文を格納する変数 SQL = "(SQL文を記述)" DoCmd.RunSQL SQL という風にします。 テーブルへの追加はADOのレコードセットを使用しても出来ます。 詳細はヘルプやいろんなサイトや本を見て下さい。 サイトを1つ紹介します。そこからリンクをたどっていろいろなサイトを見つけて下さい。 http://www.mahoutsukaino.com/
補足
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は重なる事はないので、あきらかにエラーです。 一旦データベースを開いて、その比較を行いたいのですがやり方がいまいちわかりません。
お礼
最後に問題が生じましたが、 "T-患者情報"を[]で囲んで"[T-患者情報]"にしたらうまく動作しました。 ありがとうございました。 大変助かりました。
補足
早速コードを試してみたのですが、 Set rs = "T-患者情報", cn, adOpenKeyset, adLockOptimistic の部分でコンパイルエラーが発生して、修正候補がステートメントの最後と言われます。 一旦、Set rs = New ADODB.Recordsetにして それからrs.Open "T-患者情報"にしても結局そこの部分でエラーがでます。 エラーの内容は SQLステートメントが正しくありません。 DELETE,INSERT,PROCEDURE,SELECT,UPDATEを使用してください。 との事です。 最初の部分でつまづいてしまって 後がすすみません。 ご指導お願いします。