Access総合相談所 其の20 【桐にしとけ】

このエントリーをはてなブックマークに追加
952名無しさん@そうだ選挙にいこう:2009/04/19(日) 10:35:50
Accessだけ単体で売ってないの?
953名無しさん@そうだ選挙にいこう:2009/04/19(日) 10:48:22
・ShowPlan の設定箇所が変更になっています。従来、JETSHOWPLAN=ON の設定箇所は
 HKLM\SOFTWARE\Microsoft\Jet\4.0\Engines\Debug のレジストリキーでしたが、2007 では
 HKLM\SOFTWARE\Microsoft\Office\12.0\Access\Access Connectivity Engine\Debug です。
954名無しさん@そうだ選挙にいこう:2009/04/19(日) 11:22:50
>>952 売ってるけど、2000使ってる人いるなら、その人のCD使えばオッケ。
955名無しさん@そうだ選挙にいこう:2009/04/19(日) 19:29:16
よくわからんのだが
WHERE [キーワード] IS NULL OR LIKE "*" & [キーワード] & "*"
これは
WHERE ([フィールド何とか] IS NULL) OR ([フィールド何とか] LIKE "*" & [キーワード] & "*")
みたいなものの書き間違いなのか
それにしてもこれによって一体どんな抽出を期待しているんだ
フィールド何とかがたとえば商品名だとして
商品名Nullのものを抽出したいのか


956名無しさん@そうだ選挙にいこう:2009/04/19(日) 20:22:56
>>933
アクセスごとき使えるようにならないと
957名無しさん@そうだ選挙にいこう:2009/04/19(日) 22:47:37
Access2007 のフォーム右クリックフィルタで "おまんこ"に等しいで
"おまんこ" も "オマンコ" もフィルタ選択されちゃう
その後、区別しようと並べ替えても、"おまんこ" と "オマンコ" は混在したまま同一視されてる

これって非常に困るよね、切実な問題だ
958943:2009/04/19(日) 22:56:04
2000と2007の混在について質問した者です。
皆さま回答ありがとうございました。
お礼が遅くなってすみません。

混在は普通にできるんですね。
2000なら個人で買ったのがあるから会社に持ってってインストールします。
がんばって2007勉強したのに他の人のPCでは開くことさえできないこともあったりして
本気で悩んでたので助かりました〜^^
959名無しさん@そうだ選挙にいこう:2009/04/19(日) 23:10:44
>>955
上で何も入力されなかった時全件表示したいって言ってたから多分それだろう。
ただ文字列型のフィールドならNullでも空白でも後半のみで事足りると思うけど。

>>957
内容はともかくバイナリで比較すれば区別つくらしい。
ttp://www.relief.jp/itnote/archives/000896.php
960名無しさん@そうだ選挙にいこう:2009/04/19(日) 23:17:14
説明不足ですみません

キーワードが空白の場合にというのは本当にそのままの意味で、
パラメータクエリでクエリを実行する時に、キーワードを入れないと
普通何も表示されませんが、その時に全てのレコードが表示されるように
したいのです。

具体的に言うと、顧客データのテーブル(住所、氏名、電話、担当者名)から
担当者ごとのデータを取り出したい場合、
通常なら「山田」とか「鈴木」とか担当者名を入力するとその担当顧客が出ますが、
担当者名を空欄にしてクエリを実行すると全顧客のデータが表示される形です。

今は普通にパラメータクエリを使ってるので、空欄だとレコードが一つも表示さ
れません。
ちなみに2003でVBAは使えません。
初心者なので稚拙な説明しかできなくてすみません。

961942:2009/04/19(日) 23:17:33
>>955
その記述方法はよく使われるから知っておいて損はないよ。

WHERE [キーワード] IS NULL OR [キーワード]

ってのは、検索条件[キーワード]が入力されたらそれに合致
するものを抽出し、何も入力されなかったら、全件抽出する。

