< | >

(備忘録) ACCESS
  • (2012-11-17 14:41:46)

レポートで商品名に応じてフッタのテキストボックスにメッセージを入れる



(2013/04/07)

商品明細のエリア(サブフォーム)

フッタに非連結テキストボックスを作成。

そのプロパティ操作で可能。

・「商品数の合計」を入れる方法は簡単 → 非連結テキストボックス → プロパティ →

コントロールソース = Sum(IIF([商品名] Like "*商品名の一部*",[数量],0))

・メッセージを入れる方法(間違えやすい) →

= (IIF([商品名] Like "*商品名の一部*","プレゼント対象",0)

※最終レコードにターゲットの文字列が含まれる場合のみメッセージが入る。前レコード読み込んでくれているかもしれないが、判断対象は最終レコードだけになる。

・メッセージを入れる方法(今回の解決策) → 非連結テキストボックス → プロパティ →

コントロールソース

(1)= Sum(IIF([商品名] Like "*商品名の一部*",[数量],0))

(2)非連結テキストボックス → プロパティ → 「書式」プロパティを、たとえば

  「#"枚 プレゼント対象";;0」

  「"※母の日キャンペーンプレゼント: "#"個";;0」

クエリで重複データを削除



(2013/04/01)

クエリにてテーブルに含まれるの重複データを削除する方法 →

クエリで新規作成 → 「DM_配信」フィールド1 → SQLビューにて「DISTINCT」を挿入・実行

→ SELECT DISTINCT DM_配信.フィールド1 FROM DM_配信;

重複データが削除された状態で、テーブルに落とす

デザインモードにて → 「クエリ」 → 「テーブル作成」 → 「DM_配信2」

削除用テーブルを用いてテーブルのレコードを削除



(2013/03/10)

サブクエリを使おう。

(1)2つのテーブルを並べ結合クエリでSQLを得る

(2)ターゲットテーブルを削除クエリとしてマウントし、where部に上記のSQLを入れる。このときテーブルは選択クエリで生成されたダイナセットでは動作しないかも(本日やった範囲ではフリーズした)。

クエリからテーブル生成



(2013/03/10)

今更ながら、あれ?という感じ。クエリーのメニューに「選択クエリ」「更新クエリ」「削除クエリ」などと並んで「テーブルを作成」をいう項目がありました。

注文キャンセルを削除クエリで処理



(2013/02/27)

これは以前、DMの削除クエリでやったことがあるのですぐにできると思ったが、忘れていて案外はまった。

キャンセルがあった場合、キャンセル確認のメールを返信する。そのメールデータを元に削除クエリで注文キャンセルを自動化する。

(1)キャンセル確認メールを定型化し、dbに取り込む

(2)クエリ「本日のキャンセル」を作成

(3)「01受信データ」テーブルと「本日のキャンセル」クエリから「本日のキャンセルリレーション」クエリを作成。受注番号で結合する。結合プロパティの向きは「本日のキャンセル」 → 「01受信データ」

(4)上記クエリで、受注番号をリンクするSQLコマンドを得る(サブクエリ)

(5)新規の削除クエリ「本日のキャンセルリレーション削除」を作成。受注番号のフィールドだけ準備する。その抽出条件に上記SQL込まんとを入れる。 → In (SELECT [01受信データ].バッファ01 FROM 本日のキャンセル INNER JOIN 01受信データ ON 本日のキャンセル.バッファ01 = [01受信データ].バッファ01)

AccessでDLookup関数は使わない方が普通?



(2012/02/01)ExcelではDLookup関数はよくお世話になる。しかし、AccessでDLookup関数を使う意味はあるのか?

フォームのリストで支払方法のソートを行う。支払方法名が「クレジット」「コンビニ決済」など固定されているので、希望通りにソートができないので、支払方法名に番号を与え、その番号でソートすることに。番号を振るさい、支払方法名と番号の対比表テーブルを作り、Dlookupで番号の取得を試みる。

しかし、よくよく考えれば「他のテーブルを見に行ってデータを引っ張ってくる」考え方はクエリそのもの。DLookupを使うこと自体、なんかおかしい。DLookupの中身がわからないので今ひとつモヤモヤだが、使う必要はないだろう。

(1)2つのテーブルからクエリリンクでダイナミックの支払い番号を取得 → ただし、テーブルの更新ができなくなる

(2)2つのテーブルからアクションクエリを走らせ、単一テーブルを更新。

フォーム起動時のカーソルの位置や日本語入力の設定



(2012/11/17)フォームを開くと特定のフィールドにカーソルを当てておき、かつ日本語の入力モードも指定しておく → わずかな手間なので今まで手作業だったが、何年もやっていると大きな負担という認識の欠如が、そもそもの問題。




あるフォームを開けるといつも使わないフィールドにカーソルがある。タブオーダーで設定できるらしいうが、サブフォームなどあると超えられない。そこでGoToControlメソッド

'フォーカスを検索窓に移動する

Dim ctl As Control

Set ctl = Forms![F_01受信データ]![キーワード]

DoCmd.GoToControl ctl.Name

このフォームを開けるといつも日本語入力が、オフになっており、オンにすると「固定モード」になる。たいしたことでないので、このままできた。しかし、長い年月のこのわずかな作業が大きなムダになっている

フォーマスをターゲットのフィールド(今回の場合、非連結のテキストボックス)に移して、このテキストボックスのプロパティを下記のように設定

・「その他」タブ

・「IME入力モード保持」 はい

・「IME入力モード」 コントロールなし → ひらがな

リンク結合されたクエリテーブルは更新できない?



(2012/01/22)クエリの演算フィールドとテーブルのフィールドを結合したクエリは更新できない?




strSQL = "UPDATE 01受信データ INNER JOIN Q_DSK_支払通知 ON [01受信データ].管理番号 = Q_DSK_支払通知.ユーザー使用欄2改 SET [01受信データ].入金 = '1';"

DB.Execute strSQL

Q_DSK_支払通知.ユーザー使用欄2改フィールドが、更新済みデータならできるが、ダイナミックに生成した演算フィールドの場合、エラーとなるようだ。

結合したテーブルの更新は時々、更新できなくなるケースがあるが、ちょっと慣れない。




(2011/12/04)削除用テーブルでレコード削除




一斉同報メールリストの作成



一斉同報用のメールリストを作成。全顧客リストなら問題ないが、DMの配信を希望されない方々をリストから削除する必要がある。また、ケータイメールとPCメールは分けたい。

削除クエリで楽々?



DM非配信リスト(DM非配信)を作成する。全顧客リスト(DMリスト)からこのリストのメールアドレスを削除する。Accessクエリには「削除クエリ」があるので気楽に作れるかと予想していたが、簡単ではなかった。

新規クエリで、DMリスト+DM非配信のテーブルをマウントして、削除クエリをクリクリといじってみるが全然わからない。

サブクエリで削除



こんなときはネットにお伺いを立てるにかぎる。「サブクエリ」を作成して削除せよ、という教えを知る。

サブクエリって何だ、という感じ。

選択クエリの抽出条件に「平文」でなく「SQL文」を代入したもののようである。そのSQL文の部分がサブクエリのようだ。

「メインテーブル」と「削除用テーブル」を並べて操作するという基本的な考え方は間違っていないが、実際の削除クエリは「メインテーブル」単体で、サブクエリを元に削除していく。

操作手順



・顧客テーブルを直接操作したくないので、コピーで「DMリスト」テーブルを作成

・新規クエリで、DMリスト+DM非配信のテーブルをマウント

・DMリストはメールアドレスを選択(SQLパネルにドラッグ)

・2つのテーブルをメールアドレスで結合

・SQLビューでSQL文の確認:

「SELECT DMリスト.メールアドレス FROM DM非配信 INNER JOIN DMリスト ON DM非配信.メールアドレス = DMリスト.メールアドレス;」この部分をコピーしてSQLのコードを入手。ここではコードを入手することが目的なので、このクエリは保存せずクローズ。

※Fromの後が複雑で自分では書けない。Fromの後の理解の仕方: FROM (A INNER JOIN B) ON (結合要素 = 結合要素))

