FC2ブログ

スポンサーサイト 


上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

--/--/--

Category: スポンサー広告

TB: --  /  CM: --

top △

データの転送(再採番あり) 


別のACCESSデータベースのテーブルのレコードを追加したい・・・ のサンプルに使えるかも

回答を投稿しようと思いましたが、1個の関数部分(ボタンのクリック)の記述が、
2000 文字に収まらなかったので、やめました。
1つの関数記述が複数の回答にまたがる・・・・迷惑ですよね。

DAO記述(フォーム「F1」) / ADO記述(フォーム「F2」)で、サンプルになれば・・・・
qa6169088


「F1」「F2」とも見た目/操作等は一緒です。(中の記述が違います)
フォームの構成は、たまたま動いている帳票フォーム+サブ(帳票フォーム)にしています。
(この構成を使う時には、自己責任で)
(過去記事も参考にしてください)

テーブル「T_データ」「T_データ明細」の構造は、以下の様になっています。
qa6169088_Table

「番号No」は、自分で採番していきます。(新規には、最大値+1を)
テーブルは、「番号No」で結びつけますが、リレーションシップの設定はしていません。
「明細No」は、同一「番号No」内での連番にしています。(これも自分で採番:最大値+1を)

サンプルデータとして、
「T_データ」には、5件
「T_データ明細」には、「番号No」毎に3件の15件
が入っています。

追加対象のテキストボックスに、データの送り先を記述します。
(ダブルクリックでファイル一覧が表示されるようにしています:選択=設定されます)
記述があることで、データ転送を実行するコマンドボタンが表示されます。
一覧内の「flg」をチェックしたものが、転送対象になります。
データ転送後、チェックしたものを、削除する/しない、をトグルボタンで設定しておきます。

実際に確かめられる場合、ファイルのコピーを作成しておいて、それを指定したり、
自分を指定してみたり・・・・
テーブル名/構成が同じであることが条件になります。

エラー処理は入れていないので、違うファイル等指定・実行したら、エラー箇所で止まると思います。

データを転送する際には、相手方の「番号No」最大値を入手し、
送ろうとしているデータの「番号No」を再採番したものを・・・・
再採番は、「T_データ」「T_データ明細」の関係を維持しつつ行います。

なお、データの転送時には、相手方の新規登録操作が無いことが前提です。
(競合処理等、盛り込んでいません)
続きを読んでみようかな ---≫
スポンサーサイト

2010/09/11

Category: 更新待ち旧記事

TB: 0  /  CM: 0

top △

抽出条件の羅列 


アクセス2007の抽出 のサンプルに使えるかも

テーブル「TA1」が以下の様だったとします。
an名前数量
1りんご80
2みかん50
3なし70
4ぶどう30
5りんご180
6みかん150
7なし170
8ぶどう130
9みかん250

この時、フォームのテキストボックス1つで、「りんご」「みかん」を羅列して
抽出しましょうというものになります。
また、羅列していく際に「IME入力モード」を「オン」としているので、
区切りには、半角カンマは使いにくい・・・ので、スペースを区切りに

動作確認用にまとめたフォーム「F1」は、以下の様になります。
qa6100323_1  qa6100323_2

検索文字列を入れるテキストボックス名は「txt検索」
IN句使用(2) のための、本来非表示にしておく「txt00」を表示しています。
「txt検索」の更新後処理で「txt00」に、IN句用に編集して設定しておきます。

「ぶどう(スペース)みかん」の入力で、「'ぶどう','みかん'」に。

IN句を指定する際に、当初以下でいけるのか・・・・考えが甘かったです。

WHERE IIf(IsNull(FORMS!F1!txt検索),True,[名前] In (FORMS!F1!txt00))


そこで、
「IN句使用(1)」では、自作関数を通して、
「IN句使用(2)」では、「txt00」と置き換える部分を作っておき、
置き換えたものをフォームのレコードソースに直に設定してみました。

なお、「txt検索」をダブルクリックするとリストボックスから選択できるように。
(複数選択可で、閉じる時に選択されたものを「txt検索」に戻す)

また、専用のフォームとして
「F2」として Likeの判別を反転したもの
「F3」として、IN句を用いてクエリ内容を置き換え、フォームのレコードソースへ設定するもの
を分けてみました。
qa6100323_3  qa6100323_4

専用にした分、「F1」よりVBA記述は減りますね。
続きを読んでみようかな ---≫

2010/08/12

Category: 更新待ち旧記事

TB: 0  /  CM: 0

top △

帳票フォームでの同一列 縦方向移動 


過去に回答した これ になりますが、
Enterキー、Tabキーで次のレコードの同じ列に移動するものになります。