今回聞きたかったのは、LIKE "*" & [キーワード] & "*"ってのは
インデックスが効かなくて遅くなるから、何も条件が入力されなかった
場合にIS NULLの条件を先に書いておけば、早くなるかなってこと。
962942:2009/04/19(日) 23:22:06
>>962
まさにこれ。担当者名の抽出条件を、

[キーワード] OR [キーワード] IS NULL

にすればいい。
963942:2009/04/19(日) 23:23:11
ごめん、>>960の間違い。
964名無しさん@そうだ選挙にいこう:2009/04/19(日) 23:24:37
あしたもアクセス三昧の日々か

実務もしながらシステムまで作らされる
うちは国内でも有名なブラック企業です
965962:2009/04/19(日) 23:31:07
〉963さん
ありがとうございます。
これでやってみます

キーワードの一部で検索をかける場合はlike*とかと組み合わせれば良いんですよね?
助かりました
ありがとうございます
966942:2009/04/19(日) 23:40:25
>>965
LIKEならIS NULLは必要ないよ。遅くなるみたいだし。

LIKE "*" & [キーワード] & "*"

で、[キーワード]がNULLなら

LIKE "**"

ってことで、全件抽出するから。
967名無しさん@そうだ選挙にいこう:2009/04/20(月) 00:22:25
WHERE [フィールド名] IS NULL OR [フィールド名] LIKE "*山田*"

これは通るけど

WHERE [フィールド名] IS NULL OR LIKE "*山田*"

このSQLエラーにならないの?って意味じゃねえの
968名無しさん@そうだ選挙にいこう:2009/04/20(月) 00:59:54
WHERE "山田" IS NULL OR [フィールド名] LIKE "*山田*"

だってば。
969名無しさん@そうだ選挙にいこう:2009/04/20(月) 01:42:11
>>942
・WHERE 条件式1 Or 条件式2
この場合、条件式1の真偽に関わらず条件式2も評価されます。
(VB.netのOrElse演算子や、Cの ||演算子のような動作はしません)

つまり、以下の2つを比較した場合、
・WHERE ([検索ワード] IS NULL) Or ([フィールド名] LIKE "*" & [検索ワード] & "*")
・WHERE ([フィールド名] LIKE "*" & [検索ワード] & "*")
後者の方が速いことになります。

※IS NULLの処理は軽いので、最近のマシンでは差は微々たるものですけどね。
970名無しさん@そうだ選挙にいこう:2009/04/20(月) 11:41:41
>>964
うちはシステム屋に実務もやらせる、国内でも有名なブラック企業ですw
971名無しさん@そうだ選挙にいこう:2009/04/20(月) 13:13:19
>>959
ありがと

俺の覚書
------
Accessで単純に選択クエリを作成すると、全角と半角、大文字と小文字、ひらがなとカタカナは区別されません。
例えば「ランク」というフィールドを作って「AAa」「aaa」「Bbb」というようなデータが入力されているようなケースで、クエリの抽出条件に「AAA」と指定したとしても「AAa」「aaa」も抽出されてしまいます。
これは大文字と小文字が区別されない例ですが、全角・半角、ひらがな・カタカナでも同様に区別されることはありません。
これを区別して抽出するにはどうすればいいでしょうか。

文字列比較をするStrComp関数を利用して演算フィールドを作成することで、全角・半角、大文字・小文字、ひらがな・カタカナを区別して抽出をすることができます。

▼操作手順:全角・半角、大文字・小文字、ひらがな・カタカナを区別したクエリ
(「ランク」フィールドから「AAA」を抽出する例)
クエリをデザインビューで開く
 ↓
デザイングリッドの[フィールド]欄に
「条件: StrComp([ランク],"AAA",0)」
と入力
 ↓
[抽出条件]欄に「0」と入力