・新規クエリで、DMリストをマウント

・メールアドレスを選択(SQLパネルにドラッグ)

・抽出条件に先のコードを下記のように代入:

IN(SELECT DMリスト.メールアドレス FROM q_DM非配信 INNER JOIN DMリスト ON DM非配信.メールアドレス = DMリスト.メールアドレス)

※「IN()」で囲むこと。SQLビューの最後の「;」は不要。

※IN演算子はおまじない。

・このクエリを「削除クエリ」にして実行すると、DMリストから削除すべきものがあったり消えた。

※「削除クエリ」は5万件のデータも目も止まらぬ速さ、バックアップを取らずに実行すると、呆然とすることになる。

ケータイメールの抽出



PCと同じメールを同報するわけにはいかないので、このあとケータイメールを抽出する。

「Like "*docomo.ne.jp" Or Like "*ezweb.ne.jp" Or Like "*softbank.ne.jp" Or Like "*vodafone.ne.jp" Or Like "*pdx.ne.jp" Or Like "*ido.ne.jp" Or Like "*willcom.com" Or Like "*mopera"」

Excelの最大行数は65,536行



・PCメールリスト、ケータイメールリスト、それぞれ生成される。リストのエクスポートではまる。エクスポートはExcel形式で行ったが、操作の手間を惜しんでExcel4形式で出力すると16,000件程度しか吐き出せない。

AccessやExcelはエラーメッセージを出さない。Excelが「容量オーバーです」のようなエラーがでればわかりやすいが、なんかおかしい、としばらく悩んでいた。今回は偶然、気が付いたがうっかり見落としやすい。

また、Excel2003形式でも65536件に制限されており、それ以上の顧客リストがあるとExcelでの操作ができない。

テキスト形式でエクスポートしよう。






<< (備忘録) おてがる otegaru< | >固定ページが難点、JUGEM >>
search
layout
admin

[▲page top]