Windows」がなぜか見つからない(^^;;)ので、やむを得ずAccessを使うことにしました。最終的にはマクロでかなりの部分を自動実行できるようにしたいのですが、そこまでできるには時間もかかりそうだし、皆さんのお知恵を借りねばならない部分もあるかと思い、こうやって記録を残すことにしました。者の哀しさでしょっぱなからトラブルにぶつかりました。インポート→テキストファイルでインポートウイザードに到達し、とりあえず一気読みさせるとなぜか読み込めないフィールドが出現してエラーテーブルができています。中を見ると特定のフィールドだけで、どうやら日付/時間型のところのようです。号と生年月日が分離していて別フィールドになっているところでエラーが出ています。5」などとスペースの入っているのがよくないみたいでした。「s」などと置換して元号の後ろのカンマを取り去ってみました。試みたら、他は無事インポートできましたが元号の付いた生年月日がやはりエラーでした。そこでちょっと考えて、まずここは「s33-09-15」という書式ですのでウイザードでは日付型に認識するものの、それをテキスト型としてみました。インポートすることでようやく全部エラーなくインポートできました。次にこの生年月日のフィールドを複製したフィールドを作り、そのフィールドをAccess上で日付/時間型に変換したところようやくこれも無事西暦に変換されました。いうわけで、今日はこの形で一般健診と企業健診の二つのテーブルを作り、それぞれに入力フォームの基本形を作ったところまでやったのですが、ここで課題が三つ。年齢は直接入力せず生年月日から関数を用いて自動入力させたい。入力するときはテキスト型で元号付きで入力したものを自動的に西暦に変換して日付型のフィールドに入力させたい、という二つです。前者は関数の予想がつくのですが、後者がどうもどの関数を使用していいか判らないのです。それと、フィールド1はデータ整理番号なのですが、できればこれレコードが次に進んだとき自動的に1増えてほしいのですけど・・・このあたりでよろしければどなたかお知恵拝借できれば幸いです・・・それにしてもAccessのセットアップでミスったのか、関数のヘルプがでてこない(+_+)。2000/8/14昨日わきあがった疑問にさっそくいろんな場所でご指導を受けまして、今日できるところまでやっちまえと夜診終ったあとに今までごちょごちょやっておりました。皆さんレス有難うございました。無事データの移行ができました。番号はめでたくオートナンバーとなりました(^^)。換されそうな気がするのでベンディングとして、問題の年齢自動入力にとりかかりました。Accessに取り組む上でクエリーというものが理解できないと困るなとは思っていましたが、さっそくここでクエリーを駆使する必要に迫られました。いじるうちに少し理解したのですが、クエリーというのはデータの選択、フィールド間の計算、その結果のフィールド書き込み後データ更新、などデータやフィールドをさまざまにいじる手順を作っておいて他で使用するためのもの、とでも言えばいいのでしょうかね。TheCARD3+の中で言えば「手順書」に相当するものの様な印象です。規フィールド行に上記の式を代入して年齢2に書き換えて・・・とやってみたら、そのクエリ上では入力した西暦にしたがって年齢が自動計算されるのですが、実際に入力フォームで入力してみると生年月日を入力しても自動計算されないのです(;_;)。Error!先は長いな。今月中にできるのだろうか・・・その2の後日談その後、「スターチャンネルさん」にご指導いただき、入力フォームのデザインビューで生年月日2のプロパティで更新後処理のところにイベントプロシージャを割り当て、そこの内容として[年齢2]=IIf(Right(Format([生年月日2],"yyyy/mm/dd"),5)>Right(Format(Now(),"yyyy/mm/dd"),5),DateDiff("yyyy",[生年月日2],Now())-1,DateDiff("yyyy",[生年月日2],Now()))(実際は1行ですが3行に分かち書きました)を書込んだら取りあえず入力フォームで生年月日入力をして年齢が自動入力できるようになりました。有難うございました>スターチャンネルさんなお、生年月日入力は元号で書込んだらそのまま西暦に変換してくれました。やれやれ・・・その32000/8/16さて、第3回で少し佳境に入って来ました。年齢の自動処理についてはいろいろなアイデアを戴き有難うございました。力時、あるいは更新時の年齢、他方を検査施行時の年齢とすることであとあとデータをいろいろ利用できそうなのでこのアイデアを採用することとしましたが、どこで更新するかと言うことで少し頭を使いました。力しているときにはややうるさいかなと。[検査施行日]))(例によって分かち書きしています)この二つを記載することで入力時に一気にまず二つの年齢情報が自動入力されるようにしてみました。先は長いですが一山こえた印象ですねその42000/8/20〜〜使いやすいフォームの作成〜〜今日の目標は副題の通りの使いやすいフォームの完成です。力を簡単にする工夫がいくつもありました。入力を担当する事務はあまりPCには慣れていませんから簡単であればあるほどいいわけです。一般健診データと企業健診データがあるのですが、後者はフィールドが多いのでとりあえず前者で作ることにしました。入力すべき内容が決まっているものは書き込まず選択入力したい(4)判定フィールドは1(正常)2(要精査、再検)3(要加療)しかなく、それぞれに再検呼び出し日時を12ヵ月後、3ヵ月後、1ヵ月後と決めていますので、その呼び出し日時を自動入力したいなどが重要なところでした。定ですぐにできましたが、まず(3)は、最初コンボボックスを作って対処しました。次に(4)は、これはまず1→12、2→3、3→1と対応させたテーブルを作り、これを用いたDlookup関数を利用したマクロを作成してまずフォロー1というフィールドに○ヶ月後呼び出しの数字を格納。次にDateAdd関数を用いてフォロー2というフィールドに検査施行日から○ヶ月後の日付を代入、という手順で実現できました。ところで(3)ですが、うまく選択入力できるようにもなったものの、どうしてもマウスでの作業になります。そこでオプショングループとオプションボタンを作ることにしました。オプションで扱えるのは数値型だけですので(4)でやったことを応用して代入内容と対応する数字のテーブルを作成し、オプショングループの更新後処理にやはりDlookup関数を用いたマクロを指定してもともとのフィールドに選択内容が入力されるようにしました。なんとかこれで一般健診の方のフォームが完成しました。用すれば企業健診の方も作れるでしょう。フォームさえ完成すればとりあえず入力作業はできますので、なんとか秋の健診シーズンに間に合いそうです(^^)。これでようやく30%程度の到達かな。録して1クリックで起動できるようにしました。次にやったのがメインメニュー画面の作成です。DBの終了の3つのボタンを作成して、前2者にはフォームオープン用のマクロを組んでそれを指定することにしました。オープン用のマクロはそれぞれの入力用フォームに関して「フォームを編集で開く/新しいレコードへ移動」としたものです。「Autoexec」マクロでそのメニューフォームを開く設定にして、これでめでたく(^^)ランチャーのボタンクリックでメニュー画面が現れました。してあったから入力も楽だったですと言ってもらえてちょっと報われた気がしました(^^)。ところで、データを圧縮・バックアップして自宅に持って帰ってさきほど検討していたのですが、チェックボックス選択にした性別のところにバグ発見(^^)。新後処理」にだけ指定していたら、最初にデフォルトでフォーカスが移動したときのデータのままでENTERで進んだときに文字データへの変換が行われない事が判明したのです。テーブルの中身確認したら案の定デフォにしている「男」が入力されていませんでした。これは「フォーカス取得時」にも上記マクロが動くようにしただけで解決しましたけどね。いうわけで、なんとか秋の健診シーズンに間に合いました。あとは企業健診の方でフォームをもう少し工夫する必要がありますが、入力の方はなんとかなりそうです。力すればその条件でレコードが検索され、それを一括してレポート印刷する、あるいは一覧表印刷することを実現したいのです。クエリでの選択条件の書き方と、レポートのデザインがポイントかと思っていますがまたこれは明日以降に。診の方も入力フォームをほぼ完成しました。使えそうな状態でしたので、本来なら一から入力になるフィールドですけどほとんどすべてをコンボボックス入力としてみました。そのおかげで多分かなり入力時間は短くできると思います。ところで今日ちょっと苦労したのは身長、体重からBMIを計算し、その結果で肥満、やせ、普通を判定するところです。重を入力し、次に体重を入力した時点で[体重]の更新後処理にイベントプロシージャでコードを書いて[BMI]=Int([体重]*100000/([身長]*[身長]))/10Accessには少数点2桁以下で四捨五入という関数(123などではround関数にあたるもの)がないらしいので、本来のBMIを10倍したものを求めてそれをInt関数通してから1/10するという姑息な手段使ってます。ところがそのあと[評価]にBMI>24で肥満、BMI<19でやせと代入したいのだけど、そこでかなり時間食ってしまいました。Subとしたら旨くいくと思ったのだけど、これがどうしてもエラーがでます。Subこうやることでようやく解決しました(^^)。これで入力はほぼ大丈夫でしょう。2000/9/8いよいよ今週の日曜日には日曜健診です。診レポート作成は私の仕事です。働する日がやって来るわけです。今日は夜診が終わってから今までかかってその健診報告をレポートデザインで作っておりました。企業健診データのテーブルをソースデータにしてレポートに必要なフィールドを選択してオートデザインで一気に一画面に展開し、それをA4に収まるように配置しながら、身体測定だとか生理検査だとかをひとまとめにして箱の中に入れたりして見た目がなるべく良くなるようにしました。やってできたのがこれです。プレビューで見てもなかなかいいできで(^^)、そしたら一度試し印字してみるかなとなにげなく印字命令を送ったら、なんと1から順番に全部のレコードを印刷し始めるではないですか。慌てて印刷中止してページプリンタをリセットしました。考えたらこのレポート、レコードソースをテーブルにしたからなんですね。マズイマズイ(^^;;でもまだ患者検索のクエリは作ってないし、それからまた一からのやりなおしもいやだし(^^;;)できるだけ楽できんかなと考えて、まずはソースなしのデザインビューで新規作成を選び、そのフォーマットを今作ったものと同じにして、そこへ先に作ったものから編集→すべてを選択→コピーとして全部コピーして新しい方に貼りつけました。用クエリ作ってそのクエリをソース指定すればいいのかなと思っております。(間違ってればまた指摘してやってください(__))。2000/9/9今日、最後に完成させるべきは、これらの一連の作業の自動化です。させたレポートを活かすために、まずそのデータソースとなるクエリ(Q手帳)の作成を行いました。レポート(R手帳)への出力項目をデザイングリッドへコピーしたあと、検査実施日と検査種類で抽出条件に[Forms]![F手帳検索][実施日入力][Forms]![F手帳検索][検査種類]と入力しいったん保存。R手帳のデータソースをQ手帳に変更しました。次に上記で利用することにしているF手帳検索を作成しました。これは上記2項目をコンボボックスで選択できるようにしました。あとはこれらを一連の作業化するマクロの作成となります。メニューフォームのボタンをクリックするとそのマクロが起動するようにするといいわけです。1.フォーム(F手帳検索)のオープン→入力後最小化2.レポート(R手帳)の起動3.確認後印刷4.F手帳検索のクローズという手順です。2000/9/10今日も一日アクセス三昧でした。明日からは完全実用せねばならないという事情がありますから結構プレッシャーでしたが、ここまで来るともう完成後のイメージがいろいろ浮かんで来て作っていて面白いのですから、アクセス食わず嫌いだった私としてはたいそうな進歩ですね(^^)。選択クエリにパラメータを与えるためのフォームは昨日作成したので要領は判っています。同じように、健診呼び出し月を指定して一覧表を作るクエリも少し改造しました。抽出条件をFormat([フォロー月],'yy/mm')=[Forms]![F呼び出し]![呼び出し月]としてフォロー月のフィールドに書込み、クエリを開くと自動的に別フィールドに分割されました。これで[F呼び出し]の非連結テキストボックス[呼び出し月]に00/08などと月までを書込むことで00/08/01-00/08/31までのレコードを呼び出すことができるようになりました。あとはメニューからこのへんのフォーム、クエリを順序よくオープン、クローズ、最小化とならべることで自動化して行くマクロを作成したのですが、これが慣れてないせいか結構試行錯誤で(^^;;)。4.月例呼び出し一覧表5.手帳住所ラベル作成6.データベースの終了までが可能になりました。これで終わりにしようと思っていたのですが、夕食後参考書を見ていたら、コンボボックスに入力させる列以外の列を表示させることができることに気が付きました。便番号と町名だけのテーブルを作ってこちらにインポートし、入力フォームの郵便番号のコントロールをコンボボックスにしてそのテーブルをソースにしてクエリを作成し列幅、リスト幅などを変更したところ、郵便番号を町名を参照して入力することができるようになりました。これは最後の最後に非常に有用な変更ができたと思います。成するものかも知れませんけど、全く一から勉強し始めてここまでできたと言うのは非常に得がたい経験でした。データを少なくし、名前などを仮名にしたこのデータベースの評価版をここに置いてありますのでもしよろしければ見ていただいてご感想いただければと思います。2000/9/12一昨日完成したと喜んでさっそく実用し始めた健診DBですが、実用してみると早くも要望がでてしまいました。事務に聞いてみると結構単発で入力してそのまま印刷したくなることもあるということですし、またもう一回印字が欲しいということでレコードごとに選択して印刷したくなることもあるということだったのです。そこで、先日作成した印刷レポートの複写を二つ作り、一つは入力フォーム上の[番号]フィールドをレポートの同名フィールドに一致させるクエリをデータソースにし、もうひとつは[番号]と[名前]にパラメータを設定してorで繋いだクエリをデータソースにしました。ところでその後者をメインメニュー上からマクロで起動するのは造作もないことだったのですが、前者はあるレコードを一件打ち込んだ直後に印刷したいわけですから、入力フォームに印刷用のボタンを置かねばなりません。入するためにはレコードが保存される必要があります。すると次のレコードに移ってしまいますね。ここがヤヤコしかった(^^;;)。結局そのボタンクリックにレコードの移動(→次のレコード)レコードの移動(→前のレコード)レポートを開く(印刷モード)レポートを閉じるレコードの移動(→次のレコード)コントロールの移動(→[番号])というマクロを割り当ててようやく実現できました。なんか最初の2行がスマートじゃないですけど(^^;;)まぁ仕方がないかなと。あとになってH.Kanohさんよりレコード更新のためのコーディングの実際を教えていただきました。2000/9/13今日はついに日曜日の民商健診19件の入力と手帳出力、及びその送付用の住所ラベルの出力とマシンが働きました。常、あるいは「正」をしておいたのでこれだけでもずいぶん楽だったと彼は言うのですが、それでも一人分の入力に結構時間がかかっています。どこで時間がかかるかを見ていると、やはり住所や名前などの日本語入力を要するところでした。当たり前と言えば当たり前ですけどね。そこであとの改善点として考えられたのは(1)やはりあのT豊中の住所、郵便番号の表は有効に用いて住所の先行入力をやりたい(2)何項目か、前のレコードの入力値を次のレコードの既定値にできないかどうか(つまりデータの「リピート」機能)の2点でした。(1)は結局DlookUp関数で実現できました。Subこれで[住所]に町名が入力されて大幅な入力支援になります。入力のためにはツール→オプション→キーボードにて、フィールド移動時のカーソル動作をフィールド最後の文字に設定しておくだけでOKでした。相変わらず奥が深いですわ。2001/2/8ひさしぶりに診療所の健診DBをいじってみました。きっかけは今週末に控えている大阪民医連の学術運動交流集会です。度が変わっての影響をまとめる発表をする事になっているので、夕方にいろいろいじくってデータの抽出を行っていたのです。要するに制度変更のあった6月1日の前後で受診者数やその内訳が変化したかどうかを知りたかったわけですが、単純にクロス集計して検査施行日を行見出しにしたら日付の方は一日単位でグループ化されてしまいます。日の前後、みたいな分類ができてそれが行見出しになればいいのだけれど、そう言うのが無理みたいなので、せめて月別に出したいと知恵を絞りました。なると半ば当然のように検査施行日の日時データから年、月のデータだけ取りだすというアイデアがでてくるわけで、ヘルプを探しまくって(急な事でせっかく購入した参考書が手元になかったのです)datepart関数にたどり着きました。いう数値型のフィールドを新たに作成し、更新クエリでそれぞれdatepart("yyyy",[検査施行日])、datepart("m",[検査施行日])をレコードの更新のところに代入して一括変換する事で一気に入力を行います。そのうえで、あらためて行見出しとしてその年、月を設定し、年齢や性別、判定などを列見出しとして設定してクロス集計を実行。その月のデータに抽出条件として>5、<6と入力してその都度実行してできた表を印刷して行くという力わざで(^^;;)だいたい目的のものを得る事ができました。今後も月別の集計はしたくなる事があるだろうから、このフィールドを作成したのは意義のあった事だろうと思います。ぶりに触って鈍りがちだったカンも取り戻せました。日常的に触ってなきゃダメだね(^^;;;;←BACK。