952 :
名無しさん@そうだ選挙にいこう :2009/04/19(日) 10:35:50
Accessだけ単体で売ってないの?
・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使えばオッケ。
よくわからんのだが WHERE [キーワード] IS NULL OR LIKE "*" & [キーワード] & "*" これは WHERE ([フィールド何とか] IS NULL) OR ([フィールド何とか] LIKE "*" & [キーワード] & "*") みたいなものの書き間違いなのか それにしてもこれによって一体どんな抽出を期待しているんだ フィールド何とかがたとえば商品名だとして 商品名Nullのものを抽出したいのか
957 :
名無しさん@そうだ選挙にいこう :2009/04/19(日) 22:47:37
Access2007 のフォーム右クリックフィルタで "おまんこ"に等しいで "おまんこ" も "オマンコ" もフィルタ選択されちゃう その後、区別しようと並べ替えても、"おまんこ" と "オマンコ" は混在したまま同一視されてる これって非常に困るよね、切実な問題だ
958 :
943 :2009/04/19(日) 22:56:04
2000と2007の混在について質問した者です。 皆さま回答ありがとうございました。 お礼が遅くなってすみません。 混在は普通にできるんですね。 2000なら個人で買ったのがあるから会社に持ってってインストールします。 がんばって2007勉強したのに他の人のPCでは開くことさえできないこともあったりして 本気で悩んでたので助かりました〜^^
説明不足ですみません キーワードが空白の場合にというのは本当にそのままの意味で、 パラメータクエリでクエリを実行する時に、キーワードを入れないと 普通何も表示されませんが、その時に全てのレコードが表示されるように したいのです。 具体的に言うと、顧客データのテーブル(住所、氏名、電話、担当者名)から 担当者ごとのデータを取り出したい場合、 通常なら「山田」とか「鈴木」とか担当者名を入力するとその担当顧客が出ますが、 担当者名を空欄にしてクエリを実行すると全顧客のデータが表示される形です。 今は普通にパラメータクエリを使ってるので、空欄だとレコードが一つも表示さ れません。 ちなみに2003でVBAは使えません。 初心者なので稚拙な説明しかできなくてすみません。
961 :
942 :2009/04/19(日) 23:17:33
>>955 その記述方法はよく使われるから知っておいて損はないよ。
WHERE [キーワード] IS NULL OR [キーワード]
ってのは、検索条件[キーワード]が入力されたらそれに合致
するものを抽出し、何も入力されなかったら、全件抽出する。
今回聞きたかったのは、LIKE "*" & [キーワード] & "*"ってのは
インデックスが効かなくて遅くなるから、何も条件が入力されなかった
場合にIS NULLの条件を先に書いておけば、早くなるかなってこと。
962 :
942 :2009/04/19(日) 23:22:06
>>962 まさにこれ。担当者名の抽出条件を、
[キーワード] OR [キーワード] IS NULL
にすればいい。
963 :
942 :2009/04/19(日) 23:23:11
あしたもアクセス三昧の日々か 実務もしながらシステムまで作らされる うちは国内でも有名なブラック企業です
965 :
962 :2009/04/19(日) 23:31:07
〉963さん ありがとうございます。 これでやってみます キーワードの一部で検索をかける場合はlike*とかと組み合わせれば良いんですよね? 助かりました ありがとうございます
966 :
942 :2009/04/19(日) 23:40:25
>>965 LIKEならIS NULLは必要ないよ。遅くなるみたいだし。
LIKE "*" & [キーワード] & "*"
で、[キーワード]がNULLなら
LIKE "**"
ってことで、全件抽出するから。
WHERE [フィールド名] IS NULL OR [フィールド名] LIKE "*山田*" これは通るけど WHERE [フィールド名] IS NULL OR LIKE "*山田*" このSQLエラーにならないの?って意味じゃねえの
WHERE "山田" IS NULL OR [フィールド名] LIKE "*山田*" だってば。
>>942 ・WHERE 条件式1 Or 条件式2
この場合、条件式1の真偽に関わらず条件式2も評価されます。
(VB.netのOrElse演算子や、Cの ||演算子のような動作はしません)
つまり、以下の2つを比較した場合、
・WHERE ([検索ワード] IS NULL) Or ([フィールド名] LIKE "*" & [検索ワード] & "*")
・WHERE ([フィールド名] LIKE "*" & [検索ワード] & "*")
後者の方が速いことになります。
※IS NULLの処理は軽いので、最近のマシンでは差は微々たるものですけどね。
>>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引数を「[抽出条件は?]」というように指定することで、パラメータクエリにすることもできます。
俺なんてよその会社のシステム立ち上げに行ってるのに 電話の応対とか頼まれるんだぜ。
973 :
960 :2009/04/20(月) 20:25:11
ありがとうございます。 大変参考になります。 図々しくて申し訳ないのですが、もう一つ質問させてください。 パラメータクエリで特定のキーワードをあるテーブルの複数のフィールドから検索して、 いずれかのフィールドにそのキーワードを含むレコードを全て表示したいのですが、 どのように作ればスマートでしょうか? クエリで「検索用:フィールドA&フィールドB&フィールドC・・」というフィールドを作って、 抽出条件の欄に「Like "*"&[キーワードを入力してください]&"*"」としたところ、 一つのレコードのフィールドAとCの両方にそのキーワードが含まれていた場合、 そのレコードが2回表示されてしまいました。 具体的に言うと、商品説明のテーブルで 例えば品名が「焼きそばパン」で、材料に「パン粉」がある場合など、 パン系の商品を呼び出そうと「パン」で検索した場合、同一レコードが2行表示されてしまいます。 度々申し訳ありませんが、おわかりの方、どうぞご教示お願いします。
DISTINCTROW をつければよろし。
テーブルに日付、番号ってあって番号は毎日 一から取り直すんだけど、自動的に番号採番したいんだけど マクロ記述で Dcount("番号","テーブル名","日付"=Date())=0で条件作って 0のときは0を採番し 0でない時は Dmax("番号","テーブル名")+1で1を加算しようと思うけど いつも1になってしまいます、どうしてなんでしょう。 よかったら教えてください。
>>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\#"))
これで動作するような気がするのですが、どうでしょうか?
>>976 974です。
まさにドンピシャの回答だと思います。
SQLで文字列はわかるけど、関数内で関数が使えないっていう発想が
エクセル上がりの私にはありませんでした。
ステップアップできそうです。ありがとうございました。
978 :
名無しさん@そうだ選挙にいこう :2009/04/21(火) 07:51:06
大手金融系のCOBOL開発しか経験がありませんが、中小企業の社内システムの開発をVBAでやることになりました。 VBAは全く未経験ですが、COBOLプロジェクトと同じ感覚で基本設計や詳細設計を行うものなのでしょうか?
979 :
960 :2009/04/21(火) 07:54:16
>974,976 ありがとうございます! 一人でものすごく悩んでたので本当に助かりました。 度々申し訳ありませんでした。
最近コボラーがたくさん湧いてるけどもしかして同一人物?
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辺りで汎用に使えると有り難いのですが…。
sage
985 :
名無しさん@そうだ選挙にいこう :2009/04/22(水) 07:54:19
よくVBAに登場する括弧に挟まれた Cancel as integrer とはどういう意味ですか?
Integer型の Cancel という引数。
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
989 :
981 :2009/04/22(水) 09:44:46
>>984 む、難しそうですか…。
そこからリンクしてるExcelVBAのページは以前さらっと読んだんですが、
私の力量ではイマイチよくわかりませんでした。
VBAからPost Script Printer使ってPDF作成する時に、
既に開いてるReaderがあるとエラーで止まっちゃうので、
事前に閉じて欲しかったんですけど、エラー処理作るしかないかぁ。
990 :
981 :2009/04/22(水) 09:45:35
あ、お礼を言い忘れた。ありがとうございました
>>984
>>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文で定義しても
駄目?
質問です。 OS:WindowsXP SP3 Access:2000 ID 名前 住所 "I001" "" "" "" "某株式会社" "" "" "" "某県某市某所" こんな風に値が斜めに入っているテーブルがあります。 ""は空白の事です。 各列は、値以外は全て空白となっています。 名前の値を一番上のレコードにUPDATEしようとしたら無理でした(Oracleだと出来るみたい)。 SQL文は以下で、サブクエリのところでエラーになってしまいます。 名前と住所の値を最上行に移動させたいのですが何か良い方法ありますでしょうか。 UPDATE tbl_01 SET 名前 = (SELECT 名前 FROM tbl_01 WHERE 名前 <> "" ) WHERE ID like 'I*';
次立てるよ
規制中で駄目だった
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/
>>993 サブクエリのダブルクォーテーションをシングルクォーテーションにしても無理?
998 :
名無しさん@そうだ選挙にいこう :2009/04/22(水) 18:45:42
>>988 今からテーブル構成変えるのは駄目・・・だよねぇ。
ユーザー名を特定できるフィールド作った方が無難なような・・・
1000
1001 :
1001 :
Over 1000 Thread このスレッドは1000を超えました。 もう書けないので、新しいスレッドを立ててくださいです。。。