StrComp関数は、
第3引数で指定された方法(上記の場合は「0」=バイナリモード)で、
第1引数と第2引数を比較して、
等しい場合に「0」を等しくない場合には「-1」「1」を返す関数です。
上記の例では、[ランク]フィールドのデータと「AAA」という文字列を比較することで「条件」フィールドには「-1」「0」「1」という値が表示されるようになり、[条件]フィールドの[抽出条件]に「0」を指定することで「AAA」のレコードが抽出されることになります。
第2引数を「[抽出条件は?]」というように指定することで、パラメータクエリにすることもできます。
972名無しさん@そうだ選挙にいこう:2009/04/20(月) 18:43:52
俺なんてよその会社のシステム立ち上げに行ってるのに
電話の応対とか頼まれるんだぜ。
973960:2009/04/20(月) 20:25:11
ありがとうございます。
大変参考になります。
図々しくて申し訳ないのですが、もう一つ質問させてください。

パラメータクエリで特定のキーワードをあるテーブルの複数のフィールドから検索して、
いずれかのフィールドにそのキーワードを含むレコードを全て表示したいのですが、
どのように作ればスマートでしょうか?

クエリで「検索用:フィールドA&フィールドB&フィールドC・・」というフィールドを作って、
抽出条件の欄に「Like "*"&[キーワードを入力してください]&"*"」としたところ、
一つのレコードのフィールドAとCの両方にそのキーワードが含まれていた場合、
そのレコードが2回表示されてしまいました。

具体的に言うと、商品説明のテーブルで
例えば品名が「焼きそばパン」で、材料に「パン粉」がある場合など、
パン系の商品を呼び出そうと「パン」で検索した場合、同一レコードが2行表示されてしまいます。

度々申し訳ありませんが、おわかりの方、どうぞご教示お願いします。
974名無しさん@そうだ選挙にいこう:2009/04/20(月) 23:41:56
DISTINCTROW をつければよろし。
975名無しさん@そうだ選挙にいこう:2009/04/20(月) 23:57:45
テーブルに日付、番号ってあって番号は毎日
一から取り直すんだけど、自動的に番号採番したいんだけど
マクロ記述で
Dcount("番号","テーブル名","日付"=Date())=0で条件作って
0のときは0を採番し
0でない時は
Dmax("番号","テーブル名")+1で1を加算しようと思うけど
いつも1になってしまいます、どうしてなんでしょう。
よかったら教えてください。
976名無しさん@そうだ選挙にいこう:2009/04/21(火) 03:53:04
>>973=960
すでに>>974さんが答えていらっしゃいますが、DISTINCTROW句を付けるには、
・SQLビューから SELECT句に続いて+スペース+DISTINCTROW句を付け加える。
・デザインビューからクエリプロパティを表示し、[固有のレコード] を [はい] にする。
いずれかの方法で可能です。

