こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

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

患者データベースを作っています。
患者情報には患者ID、患者氏名、レントゲン画像、撮影日等のフィールドがあ
ります。
一人の患者に写真は複数枚あるので、患者IDでリレーションシップをとってお
り、テーブルはT-患者情報、T-画像情報の2つにわけています。

このデータベースに新規で患者情報と画像情報を入れます。
通常は入力フォームからですが、このデータベースには入力フォームが存在し
ません。
患者情報はtxtファイル(この中に患者ID、患者氏名、撮影日等が記入されてい
る)とjpegファイル(これがレントゲン画像)に入っています。
この2つのファイルがフロッピーディスクの中に入った状態です。

テキストファイル内のデータは下記のような感じです。
(例:Img0001.text)
患者ID: 1
患者氏名:ヤマダ タロウ
撮影日:H15.01.01

txtファイル内には、患者情報は一名分しか入れてありません。

このような場合、txtファイル内の患者情報をデータベースに取り込むにはどの
ようにすればよいですか?
コマンドボタンからのクリックイベントによって処理させる予定です。

ご指導よろしくお願いします。

投稿日時 - 2003-04-18 10:18:13

QNo.525696

すぐに回答ほしいです

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

以下の方法で試してみて下さい。

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

投稿日時 - 2003-04-18 11:48:27

補足

早速コードを試してみたのですが、
Set rs = "T-患者情報", cn, adOpenKeyset, adLockOptimistic
の部分でコンパイルエラーが発生して、修正候補がステートメントの最後と言われます。

一旦、Set rs = New ADODB.Recordsetにして
それからrs.Open "T-患者情報"にしても結局そこの部分でエラーがでます。
エラーの内容は
SQLステートメントが正しくありません。
DELETE,INSERT,PROCEDURE,SELECT,UPDATEを使用してください。
との事です。

最初の部分でつまづいてしまって 後がすすみません。
ご指導お願いします。

投稿日時 - 2003-04-21 10:37:27

お礼

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

投稿日時 - 2003-04-22 10:31:32

このQ&Aは役に立ちましたか?

1人が「このQ&Aが役に立った」と投票しています

回答(5)

ANo.5

2ch

select * from T-患者情報

投稿日時 - 2003-04-21 11:07:17

ANo.4

2ch

DCount関数を使用して、痛い目にあったことあり

バージョンの違うアクセスとのリンクテーブルでDCountを使用したら、ばぐった

ADOでSQL文の発行ならマルチにいけていい感じだ

投稿日時 - 2003-04-19 23:00:10

ANo.3

>ところでデータのチェックをしたいのですがどのよう
>にしたらいいでしょうか
レコードセットを使用しなくてもDCount関数で出来ます。


Dim ret As Long

ret = DCount("患者ID","T-患者情報","患者ID = " & ID)

If ret > 0 Then
  MsgBox "既に存在している。"
End If


という感じです。

投稿日時 - 2003-04-18 12:29:27

ANo.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/

投稿日時 - 2003-04-18 10:43:17

補足

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は重なる事はないので、あきらかにエラーです。

一旦データベースを開いて、その比較を行いたいのですがやり方がいまいちわかりません。

投稿日時 - 2003-04-18 11:21:49

あなたにオススメの質問