私も当初、TabStop での方法を考えていましたが、
寄り道できるようにしておこうかな??? で、VBAゴリゴリの方法に。


質問内容、動きからは TabStop での方法が楽だと思います。

でも、「オプション」の設定で、Enterキーの設定が「次のフィールド」になっていないと・・・・


寄り道・・・・???

矢印キーとか「Ctrl」+「Tab」で、同一レコードの他フィールドに移動できるように・・・
TabStop の方法でもマウスクリックで移動できますが・・・・

通常は、TabStop の方法になるでしょう。


動きの確認フォーム「F1」は、以下の様になっています。
qa5866364_1

わかりにくいと思うので、選んだ列、処理している部分に色を付けてみました
qa5866364_2  qa5866364_3
続きを読んでみようかな ---≫

2010/08/10

Category: 更新待ち旧記事

TB: 0  /  CM: 0

top △

拡大鏡?もどきのクラス化 


前記事 拡大鏡?もどき のクラス化になります。
ただ、こんなものがクラス???ということがあるかと思いますが、私のイメージでは・・・・でのことになります。

処理の抜けも結構ありそうな・・・・

でも、そこそこ動いているのでサンプルになれる・・・・か・・・・と。


クラスとして作成したのは4つ。

メインで管理するもの
clsUseBIG ・・・・ 子クラスの管理と子クラスからのデータやり取りの制御

その子として動くもの3つ
clsBigForm ・・・・ 拡大鏡用のフォームを起動/終了/データの入手
clsChildFrm ・・・・ 拡大してもらう方のフォームイベント管理など
clsChild ・・・・ 拡大してもらう方のテキストボックスイベント管理など


フォーム「F2」系は、サブフォームの切り替えポン+α のフォーム「F2」そのままです。
フォーム「F20」系は、拡大鏡?もどき のフォーム「F2」系の名前を変更したものになります。
フォーム「F200」系は、上記フォーム「F2」をベースに、クラス化したものを組み込んだものになります。
Sample8

フォーム「F200」への記述は+10行。
フォーム「F200_1」~「F200_5」記述は同じで、+2行
+拡大鏡用のフォーム記述
標準モジュールに+1行
の、変更で実現しています。
続きを読んでみようかな ---≫

2010/08/09

Category: 更新待ち旧記事

TB: 0  /  CM: 0

top △

拡大鏡?もどき 


テキストボックスのフォントの大きさが小さい・・・・とかの場合、
別途大きいフォントの領域を用意し、表示/入力したい時の例になれるか???
何か最近似たような質問があったような気も・・・・・・

テキストボックスのところで、「Shift」+「F2」で表示される「ズーム」とは異なるものになります。

基本の動きのフォーム「F1」は以下の様になっています。
Sample7_1  Sample7_2

拡大鏡を開いた時には、txt1~txt4上をマウス移動することで、同じものを表示していきます。
txt1~txt4をクリックすることで、表示は固定され、
そのテキストボックス内、大きく表示されたところでの、入力が可能になります。

では、拡大表示する部分を別フォームとしてみましょう。ということで「F1_1」
Sample7_3  Sample7_4

「F1」「F1_1」の情報の持ち方は一緒ですが、違う情報の持ち方にしてみましょう。
というのが「F1_2」。画面の表示は「F1_1」とまったく同じなので省略。

では、サブフォームの切り替えポン+α のフォーム「F2」に組み込んでみましょう。
ということで、フォーム「F2」
Sample7_5

また、「F2」の違う情報の持ち方ということで「F3」。画面は「F2」と同じなので省略

処理概要

共通(「F1_1」「F1_2」「F2」「F3」)

拡大鏡側のテキストボックスを、グローバル変数(pTextBx)に設定

「F1_1」「F2」共通で、
値の戻し先指定に、pTextBx.Tag を利用
pTextBx.Tag には戻し先のテキストボックス名を格納
txt1~txt4がフォーカスを得た時に、pTextBx.Tag を設定するのですが、
pTextBx.Tag が未設定の時には、マウスの動きで自分の上を通過したら、
拡大鏡側にポンポンと自分の内容を設定していきます。
pTextBx.Tag のクリアは、各テキストボックスの Exit 時に行います。
「F2」では、単にテキストボックス名だけでは、どのフォームかわからないので、
フォームを示すものも一緒に pTextBx.Tag に設定します。

「F1_2」「F3」共通で、
値の戻し先指定に、グローバル変数(pRtnTextBx)を利用
処理の流れは上記と同じで、グローバル変数(pRtnTextBx)を参照/設定します。

「F1_1」「F1_2」と「F2」「F3」の違いは、
拡大鏡側の更新後処理で内容を戻す時に、相手の更新後処理を動かす/動かさない・・・・