>>975
DCount関数の抽出条件の使い方が間違っています。条件式は文字列でなくてはなりません。
誤: DCount("番号","テーブル名","日付"=#04/21/2009#)
正: DCount("番号","テーブル名","日付=#04/21/2009#")

これを誤って使用しているために
DCount("番号","テーブル名","日付"=Date()) の値は常に0となり(エラーかも?)
その結果、常に0が採番されているはずです。当然、DMaxの値は…(ry

正しく動作させるには、DCount関数を次のように修正します。
DCount("番号","テーブル名","日付=" & Format(Date(),"\#mm/dd/yyyy\#"))
さらに DMax関数に日付条件がありません。
日付条件がないと、過去の日付を含めた最大値になりますから・・・条件を追加します。
DMax("番号","テーブル名","日付=" & Format(Date(),"\#mm/dd/yyyy\#"))

これで動作するような気がするのですが、どうでしょうか?
977名無しさん@そうだ選挙にいこう:2009/04/21(火) 06:18:27
>>976
974です。
まさにドンピシャの回答だと思います。
SQLで文字列はわかるけど、関数内で関数が使えないっていう発想が
エクセル上がりの私にはありませんでした。
ステップアップできそうです。ありがとうございました。
978名無しさん@そうだ選挙にいこう:2009/04/21(火) 07:51:06
大手金融系のCOBOL開発しか経験がありませんが、中小企業の社内システムの開発をVBAでやることになりました。
VBAは全く未経験ですが、COBOLプロジェクトと同じ感覚で基本設計や詳細設計を行うものなのでしょうか?
979960:2009/04/21(火) 07:54:16
>974,976
ありがとうございます!
一人でものすごく悩んでたので本当に助かりました。
度々申し訳ありませんでした。
980名無しさん@そうだ選挙にいこう:2009/04/21(火) 09:01:53
最近コボラーがたくさん湧いてるけどもしかして同一人物?
981名無しさん@そうだ選挙にいこう:2009/04/21(火) 14:49:07
お願いします。WinXP(SP3)&Access2003です。

Private Sub 起動チェック()
Dim xlsApp As Object
On Error Resume Next
Set xlsApp = GetObject(, "Excel.Application")

If err.Number = 0 Then
MsgBox "Excel起動中"
Else
MsgBox "Excelは起動していません"
End If

End Sub

これを参考に、Excelの起動チェックは出来るようになりました。
同様に、Adobe Readerの起動チェックはできないでしょうか?
試しに、GetObjectの"Excel.Application"の部分を
"Acrobat.AcroPDDoc"とか"AcroExch.PDDoc"とか"Acrobat.AcroAVDoc"とかに
書き換えてみたんですけど、ダメでした。
ちなみにAdobe Readerのバージョンは端末によっていろいろなので、
7〜9辺りで汎用に使えると有り難いのですが…。
982名無しさん@そうだ選挙にいこう:2009/04/22(水) 01:24:21
sage
983名無しさん@そうだ選挙にいこう:2009/04/22(水) 01:39:58
984名無しさん@そうだ選挙にいこう:2009/04/22(水) 06:55:31
>>981
難しそうなので参考になりそうなリンクだけ
ttp://park7.wakwak.com/~efc21/cgi-bin/exqalounge.cgi?print+200806/08060112.txt
985名無しさん@そうだ選挙にいこう:2009/04/22(水) 07:54:19
よくVBAに登場する括弧に挟まれた
Cancel as integrer
とはどういう意味ですか?
986名無しさん@そうだ選挙にいこう:2009/04/22(水) 08:11:23
987名無しさん@そうだ選挙にいこう:2009/04/22(水) 08:23:15
Integer型の Cancel という引数。
988名無しさん@そうだ選挙にいこう:2009/04/22(水) 09:26:44
OS:Windows XP SP2
Access:2003
サブフォームのコントロールソースに関する質問です

あるサブフォームにテーブル「M_AREA_JUDGE」の項目を表示させ、テーブル「M_AREA_SUB」の項目の値を元にサブフォームの表示項目を「目的の表示結果」のように表示させたいと考えております。

しかし、「都道府県」の項目のコントロールソースを「AreaSubID」にするだけでは、「実際の表示結果」のように「AreaSubID」が重複している項目は上の項目を参照するため、正常に表示されません。

「AreaSubID」だけでなく「AreaID」の項目も参照させれば良いと思うのですが、どうすれば良いのか分かりません。
私が思うには、サブフォーム上の項目「都道府県」のコントロールソースを「AreaSubID」だけでなく、「AreaID」も検索項目の対象に出来ればいいのですが、サブフォームのコントロールソースは2つ以上の項目を参照できるようにすることは出来るでしょうか?

よろしくお願いします。

なお、処理イメージは以下のような画像になります
htp://www8.uploader.jp/user/minori/images/minori_uljp03073.jpg
989981:2009/04/22(水) 09:44:46
>>984
む、難しそうですか…。
そこからリンクしてるExcelVBAのページは以前さらっと読んだんですが、
私の力量ではイマイチよくわかりませんでした。
VBAからPost Script Printer使ってPDF作成する時に、
既に開いてるReaderがあるとエラーで止まっちゃうので、
事前に閉じて欲しかったんですけど、エラー処理作るしかないかぁ。
990981:2009/04/22(水) 09:45:35
あ、お礼を言い忘れた。ありがとうございました>>984
991名無しさん@そうだ選挙にいこう:2009/04/22(水) 13:35:17
>>990=981
'標準モジュール内に以下のようにAPIルーチンの宣言をしておいて…
Public Declare Function FindWindow Lib "user32.dll" _
Alias "FindWindowA" _
(ByVal lpClassName As String, _
ByVal lpWindowName As String) As Long

'FindWindow関数を呼び出してチェックします。
Private Sub 起動チェック()
Dim hWnd As Long
hWnd = FindWindow("AcrobatSDIWindow", vbNullString)
If hWnd = 0 Then
MsgBox "AcrobatReaderは起動していません"
Else
MsgBox "AcrobatReaderは起動中"
End If
End Sub

これでどうでしょうか?
WindowsやAcrobatReaderのバージョンによっては動作しないかもしれませんが…
992名無しさん@そうだ選挙にいこう:2009/04/22(水) 15:07:15
>>988
サブフォーム->プロパティ->レコードソースに SQL文で定義しても
駄目?
993名無しさん@そうだ選挙にいこう:2009/04/22(水) 15:10:21
質問です。
OS:WindowsXP SP3
Access:2000

ID      名前          住所
"I001"    ""           ""
""     "某株式会社"     ""
""       ""        "某県某市某所"

こんな風に値が斜めに入っているテーブルがあります。
""は空白の事です。
各列は、値以外は全て空白となっています。
名前の値を一番上のレコードにUPDATEしようとしたら無理でした(Oracleだと出来るみたい)。
SQL文は以下で、サブクエリのところでエラーになってしまいます。
名前と住所の値を最上行に移動させたいのですが何か良い方法ありますでしょうか。

UPDATE tbl_01
SET 名前 =
(SELECT 名前
FROM tbl_01
WHERE 名前 <> "" )
WHERE ID like 'I*';
994名無しさん@そうだ選挙にいこう:2009/04/22(水) 18:16:12
次立てるよ
995名無しさん@そうだ選挙にいこう:2009/04/22(水) 18:18:31
規制中で駄目だった

ACCESSに関する質問はこちらへ!

▼━ 質問のしかた ━━━━━━━━━━━━━━━━━━━━
★ OS、ACCESSのバージョンを明記してください。
★ 質問内容は具体的に書いてください。
  ・何がしたいのか
  ・どんな処理を試したか
  ・動作状況など駄目な理由
  テーブル/フォームの構成、クエリ、VBAの内容など差し支えない
 範囲で詳しく書くと、早く回答が得られるかもしれません。
  図解があれば尚良し。
  聞き返さなくても詳細が把握できる質問が望ましいです。
★ 事前にヘルプ・Google等で調べられる範囲は調べてください。
  大概の疑問は検索することで解決します。
★ アドバイスを貰ったら、必ず経過・結果の報告をして下さい。
  ギブアンドテイクで情報を共有しましょう。

▼━質問テンプレ (出来れば使ってね) ━━━━━━━━━━━━
【 システム環境  . 】 Windows**, Access**
【 VBAが使えるか .】 はい・いいえ
【 VBAでの回答  】 可・否
【 検索キーワード 】 Googleやヘルプでの検索キーワード

前スレ
Access総合相談所 其の20 【桐にしとけ】
http://pc11.2ch.net/test/read.cgi/bsoft/1230971374/l50

桐はこちら↓
管理工学研究所「桐」【4】
http://pc11.2ch.net/test/read.cgi/bsoft/1100708378/
996名無しさん@そうだ選挙にいこう:2009/04/22(水) 18:32:35
>>993
サブクエリのダブルクォーテーションをシングルクォーテーションにしても無理?
997名無しさん@そうだ選挙にいこう:2009/04/22(水) 18:36:56
立てた

Access総合相談所 其の21 【桐にしとけ】
http://pc11.2ch.net/test/read.cgi/bsoft/1240392946/
998名無しさん@そうだ選挙にいこう:2009/04/22(水) 18:45:42
>>997
999名無しさん@そうだ選挙にいこう:2009/04/22(水) 18:53:35
>>988
今からテーブル構成変えるのは駄目・・・だよねぇ。
ユーザー名を特定できるフィールド作った方が無難なような・・・
1000
10011001
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。