「F2」「F3」では、
変更過程では、相手の更新後処理を動かす必要が無いので単に代入していますが
最終時(拡大鏡側の更新後処理)には、相手の更新後処理も動かしたいので、
pRtnTextBx.Text へ値を設定します。
続きを読んでみようかな ---≫

2010/08/08

Category: 更新待ち旧記事

TB: 0  /  CM: 0

top △

サブフォームの切り替えポン+α 


このブログに訪れる方のキーワードに、サブフォーム、切り替え、とか
質問でも、切り替え・・・云々が見かけられるので、チョイと作ってみました。
(過去記事でサラッと書いたものもありましたが、主役ではなかったので)

フォームの感じは以下の様になります。
Sample6_1  Sample6_2

メインのフォームにテキストボックス「txt1」~「txt4」があり、
サブフォームコントロール「FSUB1」「FSUB2」があり、
其々のサブフォームに何を表示するか選択するトグルボタンで構成された
オプショングループ上から「op1」「op2」があります。

+αとして、動き的には、
メインのテキストボックス「txt1」に入力あったら、FSUB1 に表示されている「txt1」へ値設定。
FSUB1 内の「txt1」に入力あったら、FSUB2 に表示されている「txt1」に値設定。
FSUB2 内の「txt1」に入力あったら、FSUB1 に表示されている「txt1」に値設定。
入力あったらの判別は、各テキストボックスの更新後処理を利用。

オプショングループの動きとしては、「選んだものは次に選べない」を強調する上で非表示に。

同じ見え方の画面で、フォーム「F1」「F2」を用意しています。
それぞれにサブフォームが 1~5 用意しています。

フォーム内のコントロールを辿る場合、Forms!XXXX!・・・・・ の様な記述が多く使われていると思いますが、
今回は違う方法としています。
「F1」「F2」とも、メインのフォーム名が何か知らなくても動く方法です。

このサンプルでは、最低限必要な取り決めがあります。(以下2点)
サブフォームコントロール名は、「FSUB1」「FSUB2」ですよ。
また、値を設定する先は、同じコントロール名になりますよ。

「F1」の概要
メインフォームからの設定は、Me.FSUB1.Form.Controls("xxxx") を指定して設定
サブフォームからの設定では、自分の親を辿った Me.Parent("FSUB" & 自分じゃない方の番号)("xxxx")

「F2」の概要
サブフォームとして起動されたら、私はここ、っていう情報をグローバル変数に設定
Public pForm(1 To 2) As Form
(標準モジュールで宣言)
値の設定では、この情報経由で・・・   pForm(1).Controls("xxxx")

今回、サブフォーム側からメインフォームへの設定は行っていませんが、
Me.Parent("xxxx") でできます。

Me.Parent.Controls("xxxx") 記述が正式(?)なのかも。
でも途中の .Controls は省略できるようです・・・・

やってみて、できたら・・・こういう記述もできるんだ・・で終わりでしょうか。
(う~ん。ちょっと難しいです)

「F3」は以下の様な感じです。
Sample6_3  Sample6_4

サブフォームを選択していたオプショングループをラベルに変更して、
タブコントロールの見え方に近くしてみました。
「F2」をベースにして、オプショングループ部分を書き換えています。

後、サンプルに入れていませんでしたが「F4」として、
「F2」をベースに、選択したことを非表示ではなく、フォントの色だけでも変更してみましょう・・・
「F2」からの記述変更は、コメント化3行、追記6行で終わってます。
Sample6_5

今回やってわかったのですが、複数のサブフォームコントロールに、同じサブフォームを指定できるのですね。
(うん。収穫、収穫)
続きを読んでみようかな ---≫

2010/08/04

Category: 更新待ち旧記事

TB: 0  /  CM: 0

top △

テキストボックスの Visible/Enabled 


テキストボックスだけではないと思いますが、Visible / Enabled を設定する時には、
フォーカスの有無に注意する必要があります。

フォーカスがあるのに False にしようとすると、Access から怒られます。

フォーム上での見栄えは一緒なのに、中での記述が違う例(になるかは置いとく)として、
Visible の場合の VBA 記述2例、Enabled の場合の VBA 記述2例、条件付き書式で2例を・・・

基本となるフォームは、以下になります。
qa6042004_1  qa6042004_2

Visible / Enabled 選択用 (名前:op1)
記述した処理の選択用 (名前:op2)
テキストボックス txt1 ~ txt4 の表示を確かめるための検証用(名前:op3)

テキストボックスにはコントロールソースとして =[txtX].[Name] を指定しているので
書き換えはできません。(txtX の X は、1 ~ 4)
続きを読んでみようかな ---≫

2010/08/03

Category: 更新待ち旧記事

TB: 0  /  CM: 0

top △

パラメータクエリでレコードセットを得る(DAO/ADO) 


私は基本的にクエリ自体をさらしたくないので、VBA部分で即値展開したSQLを投げることをします。

最近の回答で、フォームのコントロール値をVBAで即値展開して、レコードセットを得る内容について、
正攻法はパラメータクエリでパラメータを渡すもの。。。というのを見かけました。

我流の私にとっては、やってみなきゃね・・・・ということになり、
やり方を含め確認してみたことを記事にしたいと思います。

テーブル「TA1」を用意し、確認用のデータを以下に準備
anidjan
10011111111111
20022222222222
30033333333333
40044444444444
50055555555555
60066666666666
70077777777777
80088888888888
90099999999999
100100000000000
110111111111111
120022222222222


パラメータクエリ「Q1」を以下の内容で準備 ([DAT1] に対して設定していきます)

SELECT TA1.an, TA1.id, TA1.jan
FROM TA1
WHERE (((TA1.id)=[DAT1]));

フォーム「F1」を以下の様な構成で準備しました。
qa6036304_1  qa6036304_2

パラメータクエリを使って、値を設定する時に使う文字列 "[DAT1]" "DAT1" を選べるように。
「検索文字列」部分に、「DAT1] に指定する文字列を入力します。
(簡単にコンボボックスでも選べるように)

準備できたら DAO(1) ~ DAO(2) / ADO(1) ~ ADO(4) のボタンで抽出内容を確認していきます。

' DAO(1) クエリ参照し、QueryDef の OpenRecordset で取得
' DAO(2) クエリ参照し、置き換え後の文字列で取得
' ADO(1) クエリ参照し、Command の Executeで取得
' ADO(2) クエリ参照し、Recordset の Open に Command 指定
' ADO(3) クエリ参照なしで、同内容を直接設定(Command の Executeで取得)
' ADO(4) クエリ参照し、置き換え後の文字列で取得

抽出された内容は順次上側に表示されていきます。

今回やってわかったのは、
DAO でパラメータ指定する時は、"[DAT1]" でも "DAT1" でも動くが、
ADO では、"[DAT1]" の記述でないと 3265 のエラーとなる。
続きを読んでみようかな ---≫

2010/08/02

Category: 更新待ち旧記事

TB: 0  /  CM: 0

top △

段々フォーム? 


次のフォームを開いて自分を閉じて・・・を繰り返す際、
時に、前のフォーム、さらに前のフォームに順に戻った表示をしたい時があります。
(常に表示されているフォームは1つ)

F1→F2→F3→F4→F5 と起動していた時、F5→F4→F3→F2→F1 の順で起動し直す。
qa5864632_1  qa5864632_2  qa5864632_3  qa5864632_4  qa5864632_5

逆をたどる時には、表示しているフォームを閉じると前のフォームが表示される。
という動作にしてみました。

表示し直すだけでは面白くないので、次フォームを起動しフォームを閉じる際、
その時点のフィルタ情報も蓄えておき復元したいと思います。
続きを読んでみようかな ---≫

2010/05/03

Category: 更新待ち旧記事

TB: 0  /  CM: 0

top △

コントロールのイベント発生確認+α 


ある質問に Change イベントが繰り返し発生するのを・・・・

というものがありました。
どのようなイベントが発生しているのか以前に調べたことがあったので、
今回焼き直ししてみました。

基本のフォーム「F1」は以下のようになっています。
a5815609

処理的には、検証対象のテキストボックスの Change イベントで、
内容が、置換前文字なら、置換後文字を代入する、、、というもの。
代入処理をどうするかを、オプショングループで選択しておきます。

イベントが発生したタイミングで画面に表示していきます。
表示は最大10件、それを超えたらスクロール。(履歴はなし:10件だけ)

変更系は"赤"、フォーカス系は"青"、クリック系は"黒" で表示します。
(と言っても内部で指定していますが)

で、この方法に少し手を加えると以下の様なことができます。(フォーム「F2」「F_MSG」)
a5815609_1

表示するフォームを別にします。
表示するフォームが起動されていたら、表示画面で。
起動されていなかったら、イミディエイトウィンドウに表示。

表示するものは別にして、この方法を作っておくとデバッグがし易いと思いますし、
お客さんに、イミディエイトウィンドウに表示されているものを・・・・というより、
このフォームを起動して同じ操作をしてください。
何かあったらその画面のハードコピーを送ってください・・・・の方がお願いし易い???
(それでわかるのか、、、は別ですが)
続きを読んでみようかな ---≫

2010/04/12

Category: 更新待ち旧記事

TB: 0  /  CM: 0

top △


上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。