2ちゃんねる ★スマホ版★ ■掲示板に戻る■ 全部 1- 最新50  

■ このスレッドは過去ログ倉庫に格納されています

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

1 :ビートたけし:2008/07/17(木) 20:18:58
ACCESSに関する質問はこちらへ!


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

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

前スレ
ACCESS総合相談所 その18 【桐にしとけ】
http://pc11.2ch.net/test/read.cgi/bsoft/1198885955/

桐はこちら↓
管理工学研究所「桐」【4】
http://pc11.2ch.net/test/read.cgi/bsoft/1100708378/

2 :ビートたけし:2008/07/17(木) 20:19:31
ACCESS2000総合相談所
http://pc.2ch.net/bsoft/kako/965/965614164.html
ACCESS総合相談所 その2
http://pc.2ch.net/bsoft/kako/1007/10079/1007987001.html
ACCESS総合相談所 その3
http://pc.2ch.net/bsoft/kako/1019/10190/1019087338.html
ACCESS総合相談所 その4
http://pc.2ch.net/bsoft/kako/1027/10274/1027491281.html
ACCESS総合相談所 その5
http://pc.2ch.net/bsoft/kako/1033/10331/1033182163.html
ACCESS総合相談所 その6
http://pc2.2ch.net/bsoft/kako/1037/10378/1037856185.html
ACCESS総合相談所 その7
http://pc2.2ch.net/bsoft/kako/1043/10439/1043996834.html
ACCESS総合相談所 その8(消息不明です)
http://pc2.2ch.net/bsoft/kako/1051/10516/1051630268.html
ACCESS総合相談所 その9(消息不明です)
http://pc2.2ch.net/test/read.cgi/bsoft/1061828549
ACCESS総合相談所 その10
http://pc5.2ch.net/test/read.cgi/bsoft/1075378966/
ACCESS総合相談所 その11
http://pc5.2ch.net/test/read.cgi/bsoft/1089812359/
ACCESS総合相談所 その12
http://pc8.2ch.net/test/read.cgi/bsoft/1106963038/
ACCESS総合相談所 その13 【桐にしとけ】
http://pc8.2ch.net/test/read.cgi/bsoft/1121055646/
ACCESS総合相談所 その14 【桐にしとけ】
http://pc8.2ch.net/test/read.cgi/bsoft/1128486351/
ACCESS総合相談所 その15
http://pc8.2ch.net/test/read.cgi/bsoft/1142586697/
ACCESS総合相談所 その16 【桐にしとけ】
http://pc11.2ch.net/test/read.cgi/bsoft/1157195290/

3 :名無しさん@そうだ選挙にいこう:2008/07/17(木) 20:23:52
                  .∧__,,∧
                 (´・ω・`)
                  (つ乙と)
                  `u―u´

4 :ビートたけし:2008/07/17(木) 20:28:16
関連スレッド一覧

★関連スレ★

データベース板
【Access】アクセスは最強のデータベース!
http://pc11.2ch.net/test/read.cgi/db/1166295459/
【I love Access】やっぱりアクセスが良い
http://pc11.2ch.net/test/read.cgi/db/1182004821/

プログラム板
VBプログラマ質問スレ(6.0以前) Part51 ※Office, Access 固有の質問はスレ違いにつき注意!
http://pc11.2ch.net/test/read.cgi/tech/1169949451/
★Microsoft Access★
http://pc11.2ch.net/test/read.cgi/tech/1064900050/

資格全般板
【荒らしは】MOS試験ACCESSスレ【来ないで!】
http://school7.2ch.net/test/read.cgi/lic/1146902574/

ビジネスsoft板
Access2000+SQL Server難しい・・・(´д`;)
http://pc11.2ch.net/test/read.cgi/bsoft/1002096284/
ACCESS2000の分かりやすい本
http://pc11.2ch.net/test/read.cgi/bsoft/994154155/
microsoft access で成績証明書作成
http://pc11.2ch.net/test/read.cgi/bsoft/1054963223/
もう『Access2002』使ってる人いるっしょ?集合!!
http://pc11.2ch.net/test/read.cgi/bsoft/1006147865/
EXCEL,ACCESSで曖昧な表現を。
http://pc11.2ch.net/test/read.cgi/bsoft/1002267900/

5 :名無しさん@そうだ選挙にいこう:2008/07/17(木) 20:32:36
DAOのことは知らない
VBAでデータベース(mdb)にADO接続してSQLを操る
ってことならまあ、ありかな
何だか書いてるうちに俺も混乱してきた
そんなことをしなくても小規模なシステムならもっともっと楽に作れる


6 :ビートたけし:2008/07/17(木) 20:38:15
関連ウェブサイト

Microsoft Access Club
http://www.accessclub.jp/

T'sWare HomePage
http://www.tsware.jp/

MOUG
http://www.moug.net/

MS Access Discovery & Access庵BBS
http://www.f3.dion.ne.jp/~element/msaccess/

Accessむかむか - Access VBA TIPS
http://www.sanryu.net/acc/

データベースアクセスの技術情報とアクセス実用サンプル集
http://www.friendlysw.com/knowhow/knowhow.asp



7 :ビートたけし:2008/07/17(木) 20:49:17
個人的には、C/S型で、バックグラウンドにMySQL、クライアントにAccess 2007 ランタイム
という組み合わせが好きです。

ちなみに、Access 2007 ランタイム他はURL

Access 2007 ランタイム日本語版:http://www.microsoft.com/downloads/details.aspx?FamilyID=D9AE78D9-9DC6-4B38-9FA6-2C745A175AED&displaylang=ja
Office 2007 XPS/PDF出力アドイン:http://www.microsoft.com/downloads/details.aspx?familyid=4D951911-3E7E-4AE6-B059-A2E79ED87041&displaylang=ja
Office 2007 FileFormat Converter:http://www.microsoft.com/downloads/details.aspx?familyid=941B3470-3AE9-4AEE-8F43-C6BB74CD1466&displaylang=ja

XPS/PDFアドインを入れると、ランタイムであってもPDF出力が可能になりますし、マクロのエクスポートにおいて、
選択フォーマットでPDFを指定できます。
また、FileFormat Converterを導入すると、Access2007のExcelエクスポートにおいて、Excel2007形式での出力が
可能になります。

以上テンプレ終了。では、みなさま、お楽しみください。


8 :名無しさん@そうだ選挙にいこう:2008/07/17(木) 22:34:53
>>1


>> 前スレ1000
ちょっとズレてる。
アプリケーション >> マクロ言語 >> ミドルウェア >> DBエンジン
という関係になる。
これが
Access >> VBA >> DAO >> Jet
だったり、
Excel >> VBA >> ADO >> SQL鯖
だったり、
HTA >> JScript >> ADO >> Oracle
になったりする。

文章だけだと分かりにくいようなら、下を見れ。
ttp://www.ruriplus.com/msaccess/Exp/Exp0010.htm

9 :名無しさん@そうだ選挙にいこう:2008/07/17(木) 22:51:53
>>1 乙です! テンプレートが増強されてる。あと、桐スレへのリンクが追加されとるw

既に>>8が説明してくれたけど、せっかく書いたので投下。
前スレ>>1000へ。「VBA=ADO(DAO)=SQL」の認識は間違ってる。

簡単に説明すると。
VBAは(データベース操作に限らず)汎用的な操作・処理を行うために使用する言語。
ADO(DAO)は様々な言語から呼び出して使う、(データベース等の)データを操作するための機能セット(言語じゃない)。
SQLはデータベースを操作するための言語。

VBAからADO(DAO)は使えるけど、VBAからSQLは直接使えない。
なので、VBAからデータベースを操作したいときはVBAからADOの機能を呼び出して、ADOからSQLを発行してもらう。
「VBA->ADO->SQL->データベース」みたいに、ADOがVBAとSQLの間を中継してくれるわけ。

なぜ、わざわざVBAからSQLを使うかというと、
フォームやレポートの操作、ファイル入出力などはVBAからしか行えないので、それらと連携したい場合に使う。
あと、AccessのSQLでは書き辛い複雑な処理をする場合にもVBAを使う。
実際にVBAからADOを使っているサンプルコードを探してみれば分かってくるはず。

ちなみに>>5の言うとおり、簡単なものならVBAを知らなくても作れるので、
VBAやADOとかは本当に必要になったときに学習すれば良いと思うよ。
正規化を知ってればテーブルとリレーションシップは分かるはずだし、
テーブルとクエリ(AccessではSQL言語で記述したもの=クエリ)が分かれば、
フォームやレポートも単純なものなら作れるよ。

以上です。あとは、いくつか入門サイトを巡るなり、入門書を買い足してみて。
それでは頑張ってくださいな。

10 :名無しさん@そうだ選挙にいこう:2008/07/17(木) 22:56:12
>>1
前々スレ
ACCESS総合相談所 その17 【桐にしとけ】
http://pc11.2ch.net/test/read.cgi/bsoft/1175943813/

11 :名無しさん@そうだ選挙にいこう:2008/07/17(木) 23:10:38
Dim obj As Object
Dim kazu As Long
For Each obj In CurrentProject.AllForms
kazu = kazu + 1
Next
MsgBox kazu
としてカレントプロジェクトのフォーム数を数えることができますが、
テーブル数を数えるにはどう書けばいいのでしょうか?

12 :名無しさん@そうだ選挙にいこう:2008/07/17(木) 23:32:23
失礼、こうみたいです。
Dim obj As AccessObject, dbs As Object, kazu As Long
Set dbs = Application.CurrentData
For Each obj In dbs.AllTables
kazu = kazu + 1
Next obj
MsgBox kazu

13 :名無しさん@そうだ選挙にいこう:2008/07/18(金) 01:26:46
本当に数だけ知りたいなら、CurrentData.AllTables.Countや
CurrentDb.TableDefs.Countだけでいい気がするが。

いかにも不自然だから、ループしたいのが本題で、数を数える
というのは処理の例として適当に出したんだろうけど。

14 :前スレ>>1000:2008/07/18(金) 13:58:39
皆様からのいろいろなご教示ありがとうございました。
最後に私がご教示通りに理解したかを確認させてください。

1.マイクロソフトのRDBMSであるJETを操作する言語はSQLである。

2.JETを操作するSQLを簡単につくる便利ツールとしてDAO(ADO)がある。

3.DAO(ADO)は、VBAなどの言語から呼び出して使う。

4.VBAやSQLに精通しているなら、ADO(DAO)は必要ない。
  (VBAから直接SQLを操作すればいいから。)

もし、上記の認識が正しければ、概念段階のデータモデリングについて教えてください。トップダウンとかボトムアップとかあるようなのですが、どちらにしてもあらかじめどのようにデータベースを運用していくのかを決めないと駄目なようなのです。

しかし、将来的な拡張性を考慮すると、予め全てを決めておかなければいけないというのが作業を躊躇させるのです。

15 :名無しさん@そうだ選挙にいこう:2008/07/18(金) 14:08:17
>>14
まじに、桐にしといたほうが良いぞ

16 :名無しさん@そうだ選挙にいこう:2008/07/18(金) 14:35:23
>>14
DAOやADOを中心に考えた方が理解しやすいかもしれませんねぇ。

DAO(ADO)‘が’操作するのがJETやSQLserverなどのRDBや、他データ。
DAO(ADO)‘を’操作するのがVBAなどのプログラミング言語。
プログラミング中、データ操作を指示する際に使う文法がSQL句。

プログラムを組む際はDAO(ADO)を通してSQL句を使ってデータを操作する。
こんな感じでしょうか。

17 :名無しさん@そうだ選挙にいこう:2008/07/18(金) 16:59:42
>>14
SQL文を操るにはDAOやADOを経由することが必要。
個人的にはDAOやADOに直接SQL文を発行するやり方が好きだが、素人同然だったらクエリを使うべきだと思う。
参照、追加、更新、削除、クエリは全部できるから、そしてクエリはほぼマウス操作だけで作れるから。

混乱しすぎ、難しく考えすぎ。肩の力を一度抜けれ。
まずはVBAのことが書かれていない超入門書を見つけて「ACCESSでは何ができるか」を把握すれ。

てか、ふと思ったんだがどんだけの規模のシステム作るつもりだ!?
会社の基幹システムでも作るつもりじゃまいだろな・・・??(作るつもりならアウトソーシングするべきだ)

18 :名無しさん@そうだ選挙にいこう:2008/07/18(金) 17:14:56
別にSQL使うのにDAOもADOも関係ないじゃん
Accessから普通にSQL使えるから

VBA他プログラム言語からデータベースの要素をオブジェクトとして扱いたい時に、DAO/ADOを介在させるんだよ
2007からはマクロで変数使えるようになったから、Access使うのには、VBAもDAO/ADOも不要だよ

19 :名無しさん@そうだ選挙にいこう:2008/07/18(金) 17:32:57
それでもマクロは使わないでください(><;)

20 :18:2008/07/18(金) 18:19:20
んん? 何でよ
Access native 言語のマクロ最強じゃん、tbl 操作するときは SQL 投げれば良いんだし
DAO/ADO で無理やりVBから操作するより安全確実簡単

21 :前スレ>>1000:2008/07/18(金) 18:57:17
多くの方々からご教示いただきまして、本当にありがとうございました。
皆様のレスを何度も読み返して、徐々にですが腑に落ちるところがありました。

まさか、超初心者の私の質問に、これほど多くの方々からご支援いただけるとは思わず、
皆様のお心づかいに本当に感謝しております。

本当に、どうもありがとうございました。



22 :名無しさん@そうだ選挙にいこう:2008/07/19(土) 09:07:45
とりあえず使ってみればいいのに。

23 :名無しさん@そうだ選挙にいこう:2008/07/19(土) 14:09:04
VBA終わったな

24 :名無しさん@そうだ選挙にいこう:2008/07/19(土) 17:56:31
よかったな。
次こそガンバレよ。

25 :名無しさん@そうだ選挙にいこう:2008/07/19(土) 19:20:10
アクセス2000でjpgデータの表示出来ないんだっけ?
bmpにいちいち変換はやだしなぁ

26 :名無しさん@そうだ選挙にいこう:2008/07/19(土) 19:28:40
イメージコントロールにはふつうに表示できたと思うが。
非連結オブジェクト フレーム コントロールの話なら、下に該当しているとか。

ttp://support.microsoft.com/kb/411755/ja

27 :名無しさん@そうだ選挙にいこう:2008/07/20(日) 08:06:31
あー
そんなんでは不特定PCには使えないなぁ

28 :名無しさん@そうだ選挙にいこう:2008/07/20(日) 14:09:21
不特定PCに播くのにOLEオブジェクト使うヤシはただのアホ。

29 :名無しさん@そうだ選挙にいこう:2008/07/21(月) 15:03:14
VBAを使用しているファイルを開こうとすると、「セキュリティの警告 データベースの一部の内容が無効にされました」
という警告がでるんですが、この警告が出ないようにするには、どのように設定すればいいのでしょうか?

30 :名無しさん@そうだ選挙にいこう:2008/07/21(月) 15:07:04
>>29
ヘルプ嫁

31 :名無しさん@そうだ選挙にいこう:2008/07/21(月) 16:51:23
>>30
オプションで「信頼できる場所」に登録すればいいんですね。
しかし、何だか面倒だな。

32 :名無しさん@そうだ選挙にいこう:2008/07/22(火) 00:05:15
レジストリも弄っとけ

33 :名無しさん@そうだ選挙にいこう:2008/07/22(火) 00:41:29
>>32
そうなんですか?
ヘルプには書いていないみたいなんですが…

34 :名無しさん@そうだ選挙にいこう:2008/07/22(火) 00:51:45
Accessの課題でたけど、やる暇ねえええ
というわけで、課題をやってくれた人には何かあげます^^

35 :名無しさん@そうだ選挙にいこう:2008/07/22(火) 08:14:18
出題内容
アクセス2003
ファイル名 : 成績管理(自分の名前)
目的     : 学生情報の管理を行うデータベースシステム
機能     : @学生情報の(番号/名前/性別/生年月日/住所など)登録/変更/削除
         A学生成績(国/数/理/社/英等)の登録
         B一覧印刷(レポート)
条件     : @上記の機能を実行するためのボタンを配置したメニューホームを作成
         A上記以外に自分なりの機能を追加すること(最低1つ)
         Bテーブルを設計し、各テーブルに最低5つはデータ登録すること
         C最低1つはクエリを作成・利用すること
         Dレポートの見栄え、操作性などユーザインタフェースにこだわること



36 :名無しさん@そうだ選挙にいこう:2008/07/22(火) 09:20:34
AccessからSQLServerへデータを保存しようとする際、フィールド数が30くらいある場合、
insert や update文で更新するのは一般的なんでしょうか?

本来ならレコードセットを開いて書き込めば何の問題もないのですが、
データ件数が数万になるとレコードセットを開くのにも時間がかかるようで・・・。

37 :名無しさん@そうだ選挙にいこう:2008/07/22(火) 12:29:11
>>34-35

成績管理システムを作ろう!2【社会貢献】
http://pc11.2ch.net/test/read.cgi/db/1137309494/

38 :名無しさん@そうだ選挙にいこう:2008/07/22(火) 15:05:19
>>36
エクスポートって使えなかったっけ(適当回答でスマソ)

39 :名無しさん@そうだ選挙にいこう:2008/07/22(火) 15:08:58
>>36
そうなんだが、だったらAccessいらないよな

40 :名無しさん@そうだ選挙にいこう:2008/07/22(火) 15:54:27
>>36
というか、たかだか数万レコード程度で時間がかかることの方が問題。
インデックスの見直しでもしてみては?

41 :名無しさん@そうだ選挙にいこう:2008/07/22(火) 15:58:55
>>36
まあぶっちゃけ、数万件だとCSVかなんかに吐いてDTS蹴ったほうが速くないか?

42 :36:2008/07/22(火) 16:23:42
ごめんなさい。読み返してみたらちょっと書き方に問題があったかもしれません。
あるデータを書き込む時、追加の場合はレコードセットで問題ありません。
更新の際に、たとえば3件のデータを更新する時に少し問題があります。
1)キーで特定のレコードを開く
2)ローカルテーブルのデータを書き込む
sql("xxx").Value = mdb("xxx").Value
sql("xxy").Value = mdb("xxy").Value
sql("xxz").Value = mdb("xxz").Value
  ・
  ・
  ・
sql.update

3)閉じる
sql.Close

を3回繰り返すのですが、元のテーブルのデータ件数が少ないときはいいのですが、
多くなるとどうも遅くなって困ります。(それだけが原因じゃないかもしれませんが。)

で、"update aaa set xxx = '" & xxx & "', xxy = '" & xxy & "', xxz = '" & xxz & "' where key = ・・・"
のようなSQLを投げた方が早いかなとも思ったのですが、
あまり変数の多い長いSQL文を書くのはどうなのかなと思って質問しました。

>>39
Accessはレポート機能が神過ぎて手放せないのです。
印刷が無ければ.Netでもいいんですけど・・・。

43 :名無しさん@そうだ選挙にいこう:2008/07/22(火) 16:28:07
じゃ Access いらないじゃん
印刷のときだけなら桐にしとけ、ODBCで取込んで印刷できるから

44 :名無しさん@そうだ選挙にいこう:2008/07/22(火) 16:44:41
>>42
30フィールドくらいはぜんぜん長くないぞ。
200フィールドくらいのをSQL文で更新してるシステムは余裕で見かける。

値として長文が入るとかなら、別の考慮(なんか文字数上限みたいな)が
必要になるかもしれないけど。

45 :名無しさん@そうだ選挙にいこう:2008/07/22(火) 19:08:50
ADOって内部でSQL投げてるんじゃないの?

46 :名無しさん@そうだ選挙にいこう:2008/07/22(火) 20:21:27
ふつうに考えて、それは無い。
OLE DBから先は知らんが。

47 :46:2008/07/22(火) 20:35:39
。。。と漏れが思っていただけで、特に根拠は無いことに気付いた。

48 :名無しさん@そうだ選挙にいこう:2008/07/22(火) 22:54:03
>>42
ボトルネックが分からないから、とりあえず思いつく範囲で。
データを取得しない分、SQL 投げた方が早くなるとは思うけど。

・キーで特定のデータを開くときにインデックスが使用されているか?使用されてないなら使用を検討。
・レコードセットを排他ロックで開いていないか?排他ロックしている場合は共有ロックを検討。
・更新するデータを一度に取得してバッチで更新できないか検討。
 (ADO ならCursorLocationを adUserClient として、LockTypeを adLockBatchOptimisticで開く)。
 例えば SELECT ... FROM ... WHERE a IN (1,2,3,...) ORDER BY a のようにレコードセットを開いて更新。
・フィールド数が多い場合は列インデックスを使用してフィールドにアクセスできないか検討。
 sql(1) = mdb(1)
(バッチ更新の場合は更新ループ前に参照を作成して、それ経由でも可。
 Dim fA(1) as ADODB.Filed
 Set fA(0) = sql("a")
 Set fA(1) = mdb("a")
 Do Loop ...
  fA(0).Value = fA(1).Value
  ... )
・更新不要な列を更新していないか?値が変化しない列を更新しないようにコード変更を検討。
・テーブルに不要なインデックスがないか?あるなら使用しないインデックスの削除を検討。

あと、ロジックが多少変わるけど。
・常に更新データで上書きするなら元データを全削除してからバッチで追加できないか検討。

49 :名無しさん@そうだ選挙にいこう:2008/07/22(火) 23:47:45
SQLServerへのデータ転送が.Netで上手く出来てるのであれば
それはそれでいいのでは?

Accessは印刷専用ツールとして別に使えばいいんじゃね?

50 :ビートたけし:2008/07/23(水) 00:25:03
>>49
Accessは、ほんと、レポート機能が一番好きだ。

もうちょっとだけ、フロントエンドの機能が増強してくれるなら嬉しいんだけれどね。
Visual Basicのようにもうすこしだけ、コントロールが欲しい。

51 :36:2008/07/23(水) 09:55:10
>>44
なるほど。
たしかに考えてみると、レコードセットのような仕組みよりも
SQL文を投げるやりかたをする方が一般的な気がしてきました。
本当はパラメータークエリがもう少し使いやすければいいのですけどね。

>>48
キーは主キーなのでインデックスは使われていると思います。
バッチで更新というのは盲点でした。
IN (1,2,3...) で一気に呼び出すというのは考えていませんでした。
でも、キーが2つのフィールドで構成されているので今回は難しいですが。
でも、バッチで更新は試してみたいと思います。

>>49
.Netを出したのは、それでもできないこともないということで、
業務で使うツールを作るにあたっては、やはりAccessのほうが
使いやすいと思うのです。
MSは.Netのいいところを取り入れてVBAをもう少し改善してくれないかなと
思ってたりしますw

52 :名無しさん@そうだ選挙にいこう:2008/07/24(木) 14:51:08
Access2003を使用しています。
Access2000でしたら、adpファイルでSQLServerのストアドプロシージャを編集する際に
コメントの部分のフォントが緑色になったと思うのですが、2003だと黒一色になってしまい
コメント部分と非コメント部分の見分けがつけにくくなってしまいました。

[ツール] → [オプション] を見てみてもどこの設定をいじれば良いのかわかりませんでした。
ストアドプロシージャのコメント部分の文字色はどのようにすれば変更できますでしょうか?
もしくは変更できなくなってしまっているのでしょうか?

どうぞよろしくお願いします。

53 :名無しさん@そうだ選挙にいこう:2008/07/24(木) 16:43:33
>>52
普通にVBEのメニューから
ツール->オプション->エディタの設定 の コードの表示色
で「コメント」の「前景」を緑色にする。

54 :52:2008/07/24(木) 17:50:40
>>53
VBEではもちろんコメントの前景色は緑になっています。
すみません、VBEでの話ではなくて、データベースウィンドウっていうんでしたっけ?

「テーブル」
「クエリ」
「データベース ダイアグラム」
「フォーム」
  :

ってあるところで「クエリ」からストアドプロシージャを新規作成したり編集したりできるじゃないですか?
そこでのフォント色の話なんですけど...
説明が足りてなかったみたいで申し訳ありません。

55 :名無しさん@そうだ選挙にいこう:2008/07/25(金) 09:48:05
クエリのSQLエディタはクソだからね〜
そもそもそんな機能あったっけ?もともと真っ黒な気がしないでもない。

56 :名無しさん@そうだ選挙にいこう:2008/07/26(土) 02:13:38
教えてください。

レポートのテキストフィールドに検索結果を連結して表示させたいです。

そんなに難しくないと思っているのですが、クエリーでできない。
VBAで組んでしまえば良いのですが、できればクエリーで解決したいです。
【 システム環境  . 】 Windows XP Pro Access Ver2003
【 VBAが使えるか .】 はい
【 VBAでの回答  】 否
【 検索キーワード 】 Access 検索結果 連結, Access 文字列 連結
下のように列Aから検索した結果を,区切りで1つの文字列にしてレポートで表示したいのですが、
どのようにすれば良いのか教えてください。

列A
-----
AAAA
BBBB
CCCC
DDDD

検索結果
AAAA
CCCC
DDDD

最終的にはこの形になれば、良いのですが・・・
レポートのテキストフィールド
AAAA, CCCC, DDDD




57 :残念ながらクエリでは無理:2008/07/26(土) 05:40:49
>>56
ググレカス

58 :名無しさん@そうだ選挙にいこう:2008/07/26(土) 09:06:49
>>56
VBAじゃないと無理

59 :名無しさん@そうだ選挙にいこう:2008/07/26(土) 09:26:22
まあ、そういうイレギュラーなのは桐にしとけ

60 :名無しさん@そうだ選挙にいこう:2008/07/26(土) 09:30:08
VBAってもADO,DAOで簡単に実現可能と思われるんだが

61 :名無しさん@そうだ選挙にいこう:2008/07/26(土) 09:50:15
10+ reasons why IT pros hate Access (but really shouldn’t)
Published 25 July 08 02:49 PM

http://blogs.msdn.com/access/archive/2008/07/25/10-reasons-why-it-pros-hate-access-but-really-shouldn-t.aspx

62 :名無しさん@そうだ選挙にいこう:2008/07/26(土) 11:17:52
>そんなに難しくないと思っているのですが

出発点からして間違ってる。

63 :名無しさん@そうだ選挙にいこう:2008/07/26(土) 12:29:37
>>56
検索結果が出るってことは、検索のパラメータを入れたんでしょ?
レポートのテキストフィールド=検索パラメータ では?


64 :名無しさん@そうだ選挙にいこう:2008/07/26(土) 14:01:19
>57
ググッてはみたのですが・・・

>62
えっ、そうなのですか、ググッても出てこないのはそのあたりに問題があるのかしら
VBA内にSQL組んで、結果をTEXT型で返さないとだめなのですね。

65 :名無しさん@そうだ選挙にいこう:2008/07/26(土) 14:06:36
VBAいやならピボット使え

66 :名無しさん@そうだ選挙にいこう:2008/07/26(土) 14:28:14
>>64
ここで>>62が言っているのは、
検索結果が極端に多かった場合について言及しているのでは?

・テキスト型がオーバーフローする可能性がある
・テキストフィールドで表示しきれない可能性がある

ということで、そもそもそんな危うい設計でレポートを作るのは
好ましくないと思うんですけどねぇ。。

67 :名無しさん@そうだ選挙にいこう:2008/07/26(土) 14:48:37
>66

なるほど、おっしゃるとおり
VBAで下記のように考えてみたのですが

Dim strClum As String

Do Until objADORS.EOF
strClum = objADORS!カラム名 + ", "
objADORS.MoveNext
Loop

想定していたデータ量が多くても6件程度
全部連結しても300文字程度と軽いのでそこまで深く考えなかったのですが、
言われている事を考慮すると危ういものになりますね。



68 :名無しさん@そうだ選挙にいこう:2008/07/26(土) 18:39:48
困った仕事を頼まれてます。

Access2007の中にあるあるテーブルをもとに、ある条件で抽出したクエリがあります。
そのクエリを元に、レポートを作成しPDF出力するマクロは作り上げてあります

その結果出力されるPDFファイルをその同じクエリのある列にあるメールアドレス宛に
個別に送信しろと言われました。現在は、ボタン一つでPDFファイルを作って、メーラー
に添付して一人ずつ送っているのですが、100名ほどいるので困っています。

このクエリ そしてそれに基づくレポート -> PDF出力 且つメールで連続送信はどのよ
うなコードを書けば、ボタンを押すだけで、スポッと送れるのでしょうか?

なお、マクロは、レポート出力の際にクエリに対して、現在表示しているフォームの社員
IDを元に抽出、PDF出力という仕組みになっています。

69 :名無しさん@そうだ選挙にいこう:2008/07/26(土) 18:53:29
>>67
オブジェクトはセットしてるんだよね、書いてないけど。

で、strClumにその答えを出したいなら、
strClumに答えをためてかなきゃ。
でしょ?


70 :名無しさん@そうだ選挙にいこう:2008/07/26(土) 20:16:36
>>68
まず、抽出結果のレポート出力は、コードが書けるんですよね。
2007ならアドインを入れれば、できるんじゃないすか?


71 :名無しさん@そうだ選挙にいこう:2008/07/26(土) 20:30:24
>>70
PDFアドインを入れて、エクスポートした上でメーラに添付までは、マクロのレベルで
できることですから。そこまでは掛けています。

問題なのは、これをクエリの結果に基づいて、一人一人に連続送信をしたい。これを
現在は手作業で小茄子状況なので、ボタンぽんで、それぞれにそれぞれ用のレポート
を送りたいわけです。

たとえば、送りたいレポートとは、個々の勤怠レポートや健康診断の予約状況通知など
です。いままではある一部署の長に、まとめて送って、それぞれ渡してもらっていたので
すが、これを嫌がる人続出したため、こうなってしまいまして・・・

100人ほどですが、100個のPDFを一個一個、ボタンぽんで個々に送信作業を毎月お
こなうのは、しんどいもので、どうしたら、クエリに基づいて今までやっていた作業を自動化
できるかを悩んでいるのです。

クエリの段階で送るべき人は抽出済みですが、これをレコードセットとして扱い、そして、
それをForループでレコードを移動しながら、マクロを実行をすればいいのかとも思ったの
ですが、自分はこの辺りのコードの書き方がよくわからんのです。

72 :名無しさん@そうだ選挙にいこう:2008/07/26(土) 20:40:00
AccessのVBA(モジュール)はマクロとは別だから一緒にしないでね
Excelなんかでは一緒なんだけど

73 :名無しさん@そうだ選挙にいこう:2008/07/26(土) 23:44:44
AccessのマクロってAutoExecしか使ったこと無いんで、
わからないんだけど、あて先とか、Bccに変数使えるの?

74 :名無しさん@そうだ選挙にいこう:2008/07/27(日) 01:03:48
標準の機能で楽勝なら俺も知りたい。
ダメならBASPユーティリティでググって。

75 :名無しさん@そうだ選挙にいこう:2008/07/27(日) 02:46:34
SPAM送信ツールを作ってくれるスレはここですか?

76 :名無しさん@そうだ選挙にいこう:2008/07/27(日) 02:57:32
確かに、
AccessでSPAM作れるな。


77 :名無しさん@そうだ選挙にいこう:2008/07/27(日) 05:05:07
2008
├商品リスト1
│ ├ 棚1
│ ├ 棚2
│ ├
│ ├
├商品リスト2

こんな感じでテーブルをツリーにできませんか?

78 :名無しさん@そうだ選挙にいこう:2008/07/27(日) 07:30:02
> 小茄子状況
ワロタ

79 :名無しさん@そうだ選挙にいこう:2008/07/27(日) 07:31:05
>>77
TreeViewコントロールで出来るんじゃね?

80 :名無しさん@そうだ選挙にいこう:2008/07/27(日) 08:42:30
>>74
CDO.Message

81 :名無しさん@そうだ選挙にいこう:2008/07/27(日) 09:04:14
>>79
TreeViewコントロールは微妙極まりないからな
相当なスキルが必要かと

82 :名無しさん@そうだ選挙にいこう:2008/07/27(日) 20:49:05
>>79
thx

83 :名無しさん@そうだ選挙にいこう:2008/07/27(日) 22:31:05
普通にサブデータシートじゃ駄目なん?

84 :名無しさん@そうだ選挙にいこう:2008/07/27(日) 23:35:34
JETが廃止されてSQL Server Compactになるのか?

85 :名無しさん@そうだ選挙にいこう:2008/07/28(月) 10:51:57
Access2007もJetは4.0ですか?
Jetって開発終了したわけではないですよね?

86 :名無しさん@そうだ選挙にいこう:2008/07/28(月) 17:46:54
Access2007のデータベースエンジンはACE 12.0です

87 :名無しさん@そうだ選挙にいこう:2008/07/28(月) 19:23:47
>>84
見つけてきた
http://cs.albis.jp/blogs/ms-18e/archive/2007/04/09/3017.aspx



88 :名無しさん@そうだ選挙にいこう:2008/07/29(火) 02:32:48
Access2007で[新しいフィールドの追加]の列を消す方法を教えてください

89 :名無しさん@そうだ選挙にいこう:2008/07/29(火) 11:20:26
>>86
ありがとう。
実質Jetの進化版のようですね。

90 :名無しさん@そうだ選挙にいこう:2008/07/29(火) 13:55:26
TempVars Versus Global VBA Variables
TempVars are handy for moving values between queries and forms and form controls and macros and VBA. Before 2007, you could only do this with global variables and even then, that only applied to VBA code.
The problem with global variables was that if the VBA code failed, you could lose the information in the global variable. TempVars are far more robust.


91 :名無しさん@そうだ選挙にいこう:2008/07/29(火) 23:26:27
ACE・・・

まるで成長していない・・・

92 :名無しさん@そうだ選挙にいこう:2008/07/30(水) 07:00:02
すみませんが教えてください。
集計クエリで項目の合計をだして、
その合計値を別テーブルへ更新クエリを作成したいのですが
出来ないようです。
やり方が間違ってるのでしょうか。



93 :名無しさん@そうだ選挙にいこう:2008/07/30(水) 19:31:47
追加クエリと更新クエリを混同してね?

94 :名無しさん@そうだ選挙にいこう:2008/07/30(水) 20:10:54
>>92
別テーブルに合計値の項目があるの?

95 :92:2008/07/30(水) 22:07:26
説明不足ですみません。
在庫管理みたいのをやってまして
あるテーブルに現在庫の一覧と数量(重複無)。
別テーブルに1日ごとの数量みたいなものを
蓄積入力していきます。
そしてそれを集計して現在庫数があるテーブルの数量を更新したいのです。


96 :名無しさん@そうだ選挙にいこう:2008/07/30(水) 22:48:38
>>95=92
更新クエリは作れそうな気がするんですけどね。
何かエラーメッセージが出るのでしょうか?(型の不一致とか)
それと、集計結果を表示させるだけでなく更新する必要性は本当にあるのでしょうか?
何となく合理的でない感じがします。

[商品マスター] 商品コード(Key),商品名
[処理名マスター] 処理コード(Key),処理名
[入荷販売マスター] 商品コード(Key1),処理コード(Key2),営業日付(Key3),増減数量

こんな感じにして、通常は入荷販売マスターのみ累積入力。
商品ごとの現在庫が必要な時は集計クエリを実行して表示。
これじゃ駄目なのかな?

97 :92:2008/07/31(木) 21:31:19
今回の場合は他の要素もありクエリ表示だけでは
足りないのかなと思いまして・・・。
そこで集計クエリを作成して、それを元に更新クエリをするとエラーがでます。
結局集計クエリからテーブル作成クエリで新規テーブルを作成し、それを元に
更新クエリをすることに。
そんなものなのかなと疑問が残りますが・・・。

98 :名無しさん@そうだ選挙にいこう:2008/07/31(木) 23:01:45
この場合、集計クエリにこだわる必要はないと思う。
入荷の明細1件1件を元に在庫マスターを更新するだけでいいのでは?

99 :名無しさん@そうだ選挙にいこう:2008/08/01(金) 02:20:38
別ファイルでインポートするとかではないなら
俺も都度更新でいいと思うな。
たぶん同期の問題だとは思うが、
集計クエリを元に更新クエリってできなかったと思う。
mdbをどこかにupしてもらうのが、一番早いのだが。

100 :名無しさん@そうだ選挙にいこう:2008/08/01(金) 04:46:47
>>97-99
明細入力のたびに在庫を更新する方法だと、トランザクションを使う必要が生じると思うんです。

明細データの追加には成功したが、在庫の更新には失敗した。
業務使用でこんなケースが1件でも発生すると、その後の信頼性に問題が出るような・・・
何かの値を導き出す場合、おおもとになるデータは1本の方が好ましいと思いますよ。

101 :名無しさん@そうだ選挙にいこう:2008/08/01(金) 05:58:45
>>100
集計クエリをもとに選択クエリを1度つくる

その選択クエリをもとに、更新クエリをつくる

といった具合に、間に選択クエリを1個置いてみるとかは?

あとは、テーブルの側 つまり集計の結果を出すほうを毎回
クリアし最新データを書き込む形にして、更新クエリは使わな
いとか。つまりこの場合、テーブル作成クエリを使う。

102 :98:2008/08/02(土) 01:12:39
>>100
在庫数の更新が目的ならば集計クエリの作成は必須ではない、というのが発言の趣旨です。
というかAccessなんだからそんな銀行のオンライン更新みたいな手法は最初から選択肢になし。

UPDATE T_入荷 LEFT JOIN T_在庫 ON T_入荷.品番 = T_在庫.品番
SET T_在庫.在庫数 = T_在庫.在庫数 + T_入荷.入荷数
WHERE DateDiff("d", T_入荷.入荷日, #2008/08/01#) = 0

仮に在庫数更新のサイクルが日次ならば↑のような更新クエリを毎日1回実行すればいいのでは?
という意味だったのですが・・・

103 :名無しさん@そうだ選挙にいこう:2008/08/03(日) 18:39:33
レコードを追加できません。テーブル'受注明細'の結合キーがレコードセットにありません。
なにこれ?

サブフォーム受注明細は受注ID 商品ID 数量 単価
メイン受注伝票の受注IDが主キーなんだけど・・・


104 :名無しさん@そうだ選挙にいこう:2008/08/03(日) 20:42:56
>>103
受注明細の明細番号が無いんとちゃう?

105 :名無しさん@そうだ選挙にいこう:2008/08/04(月) 00:23:38
質問です
アクセスの抽出条件またはの行って少ないのですがあれは増やすことはできるのですか
困っております。
たとえば、特定の200人の情報についていろいろな項目を抽出したいばあい
クエリを増やしていかなければなりません
クエリ一つでまとめてできる方法はないのでしょうか?
よろしくお願いします

106 :名無しさん@そうだ選挙にいこう:2008/08/04(月) 01:04:53
通常のデザインビューでは限界があるけど
SQL直書きにすればいくらでも増やせる
左上のアイコン、▼から"SQLビュー"

107 :98:2008/08/04(月) 01:50:58
あれはたしか挿入→行で増やせたよ。

200までいけるかどうかは試してないけどw

108 :名無しさん@そうだ選挙にいこう:2008/08/04(月) 23:51:13
ふつうIn句使わないかそれ。

109 :名無しさん@そうだ選挙にいこう:2008/08/05(火) 09:44:23
>>106
それでデザインビューに戻すときにエラーが出るんですね、わかります。

110 :名無しさん@そうだ選挙にいこう:2008/08/16(土) 12:47:54
ACCESSでタブブラウザーは作れますか?

111 :名無しさん@そうだ選挙にいこう:2008/08/16(土) 13:07:27
タブの増減が難しそうだがIEコントロール使ってむりやりやればなんとか

112 :名無しさん@そうだ選挙にいこう:2008/08/18(月) 10:11:57
CentOS5.1に入ってるMySQL5.1にACCESS2003からODBCでつないでリンク作ってます。
で、そのリンクをADOで開いて

Dim Connection As ADODB.Connection
Set Connection = Application.CurrentProject.Connection

Dim RS As ADODB.Recordset
Set RS = New ADODB.Recordset
RS.Open "LinkTable", Connection, adOpenDynamic, adLockOptimistic

RS.AddNew
RS("field_01") = "AAAA"
RS("field_02") = "BBBB"
RS.Update

とした後でRSにアクセスしようとすると、
すでに削除されています、とエラーが来ます。

リンク先にはAutoIncrementな主キーがあってUpdate後のそれを読み取りたいのですが
どうにかならないでしょうか?


113 :名無しさん@そうだ選挙にいこう:2008/08/18(月) 13:29:31
RS.Updateの際に、実際にAutoIncrementして主キーの値を決めているのは
MySQLなのでAccess側の変数RSに主キーの値がセットされることは無い。
という解釈でよろしいかと。どうしても必要なら別途取得。

114 :名無しさん@そうだ選挙にいこう:2008/08/18(月) 14:29:03
>>112

よう解らんが、逃げの手段としてnextしてPreviousしてみてはどうだろう。

115 :名無しさん@そうだ選挙にいこう:2008/08/18(月) 15:08:38
>> 113
すみません、その別途取得の方法でもいいので教えてもらえませんか?

>> 114
Update後はそのリンク先テーブルの最初を参照してます。
一回目は削除されています、だったのですが、
二回目からは最初のレコードの主キーが返りました。



116 :113:2008/08/18(月) 17:50:32
>>115=112
MySQL独自の関数としてLAST_INSERT_IDというものがありますので
これを使って取得するようなコードを追加するのが良いかと思います。

117 :名無しさん@そうだ選挙にいこう:2008/08/19(火) 23:03:30
あるクエリに基づくレポートを、1つづつPDF化(ファイル名は、レコードの最初の列にある
社員コード)を行いたいと思っている次第。ですがなかなか旨くいかない。

Dim My_Db As DAO.Database
Dim My_Rst As DAO.Recordset
Dim My_Qry As QueryDef
Dim My_Path As String
Dim i As Integer

Set My_Db = CurrentDb()
Set My_Rst = My_Db.OpenRecordset("勤怠レポート")
My_Path = CurrentProject.path
i = 1

My_Rst.MoveFirst
Do Until My_Rst.EOF > i
DoCmd.OutputTo acOutputReport, "勤怠レポート", acFormatPDF, My_Path & "\" & My_Rst!社員コード & ".pdf", False, 0
My_Rst.MoveNext
i = i + 1
Loop

明らかにこれではコードが足りず、このままでは、延々とPDFが社員コードのファイル名で、しかも
PDFの中身は全部同じで、全部のレコードが混じっている状況です。

このコードにどういうフィルタを加え、どういうループを書いたら、1つづつPDF化してくれるのか
を知りたい次第。およそ70レコードあり、70個のそれぞれの社員コードの名前がついたPDFに
出来るのか、お教え願えませんでしょうか?

Accessは2007で、PDF出力アドインが入ってます。

118 :名無しさん@そうだ選挙にいこう:2008/08/20(水) 05:12:44
>>117
.EOFはBoolean型なのにInteger型と比較してますよ。
Do Until My_Rst.EOF > i を
Do Until My_Rst.EOF とすれば社員コードごとのPDFになりそう。
(変数 i は不要)

あと、
Set My_Rst = My_Db.OpenRecordset("勤怠レポート") を
Set My_Rst = My_Db.OpenRecordset("SELECT * FROM 勤怠レポート ORDER BY 社員コード") に。
そうすると、My_Rst.MoveFirst の1文も不要になります。

119 :名無しさん@そうだ選挙にいこう:2008/08/20(水) 06:47:34
AllowBypassKey
AllowSpecialKeys

trueにして自分ではまってしまいました!
これを無効にする方法はありませんか?
昨夜から徹夜で探っていますがわかりません。
よろしくお願いします!


120 :名無しさん@そうだ選挙にいこう:2008/08/20(水) 15:45:44
>>119
AllowBypassKey
でググって一番上のサイトに方法が書いてあったよ。

121 :名無しさん@そうだ選挙にいこう:2008/08/20(水) 19:29:12
>>118
そのコードを取り入れて実行してみました。

結果として、ファイル名に社員コードで出力はでき、社員コードがある分だけ
PDFファイルは出たのですが、問題のそのひとつひとつの中身なのですが、
その社員コードに該当するレポートだけでなく、すべてのレポートが含まれて
しまう現象は以前なおらず。

勤怠レポートというレポートの中身が社員コードできちんとフィルタリングされ
ていないようで、勤怠レポートというテーブルの中身が全部レポート化された
状態になってしまいました。

あと一歩という感じなのですが、このレポート、それぞれの社員コードに該当
するものだけが、レポートに含まれるようにするために、どうフィルタリングする
コードを追加したら良いでしょうか?




122 :118:2008/08/20(水) 22:37:28
なるほど、それならここも追加で修正。

DoCmd.OutputTo acOutputReport, "勤怠レポート", _
acFormatPDF, My_Path & "\" & My_Rst!社員コード & ".pdf", False, 0

 ↓
DoCmd.OutputTo acOutputReport, "SELECT * FROM 勤怠レポート WHERE 社員コード='" & My_Rst!社員コード & "'" , _
acFormatPDF, My_Path & "\" & My_Rst!社員コード & ".pdf", False, 0

レポートのソースが勤怠レポート全件になっていたのを、社員コードでセレクトするように修正。

123 :名無しさん@そうだ選挙にいこう:2008/08/20(水) 23:18:52
>>122
ちょっとやってみます。これができると、格段に能率が上がるので非常に
ありがたいです(応用したい物がたくさんあります

124 :名無しさん@そうだ選挙にいこう:2008/08/20(水) 23:34:58
まてまて、「勤怠レポート」ってレポートオブジェクトだろ?

DoCmd.OutputTo の第1引数が acOutputReport なら第2引数はレポート名の単体指定のみ可で
SQLは不可というか、仮に可であったとしても「SELECT * FROM レポート名」はないと思うけど・・・

125 :名無しさん@そうだ選挙にいこう:2008/08/20(水) 23:39:07
>>124
わかりづらくてもうしわけありません。

勤怠レポートというテーブルと、勤怠レポートというレポートがあるんです。でこの
勤怠レポートというテーブルをソースとして勤怠レポートというレポートという形に
しているのです。

ですが、仰るとおり、acOutput Reportの第二引数はレポートオブジェクトの指定し
かできず、SQLが使えませんでした。となると、このレポートを開く直前で、クエリに
手を入れるコードが必要となるのでしょうか?

126 :名無しさん@そうだ選挙にいこう:2008/08/21(木) 00:41:24
なるほど… このままだとちょっと話がややこしくなるから名前を以下のように変更させてくれ

 テーブル → T_勤怠
 レポート → R_勤怠

そして事情が許すならT_勤怠に抽出用のBoolean項目「印刷フラグ」を追加して、
R_勤怠は印刷フラグ=Trueだけを印刷するような仕様に変更するのが一番簡単な方法だと思う。


Dim rst As DAO.Recordset
Set rst = CurrentDb.OpenRecordset("SELECT * FROM T_勤怠 ORDER BY 社員コード")
 Do Until rst.EOF
  CurrentDb.Execute "UPDATE T_勤怠 SET 印刷フラグ = False"
  CurrentDb.Execute "UPDATE T_勤怠 SET 印刷フラグ = True WHERE 社員コード='" & rst!社員コード & "'"
  DoCmd.OutputTo acOutputReport, "R_勤怠", acFormatPDF, CurrentProject.Path & "\" & rst!社員コード & ".pdf", False, 0
  rst.MoveNext
 Loop
rst.Close : Set rst = Nothing

DoCmdは非同期コマンドだから実はまだ安心できないけど、一応これでいけるはず。
T_勤怠にフィールドを追加できないとか、R_勤怠のWhere句を変更できないとかの事情があるなら
また別の方法で・・・

127 :118:2008/08/21(木) 01:31:13
>>123-125
DoCmd.OutputTo の引数を勘違いしていました。正直スマンカッタ…orz
拝見したところ、>>126さんの方法で良さそうですね。
一応、DoCmd.OutputTo の直前でレポートの修正を行う方法を考えてみました。

Do Until My_Rst.EOF
'デザインモードで開き
DoCmd.OpenReport "勤怠レポート", acViewDesign, , , acHidden
'フィルタを設定(レコードソースの修正でも可)
Application.Reports("勤怠レポート").Filter = "社員コード='" & My_Rst!社員コード & "'"
'レポートを保存する
DoCmd.Close acReport, "勤怠レポート", acSaveYes
DoCmd.OutputTo 〜(以下略)

ということで失礼します〜

128 :名無しさん@そうだ選挙にいこう:2008/08/21(木) 19:45:11
【 システム環境  . 】 WindowsXP
【 VBAが使えるか .】 いいえ
【 VBAでの回答  】 否
【 検索キーワード 】 インデックス、制限

ひとつのテーブルに24個のフィールドがあり、その内18個のフィールドに他のテーブルとのリレーションとインデックスを設定しようとしたのですが、うまくいきません。
「インデックスの数が多すぎる」とかいうエラーメッセージが出てきます。そこで質問なのですが、ひとつのテーブルに設定できるインデックス付きのフィールド数には制限があるのでしょうか?

超初心者なのですが、顧客のデータ管理をアクセスでできたらと考えています。
具体的には、

1.ひとつの製品は数十個の部品から構成され、
2.それらの部品は、それぞれ数十個の記録すべきパラメータがあります。
3.約数万台の製品の保守を行っています。

数十個の各部品ごとにテーブルを作り、ひとつの製品のテーブルにリレーションを張り、
製品テーブルの各部品フィールドにインデックスを定義しようとしたのですが、
「インデックスの数が多すぎます」というメッセージが出ました。

インデックスを定義しないほうがいいのでしょうか?しかし、数万のレコードを
素早く検索するのはインデックスがあったほうがいいと思うのですが。。。。

ご教示の程、よろしくお願い致します。




129 :名無しさん@そうだ選挙にいこう:2008/08/21(木) 19:53:39
>>126
>>127
大変、大変ありがとうございます。ここ1ヶ月こいつの実装に苦しんでいました。

おかげさまで、社員コード別にPDFが出力することができました。このあと、これ
をBASPIをつかって、連続メール送信を実装しようと思っていて、その際に添付
ファイルの指定で、この社員コードとリンクするPDFを自動的に選択して送信する
予定でしたので、大変助かりました。他にも応用できるので、感謝感謝です。

ただ難点が、PDFを70人ほど出力しているのですが、ガンガンメモリ消費量があ
がっていって、一度閉じないと、メモリが解放されない点でしょうか。maxlockfile
を指定するコードを入れて、メモリ不足ギリギリで抑えましたが、70名ほどでだい
た、520MBほどメモリを消費するので、今後ここに取り組みたいと思います。

ありがとうございました。

130 :名無しさん@そうだ選挙にいこう:2008/08/21(木) 19:59:38
約数十個×約数万台つったら、テーブル100万個ぐらい作ってんの?スゲーな。
んで、それらがくもの巣のようにリレーション張りめぐらしてるのか・・・
想像したらオラわくわくしてきたぞ!

ちなみにAccessの場合リレーション張ったら双方に自動的に隠しインデックス作っちゃうからそれも数に入れてね。

131 :名無しさん@そうだ選挙にいこう:2008/08/21(木) 20:49:16
>>130
test

132 :>>128:2008/08/21(木) 21:28:59
>>130
言葉が足りず、誤解を招いたようで申し訳ありませんでした。

製品を車に例えると、部品Aはタイヤ、部品Bはカーナビのようなもので、
  ブリジストンをA1、ピレリをA2
  パイオニアをB1、パナソニックをB2
とするようなイメージです。製品はA2とB1という具合に選んで組み立てます。

テーブルとしては、
  部品Aテーブル
    部品名、パラメータ1、パラメータ2・・・・
      A1 、    10  、   15.3
      A2 、    8.5 、     6.5
  部品Bテーブル
    部品名、パラメータ1、パラメータ2・・・
      B1 、   3.1 、   2.5
      B2 、   5.1 、   8.7

  製品テーブル
    製品名、 部品A、 部品B、 部品C、・・・・・・
      @     A2、   B1、   C5、・・・・
      A     A3、   B5、   C8、・・・・

部品テーブルを20個程度つくり、製品テーブルの該当フィールドにリレーションを張り、
製品テーブルの各部品フィールドにインデックスを定義しようとした次第です。

ところが、製品テーブルの各部品フィールドにインデックスを定義しようとしたところ、
「インデックスが多すぎます」というようなエラーメッセージが出てしまいました。

そこで質問なのですが、テーブルに定義できるインデックスが定義できるフィールド数に
制限はあるのでしょうか?
ご教示のほど、よろしくお願い致します。

133 :名無しさん@そうだ選挙にいこう:2008/08/21(木) 21:44:21
>>132=128
確か32個が上限だったように思います。(Accessのバージョンによるかも?)
今回の場合は、製品テーブルを2つのテーブルに分割するしかなさそうですね。

(元)
製品名,部品1,部品2,部品3,…,部品50

(修正)
製品名,部品1,部品2,部品3,…,部品25
製品名,部品26,部品27,部品28,…,部品50

134 :名無しさん@そうだ選挙にいこう:2008/08/22(金) 13:34:06
テキストの条件付書式をモジュールで書き換えって出来ませんか?

方法があったら教えてください

135 :名無しさん@そうだ選挙にいこう:2008/08/22(金) 14:50:46
>>134
[ACC2003] プログラムを使用してフォームのすべてのコントロールに同じ条件付き書式を適用する方法
http://support.microsoft.com/default.aspx?SCID=kb;ja;304104

136 :>>132:2008/08/22(金) 15:09:27
>>133
ご指導いただき、どうもありがとうございました。

137 :名無しさん@そうだ選挙にいこう:2008/08/22(金) 15:30:59
>>135  おっ おしいです 

この例だと 特定のコントロールに予め設定した条件付書式をコピーしますが、
やりたいのは設定する条件付書式の条件をモジュールで指定したいのです。

現在一ヶ月分(日付1〜31)のフィールドを持ったフォームを作成していて、
色を替えるパラメータを入れるテキスト(hoge1〜hoge31)を非表示で日付分置いてあります。

各一日分のテキストに個別に条件付書式を設定しているのですが、
条件の書式が 日付1の場合 [hoge1]=1 ・・・・・・ 日付31 [hoge31]=1 と一日分毎に
違うので、モジュールで条件式を設定できれば、ループを使い一括で個々の
条件を設定できないかとおもったのですが・・。

138 :名無しさん@そうだ選挙にいこう:2008/08/22(金) 16:11:10
>>137
FormatConditions.Add メソッドのパラメータで好きな条件を設定できますよ。
VBA ヘルプの FormatConditions を読んでみてください。以下適当なサンプル。

Dim i As Long
For i = 1 To 31
 Dim p as TextBox, f As FormatCondition
 Set p = Forms!FormA("日付" & i) 'FormA から 日付(i) を取得
 Set f = p.FormatConditions.Add(acExpression, "[hoge" & i & "]=1") '[hoge(i)]=1 の条件付書式を追加
 f.BackColor = RGB(128, 128, 128) '条件付書式の背景色を設定
Next


139 :名無しさん@そうだ選挙にいこう:2008/08/22(金) 17:06:52
>>138 サンクスです

サンプルまでありがとうございます

早速応用してみます。

フォーム作成が楽になりそうです

140 :名無しさん@そうだ選挙にいこう:2008/08/23(土) 11:57:20
Access2007のパスワード保護は従来より強力になりました????

パスワード設定したデータベースを分割します
バックエンドは自動的にパスワード解除されるから、パスワード設定しなおします
フロントエンドのフォームからバックエンドテーブルのデータ操作できます
バックエンドのパスワード変更します
相変わらず、何もなかったように、フロントエンドのフォームからバックエンドテーブルのデータ操作できます

つーことは、パスワードは従来通りに暗号化キーでも何でもなく、MDBを開く許可するだけ?
それともMDB内部にパスワード書き込まれてる?
何つーヘナチョコなセキュリティなん www

141 :名無しさん@そうだ選挙にいこう:2008/08/23(土) 13:10:56
>>140
桐にしとけ。セキュア桐はSQLサーバー並みのセキュリティだぞ。

142 :名無しさん@そうだ選挙にいこう:2008/08/23(土) 13:55:56
>>140
不思議ーーーーーーーーーーーーーっつ
どういう仕組みになってるのかね。

143 :名無しさん@そうだ選挙にいこう:2008/08/23(土) 14:40:30
たぶん勘違いじゃね?

144 :名無しさん@そうだ選挙にいこう:2008/08/23(土) 14:43:33
>>140
MySQLをバックエンドにするほうがお手軽でいいよ

145 :名無しさん@そうだ選挙にいこう:2008/08/25(月) 10:45:00
@パスワード設定したデータベースを分割します
Aバックエンドは自動的にパスワード解除されるから、パスワード設定しなおします
Bフロントエンドのフォームからバックエンドテーブルのデータ操作できます

気になって試してみたけどBのところで「パスワードが正しくありません」が出るのを確認

146 :>>132:2008/08/25(月) 20:43:22
>>133
「Access 2007 の仕様」でオンラインヘルプを検索したところ、
「インデックスのフィールド数」という項目に10とありました。
おそらく、ひとつのテーブル内でインデックスが定義できる
フィールド数が10という意味だと思います。
先ほど、アクセス関係のサイトをあちこち見ていたら、それらしい記述
があったので、オンラインヘルプで検索したら、アクセス2007にも同じ
記述があった次第です。

オンラインヘルプもうまく使えない段階なので、へんな質問をしてしまう
と思いますが、これからもよろしくお願いします。

147 :>>132:2008/08/25(月) 21:21:56
【 システム環境  . 】 WindowsXP, Access2007
【 VBAが使えるか .】 いいえ
【 VBAでの回答  】 否
【 検索キーワード 】 添付ファイル

テーブルの各レコードに添付ファイル(写真)を割り当て、
レコードを単票形式フォームで表示させるとき、
フォーム右上にその写真を表示させたいのです。

それ自体はうまくいったのですが、レコードが数百個あるため、
写真をレコードに埋め込むとデータベースファイルのサイズが心配です。

各レコードに写真を埋め込まず、写真にリンクを張るようなことは
可能でしょうか?そうすれば写真そのものをレコードに添付するよりも、
参照先のアドレスだけをレコードに記入だけすればいいので、
容量がかなり助かるように思うのですが。

ご教示の程、よろしくお願い致します。


148 :名無しさん@そうだ選挙にいこう:2008/08/25(月) 21:32:56
>>147
たとえば、クエリをつくる

で、オートナンバーではない、例えば社員IDの主キーをもつフィールドを作っておく。
で、画像はその主キーと同じ値をファイル名としているjpgがあったとする。

で、クエリに[社員ID] & "jpg"みたいなのをつくるように設定しておく。

で、このクエリをもとにフォームを作る。

あとは、画像をリンクとして於いて、ソースを..\(Currentproject.path)となるように導く
とうまくできる。でも、VBAつかったほうが楽。


149 :133:2008/08/25(月) 21:35:16
>>146
MSのヘルプは日本語が不明瞭で理解しづらい場合が多いのですが、

「インデックスのフィールド数の上限は10個まで」という制約は、
10個のフィールドをまとめた1つの主キーやインデックスが作れますが
11個以上のフィールドをまとめる事はできません・・・の意味です。
(主キー: F1, F2, F3, …, F8, F9, F10 は可能)

一方、インデックスそのものは32個まで作れると思いますよ。

こういう制約にまで触れている参考書がなかなか無くて、結局は
ヘルプ頼みになるのが悩みの種なのですが、頑張ってください。

150 :名無しさん@そうだ選挙にいこう:2008/08/25(月) 21:41:05
>>147
写真のサイズにもよりますが、データベースファイルのサイズは
2GBまでOKですから、そのまま使うのも手ではないでしょうか?
1枚の写真のサイズが2MB程度までなら余裕がある計算です。

151 :名無しさん@そうだ選挙にいこう:2008/08/26(火) 18:13:58
教えてくらはい

アクセス2007で簡単な日計表記帳システムを作ってアホな従業員に入力させようと思います
データベースのバックアップと最適化も自動にして放置したいんですが
その部分は、どんなふうに作れば良いでしょう?

152 :>>147:2008/08/26(火) 19:43:53
>>148,149,150様
ご教示いただきまして、どうもありがとうございました。
部品の写真は>150様ご教示のとおり埋め込みで、
製品の写真は>148様ご教示にあるVBAでやってみようと思います。
ヘルプが読みずらいので、とりあえず初心者向けVBAの本を買ってきました。

>149様、勘違いしてしまいまして、どうもすいませんでした。
これに懲りず、今後もよろしくお願い致します。


153 :名無しさん@そうだ選挙にいこう:2008/08/26(火) 21:12:50
>>151

スタンドアローンに近い環境なら閉じるときに最適化と
フリーのバックアップソフトとでも入れておけ。

154 :名無しさん@そうだ選挙にいこう:2008/08/26(火) 21:42:39
>>151
まずデータベースファイルが1つでしたら次の2つに分けましょう。
・テーブルのみ保存したDBファイル(1)・・・データ保管用
・テーブル以外を保存したDBファイル(2)・・・データ操作用
・(2)には(1)のテーブルのリンクを作成

こうすることでVBAを用いて(2)から(1)を最適化したり
バックアップしたりすることができます。
CompactDatabase,FileCopy 辺りでサンプルを探してみてください。

もちろん>>153さんのAccessのオプション設定とバックアップソフトを
使う方法でも実現できます。

155 :151:2008/08/26(火) 21:49:41
>>153>>154
どうも有難うございます
やるべき方向が解りました

156 :名無しさん@そうだ選挙にいこう:2008/08/27(水) 18:18:36
AccessでコンボボックスのDropButtonClickイベントを使いたいのですが、どうすれば良いですか?

157 :>>147:2008/08/27(水) 19:11:31
【 システム環境  . 】 WindowsXP, Access2007
【 VBAが使えるか .】 いいえ
【 VBAでの回答  】 否
【 検索キーワード 】 値集合ソース、コントロールソース

コンボボックスやリストボックスのプロパティに値集合ソースという項目
があります。これはコントロールソースとはどのように違うのでしょうか?
結局どちらも、あるテーブルの、あるフィールドを、コントロールに連結
させるための項目のように見えるのですが。

ご教示の程よろしくお願い致します。



158 :名無しさん@そうだ選挙にいこう:2008/08/27(水) 20:37:26
>>156
DropButtonClickイベントハンドラ内に必要なコードを書き込むと使える
>>157
候補リストに表示させる元になるのが「値集合ソース」
候補リストから選択した値を反映させる先が「コントロールソース」

159 :名無しさん@そうだ選挙にいこう:2008/08/27(水) 22:26:22
>>156
Access じゃあ無理。

160 :名無しさん@そうだ選挙にいこう:2008/08/27(水) 22:53:38
>>156
ActiveXコントロールのコンボボックスを使ったらできるかもしれませんね。

161 :名無しさん@そうだ選挙にいこう:2008/08/27(水) 23:03:30
勉強のためにアクセス買おうかと思うんですが
スーパー貧乏なので迷ってます。
アクセス97買っても微妙ですかね?

162 :名無しさん@そうだ選挙にいこう:2008/08/27(水) 23:08:57
>>161
ま、勉強のためならいいんじゃないですか?

俺なんかは、Access2007使ってはいますが、基本的に周りの環境が
Windows2000なので、Access2000形式で作成していますし。

大まかなものは、Access97でも用をなしますよ。勉強用っていうなら、
必要にして十分。

現在は、Access2007 + MySQLのC/S環境でシステムを構築していま
すが、このツールで作っていても、その殆どはAccess97でもコーディン
グできるものです。まぁ、一部は高度なコーディングならば同じ機能が
実現できますが(まぁ、それをやりたくないので、2000以上にしているん
ですがね - 特にXML関係)



163 :名無しさん@そうだ選挙にいこう:2008/08/28(木) 00:16:01
このあいだやっと97まで撲滅させたけどまだ
2000と2002と2003と2007が混在しとるっちゅうねん

164 :名無しさん@そうだ選挙にいこう:2008/08/28(木) 06:16:30
せめて2000にしといた方が後々ラク

165 :名無しさん@そうだ選挙にいこう:2008/08/28(木) 07:13:35
>>163
2002と2003はいらんような気がするなぁ。

2000は、Windows2000環境とかのがまだあるから必要って感じで、でも、XP以上
のマシンだけになったら、2007ランタイム使えるから(というかこれがXP以上じゃな
いと使えない)、そうなったら全部2007移行でもいいな。

だからまだaccdb形式を使っていない。

166 :名無しさん@そうだ選挙にいこう:2008/08/28(木) 09:53:02
accdbのテーブルを旧バージョンで利用したいという要望もあるので
DBEngine.CompactDatabase "2007.accdb", "2002-2003.mdb", dbLangJapanese, dbVersion40
こうやって最適化ついでにバージョン落としてデータ作成してるんだけど

DBEngine.CompactDatabase "2007.accdb", "2000.mdb", dbLangJapanese, dbVersion30
これで2000のユーザー用に2000形式のDB作ろうとすると実行時エラー3301になるんだよね
古いバージョンでは利用できない機能がどうのこうのとか。

もちろんaccdbはフォームもレポートもモジュールもなしのテーブルだけDBだし
テーブルも複数値型だの添付ファイル型だの新機能は一切なし。

仕方ないから一旦2002形式に落としてACCESS2002から2000形式に落とすとかいう
しょうもない仕事はもうイヤだお・・・

167 :>>157:2008/08/28(木) 17:28:22
>>158様、どうもありがとうございました。



168 :名無しさん@そうだ選挙にいこう:2008/08/28(木) 19:44:26
>>166
ひょっとしたら、アタッチメント型という、ファイルをテーブルに埋め込める形式
が悪さしているのかもね。これ2007からだから。

なもんで、いまだ最初からmdb形式(Access2000で)作ってから、システム構築
してるよ。


169 :名無しさん@そうだ選挙にいこう:2008/08/28(木) 21:25:23
>>168
Attachment Data Type の日本語訳が添付ファイル型やぞ

170 :名無しさん@そうだ選挙にいこう:2008/08/28(木) 22:38:35
mdbをバックエンドにすればいいんじゃなかろうか

171 :名無しさん@そうだ選挙にいこう:2008/08/28(木) 22:52:21
あくせく働くためにアクセスやります。

172 :名無しさん@そうだ選挙にいこう:2008/08/31(日) 01:07:26
なんでmdbやらaccdbやら、地雷内臓DB使うん? 素直にsql-server すれば?
つか、MSはmdbをsql-serverで一元化すんじゃなかったの?

173 :名無しさん@そうだ選挙にいこう:2008/08/31(日) 04:39:35
sqlite3と比べるならまだしも、mssqlかよw
池が狭いと、フラットファイルDBと鯖製品を並べて語っちゃうのか。

174 :名無しさん@そうだ選挙にいこう:2008/08/31(日) 06:58:26
>>172
> 地雷内臓DB
ワロタ

175 :名無しさん@そうだ選挙にいこう:2008/08/31(日) 09:29:13
おい、コンボボックスでdirtyイベント発生しないのか??

176 :名無しさん@そうだ選挙にいこう:2008/09/01(月) 14:02:40
おしえてくらはいませ
2007です

VBAで、"Status"っていう名前の一時変数設定したいんですけど
以下の【式】の部分には何を書けばよいですか?

---------------------
Access 開発者用リファレンス
TempVars.Add メソッド
すべて表示
すべて非表示
TempVars コレクションに変数を追加します。
バージョン情報
追加バージョン: Access 2007

構文

式.Add(Name, Value)

式 TempVars オブジェクトを表す変数です。


177 :名無しさん@そうだ選挙にいこう:2008/09/01(月) 23:26:11
すまそ。GoodsテーブルにCategoryというフィールドがあります。

これに値を入力するときにプルダウンメニューで値を選択するようにしたいのです。
ちなみに値を入力するときはフォームは使わず、データシートビューで値を入力しています。

Access2002です。キーワードだけでも教えていただければググリますので・・

なんしろどうしたらいいかわかりません。よろしくお願いします。

178 :177:2008/09/01(月) 23:32:11
あげわすれ・・

179 :名無しさん@そうだ選挙にいこう:2008/09/02(火) 00:28:41
>>176
普通に
TempVars.Add(Status, Value)

当たり前だけど Value には本当の値を入れてね。

180 :177:2008/09/02(火) 00:35:59
自己解決しますた。ルックアップなんですね。

181 :176:2008/09/02(火) 16:34:01
>>179
それで旨くいかないぞっと
試行錯誤の結果、バグのような希ガス

182 :名無しさん@そうだ選挙にいこう:2008/09/02(火) 18:36:55
TempVars使ったことあるから過去のコードを調べてみようかと思ったが
>>181があまりにも謙虚すぎてやる気失せたわ

183 :181:2008/09/02(火) 19:05:44
??
俺だけ?

TempVars.Add(Status, Value) で通らなくて
カッコを外して
TempVars.Add Status, Value なら通ったんだけど

俺なんか勘違いしてる?

184 :名無しさん@そうだ選挙にいこう:2008/09/03(水) 04:11:50
ご質問(かなり長文です。)
以下のテーブル構成で、次のことをしたいと考えています。
(なお、シチュエーションはフィクションであり、実際にやりたいことを
架空のシチュエーションで置き換えています。)

シチュエーション:
修学旅行のグループ分けの時に、友達同士で組ませるとあぶれる子がいるため、
その子を比較的交流のある子のいるグループに入れる。
ただし、社会の点数が高い子同士で組まないよう、そのグループの成績を
合計し、一定以上の点数にしないように配慮する。(グループが組まれた時点で
既に一定の点数を超えることは問題ない。)
なお、T_4は現在調査中のため、調査の進展とともにデータが追加される。
(他は全てあらかじめ決まっていて、変更はない。)

T_1(社会の成績テーブル)
クラス
出席番号
社会の成績
(主キーとしてクラス、出席番号を指定。当然それぞれ単体では重複データ有り。)

T_2a(グループテーブル:T_2bと組み合わせて生徒と友達グループの対応を表現)
クラス
班番号
社会の成績計(T_1(ないしT_2b)から友達グループの社会の成績の合計を計算したものをあらかじめ入れてある。)
(主キーはクラス、班番号を指定。これもそれぞれ単体では重複データ有り。)

(続く)

185 :184:2008/09/03(水) 04:14:26
T_2b(グループ構成員テーブル:T_2aの構成員を表現(あぶれた子はここに入れない)
クラス(外部キー)
班番号(外部キー)
出席番号
社会の成績(データはT_1と同一だが、数値データをあらかじめ入れてある。)
(主キーはクラス、出席番号だが、固有インデックスとしてクラス、班番号を指定。
また、T_2aと一対多リレーションシップを設定。)

T_3(あぶれた子リスト)
クラス
出席番号


(リスト中に姓、名に同一の子は数多くいるが、同姓同名はいない。)

T_4(交流リスト:T_3に載っているあぶれた子と交流のある子を記載……するはずだが、
   なぜか交流のある子のデータは出席番号)


交流のある子の出席番号
決定フラグ(Yes/No型としており、グループに入れる先にいる(交流のある)
      子のレコード1つにチェックを入れる)
(主キーとして姓、名を指定。交流のある子は同じクラスの子に限定なので記載がない。)

注意:T_1の全ての子はT_2bとT_3のいずれか一方のみに必ず搭載することになるはずだが、
別の件のデータと混載しているため実際には両方に掲載されている子が存在。
ただし、抽出用データをT_3に組み込んであるため、クエリにより
T_1=T_2b(抽出後)とT_3の排他的論理和にすることは可能。

(さらに続く)

186 :184:2008/09/03(水) 04:16:14
ここで、T_4にクラスがなく不便なことから、次のようなクエリを作成し、編集が可能であることを確認しました。
Q_5(あぶれた子のデータ一覧)
決定フラグ(T_4)
クラス(T_3)
出席番号(T_3)
社会の成績(T_1)
交流のある子の出席番号(T_4)
結合:[T_1].[クラス]=[T_3].[クラス] and [T_1].[出席番号]=[T_3].[出席番号]
   [T_3].[姓]=[T_4].[姓] and [T_3].[名]=[T_4].[名]

その上で、次のことをしたいと考えています。
要望:T_4の決定フラグにデータを入れる参考とするため、次のクエリを作成し、
   決定フラグをクエリから立てられるようにしたい。
Q_6(交流のある子の所属グループ)
決定フラグ(Q_5=T_4)
(あぶれた子の)クラス(Q_5=T_3)
(あぶれた子の)出席番号(Q_5=T_3)
(あぶれた子の)社会の成績(Q_5=T_1)
交流のある子の出席番号(Q_4=T_4)
(交流のある子のグループの)班番号(T_2a)
(交流のある子のグループの)社会の成績計(T_2a)
(そのグループに追加する子のそれぞれの)社会の成績
     (社会の成績に制限があるため、このクエリを元に集計クエリを作成し、
      上限を超えていないか確認する際に使用)

(もう1つ続く)

187 :184:2008/09/03(水) 04:17:17
このクエリを作成するため、以下の結合を作りました。(この時点では、
まだ「(そのグループに追加する子のそれぞれの)社会の成績」フィールドは作成してなく、
代わりにダミーとして[T_2b_1].[出席番号]を追加しています。)
[Q_5].[クラス]=[T_2b].[クラス] and [Q_5].[交流のある子の出席番号]=[T_2b].[出席番号]
[T_2a].[クラス]=[T_2b].[クラス] and [T_2a].[班番号]=[T_2b].[班番号]
[T_2a].[クラス]=[T_2b_1].[クラス] and [T_2a].[班番号]=[T_2b_1].[班番号]
注:[T_2b_1]の実体は[T_2b]

しかし、ここで作ったクエリは編集不可でした。(T_2b_1を結合させる前までは編集可能であった。)
質問は以下の3点です。
1.何が問題で編集不可となったのでしょうか。
2.この問題を回避する方法はないでしょうか。
3.この後、Q_6の結果から集計クエリ(クラス、班番号をグループ化し、追加する
  子の社会の成績の合計を計算)を作成すると、いろいろなサイトの情報から察するに、
  そのクエリは編集不可になると思いますが、追加する子の社会の成績の合計を
  見ながら決定フラグを編集する手段はないでしょうか。

使用しているのはAccess2003 + Win XP、VBAは出来れば無し(不可避ならば
手法をお教えくだされば幸いです。)でお願いできればと考えております。

188 :名無しさん@そうだ選挙にいこう:2008/09/03(水) 20:39:22
>シチュエーション:
>修学旅行の夜、イケメンのYが女子グループを呼んで
>トランプして遊んでたんだ。
>おれは普段から女子と話すことがなかったから
>トランプ中もただひたすら札を眺めてるだけだった。
>ねむてぇ・・ そう思った瞬間、ドアの外で見回りの教師の足音が聞こえてきた
>Y「やべえ隠れろ!」 そうYが叫び
>みんながアタフタしてる中、おれは颯爽と押入れに飛び込んだ。
>荷物だらけでせまい押入れに入った瞬間 「男子部屋なんだし俺隠れなくていいじゃん」
>そう思った瞬間に誰かが飛び込んできた
>「おいおいここはもう満員だ」 A子「もぅ先生きちゃうよっ」
>慌てた様子で入ってきたのはあろうことか女子。しかもクラスで1、2を争う美形のA子だった。
>「ちょ、ごめん俺でとくよ」 A子「しっ! せんせー入ってきたよ」
>外ではY達がみつかり廊下で説教をくらいはじめていた
>「まいったな。。とりあえず部屋にでようか?」 A子「ううん もう少しここにいよう」
>その時、はじめて俺はA子と暗い押入れの中で密着していることに気づいた。
>(やばい・・急に緊張してきた。どうしよう・・・)
>何分、いや何秒だったのかもしれない長い沈黙が続き
>必死で次の言葉を探していた瞬間 A子の手がそっと俺の

まで読んだ。

189 :名無しさん@そうだ選挙にいこう:2008/09/03(水) 22:00:01
仲良しグループで勝手に組ませとけ、あぶれたら先生と一緒に。
これが日本の教育現場の伝統だろうが

190 :名無しさん@そうだ選挙にいこう:2008/09/04(木) 11:52:48
ワロタW
4レスも使って一生懸命説明した184には申し訳ないが、おれもさすがに長過ぎて読む気になれん。
どっかにうぷ出来んかね?

191 :名無しさん@そうだ選挙にいこう:2008/09/04(木) 13:46:07
自分もこのスレで解決のヒントをもらった事があるから
何とか力になろうと思って>>184から 3回読み返したけど




理解できなかった スマソ

192 :名無しさん@そうだ選挙にいこう:2008/09/04(木) 13:52:36
>>184

例えば編集できないクエリの内容をそのままワークテーブルに書き出して
予め決定フィールドを作っておいて、「決定」チェックボタンのクリック
イベントで、SQLを使ってしこしこと 個別のテーブルの決定フラグを
更新とかじゃだめなんかな

わかりづらくてごみん

193 :名無しさん@そうだ選挙にいこう:2008/09/04(木) 15:43:44
>>184-187
■1.何が問題で編集不可となったのでしょうか。
[Q_6]にダミーとして追加した[T_2b_1]が原因としか言いようがないです。
1つのクエリに同一テーブルの参照を複数追加した場合は更新不可となります。
[T_2b_1]は名前こそ違いますが実体は[T_2b]ですからね。
また本来、1つのクエリに同一テーブルを複数追加する必要はありません。

■2.この問題を回避する方法はないでしょうか。
[T_2b_1]というテーブルを実際に作成する以外、回避する方法はありません。

■3.この後、Q_6の結果から集計クエリ(クラス、班番号をグループ化し…(ry
[Q_6]の‘(そのグループに追加する子のそれぞれの)社会の成績’の部分が
理解できませんでした。同様に[Q_6]を作成するために何故ダミーを追加する
必要があるのか理解できませんでした。

・・・・もう少し・・・w


>>183=181
If MsgBox("これはヒントになりますか?", vbYesNo) = vbYes Then
MsgBox "それは良かった!", vbOKOnly + vbInformation
Else
MsgBox "それは残念…orz", vbOKOnly + vbExclamation
End If


194 :184:2008/09/05(金) 03:52:18
>>188
個人的にはそういうネタは好きですけど、個々まで長文を書くにはそれなりに
真剣だということなので・・・

>>192
出来る限りT_1〜T_3に手を加えたくないのが一点。
もう一つは、修正等の手間を考えるとSQLのような知識が必要な操作は
あまり入れたくないかな・・・と。
後々修正が必要なときに見づらくなるのが・・・

>>193
> 1つのクエリに同一テーブルの参照を複数追加した場合は更新不可となります。
なるほど。
> また本来、1つのクエリに同一テーブルを複数追加する必要はありません。
これは、全ての事例に当てはまるのか、一般論なのかどちらでしょうか?
(確かに、違うフィールドに同じクラスのデータが入るのはやや特異な気がしますけど。)

> [T_2b_1]というテーブルを実際に作成する以外、回避する方法はありません。
リンクではなく、実際に作成するということですね。

> 同様に[Q_6]を作成するために何故ダミーを追加する 必要があるのか理解できませんでした。
必要は全くなく、[T_2b_1]をひょうじさせたところで結合やフィールドの選択を
間違えていないか確認したくなって、でも[T_2b_1]で追加すべきフィールドが
ないので適当なフィールドを加えてみたら、その時点でうまくいっていなかった
ということです。

> ・・・・もう少し・・・w
実はこれでも、必要な部分を取り出したつもり(本当はT_2aとT_2bと構造が
同じで中身が異なるT_2AとT_2Bがあり、T_3がその(T_1の)補集合データも
含んでいて、同様の作業を行う(そのため、T_2bとT_3にかぶりがある)とか、
その他に結合すべきテーブルがいくつかあるとか)で、もっと複雑な構造をしているのです・・・

195 :193:2008/09/05(金) 04:54:40
>>190
同意。
>>191
正直しんどい、分かります。
>>192
ワークテーブルを作りたくなりますよね。
サブクエリがネストしてると頭が痛くなりますし。

>>194=184-187
データベースの作法からすると変則的ですが、こういう方法はいかがでしょう?

[テーブル1]: [F1], [F2], [F3]
[テーブル2]: [F1], [F2], [F3]

ここで[テーブル1]を元に[クエリ1]を作成します。ただの選択クエリです。
[クエリ1]: [テーブル1].[F1], [テーブル1].[F2]

この[クエリ1]を修正し[テーブル2]の[F3]の合計を追加します。
ただしテーブルの追加は一切行いません。
[クエリ1]に追加する式: DSum("F3", "テーブル2", "F1=" & CStr([テーブル1].[F1]))
              ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
この様にDSum関数をクエリ内フィールドで式として使うことで更新可能なクエリが作成できます。

# 必死なのはよく分かるのですが、もう少しやりたい事を整理していただければ。
# SQLのような操作はあまり入れたくないとか、あと出しは知恵を貸してくれた人に失礼ですよw

196 :184:2008/09/05(金) 08:25:04
>>195
どこかにうpできれば楽なのは分かってはいるのですけれど、
Accessがある環境は会社ですし、最近のコンプライアンスの強化などで
データの持ち出しもそもそも業務外のことをするのも難しいですからw
(実物は業務にかかる作業に使うものなので職場での作業は問題ないのですが、
構造を含めデータを見せることは不可能。無害化するのも結構手間がかかります。)

> [クエリ1]に追加する式: DSum("F3", "テーブル2", "F1=" & CStr([テーブル1].[F1]))
DSumについては、試してみたいと思います。

> # 必死なのはよく分かるのですが、もう少しやりたい事を整理していただければ。
やりたいことは184のシチュエーションのとおりです。
テーブル名答を使えば、T_3のうちT_2bに記載のないレコードの全てに
T_2aでいうところの外部キーを追加し、T_1の全レコードにT_2aのレコード
との対応をつけたい。
ただし、対応の付け方に条件があって、既に対応のついているT_2aのレコードと
相対的関連(ここでは「交流のある子」)があること、持っているデータの組み合わせ(シチュエーションでは「社会の成績の合計」)に制限があるので、
関連づけには目視が必要(自動化するには、素人なので開発の時間がない)ため、
クエリ等、候補をデータとともに目視する仕組みおよび、その画面で決定のフラグを付けたい。
・・・というものです。
# これ以上は、自分の説明能力のなさからわかりやすくするのは厳しいです。

> SQLのような操作はあまり入れたくないとか、あと出しは知恵を貸してくれた人に失礼ですよw
SQLが出てくることは、UNIONクエリ等を除けばクエリで出来るとの
考えでいたため、想定外の回答でしたので。
後出し感については、確かにその通りです。失礼いたしました。

197 :名無しさん@そうだ選挙にいこう:2008/09/05(金) 10:27:47
あれはダメ、これもダメ、手間がかかります、時間がない、礼は言わない、でも教えれ、失礼。

要約するとこうですね、分かります。

198 :名無しさん@そうだ選挙にいこう:2008/09/05(金) 10:49:38
>>197
あまりに的確でワロタ。

>>184の会社で出来る外注雇えwww

199 :188:2008/09/06(土) 00:50:28
A子の手がそっと俺の…

なんだよ!きになるじゃねえか!>>188

200 :184:2008/09/06(土) 04:28:44
>>198
大変残念なことに、外注を頼める金も権限もありません。
(なにぶんにも、予算という制約がありますので。)


>>195
本来は試した結果を早々にお知らせすべきところですが、
平行して走っている案件(そちらの方が重要度大)が朝から進行したため、
データベース作業は全く動いていません。
とりあえず、引数の意味などを確認して月曜日以降に確認し次第、
ご報告させて戴きたいと考えています。
(ただし、そこまでいさせていただける環境があるのかいささか疑問ですが・・・
ともかくも、本来は報告の際に行うのが筋でしょうが、この場で感謝をば。
ご教示いただき大変有り難うございます。)


>>197
この時間に帰ってきて、このレスを拝見させて脱力させていただきました。

教えてやったことをやらないのはどういうことだ、そんな制約はきいていない、
教えて貰うんだから時間を作ってでも手間を掛けるのは当たり前だろ、
話が途中だが教えたんだから礼を言え、根掘り葉掘り聞くな。
・・・大変良く分かります。
最後の「、失礼」なんて、クレームに謝罪すると、その言葉に突っかかってくるクr(ry

ともかくも、全ての制約条件を記載できるほどAccessに精通していないため、
ここでお尋ねさせていただいているわけで、それにもかかわらずそれだけの
経験や知識を求められていることに、やややるせなさを感じています。
>>195のような方がいる中でこのような発言をすることは、その方の
心証まで悪くされてしまうため不本意なのですが、あまりにも心ない発言と
思われることからあえて書かせていただきました。
>>197,198以外の皆様には、気分を害する記載したことを、この場で謝罪させていただきます。)

201 :名無しさん@そうだ選挙にいこう:2008/09/06(土) 07:42:50
>>200
おまえ、会社で
「まじめで良い奴だけど、要領が悪い」
とか言われてないか?

202 :名無しさん@そうだ選挙にいこう:2008/09/06(土) 09:46:40
ACCESSなんて適当でできるじゃん

203 :名無しさん@そうだ選挙にいこう:2008/09/06(土) 10:01:53
>>202
Accessは優れたUIツールとして使っている。



204 :名無しさん@そうだ選挙にいこう:2008/09/06(土) 10:56:42
Access 2007 Developer Extensionsを使って
アップグレード用のパッケージって簡単に作れないんでしょうか?

205 :名無しさん@そうだ選挙にいこう:2008/09/06(土) 11:02:47
確かにWEBも余裕で作れるしな
これで、SQLにつないでる人多いのかな。
移行もしやすそうだよね。

206 :名無しさん@そうだ選挙にいこう:2008/09/06(土) 11:30:20
アクセス難しそうだ。
と思ってたらすげー簡単だった。

207 :名無しさん@そうだ選挙にいこう:2008/09/06(土) 11:35:46
ただし結構
関数とか反応しなかった利するな
更新前とかごとか
ようわからん

208 :名無しさん@そうだ選挙にいこう:2008/09/06(土) 14:21:34
>>204
そもそも、mdbを更新すりゃいいんだから、別に問題ないんじゃない?

おいらの場合、mdbその他、セッティング用のiniファイル、XML出力用のXSLファイル
なんかも同梱した形でパッケージつくって、配布している。DB本体はMySQLへ接続し
て使うものだから、データベース自体もSQLファイルで配布。あとは、MySQLのAdmin
ツールつかって、SQLファイルを入れて、マシンにはMyODBCを入れてもらう。

で、アップデート時には、mdb本体だけ更新するようにしている。
あたりまえだけれど、mdbにはデータ類は何も入っていない。あくまでフロントエンド。
MySQL使わないパッケージの場合、バックエンド用MDBも同梱しているけれどね。


209 :名無しさん@そうだ選挙にいこう:2008/09/07(日) 09:24:52
>>208
おお!
拡張子変えてあるだけなんですね・・・
ありがとうございます

210 :名無しさん@そうだ選挙にいこう:2008/09/07(日) 21:24:46
人に頼まれてデータベースを作りました
内容は非常にベタというかオーソドックスなもので、各種データを入力し、リストを作成することと
そこから条件検索をかけると抽出したものが一覧表示されるというものです
例えば個人の情報を入力して「東京」で検索をかけると東京都在住の人の一覧が出るといった感じですね

ただ、完成して相手に渡してから最初に確認してなかったというお互いのミスに気づいたのですが
自分は自宅のXPにインストールしていた2000で作成したのですが
相手の環境がVistaで2007だったためにうまく動かない箇所が続出してました

どうしようかということで結局相手から2007がインストールされたVistaのノートPCを預かって
2000では動いたけれど2007では動かない点を修正しているのですが
どうしても直せない問題が1点あって悩んでいます

作成したリストについて、テキストボックスを作成して、そのテキストボックスのイベントで
「更新後処理」→「マクロ」を「フィルタの実行」で別に作成していたクエリを実行させるという方法を取っています
また、隣に作ったラジオボタンのイベントで「クリック時」にそのテキストボックスのマクロ名を実行させることで
テキストボックスに文字を入力し、ボタンをクリックすることでクエリを実行し、リストの抽出をかけられるようにしました

ここまでは問題無いのですが、次に別の条件で検索をかけようとしたときに
テキストに別の文字を入力してクリックしても最初に入力した文字での結果しか表示されないのです

ちなみに一度抽出したリストはラジオボタンのイベント「クリック時」で
「全レコードの表示」というマクロを実行させることで抽出前に戻せるようにしていますが
一度全レコードを表示させてから同様にしても結果はやはり同じです

要するに2000ではそこまで考える必要が無かったけど
2007では一度マクロを実行させたときにテキストボックス内の文字が無効になる
仕組みがあれば良いのかなと思うのですがよくわかりません

よろしくご教授、アドバイスお願いします

211 :名無しさん@そうだ選挙にいこう:2008/09/07(日) 21:52:41
>「更新後処理」→「マ

ここで読むのをやめた

212 :名無しさん@そうだ選挙にいこう:2008/09/07(日) 23:06:50
>よろしくご教授、アドバイスお願いします

ここまで読んだ

213 :名無しさん@そうだ選挙にいこう:2008/09/07(日) 23:42:01
>必死で次の言葉を探していた瞬間 A子の手がそっと俺の

まで読んだ。

そこまで読んだ感じだと、これかな。
ttp://support.microsoft.com/kb/941800/ja

214 :名無しさん@そうだ選挙にいこう:2008/09/08(月) 12:15:32
話戻して悪いけど、データベースのソフトの一個としては簡単だろうけど、
Microsoftのソフトの一個として入ると難しい。
何となくExcel使ってるだけの人には、データベースの概念がわかりづらいらしい。
ま、それを言っちゃあAccessに限った話ではないんだけど。

215 :名無しさん@そうだ選挙にいこう:2008/09/08(月) 16:55:49
【 システム環境  . 】 Windows XP SP2, Access 2007
【 VBAが使えるか .】 いいえ
【 VBAでの回答  】 可
【 検索キーワード 】 サブフォーム 挿入前イベント

メインフォーム+サブフォームという構成のフォームにおいて、
サブフォームで挿入前イベントを取得するにはどうしたら良いでしょう?
サブフォームのプロパティの欄にフォーカスの取得/喪失時のイベントしか見あたらないのですが…

(主キーにオートナンバーではなく数値型を使っているので、挿入前イベントがとれないと困ったことに!)

216 :名無しさん@そうだ選挙にいこう:2008/09/08(月) 17:00:14
ペニス挿入したいのか?

217 :215:2008/09/08(月) 17:11:49
>>216
挿入前「処理」イベントでしたね

ttp://okwave.jp/qa1785013.html
などを見ると、サブフォームにも更新前処理イベントがありそうなのですが、自分の環境ではプロパティ欄に表示されないというのが謎です
(主キー関連で、CurrentRecordが使いたいのですが)

218 :名無しさん@そうだ選挙にいこう:2008/09/08(月) 19:56:33
それはメインフォームのサブフォームコントロールのプロパティ。
サブフォームのフォームを選択するんだ。

219 :215:2008/09/08(月) 20:08:49
>>218
デザインビューにしてサブフォームを選択(クリック)した場合のプロパティシートは、「メインフォーム上のサブフォームのプロパティ」ということですね
サブフォーム内のフォームのプロパティを開くにはどうすれば…??
右クリック等ではそれらしいのが見あたらないのですが

220 :名無しさん@そうだ選挙にいこう:2008/09/08(月) 20:47:21
フォームの選択は左上の四角をクリックだ。

221 :215:2008/09/08(月) 21:06:05
>>220
デザインビューですよね?
オフィス2007だと↓みたいな感じで、左上に四角形が無いんです…どこに行ってしまったやら

http://up.mugitya.com/img/Lv.1_up72526.png

222 :名無しさん@そうだ選挙にいこう:2008/09/08(月) 21:27:59
んー?テーブル埋め込んでる?
フォームじゃないとダメだよ。

223 :名無しさん@そうだ選挙にいこう:2008/09/08(月) 21:37:41
きっと使ってるうちに慣れるはずと思いつつ早半年・・・
やっぱり2007使いづれええええええええええええ!!

224 :215:2008/09/08(月) 22:57:02
>>222
確かに見た目はテーブルっぽいのですが、プロパティの表示が「サブフォーム」だったので、これもサブフォームと呼ぶのかなと思っていました
この場合(テーブル?)、挿入前処理イベントは発生しないんでしょうか

発生しないとしたら、どうやって新規レコード挿入時に自動採番すれば良いのだろう…

225 :名無しさん@そうだ選挙にいこう:2008/09/08(月) 23:00:29
>>223
Excelやパワーポイントの2007は使いやすいんですけどね
Accessは…2003以前の解説サイトの情報が、2007で適用されなかったりするのが困ったところです

226 :名無しさん@そうだ選挙にいこう:2008/09/08(月) 23:23:13
>>224
だからフォームじゃないとダメなんだってば。
「見た目はテーブルっぽい」って…実際は何だっていうんだ?
サブフォームのソースオブジェクトの話だぞ。

227 :名無しさん@そうだ選挙にいこう:2008/09/09(火) 05:04:24
>>221
右下に小さくあるよ

228 :名無しさん@そうだ選挙にいこう:2008/09/09(火) 23:15:45
キーボードのwindowsキー(窓の絵が描いてあるやつ)、どうやって無効にすんの?
桐でないと無理?

229 :名無しさん@そうだ選挙にいこう:2008/09/10(水) 12:36:14
うん、桐でないと無理だよ。

230 :名無しさん@そうだ選挙にいこう:2008/09/10(水) 18:42:00
Access2007で突然、通過型・数値型フィールドでのカーソル移動が劇重になりました。
テキスト型フィールドではマトモに動きます。
まったく使い物になりません。
テーブルでもクエリでもフォームでも同様です。
レコード数を削って減らしても、MDB形式に変換しても改善されません。
どうようの経験ある方はいらっしゃいませんか?

Access2007は地雷ですか?

231 :名無しさん@そうだ選挙にいこう:2008/09/10(水) 21:01:33
>>226
サブフォームにも、テーブル(またはクエリ)と、フォームの2種類があるってことですね
で、サブフォームのテーブルには挿入前処理イベントは無い、と

テーブルっぽいフォーム作って、それをサブフォームにすることでOKでした

レスいただいた皆様、ありがとうございました

>>227
無いっす…

232 :名無しさん@そうだ選挙にいこう:2008/09/10(水) 22:01:23
>>231
ごめん

あるっていったのは、オレンジ色でかこった部分。ここが貴女の望んでいるそれです。
http://www2.uploda.org/uporg1663486.jpg

あと、豆知識として、フォームそのものを選択する場合には、フォームの上下左右の
切れ目付近をクリックすること。で、フォームで使うソースの選択などは、右上にある
無印の■をくりっくすると、点が■の中にでてくるのでそれで選択したことになる。

233 :名無しさん@そうだ選挙にいこう:2008/09/10(水) 22:52:41
>>230
突然というか俺は最初からそうだった。
OfficeのSP1当てたからかどうか知らんけど今は直ってる

234 :230:2008/09/11(木) 00:21:40
>>233
治りました。

SP1は、とうの昔に当てています。
実は一週間前に症状が出て、officeの修復したら一度治りました。
今朝、突然再発、何をしても治らず、officeの修復しても治らず、試しにAccess2000時代のMDB動かしたら普通に動いて、それから治りました。

もう、桐にしときます。

235 :名無しさん@そうだ選挙にいこう:2008/09/11(木) 12:02:05
Officeボタン邪魔じゃない?

クイックアクセスツールバーとリボンは消したけど、Officeボタンがーーー

236 :名無しさん@そうだ選挙にいこう:2008/09/11(木) 19:28:38
>>235
Accessの場合、あまり使わないね。

237 :名無しさん@そうだ選挙にいこう:2008/09/11(木) 21:46:41
>>231
テーブルっぽいフォームが欲しいならフォームの既定のビューをデータシートにするといいかも。
場合によるけど。

238 :名無しさん@そうだ選挙にいこう:2008/09/12(金) 10:34:21
マクロとVBA
どちらでも可能な処理では、どちらが速いですか?

239 :名無しさん@そうだ選挙にいこう:2008/09/12(金) 12:23:21
>>238
ここはおれより詳しい人が沢山居るけど、予想を書いておくと、
マクロってのは自動でVBA書いてるようなもんだから(Excelの「マクロの記録」みたいなもん)、同じ内容なら同じ。
但し、あくまで自動生成なので、余計なもんが入ることもあるだろうな。

240 :名無しさん@そうだ選挙にいこう:2008/09/12(金) 17:56:35
【 システム環境  . 】 Windows XP SP2, Access 2007
【 VBAが使えるか .】 いいえ
【 VBAでの回答  】 可

VBAのサンプルが見たくてテンプレートの資産管理や
マーケティングプロジェクトを開いてフォームのイベントを
見たら、どれも[埋め込みマクロ]になっていました。

Access2007では、イベント プロシージャよりマクロを
使った方が良いんでしょうか?


241 :名無しさん@そうだ選挙にいこう:2008/09/12(金) 18:44:07
【 システム環境  . 】 WindowsXP, Access2007
【 VBAが使えるか .】 いいえ
【 VBAでの回答  】 否
【 検索キーワード 】 固有の値、固有のレコード

フォームでコンボボックスを作成し、
値集合ソースをクエリビルダ(右側の...を押す)で作成する時に分からないことがあります。

クエリビルダで複数のフィールドを選択し、
その内のひとつのフィールドだけに「固有の値」プロパティを適用したいのですが、
可能でしょうか?

具体的には、総務省の郵便番号データをダウンロードしてテーブルにしました。
都道府県フィールドをコンボボックスで表示させるとき、
北海道から沖縄県へと北から南に順々とコンボボックスで表示させたいと考えています。

都道府県フィールドだけだとJISコード順に並んでしまうようなので(愛知県が先頭)、
5桁の数字からなるフィールド1(最初の2桁が都道府県、後ろの3桁が市町村を表す)もクエリビルダで選択しました。
そして、left関数でフィールド1の左2桁を選び、並べ替えフィールドで昇順としました。

ここで「固有の値」プロパティを「はい」にすれば、北海道、北海道、北海道・・・・と
同じ都道府県が並ぶことなくコンボボックスに表示できると思ったのですが、
「固有の値」プロパティは選択したすべてのフィールドが固有の値を持つ場合のみ適用されるらしく、
このコンボボックスを動かすと、北海道、北海道、北海道・・・となってしまいます。

そこで質問なのですが、
コンボボックスの値集合ソースをクエリビルダで作成する際、
複数のフィールドを選択して、その内のひとつのフィールドにだけ
「固有の値」プロパティを適用させることは可能でしょうか?

ご教示よろしくお願い致します。


242 :>>241:2008/09/12(金) 18:51:31
すいません、自己解決しました・・・・・・

クエリビルダで都道府県とフィールド1と郵便番号ID(主キー)というフィールドの3つを選択してました。
それだとできませんでした。理由はわかりません。

>>241を書き込んだ後、郵便番号ID(主キー)をクエリビルダから削除してみたところ、
そうしたら、北海道から沖縄県まで北から南まで順々に表示させることができました。

お騒がせして申し訳ありませんでした・・・・


243 :>>241:2008/09/12(金) 19:17:11
>>241でうまくできなかった理由がわかりました。
主キーはすべてのレコードで異なるので、すべてのレコードを重複しない
とアクセスが認識したためでした。

初心者とはいえ、馬鹿な質問をしてすいませんでした。



244 :名無しさん@そうだ選挙にいこう:2008/09/12(金) 20:33:50
>>239
ここでの質問って

たとえば、DAOで処理しているのと、それをAccessのマクロとではどっちが
早いのだろうかってことなんじゃなかろうか?

たしか、明確な差があるとかなんとかってのをウェブで見かけた

245 :名無しさん@そうだ選挙にいこう:2008/09/12(金) 22:22:46
Access2007でアプリ作っても使用者からナビゲーションウインドウ隠せないの?
何ていうセキュリティ
テーブルの中身全部見られちゃうじゃんか

246 :名無しさん@そうだ選挙にいこう:2008/09/12(金) 22:26:12
古川さん、お疲れ様です

247 :246:2008/09/12(金) 22:27:53
誤爆した御免

248 :名無しさん@そうだ選挙にいこう:2008/09/12(金) 23:12:33
>>245
mdeのようにしちゃうとか。

いわゆるmdbやaccdb形式だとだめでしょう。たしか、accdbも、いわゆる
ランタイムモードってのが付いていた気がする。
qw

249 :名無しさん@そうだ選挙にいこう:2008/09/12(金) 23:26:28
Access達人の皆様、教えて下さいませ
allowbypasskeyの設定をFalseで固定してTrueに出来ないようにしたいですけど
不可能だなと思っていました
DAO接続で外部から設定すればできちゃうから

で、以下のACShift.mdeは、外部からallowbypasskeyの設定を変えれなくなっています
いったい全体、どんな仕組みになっているのでしょう?

ここ↓の、シェアウエアに入ってる ACShift.mde です
http://www.vector.co.jp/soft/win95/business/se244274.html
ACShift.mde の機能の事ではなく、ACShift.mde 自身自体が外部からallowbypasskeyの設定を変えれなくなってます

250 :245=249:2008/09/12(金) 23:30:51
>>248
ああ、13秒遅れでレスが被ってしまいました
mde にしてもナビゲーションウインドウを見られてテーブル全部覗かれてしまいます
allowbypasskeyを False に固定したいですが >>249 の ACShift.mde は外部から True に出来ますか?
やろうとしたけど、False に固定されてて True に出来ませんでした

251 :名無しさん@そうだ選挙にいこう:2008/09/13(土) 00:42:58
>>249
夢を壊すようで悪いが、そのmdeも外部からallowbypasskeyの設定簡単に変えられたけど。
藻前さんが設定の変え方間違っただけで、別に何の仕組みもないと思うよ。

252 :245=249:2008/09/13(土) 08:07:17
>>251
> 夢を壊すようで悪いが、そのmdeも外部からallowbypasskeyの設定簡単に変えられたけど。
あううーーん
どうやって変えたか、ぜひ、具体的に教えてくらはいませ、お願いします<m(__)m>


253 :名無しさん@そうだ選挙にいこう:2008/09/13(土) 08:22:25
パスワード
権限の設定ではだめなんだろか

254 :245=249:2008/09/13(土) 08:33:55
あああ、でけました
ターゲットMDEを C:\ に置いてたから、VISTAからブロックされてたみたい

で、結局、使用者にテーブル見せない方策は存在しない?

255 :245=249:2008/09/13(土) 08:36:24
>>253
それ、他のPCにMDE(MDB,ACCDB,ACCDE,ACCDR)コピーして開くと無意味になる

256 :245=249:2008/09/13(土) 11:11:55
使用者にテーブルを絶対に見せない方策
やっとできました

257 :名無しさん@そうだ選挙にいこう:2008/09/13(土) 13:09:38
なんだろ

webフォームしか見せないとか


かって一か月だからよくわからん

258 :名無しさん@そうだ選挙にいこう:2008/09/13(土) 22:45:07
2003までのパスワードはアンチョク過ぎてツールで一瞬で解除されちゃう
2007のパスワード付きACCDB,ACCDEは shell起動が出来ない
残された道は...

259 :名無しさん@そうだ選挙にいこう:2008/09/13(土) 23:14:45
>>258
まぁ、C/Sにして、サーバー側でアクセスコントロールすればいいだけでしょ。

260 :名無しさん@そうだ選挙にいこう:2008/09/14(日) 08:22:11
ヒントで、おいらも解ったお!

261 :名無しさん@そうだ選挙にいこう:2008/09/15(月) 12:16:27
重複クエリのデータって表示するだけで使いまわし出来ないの?
いったんテーブル化しないとダメ?

262 :名無しさん@そうだ選挙にいこう:2008/09/15(月) 12:49:58
>>261
俺使い廻しているけれど?

というか、所詮クエリだから、なんだって使い回せると思っていたけれど。

263 :名無しさん@そうだ選挙にいこう:2008/09/15(月) 12:51:40
>>261
ちなみに、俺がやっているのは

不一致クエリで追加されていない新しいデータだけを抽出して、マスターテーブルに
追加するタイプと、重複クエリで両方のテーブルに存在するものだけひっぱったもの
を、さらに別のテーブルに追加するようなタイプだ。

前者は使いどころが結構あるけれど、後者はあまり使いどころがないね。

264 :名無しさん@そうだ選挙にいこう:2008/09/15(月) 15:29:59
>>258
えっ、2007だとアクセスデータベースからパスワード付いた別のアクセスデータベースを起動できないんですか?

265 :名無しさん@そうだ選挙にいこう:2008/09/16(火) 10:47:56
>>262
そうなんですか。
実は名前と日付の二つのフィールドしかないデーターベースがありまして、
名前    日付
山田一郎 平成20年1月1日
山田一郎 平成20年2月29日
山田一郎 平成20年12月31日
山田二郎 平成20年3月1日
山田二郎 平成20年4月15日

と言うかんじでして、各々の人物について日付の最大と最小の間隔を求めないといけない状態です。
重複クエリと集計クエリを組み合わせて日付の最大と最小の差を求めようとしたのですが、差がゼロになってしまって困っています。
テーブルに書き出してからは出来るのですが、クエリーだけで処理したいなと思いまして。。。

266 :名無しさん@そうだ選挙にいこう:2008/09/16(火) 11:07:51
太郎それデータベースちゃう

267 :名無しさん@そうだ選挙にいこう:2008/09/16(火) 11:12:05
>>266
いやまあ、もっとでかいデーターベースから抜粋したものです。

268 :名無しさん@そうだ選挙にいこう:2008/09/16(火) 12:18:03
>>258
ODBCならパスワード渡せますね。
autoexecでODBCからリンクテーブル作るようにすれば良いです。

269 :名無しさん@そうだ選挙にいこう:2008/09/16(火) 14:20:25
dbSecWriteDef ってどうやって使うんの?

270 :名無しさん@そうだ選挙にいこう:2008/09/16(火) 15:18:56
>>265
本当にそんな構造のテーブルでそんな値を求めたいというだけなら
Select 名前,Datediff("d",Max(日付),Min(日付)) As 日付差 From テーブル名 Group By 名前
じゃ駄目なわけ?

271 :名無しさん@そうだ選挙にいこう:2008/09/16(火) 18:45:15
【 システム環境  . 】 WindowsXP, Access2007
【 VBAが使えるか .】 いいえ
【 VBAでの回答  】 否
【 検索キーワード 】 ヘッダー フッター

メニューから「フォームデザイン」を選択して、フォームを設計します。
そのときは「詳細」しか出ません。
メニューの「デザイン」タブから「タイトル」というアイコンをクリック
するとヘッダ-とフッターがでます。しかし、ヘッダーやフッターを非表示
にすることはできません。

ここで質問なのですが、フォームデザイン時に、ヘッダーやフッターを
表示させたり非表示させるにはどうすればいいですか?

よろしくお願いします。


272 :名無しさん@そうだ選挙にいこう:2008/09/16(火) 18:48:42
>>271
詳細セクションの境目を上下にドラッグする
色々とドラッグしてみ

273 :>>271:2008/09/16(火) 19:10:36
境目ドラッグはうまく出来なかったのですが、
なにかの拍子に詳細セクションでマウス右ボタンを押したら、
ヘッダーフッター表示・非表示がありました。

あれこれ試してという>>272様のアドバイスのおかげです。
どうもありがとうございました。

274 :名無しさん@そうだ選挙にいこう:2008/09/16(火) 21:54:21
【 システム環境  . 】 WindowsXP, Access2007
【 VBAが使えるか .】 いいえ
【 VBAでの回答  】 否
【 検索キーワード 】

ワイルドカード(アスタリスク)は以下のように使用できますか?

 Like *[forms]![フォーム1]![コンボ14]*

フォーム1というフォームにある、コンボ14の値を用いてあいまい検索をしたいのです。
上記のように試したところ、うまくいきませんでした。
&記号を用いてもみましたが、それでもうまくいきませんでした。

 Like *&[forms]![フォーム1]![コンボ14]&*

どうしてうまくいかないのでしょうか。さっぱりわかりません・・・・
ご教示の程、よろしくお願い致します。



275 :名無しさん@そうだ選挙にいこう:2008/09/16(火) 22:41:12
テンプレに載せたくなるほど型通りの質問だな

276 :名無しさん@そうだ選挙にいこう:2008/09/16(火) 23:09:13
【 システム環境  . 】 WindowsXP, Access2007
【 VBAが使えるか .】 はい
【 VBAでの回答  】 可
【 検索キーワード 】 レポート、フォント

恥ずかしい質問なのですが、レポートでラベルやテキストボックスを印刷すると
フォントの条件がエクセルと同じであるにもかかわらず、
エクセルより太く印刷されてしまいます。なぜでしょうか。
フォントはMS P ゴシック、サイズは11でboldやイタリック等の
装飾は無しです。つまりエクセルのフォントの初期値と同じなのですが、
印刷すると太くて見にくいのです。
ラベル等のプロパティで文字の太さを極細にしても変化はありません。
よろしくお願いします。

277 :名無しさん@そうだ選挙にいこう:2008/09/16(火) 23:23:02
こっちも質問です
大体のヒントでいいのですが
三つのテーブルに住所欄がそれぞれあり
に一つだけ住所が入ってるとしたら
その一つをフォームのテキストボックスに
表示するのはどうしたらいいでしょうか

278 :名無しさん@そうだ選挙にいこう:2008/09/17(水) 17:37:40
【 システム環境  . 】 Windows server 2003, Access 2003
【 VBAが使えるか .】 はい
【 VBAでの回答  】 可
【 検索キーワード 】 ターミナルサービス、server 2003、Access、排他、複数、同時

Windows server 2003 の ターミナルサービス を利用し、
複数ユーザでひとつのAccess(MDB)を実行させたいと考えているのですが、
きちんとプログラムで排他処理していれば、技術的に問題はないですか?

今までは、それぞれのクライアントPCにMDBをおき、SQL Server を、
みにいっていたのですが、ターミナルサービス初挑戦なので不安です。

よろしくお願いします。

279 :名無しさん@そうだ選挙にいこう:2008/09/17(水) 19:44:14
SQL Server使うのやめちゃうの?

280 :名無しさん@そうだ選挙にいこう:2008/09/18(木) 10:27:31
>>256
漏れも出来たお!
>>268 の方法だと作業中電源断されるとマズイ可能性あるお!
もっとスマートな方法が幾つかあったお!
日本語のパクリ元はないお!

281 :名無しさん@そうだ選挙にいこう:2008/09/18(木) 12:37:43
はい、ランタイム環境でも可能な方法もありますね。
桐にしとくのは、止めました。

282 :名無しさん@そうだ選挙にいこう:2008/09/18(木) 15:12:59
【 システム環境  . 】 WindowsXP, Access2007
【 VBAが使えるか .】 はい
【 VBAでの回答  】 可
【 検索キーワード 】 レポート
レポートのグループフッタで、全体平均より上だけの平均・下だけの平均という
計算をしたいのですが、うまい方法が思いつきません。ご教授ください。

英語(グループヘッダ)

名前   点数
(詳細)
 山田   70
 木村   60
 佐藤   40
 鈴木   50

英語集計(グループフッタ)
平均    55
平均以上  65  ←ここを集計したい
平均以下  45  ←ここを集計したい

283 :278:2008/09/18(木) 15:34:01
>>279さん

SQL Serverは使います。

どこかネット上で、こういった例が書かれてあるサイトがあったらなぁと
思うのですが、なかなかないですね・・・
メタフレームでは、ちょこっと見かけるのですが

ターミナルサービスって人気ないんですかね。

server2003に、担当者の数だけ、入力用のMDB置くのもかっこ悪いですし・・

284 :名無しさん@そうだ選挙にいこう:2008/09/19(金) 09:22:39
【 システム環境  . 】 Windows XP Professional ver2002, Access 2000
【 VBAが使えるか .】 はい (事務はvb6でつくってる)
【 VBAでの回答  】 可
mdbの中のテーブルをプログラム上からのみ編集可能にするにはどうしたらいいでしょう?
管理職で勝手に編集するやつがいて困ってます。

285 :名無しさん@そうだ選挙にいこう:2008/09/19(金) 09:27:00
>>284
テーブルを見せないように隠せ

286 :名無しさん@そうだ選挙にいこう:2008/09/19(金) 09:29:45
285>>
テーブルプロパティで隠しオブジェクトにチェック入れるってコト?

287 :名無しさん@そうだ選挙にいこう:2008/09/19(金) 09:37:26
起動時にメニューフォームをポップアップ最大化で開いて
そこから各種フォーム開く
メニューフォーム閉じるときイベントでmdbも終了しる

288 :名無しさん@そうだ選挙にいこう:2008/09/19(金) 09:44:09
>>287
隠せました。モジュールにコードを記述してルーチン内で実行。
消えた後はコードを消去して証拠隠滅。
サンクスです。

289 :名無しさん@そうだ選挙にいこう:2008/09/19(金) 11:01:32
test

290 :名無しさん@そうだ選挙にいこう:2008/09/19(金) 12:04:19
>>282
そこで隠しテキストボックスの出番だ!

291 :>>274:2008/09/19(金) 15:51:18
すいません。どなたか>>274にご回答いただけないでしょうか?
本屋に行ってアクセスの本(入門書)を何冊か立ち読みしてみました。
索引でワイルドカードを探して該当するページを読んでみたのですが、
コンボボックスで選択した文字を使ってワイルドカードを使う例が載っていませんでした。
ヒントだけでも構いませんので、どなたかよろしくお願い致します。


292 :>>291:2008/09/19(金) 15:55:07
申し訳ありません。自己解決しました・・・
↓これでいいんですよね?

like "*"&[forms]![フォーム1]![コンボ14]&"*"

お騒がせして、本当に申し訳ありませんでした。



293 :名無しさん@そうだ選挙にいこう:2008/09/19(金) 16:05:15
 Like *& Eval([forms]![フォーム1]![コンボ14]) &*

294 :名無しさん@そうだ選挙にいこう:2008/09/20(土) 01:21:08
フォーム上のテキストボックスの内容を
テキストファイルまたはエクセルファイルに書き出すには
どうやったら良いでしょうか?

295 :名無しさん@そうだ選挙にいこう:2008/09/20(土) 03:03:25
>>294
CreateObject 関数
http://msdn.microsoft.com/ja-jp/library/cc437576.aspx

Write 関数、WriteLine 関数
http://msdn.microsoft.com/ja-jp/library/yxw69s8t.aspx

296 :名無しさん@そうだ選挙にいこう:2008/09/21(日) 20:16:44
Access2007の暗号化キーは20Byte=160bit
セキュア桐の暗号化キーは72Byte=576bit
どちらもMS謹製暗号プロバイダ使用

297 :名無しさん@そうだ選挙にいこう:2008/09/22(月) 09:56:05
【 システム環境  . 】 WindowsXP, Access2007
【 VBAが使えるか .】 いいえ
【 VBAでの回答  】 否
【 検索キーワード 】

住所用テーブルを作りました。その中に郵便番号フィールドがあります。
新しく作成したフォームにコンボボックスを作成し、郵便番号を検索できる
ようにしました。

そのコンボボックスに検索したい郵便番号を入力しようとすると、
まだ二桁しか入力していないのに、候補らしい番号が白黒反転で表示されます。
例えば、12と入力すると、1200000となります。
00000は白黒反転で表示されます。

自動的に候補になるような白黒反転表示を辞めたいのです。
自分が検索用に入力した数字だけを表示させるようにしたいのですが、
どうすればいいでしょうか?

ご教示よろしくお願い致します。


298 :名無しさん@そうだ選挙にいこう:2008/09/22(月) 19:40:49
【 システム環境  . 】 WindowsXPSP3, Access2007
【 VBAが使えるか .】 いいえ
【 VBAでの回答  】 可
【 検索キーワード 】 前日 前レコード‥

残高繰越のクエリフィールドを作成しようと思っているのですが、なかなかうまくいきません。

前日の残高に今日の売上を足して、今日の出金を引き、本日の残高としたいです。
エクセルで作っていた時は、A2=A1+B2-C2というような式になっていました。

よろしくお願いします。

299 :名無しさん@そうだ選挙にいこう:2008/09/22(月) 22:23:19
>>297
ヘルプで、コンボボックスの自動拡張プロパティと入力チェックプロパティを読め

>>298
クエリで表示、で十分ならMSのサポート情報調べろ、書いてあるから
それじゃあ実用にはならんけど

300 :名無しさん@そうだ選挙にいこう:2008/09/23(火) 08:04:26
なんかすげー上級者向けのスレっぽいなw
今桐って使ってる人いる?

桐の本が本屋においてないし
打ち込もうと思って、一生懸命入力しようとしてて、打ち込めないなーと思ったら
スペースキーを押してからでないとダメなんだよって言われた。
なんだこれwwwwwwwwって思ったわ。ホントなんなの?あれ?


301 :名無しさん@そうだ選挙にいこう:2008/09/23(火) 09:31:43
表示モードと編集モード持ってるから、桐の入力は良いんだよ
スーパーのベテランレジ打ちオバさんの様に、ビュンビュンバコバコ入力してもデータ間違えない
表とか表形式フォームとかでバコバコ入力してみ、快感だから

302 :名無しさん@そうだ選挙にいこう:2008/09/23(火) 09:45:17
こっちに書いてやれよ。

管理工学研究所「桐」【4】
http://pc11.2ch.net/test/read.cgi/bsoft/1100708378/

303 :名無しさん@そうだ選挙にいこう:2008/09/24(水) 14:23:08
Access ってさあ
2つの項目で並び変えたい時に、たとえば[A]で並び変えて、[A]が同じ中では[B]で並び変えたい時

フォームやデータシートで、並び変えボタンを[B]で押してから[A]で押して、
並び変えの結果は、目的通りになる?
MSは仕様で保障してない?

304 :名無しさん@そうだ選挙にいこう:2008/09/24(水) 14:45:45
>並び変えの結果は、目的通りになる?
出来なかったと思う。

自分はテーブルを作って、クエリ内SQLのORDER BYで読むようにした。

305 :名無しさん@そうだ選挙にいこう:2008/09/24(水) 14:48:52
そのやり方ではできないが
「フィルタ/並べ替えの編集」
で好きなようにできるよ

306 :名無しさん@そうだ選挙にいこう:2008/09/24(水) 14:52:45
>>305
おー、知らなかった。サンクス。

307 :名無しさん@そうだ選挙にいこう:2008/09/24(水) 21:52:17
>>305
そりゃ便利だな、俺も知らなかった、クエリから読み込みもある
桐の道具箱みたいに会話処理使えるわ

308 :名無しさん@そうだ選挙にいこう:2008/09/24(水) 23:15:28
桐は邪道だわ。

DOS時代から桐を使い、オンラインカレッジでデータベースを学習した俺にとっては桐は便利すぎて麻薬みたい。
まともな設計しなくても、頭の中でぼんやり考えている事が形になる。

今更ながら、Accessに乗換えしてるが、桐がいかに「便利なデータベースもどき」だったかが良くわかる。

309 :名無しさん@そうだ選挙にいこう:2008/09/25(木) 01:33:44
access2003使って販管システム作ってるのですが
デフォのままではデザインの選択肢が狭くて非常に悲しいです。
appleとかsonyのような透明感溢れるミーハーなデザインにしたい…。
2000形式にしてもそんな透明感溢れるインターフェイスなんて無理だよね。
ねずみ色の背景に白色のテキストボックスだよね・・・。

310 :名無しさん@そうだ選挙にいこう:2008/09/25(木) 02:20:50
FileMakerでも使ってろや

311 :名無しさん@そうだ選挙にいこう:2008/09/25(木) 02:38:30
背景に画像表示できるし、ボタンも透明にすればいい。

さらにデータアクセスページにすればWEB並みの見た目にできる。

312 :名無しさん@そうだ選挙にいこう:2008/09/25(木) 07:24:32
Accessなんぞでデザインセンスの良いソフトを作ろうという事自体が無謀。

313 :名無しさん@そうだ選挙にいこう:2008/09/25(木) 08:27:48
コード頑張ればこんなん出来るけど
http://blogs.msdn.com/access/archive/2008/04/28/modal-dialogs-with-transparent-backgrounds.aspx

314 :名無しさん@そうだ選挙にいこう:2008/09/25(木) 09:06:00
これはコードが頑張ってるんじゃなくてVista+Access2007で
Accessのオプション→カレントデータベース→フォーム上のコントロールにWindowsのテーマを使用する
の機能ONにしてるだけなんじゃね?

315 :名無しさん@そうだ選挙にいこう:2008/09/25(木) 10:07:15
>>310
あれ触るくらいなら表にAccess、裏にRDBMS持つよ。

316 :名無しさん@そうだ選挙にいこう:2008/09/25(木) 22:47:44
>>309
重くはなるが、フォームの
背景やボタンにビットマップなど貼り付けまくれば、好きなデザインは可能かな。

ただ、いわゆるDOS/Vやプログラマの美学って、内部のコードの洗練度なんだよね。
無駄が無く、速い。
AppleやSonyのミテクレ文化とは対極なんだよね。

317 :名無しさん@そうだ選挙にいこう:2008/09/25(木) 22:56:39
DOS/Vて

318 :名無しさん@そうだ選挙にいこう:2008/09/25(木) 23:00:09
>>308

ひねくれ者ではない俺は、便利なものの方が良いと思うけど

319 :名無しさん@そうだ選挙にいこう:2008/09/26(金) 12:58:17
またカーソル移動が劇重になったお!
もうアクセス嫌だお!
桐にするお!

320 :名無しさん@そうだ選挙にいこう:2008/09/26(金) 15:00:16
カーソル激重現象は気がついたら治ってること多いけど突然再発するから対処に困るよな
別ウィンドウでIE表示してるとその間だけはおKみたいだからこれで逃げてるが・・・

321 :名無しさん@そうだ選挙にいこう:2008/09/26(金) 15:41:32
IMEを、[OfficeIME]でなく[日本語]に設定するとカーソル劇重起きないお!
でも、日本語入力できなくなるお!

フィールド設定でIME使用不可でなくIMEoff設定にしても起きないお!
でも、非常に不便になるお!

322 :名無しさん@そうだ選挙にいこう:2008/09/26(金) 16:10:26
その語尾はやめれ。

323 :名無しさん@そうだ選挙にいこう:2008/09/26(金) 16:17:14
やめるお!
やめないお!
やめますお!
やめるときお!
やめればお!
やめろお!

324 :名無しさん@そうだ選挙にいこう:2008/09/26(金) 21:43:58
>>322
 \                    /            /
   \  丶       i.   |      /     ./       /
    \  ヽ     i.   .|     /    /      /
      \  ヽ    i  |     /   /     /
   \
                                 -‐
   ー          / ̄`Y  ̄ヽ、
. __           / / / / l | | lヽヽ           --
     二      / / // ⌒  ⌒ヽ       = 二
   ̄         | | |/  (●) (●)             ̄
    -‐       (S|| |   ⌒ ・ィ  ヽ       ‐-
             | || |   ト-=-ァ ノ
    /       | || |   |-r 、/ /|       \
             | || | \_`ニ'_/ |
         /                 \
        /                    ヽ
    /  /               丶      \
   /   /    /      |   i,    丶     \
 /    /    /       |    i,     丶     \

325 :名無しさん@そうだ選挙にいこう:2008/09/27(土) 09:16:38
>>318
俺はひねくれものじゃあないんだけど、まわりがひねくれ者ばかり。
何で「桐」なの? 「管理工学」? 何でAcessじゃないの…って。
エクセルしか使えんくせに、大きなお世話じゃ。

326 :名無しさん@そうだ選挙にいこう:2008/09/27(土) 09:59:49
>>325
AccessはVBAできなくても、それなりに作れはするが、RDBMSの知識が
やはり有る程度のところで要求されるし、さらにプログラミングスタイルは、
VBAではあるけれど、体系は、VBに限りなく近いから、ExcelのVBAでな
れている人は辛いハズ。

327 :名無しさん@そうだ選挙にいこう:2008/09/27(土) 23:03:19
>>326
ExcelのVBAって使ったことないわ
使うつもりもなかったが、そんなに違うのか?

328 :名無しさん@そうだ選挙にいこう:2008/09/27(土) 23:17:01
そりゃ扱うモノ自体が全然違うからな
大枠や関数の構文は全く同じだけど

329 :名無しさん@そうだ選挙にいこう:2008/09/27(土) 23:27:56
日本語でオケ

330 :名無しさん@そうだ選挙にいこう:2008/09/27(土) 23:35:36
何がわからんのかわからん

331 :名無しさん@そうだ選挙にいこう:2008/09/27(土) 23:53:22
俺には>>326が何言ってんのかわからんな

332 :名無しさん@そうだ選挙にいこう:2008/09/28(日) 00:27:49
文章という名前のレポートを作ってVBEでいろいろ書いている最中に
Reports!文章.caption=hogeと書いても怒られないのに、0R文章という名前のレポートを作ると散々に怒られて、
Reports![0R文章]としたら怒られなくなった。でもXR文章というレポートを作ったらカッコが無くても怒られなかった。

教科書では2番目の書き方を習ってましたが、商用ソフトのコードをみると1番目の書き方も結構使われていますね。他にカッコを使う書き方も見たことがあるし。
ここら辺のルールってどうなってるのでしょうか?

333 :名無しさん@そうだ選挙にいこう:2008/09/28(日) 07:43:53
怒られるときにはカッコを使うルールだよ

334 :名無しさん@そうだ選挙にいこう:2008/09/28(日) 08:51:35
最近VBAをつつき出したのですが、()[] とか ” とか # とか、
ネット上のサンプルも一貫性が無いし、ヘルプの例文でさえ怒られる事があります。
あれって、もともと文法が曖昧なんでしょうか?
ライブラリのVerのせい?

335 :名無しさん@そうだ選挙にいこう:2008/09/28(日) 14:20:42
機嫌が良い時は怒らないよ
態度悪いと怒るけどな

336 :名無しさん@そうだ選挙にいこう:2008/09/28(日) 14:41:37
Accessってそういうエラー多いよね

337 :名無しさん@そうだ選挙にいこう:2008/09/28(日) 15:01:54
複数クライアント同時使用ってACCESSだと難しい?

338 :名無しさん@そうだ選挙にいこう:2008/09/28(日) 15:06:00
皆さん、分かって言ってると思うのだけれど、
この場合は「OR」という予約語を含むオブジェクト名を付けているのが原因ですよね。
ORの使い方が間違ってるぞ!と怒ってるわけで。

339 :名無しさん@そうだ選挙にいこう:2008/09/28(日) 15:09:43
ゼロだろ

340 :名無しさん@そうだ選挙にいこう:2008/09/28(日) 18:35:58

問)アクティブフォーム(.Name="form1") から アクティブコントロール(.Name="control1") の
  バリュープロパティ参照する場合、以下の方法A〜Gを速い順に並べろ

A: [form1]![control1].Value
B: form1.control1.Value
C: Me.contorol1.Value
D: Me.ActiveControl.Value
E: ActiveForm.ActiveControl.Value
F: ActiveForm.contorol1.Value
G: Screen.ActiveControl.Value

341 :名無しさん@そうだ選挙にいこう:2008/09/28(日) 19:57:46
>>337
素直に、複数クライアント同時使用するなら、MySQLサーバでも建てて
運用すべし。そんなに難しくない。

テーブルをMySQL側で持つだけだ。やややっかいな設定はODBCドライバ
の設定くらいなもんで、これまでつかってきたAccessのファイルは、テーブル
の部分だけリンクテーブルになるだけだから、引き続き使える。

うちの会社では、給与計算システムがしょぼすぎるので、俺がこれで作りこ
んだものをサブシステムとして使っているよ。他にも従業員宛名ラベル一括
印刷だとか、名刺印刷だとか、タイムカード印刷だとか、いろいろ作り込んで
いるよ。

逆に、こういうので作ると、単体のAccess DBで運用するのが嫌になる。

342 :名無しさん@そうだ選挙にいこう:2008/09/28(日) 20:06:53
複数ユーザー同時使用だろ?
ファイルサーバにテーブルぶち込むだけでOK

343 :名無しさん@そうだ選挙にいこう:2008/09/28(日) 21:50:28
MySQLはライセンスが面倒臭い

344 :名無しさん@そうだ選挙にいこう:2008/09/28(日) 22:05:24
2007のaccdbは、今のところ壊れた話は聞かないなぁ
今度は大丈夫かも

345 :名無しさん@そうだ選挙にいこう:2008/09/28(日) 22:13:49
>>340
Aが一番遅いのは俺でもわかる。
どれが早いか俺も知りたいぞ。

346 :名無しさん@そうだ選挙にいこう:2008/09/28(日) 23:36:01
>>338
自作のレポートは発見しやすいようにゼロを頭につけました。

347 :名無しさん@そうだ選挙にいこう:2008/09/29(月) 00:34:13
>>346
Visual Basic のプロシージャ、変数、および定数の名前について
ttp://office.microsoft.com/ja-jp/access/HP051867721041.aspx?pid=CH063666331041

348 :名無しさん@そうだ選挙にいこう:2008/09/29(月) 21:47:11
スタンドアローンで使うデータベースなのに併合処理が出来ないアクセスって何なの?
全然ダメじゃん。

349 :名無しさん@そうだ選挙にいこう:2008/09/29(月) 23:37:57
そもAccessはOffice製品の中では異端だからね。
MS自体が開発環境とか言って、逃げを打っていた気がする。
ところで、併合処理とはなにを指して言っているのだろう。

350 :名無しさん@そうだ選挙にいこう:2008/09/30(火) 00:21:50
まあOfficeで断トツ1の異端児はVisio君なんですけどね

そして俺も併合処理って何なのか知りたい。
まあマイナーDBのマイナー用語をあたかも全世界標準であるかのように
語られても困るだけなんですが・・・

351 :名無しさん@そうだ選挙にいこう:2008/09/30(火) 00:42:33
>>347
禁則でも[ ]でくくると許されるから混乱するんだろうな。( )も多用されているし。
acFormのほかにA_Formとかも見た気がするし。方言の多さ故に文法がいい加減になって、意外なときに怒られる。

352 :名無しさん@そうだ選挙にいこう:2008/09/30(火) 01:29:09
併合処理。。。?
DB用語じゃなくて、お役所かなんかの業務用語かね?
しかし「スタンドアローンで使うデータベースなのに」と枕詞が付くからには、
サーバ型DBにはなくてもsqlite3なんかには付いてるDB機能なのかな?
何を指して「ダメ」と言っているのかまったく伝わってこないな。。。

353 :名無しさん@そうだ選挙にいこう:2008/09/30(火) 06:31:40
「併合」って桐の事でしょ?
Accessの事は良く分からないけど、クエリで出来る気がする。

354 :名無しさん@そうだ選挙にいこう:2008/09/30(火) 08:30:18
テーブル同士の結合演算・併合演算はデータベース演算操作の基本だよ
SQLが出来てからはJOINで処理するようになったけど。
スタンドアロンだと簡便な併合演算ないと煩雑でキツイでしょ。
アクセスだと都度クエリをコネクリ廻して実現してるけど。


355 :名無しさん@そうだ選挙にいこう:2008/09/30(火) 09:13:02
このスレでAccessと関係なく、ANSI SQL準拠でもない用語を当然のように使うのはどうなんだろうね
データベースの基本がどうのこうの語る以前の問題だと思うが

356 :名無しさん@そうだ選挙にいこう:2008/09/30(火) 09:15:30
それがAccessの利点でもあるってとこかな…


357 :名無しさん@そうだ選挙にいこう:2008/09/30(火) 09:34:37
テーブルの加算や積算は基本中の基本だと思うが。

358 :名無しさん@そうだ選挙にいこう:2008/09/30(火) 09:55:58
Accessの併合はマクロで組んでるお!

359 :名無しさん@そうだ選挙にいこう:2008/09/30(火) 19:54:09
基本か。ググってみた。

"併合演算" に一致する日本語のページ 6 件中 1 - 6 件目 (0.05 秒)

そうか基本か。

360 :名無しさん@そうだ選挙にいこう:2008/09/30(火) 20:07:39
>>352
ユニオンクエリのことでも指しているのかしらね

DBとDBを併合する なんてね。そんなところじゃない?

361 :名無しさん@そうだ選挙にいこう:2008/09/30(火) 20:39:41
ほら、よく言うじゃない
毒をくらわば







それは併呑

  ∧γ∧
  ( ・∀・)   | | ガッ
 と    )    | |
   Y /ノ    人
    / )    <  >_∧∩
  _/し' //. V `Д´)/
 (_フ彡         /  

362 :名無しさん@そうだ選挙にいこう:2008/09/30(火) 22:03:33
>>354
簡便な併合演算って何?例えば
AccessのSQLで、特に出来ないことも、難しいことも無いけど

363 :名無しさん@そうだ選挙にいこう:2008/09/30(火) 22:50:53
>>360
DBを併合出来る訳ねーだろ、併合はデータベース・テーブル同士の演算だ
http://www.google.com/search?q=%E3%83%86%E3%83%BC%E3%83%96%E3%83%AB%E3%81%AE%E4%BD%B5%E5%90%88&rls=com.microsoft:ja:IE-SearchBox&ie=UTF-8&oe=UTF-8&sourceid=ie7&rlz=1I7ADBR

364 :名無しさん@そうだ選挙にいこう:2008/09/30(火) 23:19:38
>>362
> 、難しいことも無いけど

じゃ作ってくれ
総売上.tbl に A支店売上.tbl(持ち出した総売上.tbl に、A支店で独自にレコード追加したもの) を併合するSQL
新たな商品のレコードは追加して、同じ商品のレコードは売り上げ額を加算して、他はそのままで、フロントエンドから処理する追加・更新クエリだ
バックエンドに置くと、DBEngine.CompactDatabase が使えなくなるからな
B支店、C支店から集めたtblも併合する追加・更新クエリを、簡単に、作れれば合格だ
極めてメンドイだろ?


365 :名無しさん@そうだ選挙にいこう:2008/09/30(火) 23:23:57
>>363
見たとこ初心者の質問とかDBとジャンル違いの説明とかUNIONクエリと同じことの解説とか
意味ないURLしかヒットしてないだろこれ

366 :名無しさん@そうだ選挙にいこう:2008/09/30(火) 23:34:29
DBEngine.CompactDatabase はむしろバックエンドのほうがラクだろ・・・
フロントエンドが自分で自分をCompactDatabaseってどうやりゃ簡単に出来るんだよ

367 :名無しさん@そうだ選挙にいこう:2008/10/01(水) 00:08:05
>>364
.tblってのがよくわからんが翻訳するとA支店.mdbとB支店.mdbとC支店.mdbにバラけた売上テーブルを
本店.mdbの売上テーブル(主キーは商品コード)に売上額を集計するSQLを作れってこと?

368 :名無しさん@そうだ選挙にいこう:2008/10/01(水) 00:15:38
joinしてsumすりゃいいんじゃね?

369 :名無しさん@そうだ選挙にいこう:2008/10/01(水) 08:22:49
>>366
フロントエンドからバックエンドをDBEngine.CompactDatabaseする
そのバックエンドにクエリー置いたら、DBEngine.CompactDatabaseできないんでない?
(CompactDatabase メソッドは Microsoft Access オブジェクトを変換できないので、CompactDatabase メソッドを使用してこのようなオブジェクトを含むデータベースを変換しないでください。 )

今日び、DBにパスワード掛けてるのが普通だから Application.CompactRepair は使えないしな



370 :名無しさん@そうだ選挙にいこう:2008/10/01(水) 08:37:40
>>367
そう、
ぜひ作ってくれ
サーバ使えずパーソナルDBのアクセス使ってる小企業だ
各所で総売上.tbl参照するために持ち出して、総売上.tblに各所の売上を追記してるケースな
簡単に作れれば、合格

371 :名無しさん@そうだ選挙にいこう:2008/10/01(水) 09:46:13
難しいか?

商品コードで集計するんだから本店の商品コードは当然主キーに設定して

 insert into [本店.mdb].[売上テーブル](商品コード, 売上額)
 select 商品コード, 0 FROM [?支店.mdb].[売上テーブル]

これの?支店のところをA〜C支店に変えて3回実行してから

 update [?支店.mdb].[売上テーブル] T1
 left join [本店.mdb].[売上テーブル] T2 on T1.商品コード=T2.商品コード
 set T2.売上額 = T2.売上額 + T1.売上額

同様にこれの?支店のところをA〜C支店で3回実行するだけだろ。

まあこんな設計してたら全社計売上は把握できても支店別売上が不明になるから
普通はunion all した結果をgroup by するのがセオリーなんだけど、
おかしなクライアントのおかしな要望に応えるのも腕のうちなんでもう慣れたわw


372 :名無しさん@そうだ選挙にいこう:2008/10/01(水) 09:55:57
?を入れ替えたり3回実行したり、簡単に作れないからパーソナルDBとして不合格だな

373 :名無しさん@そうだ選挙にいこう:2008/10/01(水) 10:03:29
>>372
レポートのコントロールソースをVBAで記述する方法はありますか?
プロパティーに式を書くと上手く動作するのですが、
レポートを開くときのプロシジャーにレポート名.controlsource = hoge と書いても上手くいきません。

374 :名無しさん@そうだ選挙にいこう:2008/10/01(水) 10:03:53
>>373
アンカーはいりません。間違えました。

375 :名無しさん@そうだ選挙にいこう:2008/10/01(水) 10:22:07
>>372
そうかな?
桐の併合も、編集中の元表と併合対象表でやるから、支店数だけ操作が必要じゃないの?
結局、一括処理(AccessのVBA)か履歴(キーボードマクロ)が必要になってくると思うけど。

376 :名無しさん@そうだ選挙にいこう:2008/10/01(水) 10:23:17
>>371
まあ、そうなんですけど
小企業はパーソナルデータベースを使うのに貴方を雇うべきですね

377 :名無しさん@そうだ選挙にいこう:2008/10/01(水) 10:25:48
遣ってる事は同じ。
最初から条件設定ダイアログが用意されてて設定条件保存できるから。
設定しやすく使いやすいだけ。

378 :名無しさん@そうだ選挙にいこう:2008/10/01(水) 12:50:44
レポートの元データだったら
reports!レポート名.recordsource=sql
じゃないのか

379 :名無しさん@そうだ選挙にいこう:2008/10/01(水) 13:36:31
何かよくわからんのだが
桐ってのはあれか
使う人が、Excelみたくその時々の必要に応じてごにょごにょいじるタイプのソフトなのか
でもって、それを使いこなせることが、場合によってはスキルと認められるような?
Accessってたぶん違うぞ
小規模で使われることが多いから、作る人イコール使う人な場合もあるけど
大部分のただ使う人はSQLもVBAも書ける必要なんてないだろ
操作が簡単かどうかは作る人の技量しだいなんで

380 :名無しさん@そうだ選挙にいこう:2008/10/01(水) 14:26:22
>>369
試しに手持ちのAccess2007と2002でやってみたが全然そんなことはない
クエリだろうとフォームだろうと何が入っててもおKだった。

もしかしてDBENGINE.CompactDatabase の第4引数に変な変換オプション指定して
大昔のバージョンに戻そうとかしてないか?

381 :名無しさん@そうだ選挙にいこう:2008/10/01(水) 14:37:21
>>380
ああ、実際にエラーが出た訳じゃあないんだ
DBEngine.CompactDatabase@2007開発者用リファレンス、に以下が書いてあるので
「CompactDatabase メソッドは Microsoft Access オブジェクトを変換できないので、CompactDatabase メソッドを使用してこのようなオブジェクトを含むデータベースを変換しないでください。」

俺が、変換の意味を取り違えてるのかな?

382 :名無しさん@そうだ選挙にいこう:2008/10/01(水) 16:57:22
>>381
確かにヘルプの記載は解かりにくいですね。
MSサイトで原文読んだ方が良さげ。

383 :名無しさん@そうだ選挙にいこう:2008/10/01(水) 21:31:25
>>364
なんか普通に出来そうだが、お前はまず日本語の勉強した方がいい。

言いたいことが感覚でしか分からん。

384 :名無しさん@そうだ選挙にいこう:2008/10/01(水) 21:36:28
>>364
何で逆切れの馬鹿自慢してんの?

385 :名無しさん@そうだ選挙にいこう:2008/10/02(木) 01:14:07
>>364
そのていどの追加クエリと更新クエリなら5分で作れるだろ。
オレオレ用語で言っていたことの中身は分かったが、まったく共感できない。

386 :名無しさん@そうだ選挙にいこう:2008/10/02(木) 09:06:36
5分も掛るって何なの?

387 :名無しさん@そうだ選挙にいこう:2008/10/02(木) 11:11:52
つまらない釣りですね

388 :名無しさん@そうだ選挙にいこう:2008/10/02(木) 12:43:48
>>378
そうでした。そういう風にきちんと書いても、レポートのテキストボックスとかのコントロールソースに代入できないんです。
これはプロパティー画面でしか設定できない仕様なのでしょうか?

389 :名無しさん@そうだ選挙にいこう:2008/10/02(木) 18:54:28
代入とかいう言葉を使われると、何をしたいのか確信が持てなくなってくるな
単に値が欲しいのか?
だったら「取ってきて」「入れる」だけだ
レコードソースもコントロールソースも関係ない

どうやって取ってくるかは、それがどこにあるかによって違ってくる

390 :名無しさん@そうだ選挙にいこう:2008/10/02(木) 21:53:47
>>388
どんな風に上手くいかないの?
「OnOpen/開く時」イベントでならVBAで設定できるはずだけど。

設定できるけど値が表示されないなら、
一度、プロパティに書いた式をそのまま設定してみて上手くいくか試してみたら?
Private Sub Report_Open(Cancel As Integer)
 Me.RecordSource = "クエリ1"
 Me.テキスト1.ControlSource = "列1"
 Me.テキスト2.ControlSource = "='文字列1'"
 Me.テキスト3.ControlSource = "=Date()"
End Sub

以下ヘルプ。参考にどうぞ。
http://office.microsoft.com/ja-jp/access/HA012327251041.aspx
http://office.microsoft.com/ja-jp/access/HA012327891041.aspx

391 :名無しさん@そうだ選挙にいこう:2008/10/05(日) 23:54:50
>>370
昔自分も桐をつかっていたけど、ずいぶんと態度悪いな
桐とAccessは別ソフトなんだから、同じ処理が全く同じようにできないのは
あたりまえじゃないの?

やり方を教えてもらう立場なのに、合格だなんだと偉そうだし、 >>371 が親切に
回答してくれているのに、感謝すらない
こういう人がいるから、桐使いの人の評価が下げてしまっているのにねぇ

Accessを使えない桐使いが単に自分のスキルのなさをアピールしているだけじゃん

>スタンドアローンで使うデータベースなのに併合処理が出来ないアクセスって何なの?
>全然ダメじゃん。

桐はこういった人でもデータ処理が簡単にできるので確かに優秀なソフトだと今でも思います
(自分も昔そうでした)
だからといって、Accessがダメな訳ではないでしょ
一番ダメなのは、こんな卑下した言い方しかできないこの人ですから

要は自分の抱えている問題を解決できればいいんだから、桐でもAccessでも
どっちでもいいじゃない
桐使いの格を下げるのはやめてもらいたいです
>>370 の人は、もう少し考え方を改めたほうがいいよ

392 :名無しさん@そうだ選挙にいこう:2008/10/06(月) 09:29:05
彼は顔真っ赤っかにしてあれを書き込んだのでそっとしておいてあげましょう。
かわいそうな人です。

393 :名無しさん@そうだ選挙にいこう:2008/10/06(月) 09:32:43
自問自答ばかりだな

394 :名無しさん@そうだ選挙にいこう:2008/10/06(月) 12:35:17
それっ桐にしときなさい。

395 :名無しさん@そうだ選挙にいこう:2008/10/06(月) 17:47:34
こんにちは
【 システム環境  . 】 WindowsMe, Access97
古いVerで申し訳ありません

フォームから入力した日付で、期間集計をしようと思い
DoCmd.RunSQL "SELECT Sum(T_見積予算管理データ.総合計) AS 総合計の合計, T_見積予算管理データ.決定, T_見積予算管理データ.キャンセル " & _
"FROM T_見積予算管理データ " & _
"WHERE ((T_見積予算管理データ.引越日) Between #" & 日付検索1.Value & "# And #" & 日付検索2.Value & "#) " & _
"GROUP BY T_見積予算管理データ.決定, T_見積予算管理データ.キャンセル " & _
"HAVING ((T_見積予算管理データ.決定)=1) AND ((T_見積予算管理データ.キャンセル)=0);"

以上の内容を記述したのですが
実行時エラー "2342"
RunSQL/SQL アクションを実行するには、SQLステートメントからなる引数を指定
する必要があります

というエラーが出力されうまく動作しません
うまく動作しないのは何故でしょうか?

396 :名無しさん@そうだ選挙にいこう:2008/10/06(月) 20:43:28
> フォームから入力した日付で、期間集計をしようと思い
といっていますが、フォーム上のコントロールの指定が誤っているようです。

「日付検索1.Value」  の部分を
「FORMS!フォーム名!日付検索1.Value」 ←※フォーム名は実際のフォーム名で
に改めて、もう一度実行してみてください。
(日付検索2.Value も同様にね)


397 :名無しさん@そうだ選挙にいこう:2008/10/06(月) 20:46:17
>>395
RunSQLで選択クエリを実行することはできないから。

398 :名無しさん@そうだ選挙にいこう:2008/10/06(月) 22:21:25
いや、確か実行不可なのはdbオブジェクトの.Executeメソッドで
DoCmd.RunSQLはエラーにならずにデータが表示されると思った

399 :名無しさん@そうだ選挙にいこう:2008/10/06(月) 22:52:50
「DoCmd.RunSQL SQL文」はやめて、
まずは上記の修正したSQL文をクエリで保存して、(フォームを開いた状態で)
実行してみてください。
開ければとりあえず記述に間違いはないはずです。


でも、そもそもSELECT文で作成した後に結果セットで何をしたいんでしょうかねぇ。

400 :名無しさん@そうだ選挙にいこう:2008/10/06(月) 23:05:06
なんでアクセスって、複数行への貼付とかできないの?
エクセルでは普通にできることができなくて、両方使ってるから
結局あんまり効率が上がらないんだが。

401 :名無しさん@そうだ選挙にいこう:2008/10/06(月) 23:29:45
>>400

>複数行への貼付

普通にできない?
それとも同行数じゃなくて、例えば

元:1行 → 貼り付け:複数行

て、ことなのかな。
そういう作業が必要な場合は、面倒だとExcel併用したりしてるわ。


402 :名無しさん@そうだ選挙にいこう:2008/10/06(月) 23:57:12
>>401
そうそう。言葉が足りなかったですね。
アクセスは表計算ソフトじゃないんで〜、っていうのとは別問題で
普通に操作上の不満なんですよね。

同じような操作で、複数行(セル?とは言わない?)を選択して
deleteしてもいっぺんに削除してくれないし。
こういう普遍的で直感的な操作を
あえて出来ない仕様にする意味ってあるのかな?

403 :名無しさん@そうだ選挙にいこう:2008/10/07(火) 00:14:37
どうなんだろうね。
基本的に直ではテーブル触らないし。
Excelみたいに間違って削除したとしても
保存しなければ元通りってわけには行かないからじゃないかな。
といいつつ、とりあえず削除してみて保存しなければいいやと思いつつ
保存してしまって泣きを見たことが幾度とあるが。

404 :名無しさん@そうだ選挙にいこう:2008/10/07(火) 00:17:40
アクセスは表計算ソフトじゃないんで

405 :名無しさん@そうだ選挙にいこう:2008/10/07(火) 00:29:07
いや、言い訳になってへんで(笑

406 :名無しさん@そうだ選挙にいこう:2008/10/07(火) 00:32:52
>>398
ふーん、すごい記憶力だね

407 :名無しさん@そうだ選挙にいこう:2008/10/07(火) 00:54:41
Q. 表計算ソフトと同じことがなんでできないの?
A. 表計算ソフトじゃないんで

どこか変か?

408 :名無しさん@そうだ選挙にいこう:2008/10/07(火) 02:32:54
>>402=400
複数行の削除は、レコードセレクタを使って複数行を指定→Deleteで普通にできますよ。

コピー元:1行から複数行に貼り付けというのは、(本来)テーブルには主キーがあるべきだという
テーブルの理念に反しますから操作できないんじゃないでしょうか?
その意味で>>407さんは正論ですねw

409 :名無しさん@そうだ選挙にいこう:2008/10/07(火) 08:01:19
>>407
表計算ソフト独自の、とか表計算ソフトならではの、っていう操作ならわかるけどね。
そうじゃないじゃんw

一つずつに貼付けるのはできて、複数行にはできない、
これはなぜでしょう。
仮にできるようにしたら何か不都合があるでしょうか?
もしかしてアクセスって、それ単体で完結できるように作られてない?
最初からエクセルの助けありきなんですか?

410 :名無しさん@そうだ選挙にいこう:2008/10/07(火) 09:23:54
試しに数値型(主キー)・テキスト型・日付型のフィールドを持つテーブルを2つ作って
それぞれ主キーを1〜5、6〜10にしてその他は適当な値でデータを登録してみた。

最初のテーブルの2〜4を選択してctrl+C → 次のテーブルの7〜9を選択してctrl+V

この操作で7〜9の行が2〜4の行の内容に置き換わったけど・・・
>>409は何が不満なんだ?

411 :名無しさん@そうだ選挙にいこう:2008/10/07(火) 09:36:31
>>400 >>402
桐にしとけ
お望みの直観的な操作だ


412 :名無しさん@そうだ選挙にいこう:2008/10/08(水) 05:51:53
>>410
ウンコに触るとウンコつくよ。

413 :名無しさん@そうだ選挙にいこう:2008/10/08(水) 11:27:51
>>396 >>397 >>398
レスありがとうございました

無理やりですが、ワークテーブルを生成し、その後Dlookup で総合計データを
フォームに代入しました

DoCmd.RunSQL "SELECT Sum(T_見積予算管理データ.総合計) AS 総合計の合計, T_見積予算管理データ.決定, T_見積予算管理データ.キャンセル " & _
"INTO w_総合計 " & _
"FROM T_見積予算管理データ " & _
"WHERE (((T_見積予算管理データ.引越日) Between #" & 日付検索1.Value & "# And #" & 日付検索2.Value & "#)) " & _
"GROUP BY T_見積予算管理データ.決定, T_見積予算管理データ.キャンセル " & _
"HAVING (((T_見積予算管理データ.決定)=1) AND ((T_見積予算管理データ.キャンセル)=0));"

Me.合計.Value = DLookup("総合計の合計", "w_総合計")

この方法で、見積りデータの決定部分のみの期間集計ができました
失礼します

414 :名無しさん@そうだ選挙にいこう:2008/10/08(水) 11:39:44
もしわけないのですが、もう1点
決定とキャンセル部分をグループ化するより、WHERE句にまとめたほうが
速度的に早くなるでしょうか?

415 :名無しさん@そうだ選挙にいこう:2008/10/08(水) 12:15:57
Access2007がXML使わないとアプリ開発出来ない件
まんどくせ

416 :名無しさん@そうだ選挙にいこう:2008/10/08(水) 13:00:04
2007でページがなくなったからWebアプリの開発は別の方法になるだろうけど
Webアプリだけを指してアプリ開発って表現はどうかと・・・

417 :名無しさん@そうだ選挙にいこう:2008/10/08(水) 13:03:40
いや、XML使わないと、アプリのメニューつーか、カスタムリボン作れない

418 :名無しさん@そうだ選挙にいこう:2008/10/08(水) 17:34:14
2007コンボボックスのダーティー時イベントで埋め込みマクロが作れないのは仕様ですか、バグですか?
一度閉じて開くと埋め込みマクロが消えてなくなります(>_<)

419 :名無しさん@そうだ選挙にいこう:2008/10/08(水) 19:08:37
絞ってからクエリ通すのと、丸ごとクエリ通すの、どっちが速いか
みたいなことは俺も前に考えたことがある
絞ってから通したほうが早そうな気もするけど、けっきょく実感としては
違わなかった
最近見たT's何とかってサイトでもそんな実験結果が出てたな
理由は不明

420 :名無しさん@そうだ選挙にいこう:2008/10/08(水) 21:21:16
基本的に、WHERE文で絞れるものはWHERE文で、HAVING文でしか絞れないものは
HAVING文でやった方が、どういう単位での絞り込みかが後で見たときに分かり
やすいし、その都度書き方を混合させているよりは一貫性があって保守しやす
いです。

それに、WHERE文であれば絞込みたい項目にインデックスがあれば、スピード
アップもされる場面もあると思います。
(但し今回は「決定・キャンセルとも01」ぐらいの値の範囲なので、
 仮にインデックスをつけていても効果はほとんどないでしょうけどね)

421 :名無しさん@そうだ選挙にいこう:2008/10/08(水) 21:25:46
第一、WHERE文で絞ってからグループ化したほうが単純に全体の対象件数が
ぐっと減らせるイメージは容易に想像つくでしょ。
(元々の全体件数が大した件数でなければあまり違いはないかもしれないけどね)

422 :名無しさん@そうだ選挙にいこう:2008/10/08(水) 21:56:04
Access95時代はHAVINGの方が圧倒的に速かった。
今はオプティマイザ的な機能が進化してるかどうか知らないが
どちらもほとんど違いが感じられない・・・

423 :名無しさん@そうだ選挙にいこう:2008/10/09(木) 00:15:31
>>422
マシンパワーも桁違いだから見えにくくなっているだけでは

424 :名無しさん@そうだ選挙にいこう:2008/10/09(木) 11:34:31
2003なんですけど、英語版のせいかフリガナウィザードが起動しません
テーブルのデザイン時なのですが、Furigana Controlの入力欄右をクリックすると
通常[・・・]みたいなボタンが出る筈なのですがそれが出ません
どなたか対処法ご存知でしょうか?

425 :414:2008/10/09(木) 19:14:31
>>419
>>420
>>421
>>422
>>423
どっちが速いかってきいてんだよ
全然答え出てねぇじゃねーかよ

ったくAccess使いってやつは

426 :名無しさん@そうだ選挙にいこう:2008/10/09(木) 20:47:24
>>425
そんなのケースバイケースなんだから、一概に言い切れる訳ないじゃん
そんなことも分からないのかこいつは?

そもそも、そういうあんたは何使い?


427 :名無しさん@そうだ選挙にいこう:2008/10/09(木) 20:49:01
アクセス2000にエクセルで作成したデータを
インポートして、バーコードデータを作ろうとしましたが、
インポートしたデータは反映してきませんでした。
(新たにアクセスの画面で入力すれば大丈夫でした。)
何かいい方法はありませんか。

428 :名無しさん@そうだ選挙にいこう:2008/10/09(木) 21:28:17
(前略)エクセル(中略)インポート(中略)反映(後略)

これ定期的にくるな・・・

429 :名無しさん@そうだ選挙にいこう:2008/10/10(金) 11:08:55
初心者ですすみません
計算式なんですけど
粗利:([商品単価]-[商品仕入値]*[数量])
ってテキストに書いてあるんですが普通の数学同様、
掛け算から計算していいんでしょうか
そうすると商品単価っておかしい気がするんですが・・・

430 :名無しさん@そうだ選挙にいこう:2008/10/10(金) 11:55:44
テキスト書いた人に聞いてみてください

431 :名無しさん@そうだ選挙にいこう:2008/10/10(金) 12:09:48
>>429
テキスト書いた人に聞いてみてください

432 :名無しさん@そうだ選挙にいこう:2008/10/10(金) 12:17:36
>>427
Excel からインポートしたデータとアクセスから取り込んだデータを比較して
違ってたら修正すればいいだけでは?

バーコードのデータなんて数値情報なんだから、簡単に修正できるとおもうけど

433 :名無しさん@そうだ選挙にいこう:2008/10/10(金) 12:33:55
情報がないからなんともいえないけど
おそらく、Access上のフォームにExcel取り込むための、コマンドボタンが
あるはずだから、デザインモードにしてコマンドボタンを右クリック後プロパティから
イベントプロシジャーを開く、
その中にExel取り込み用のワークテーブルの記述があるはず

そのテーブルとAccessのバーコードの数値がはいっている、テーブルを
比較してみればよろしい、当然そのテーブルのバーコードの数値データを
Accessのテーブルに追加する処理が必要


434 :名無しさん@そうだ選挙にいこう:2008/10/10(金) 13:37:07
【 システム環境  . 】 Windows XP, Access2002 SP2
【 VBAが使えるか .】 はい
【 VBAでの回答  】 可
【 検索キーワード 】 Access タブ 追加 動的

はじめましてよろしくおねがいいたします。

会社で前任の残したゴミ資産をリサイクルすることになり、行き詰った点が出てきてまいりましたので
皆様の知恵をお借りしたいと思います。

メインフォームの中にあるサブフォーム内にタブコントロールがあります。
メインフォームから「タブ追加」ボタンでタブを追加したいのですがいかんせんうまく出来ないです。

Private Sub cmd001_Click()
Call M_Common.Tab_Add("メインフォームのサブフォーム")
End Sub
から
Public Sub Tab_Add(ByVal strSubFormName As String)
DoCmd.OpenForm strSubFormName, acDesign, , , , acHidden
Application.Forms(strSubFormName).Controls("tabControls").Pages.Add
DoCmd.Close acForm, strSubFormName, acSaveYes
End Sub

とすると

Pages.Add をした瞬間に
2467
指定した式で閉じているかまたは存在していないオブジェクトを参照しています。

とケチつけられてしまいます。
対処法などに気付いた方がいらっしゃいましたら教えてもらえないでしょうか?

435 :名無しさん@そうだ選挙にいこう:2008/10/10(金) 14:07:21
( ´ω`)スパァン!!!
>>430-431⊂彡☆))Д´)

436 :名無しさん@そうだ選挙にいこう:2008/10/10(金) 14:07:35
前任の資産はゴミかもしれないが後任の設計思想もかなりのゴミだな・・・

437 :名無しさん@そうだ選挙にいこう:2008/10/10(金) 14:11:51
>>436

すいません。作り直したかったのですが時間がなく、ゴミ設計のまま突き進むことになりました。
実際のコードを見せることが出来ないので大分ハショりましたが指定方式はおなじです。

なぜこれを使うのかはわからないのですが「残したい」らしく・・・

438 :名無しさん@そうだ選挙にいこう:2008/10/10(金) 22:16:49
>>434
ttp://msdn.microsoft.com/ja-jp/library/cc378891.aspx
よく嫁

439 :名無しさん@そうだ選挙にいこう:2008/10/13(月) 00:31:23
ほとんど赤字で時々黒字になる決算があるとします。
この数字をフィールドに入力するときにマイナス記号を入力するのが面倒です。
そこで、「123」と入力したときに自動的に「-123」となり、
「+123」と入力したときに「123」となるようにしたいのですが、
定型入力で可能でしょうか?

440 :名無しさん@そうだ選挙にいこう:2008/10/13(月) 07:49:30
それが自分の勤め先の案件ならとっとと辞めるべき

441 :名無しさん@そうだ選挙にいこう:2008/10/13(月) 08:00:55
ワロタ

442 :名無しさん@そうだ選挙にいこう:2008/10/13(月) 08:28:21
>>440が真理を突いた。

443 :名無しさん@そうだ選挙にいこう:2008/10/14(火) 11:20:37
Access14 の dev kitchen 行ってきて、パンケーキの焼き方習ってきますた。

444 :名無しさん@そうだ選挙にいこう:2008/10/14(火) 19:14:57
>>439
とりあえず正負逆のままで一通り打ち込んでいって、最後にまとめて、
UPDATE文(WHERE句で絞込み)でマイナス単項演算子でつけてデータを
ひっくり返す更新をすればいいのでは?


445 :名無しさん@そうだ選挙にいこう:2008/10/14(火) 21:21:12
できないならできないって言えよ

446 :名無しさん@そうだ選挙にいこう:2008/10/14(火) 22:52:53
できない

447 :名無しさん@そうだ選挙にいこう:2008/10/15(水) 01:42:19
>>444
そのうち、その作業を忘れてしっちゃかめっちゃかになりそうな気がします。。。
更新前のイベントでIIFとか使えるかな?明日、やってみます。

448 :名無しさん@そうだ選挙にいこう:2008/10/15(水) 10:03:38
ゆくゆくはVBA切り捨てられるから全部マクロで書かないとな

449 :名無しさん@そうだ選挙にいこう:2008/10/15(水) 13:01:00
うっそ〜ん、マクロは無くなるのは分かるけど、
VBAは無くなると困るよー

450 :名無しさん@そうだ選挙にいこう:2008/10/15(水) 13:19:59
Access14まではVBA大丈夫
その後はVisualStudioでVB書いてください

451 :名無しさん@そうだ選挙にいこう:2008/10/15(水) 18:55:23
本当かい…
Accessの案件ってまだまだあるからVBAがAccess上からすぐに使えないと不便だな〜

452 :名無しさん@そうだ選挙にいこう:2008/10/16(木) 09:26:20
まじで?VBA無くなるの?

453 :名無しさん@そうだ選挙にいこう:2008/10/16(木) 10:26:50
そう簡単に亡くなるもんかね
COBOLでさえ絶滅には至ってないのに・・・

454 :名無しさん@そうだ選挙にいこう:2008/10/16(木) 10:31:39
確かに、おまいがCOBOL使ってる限り絶滅ではないが

455 :名無しさん@そうだ選挙にいこう:2008/10/16(木) 11:01:56
>>300
桐は表示モードと編集モードがあります。
表示モードは、データをみることは可能だが編集はできない。
編集モードは、データの編集が可能となります。
慣れると、その項目にカーソルが行っただけで
データが変わってしまうのを防ぐことができるので便利です。


456 :名無しさん@そうだ選挙にいこう:2008/10/16(木) 11:20:02
COBOLは俺が好んで使ってるわけじゃなくて
むしろとっとと絶滅してほしいとさえ思ってるんだけど・・・

457 :名無しさん@そうだ選挙にいこう:2008/10/16(木) 19:16:30
みんなもっと桐をつかえ!

458 :名無しさん@そうだ選挙にいこう:2008/10/16(木) 19:19:24
V10出るなら桐使うよ、先が見えなくて不安です。
開発中のアナウンスでもあれば良いんだけどさぁ。

459 :名無しさん@そうだ選挙にいこう:2008/10/16(木) 22:48:35
Access14 の dev kitchen からアンケート依頼です
http://deploy.ztelligence.com/start/survey/survey_taking.jsp?PIN=13ANQHPQH8VAB&Page=Blog

460 :名無しさん@そうだ選挙にいこう:2008/10/17(金) 00:00:33
>>458
そうなんだよな
そこが一番気になるところだし、利用を躊躇してしまうところなんだよな
管理工学もその辺の姿勢をハッキリしてもらいたいよな
(かといって将来に否定的なことをズバリいうはずもないだろうけどね
 ほんとに微妙...)

461 :名無しさん@そうだ選挙にいこう:2008/10/17(金) 21:34:33
桐で作ったら一瞬だったのに、tblのみでそのまま出来たのに。
アクセスで在庫管理作るのにクエリ・イベント屈指して脳味噌がウニになっても完成しない。
リクエリのコマンドボタン押すたびに在庫データがどんどん変わっていくorz
アクセスのバカヤローーーーーーーーーーーーー!!!!!!!!!!!!!!!!!!!!


462 :名無しさん@そうだ選挙にいこう:2008/10/17(金) 23:02:36
向き不向きがある

463 :名無しさん@そうだ選挙にいこう:2008/10/18(土) 07:08:39
>>461
俺はもうなれちゃったから、どんなテーブル、クエリでも作ることができる
から、頭にイメージしたものを形にできるけれどな。

ただ、Accessはそういった意味では、非常にプログラマブルなツールだか
ら、イメージしたものを直感的に作るのは難儀するかもしれんね。とくに、
UIを作り込むとなるともはや、プログラミングだしさ。

プログラミングが好きな奴は、Accessのほうが使いやすいでしょ。

464 :名無しさん@そうだ選挙にいこう:2008/10/18(土) 09:46:41
>>463
教えてください。
アクセスでは直前のレコードの値は普通はどうやって取得するの?
並べ替え済みレコードの特定項目の直前レコードの値とか。

465 :名無しさん@そうだ選挙にいこう:2008/10/18(土) 10:12:56
ACCESS 2007すげぇ・・・感動した。

466 :名無しさん@そうだ選挙にいこう:2008/10/18(土) 11:33:15
>>464
アクセス(というかデータベース)には「直前」とか「直後」とかいう概念がない。
自分の発想で脊髄反射的にプログラミングしたいならアクセス(というかデータベース)を使うのは諦めて
エクセルや桐でシコシコやるほうが君にとっては幸せだと思う

467 :名無しさん@そうだ選挙にいこう:2008/10/18(土) 11:43:00
>>466
教えてください。
アクセスではPreviousレコードの値は普通はどうやって取得するの?
並べ替え済みレコードの特定項目のPreviousレコードの値とか。

468 :名無しさん@そうだ選挙にいこう:2008/10/18(土) 12:05:41
>>467
ctrl+7で直前の値が入力できるよ。おれは手でシコシコやっている。

469 :名無しさん@そうだ選挙にいこう:2008/10/18(土) 12:26:14
【 システム環境  . 】 Windows XP, Access2003
【 VBAが使えるか .】 一応
【 VBAでの回答  】 可(頑張って理解します)
【 検索キーワード 】 Access ネットワーク VPN 共有 遅い…etc

質問です。Accessに関しては最近勉強を始めたばかりです
過去にAccessで組んでいた台帳用のMDB(本社内のみで使用・作者は退社)があるのですが、
今度、社内ネットワークがVPN(FTTH)で整備される事になりDBを拠点間公開できるようにして欲しいと依頼が来ました
件数は多い物でフィールドが10〜12、登録数が6000程で6万〜8万コード程になります。同時使用者は5名前後になります

で、ネットワークを介してAccessDBを共有すると非常に重いという話を耳にし、
ある拠点のLANHDDに3万件程のデータのMDBをコピーし、本社から開いてみるとかなり重く感じました(ADSL同士のVPN接続)
このままではストレスがかかって使用するのに問題があると思うほどでした。

そこで質問です。対策としてはどのような方法があるでしょうか?
SQLServer(MSDE)を立てて行えば、ストレスを感じさせないレベルまで行けるならば
申請してPC1台ぐらい買って貰うのもありだと思っていますが、
SQLに不安なのは設備投資がかかる以上、AccessもままならないのにSQLに対してズブの素人でも構成出来るかという点です
上司は回線整備されれば光だから問題ないと楽観視していますが…
パソコンに関しては私よりも素人なので簡単に信じれなくて困っています

努力と根性で負荷軽減出来る部分があればご教授お願いします
現時点での対策としては、台帳(全拠点の情報が入っている)を拠点間別にMDBにしてしまい、
必要な情報だけをリンクテーブルでくっつけてやっています

470 :名無しさん@そうだ選挙にいこう:2008/10/18(土) 12:29:56
>>469
素人の俺が答える。
外注しろ。そのくらいの金あるんだろう?
零細なら・・・・・ま、頑張れ。

471 :名無しさん@そうだ選挙にいこう:2008/10/18(土) 12:36:55
PC1台の10万ぐらいに金をケチってんのに外注したら軽く50万は飛ぶと思うぞ。
本末転倒だろw

472 :名無しさん@そうだ選挙にいこう:2008/10/18(土) 12:44:59
SQLServerのExpress版インスコして努力と根性でズブの素人から脱却しろ
まずはそこからだ

473 :名無しさん@そうだ選挙にいこう:2008/10/18(土) 12:55:36
>>468
有難うございます。
値の入力だけじゃなく取得がしたいです。

桐で在庫管理してました。
[年月日],[ID]で並べ替えて、[商品名]でグループ化して、
[在庫数]=#直前値(0,[在庫数])+[入庫数]-[出庫数]+[補正数]
で一瞬でできました。
アクセスで同じことがしたいです。

474 :名無しさん@そうだ選挙にいこう:2008/10/18(土) 13:12:09
だから世界が自分の都合で回ってると思うなら
自分にとって都合のいい桐だけ使ってろと

475 :名無しさん@そうだ選挙にいこう:2008/10/18(土) 13:34:06
アクセスで現在在庫求める方法を教えてください。

476 :名無しさん@そうだ選挙にいこう:2008/10/18(土) 13:52:01
商品マスタ left join 入庫履歴テーブル
商品マスタ left join 出庫履歴テーブル

[棚卸時点の在庫数]+[棚卸以降の入庫数]-[棚卸以降の出庫数]

477 :名無しさん@そうだ選挙にいこう:2008/10/18(土) 13:54:23
>>476
どうも有難うございます。
left join 調べて勉強してみます。

478 :名無しさん@そうだ選挙にいこう:2008/10/18(土) 14:02:15
素人にSQL文直書きは無理
まずクエリつくれ
履歴テーブルをグループ化して集計して、マスタと商品CODEで結ぶ(マウス操作でOK)
left joinについて考えるのはそれから


479 :名無しさん@そうだ選挙にいこう:2008/10/18(土) 14:28:01
>>469
俺の場合、給与計算システムがあまりにも糞すぎて、しかも大昔の代物なので
融通が利かず、これらから給与確定後のデータを素に、だいたい最大で10万
レコード程度になる。

で、これをどうしているかといったら、MySQLのサーバを建てて、リンクテーブル。
場合によっては、ストアドを使うこともあったり、パススルークエリを使ったりもする
が、概ね通常の利用ではいたって問題がでていない。利用者も同時に12名ほど。

サーバ用マシンは、情報システムの中にあるサーバにブレードサーバを1台入れ
てもらうか、それともワークステーションを1台買うかで悩んだあげく、ワークステ
ーション購入になっちまった。

ワークステーションは4GBメモリとCore2Quadのマシンで、OSはUbuntu Linuxを
使用している。以上のことを踏まえて、バックグラウンドはMySQL Server、クライアント
はAccess2007/2000共用としている。よって、Access2000で動くようにプログラムを
考慮して作っているというわけさ。

支所間のデータ参照制限は、ユーザ管理をMySQLがやってくれるのでそちらで個別
にアクセス制限掛けている。

480 :名無しさん@そうだ選挙にいこう:2008/10/18(土) 14:56:38
>>469
こんな感じ
http://virtual.haru.gs/blogup/src/ge0311.odg

で、当たり前なんだけれど、バックアップを毎日取ること。なので、マシンには
DATドライブを付けてある。さらに、HDDはRAID-0となっているよ。

大量のデータをたとえば、クロス集計クエリで集計し、さらにグラフ化やそれを
もとにレポート作成となるとかなり時間が掛かる(10年分のデータを処理すると
なるとね)。そうなると、もう一工夫必要だが。

481 :名無しさん@そうだ選挙にいこう:2008/10/18(土) 18:10:08
ありがとうございました。SQLServerを使う事を前提で色々作業を進めて見たいと思います

482 :名無しさん@そうだ選挙にいこう:2008/10/18(土) 18:20:09
>>481=469
あくまでも経験則なのですが…
[SELECT * FROM Table WHERE Field = hoge] という処理を行う際に

MDBファイルを共有した場合、WHERE以下の処理はローカルで行われるようです。
・リモートから全レコード分のインデックスを取得して…
・取得したインデックスを使用してローカル側でWHERE句以下を処理。
・ローカルからリモートに該当レコードを要求し…
・リモートから該当レコードを取得。
仮にFieldが4バイトとしても1万レコードあれば最低でも40KB(?)のトラフィックが
処理ごとに発生することになります。

これに対してSQLServerの場合、WHERE以下の処理もリモートで行いますから、
・リモートがSQL句全体を処理して…
・該当レコードのみローカルに返す。
Accessのようにインデックスのやりとりによるトラフィックが発生しません。


インデックスはSELECT文に限らずすべての処理で使用されますから、
Accessのインデックスがネットワーク上を流れる仕様はレコード数が多いほど
不利に働きます。拠点間ネットワークの速度とインデックスのサイズから
おおよその処理時間は計算できると思うので、運用に耐えうるかどうか計算して
みてはどうでしょう?

でも、一番のお勧めはAccessのテーブルをSQLServerにアップサイズして
ローカルにSQLへのリンクを張ったMDBファイルを置くことかと思います。

483 :名無しさん@そうだ選挙にいこう:2008/10/18(土) 18:28:21
同じく仕入のMDBをSQL Serverで4,5人同時入力させたいけど
ネットワークが絡むと何したらいいのやらさっぱり分からないわ…。
ファイルサーバに放置したままネットで検索しまくって一週間が経つ。
やっぱコード書かなきゃダメなんですかね?

484 :名無しさん@そうだ選挙にいこう:2008/10/18(土) 18:54:56
>>483
ネットワークよりも同時入力の方が問題としては複雑ですね。
詳細は、[排他制御]でぐぐって頂くのがよろしいかと。
コードは必須と考えた方が良いと思います。

485 :名無しさん@そうだ選挙にいこう:2008/10/18(土) 19:20:46
>>483
ありがとう。
もうちょい頑張って調べてみます。

486 :名無しさん@そうだ選挙にいこう:2008/10/18(土) 19:24:48
>>482
MySQLだと、かなりトラフィックが発生しますね。

まぁ、見逃せる程度の量なのかそうでないのか・・・・

487 :名無しさん@そうだ選挙にいこう:2008/10/18(土) 20:00:55
フォームからDAOのRecordsetCloneを作った場合、フォームに設定していたフィルタと並べ替えは、自動的に適用されますか?

488 :名無しさん@そうだ選挙にいこう:2008/10/18(土) 21:50:40
たかだか10万レコード程度で考慮して作っているわけさ、とかなんなの
うぶんつだのパススルーだのブレードだの言いたいだけちゃうんかと

489 :名無しさん@そうだ選挙にいこう:2008/10/18(土) 23:18:00
>>488
となると、今後、あなたに任せた方がよさそうですね。期待してますよ。>>469への回答。

490 :名無しさん@そうだ選挙にいこう:2008/10/19(日) 02:54:40
>>487
http://msdn.microsoft.com/ja-jp/library/cc380160.aspx
> 作成される Recordset オブジェクトにもそのフィルタの実行結果が反映されます。

491 :名無しさん@そうだ選挙にいこう:2008/10/19(日) 08:50:08
>>490
どうも有難うございます。

492 :名無しさん@そうだ選挙にいこう:2008/10/19(日) 18:15:13
うんこぶり

493 :名無しさん@そうだ選挙にいこう:2008/10/19(日) 20:23:53
>>475
次の3つのテーブルをつくれ
商品マスタ [商品番号(主キー)][棚卸時点の在庫数](商品名やら価格やらはとりあえず無視)
出庫履歴 [適当な連番(主キー)][出庫商品番号][出庫日付][出庫数]
入庫履歴 [適当な連番(主キー)][入庫商品番号][入庫日付][入庫数]

つくったら、クエリのSQLビューにSELECT以下の文を貼り付けろ
こんな不細工で馬鹿長い文が必要なのかよ、桐では・・・なんて駄々はこねるな
何かの値を取得する、その基本原理はひとつでも、やり方は星の数ほどある
どんなやり方をとるかは、実際の運用方法から考えていくもの
たった一つのやり方を覚えれば一瞬でできるなんてことが得意げに語られるツールとは別物と思ったほうがいい

SELECT 商品番号, Nz([棚卸時点の在庫数],0)+Nz([入庫合計],0)-Nz([出庫合計],0) AS 現時点の在庫
FROM (商品マスタ
LEFT JOIN (
SELECT 入庫商品番号, Sum(入庫数) AS 入庫合計
FROM (SELECT 入庫商品番号, 入庫数 FROM 入庫履歴 WHERE 入庫日付>#9/30/2008#) AS QN0
GROUP BY 入庫商品番号) AS QN1
ON 商品マスタ.商品番号 = QN1.入庫商品番号)
LEFT JOIN (
SELECT 出庫商品番号, Sum(出庫数) AS 出庫合計
FROM (SELECT 出庫商品番号, 出庫数 FROM 出庫履歴 WHERE 出庫日付>#9/30/2008#) AS QS0
GROUP BY 出庫商品番号) AS QS1
ON 商品マスタ.商品番号 = QS1.出庫商品番号

494 :つづき:2008/10/19(日) 20:25:51
子クエリ、孫クエリまで一気書きなので分かりにくいかもしれない
以下、バラし書き

SELECT 入庫商品番号, 入庫数 FROM 入庫履歴 WHERE 入庫日付>#9/30/2008#
これをクエリ「QN0」として保存

SELECT 入庫商品番号, Sum(入庫数) AS 入庫合計 FROM QN0 GROUP BY 入庫商品番号
これをクエリ「QN1」として保存

SELECT 出庫商品番号, 出庫数 FROM 出庫履歴 WHERE 出庫日付>#9/30/2008#
これをクエリ「QS0」として保存

SELECT 出庫商品番号, Sum(出庫数) AS 出庫合計 FROM QS0 GROUP BY 出庫商品番号;
これをクエリ「QS1」として保存

で、仕上げのクエリ
SELECT 商品番号, Nz([棚卸時点の在庫数],0)+Nz([入庫合計],0)-Nz([出庫合計],0) AS 現時点の在庫
FROM (商品マスタ
LEFT JOIN QN1 ON 商品マスタ.商品番号 = QN1.入庫商品番号)
LEFT JOIN QS1 ON 商品マスタ.商品番号 = QS1.出庫商品番号

これはあくまで一例
基本原理だけをクエリだけであらわした形
実際の運用を考えればやらなきゃならないことはもっと沢山ある

495 :475:2008/10/19(日) 22:20:49
>>493
有難うございます。
お時間取っていただいて、凄いものを書いて頂いて、感謝感激です。
なんか難しそうで沢山あって、じっくり試して勉強します。
私が実務で使えるもの作れるようになるには先は長そうです。

お時間取っていただいたお詫びに、というのもなんですが、話のネタに、私が考えた方法を次レスに書きます。
たぶん欠点だらけで全然実務に使えないのだろうと思います。
素人がやるとこうなるんだという見本にでもしてくださいませ。

496 :475:2008/10/19(日) 22:23:46
私なりに簡単な方法を考えていました。
[ID],[年月日],[商品名],[出庫数],[入庫数],[補正数],[時点在庫数],[メモ]
クエリで[年月日],[ID]順にして表形式フォームを作りました。

方法1)
ヘッダにリストボックスを作って[商品名]でフィルタしました。
フッタにテキストボックス[現在在庫]作って =sum([出庫数]-[入庫数]+[補正数])としました。
AfterInsert イベントで、[時点在庫数]=[現在在庫]としました。
過去データ訂正の時には、コマンドボタンでレコードセットの先頭から累計していく形で[時点在庫数]を再計算するようにしました。

方法2) 新規レコードで桐の #直前値 を実現しました。
BeforInsert イベント時点で、Me.CurrentRecord=null になってましたので、
 docmd.gotorecord,,previous
 Temp_直前値=Me.[時点在庫数]
 docmd.gotorecord,,next
AfterInsert イベントで、[時点在庫数]=Temp_直前値+[出庫数]-[入庫数]+[補正数]
他は方法1と同様です。

497 :名無しさん@そうだ選挙にいこう:2008/10/19(日) 22:57:14
おまい、頭いいな、お手軽で (・∀・)イイ!!

498 :名無しさん@そうだ選挙にいこう:2008/10/20(月) 10:29:30
桐方式も考えようによっては便利だな w

499 :名無しさん@そうだ選挙にいこう:2008/10/20(月) 12:13:06
質問

VBA でアクセスのVER を取得する方法はありますか?

500 :名無しさん@そうだ選挙にいこう:2008/10/20(月) 12:18:54
Application.Version で取得する。

501 :名無しさん@そうだ選挙にいこう:2008/10/20(月) 12:20:18
もしくは、SysCmd(acSysCmdAccessVer)

502 :名無しさん@そうだ選挙にいこう:2008/10/20(月) 12:38:38
>500 は Access 2000ではうまくいきませんでした。

>501 では成功しました。


謝謝

503 :名無しさん@そうだ選挙にいこう:2008/10/20(月) 12:59:50
>>502
>★ OS、ACCESSのバージョンを明記してください。

504 :名無しさん@そうだ選挙にいこう:2008/10/20(月) 13:53:20
とうとうアクセスで直前値使えるようになったな。
もう桐は役割終わった。

505 :名無しさん@そうだ選挙にいこう:2008/10/20(月) 14:42:33
桐V9 2009 発表
改行コード自動変換のクロスエクセル機能だって
もともと accessよりもエクセルとの親和性高いよね

506 :名無しさん@そうだ選挙にいこう:2008/10/20(月) 17:07:41
まじ?ちょっと見てきます。

507 :名無しさん@そうだ選挙にいこう:2008/10/20(月) 20:18:50
桐終わったな
永遠にExcelのお伴です
もう2009年一杯くらいは新機能はありません

508 :名無しさん@そうだ選挙にいこう:2008/10/20(月) 20:27:47
Accessも次バージョンは2010年でしょ、同じだよ。

509 :名無しさん@そうだ選挙にいこう:2008/10/20(月) 21:00:58
最近の一般ユーザーが使うアプリケーションは圧倒的にExcel主体なんだから、
最新バージョンに必ず対応してくれているのは親切でいい事だと思う

目新しい新機能はないかもしれないけど、ユーザーを大切にしてくれている
姿勢は評価したいね


510 :名無しさん@そうだ選挙にいこう:2008/10/20(月) 21:08:35
>>507
そもそも、今の時代Excel対応をやめて唯我独尊の姿勢のみで貫くほうが、
よっぽど終わっていると思うけどね

そもそもこの人の考え方自体が今の時代を無視しているわけで、終わっている
のは言わずもがなだよな...

511 :名無しさん@そうだ選挙にいこう:2008/10/20(月) 21:21:31
終わったって・・・ 桐って始まってたの?

512 :名無しさん@そうだ選挙にいこう:2008/10/20(月) 21:31:43
E割でコソーリ値下げしてる件

513 :名無しさん@そうだ選挙にいこう:2008/10/20(月) 21:45:31
>>511
歴史が長すぎて始まりの時期がいつか分からない人多数です
E割って値下げしてるの? いくら?

514 :名無しさん@そうだ選挙にいこう:2008/10/20(月) 21:48:21
同じものを通常版より安く売るんだから実質値下げでしょ

515 :名無しさん@そうだ選挙にいこう:2008/10/20(月) 22:08:57
>>513
確か「桐9」の初版が出たときも、E割というのがあった記憶があります
その頃より安くなったのかなと思ったもので



516 :名無しさん@そうだ選挙にいこう:2008/10/20(月) 22:12:20
そういえば、マニュアルレスの「これっ桐」っていう廉価版も当時発売していたな

517 :名無しさん@そうだ選挙にいこう:2008/10/22(水) 22:30:27
>>496
> 桐の #直前値 を実現しました。

Function 直前値(F_Name as String)
Dim RS As DAO.Recordset
Set RS = Me.RecordsetClone
 RS.Move 0, Me.Bookmark
 RS.MovePrevious
  IF RS.BOF=True Then
   直前値=0
  Else
   直前値=RS.F_Name
  End IF
RS.Close
End Function

もう、桐は不要だ。


518 :名無しさん@そうだ選挙にいこう:2008/10/23(木) 09:00:47
SET RS=Nothing しない馬鹿どもにコードを書かせるなっ!
って海原雄山がいってたよ

519 :名無しさん@そうだ選挙にいこう:2008/10/23(木) 09:09:58
× RS.Move 0, Me.Bookmark
× RS.MovePrevious
○ RS.Move -1, Me.Bookmark

△ RS.Close
△ SET RS=Nothing

RS.Close も SET RS=Nothing も不要、Funtion 抜けると変数RS不適応になり自動的にメモリ解放される
無い方が早い?

520 :名無しさん@そうだ選挙にいこう:2008/10/23(木) 11:21:17
>>518
つい忘れてしまうw

521 :名無しさん@そうだ選挙にいこう:2008/10/23(木) 20:54:19
ACCESSのSQLについて質問ですが

SELECT A.店舗コード,A.店舗名,B.棚卸日,B.データ送信日
FROM (SELECT 店舗コード,店舗名 FROM 店舗マスタ
WHERE 店舗コード between 1000 and 4000) AS A
LEFT JOIN (SELECT 店舗コード,棚卸日,データ送信日
FROM 棚卸マスタ WHERE 棚卸日=#9/30/2008#) AS B
ON A.店舗コード=B.店舗コード
ORDER BY A.店舗コード;

上記のようなFROM句にサブクエリを使用した場合、一度データシートビューで
データの内容を確認した後、ウインドウを閉じようとするとFROM句構文エラー
と出ます。SQLビューでコードを確認すると( )の所が[ ]に勝手に変換されてしま
い、そのせいでエラーになるみたいなのですが、これはACCESSの仕様なのでしょうか?


522 :名無しさん@そうだ選挙にいこう:2008/10/23(木) 21:25:26
フィールドにインデックスを設定する意義が、いまいちよくわかりません。
主キーや、外部キーとして使うフィールドにインデックスを設定しておけばいいと
聞きますが、該当するフィールドを全てそうしておけばいいのでしょうか。
何が変化したのか、よくわからないんですが、何がどう変わるのか、
分かりやすく教えていただけないでしょうか。



523 :名無しさん@そうだ選挙にいこう:2008/10/23(木) 22:07:05
>>521
Access2007では現象を確認できませんでした。
が…旧Accessでフィールド名に漢字を使った場合にまれに症状が出た記憶があります。
どうも一部の漢字の組み合わせにおいて内部処理する際に予約語と誤って判断するみたいです。
そんな訳でフィールド名を[ ]で括って試してみて下さい。直るといいのですが。

>>522
カラオケにある歌本。
歌いたい曲番号を調べる際に、曲名から調べたい時は曲名がアイウエオ順に
なっていたら便利ですし、歌手から調べる時は歌手名がアイウエオ順だと便利です。
もし必要なインデックスが無い場合は歌本を先頭から1曲ずつ調べることになります。
しかし不要なインデックスは歌本が厚くなるだけで便利になることはありません。
便利=処理が早くなるということです。…という例えでご理解いただけますか?

524 :名無しさん@そうだ選挙にいこう:2008/10/23(木) 23:00:38
>>522
まとめると、傾向としては「レコード追加や削除ではインデックスを付けない方が速く、レコード選択ではフィールド数によってインデックスを付けた方がよい場合と付けない方がよい場合があり、
フィールド数が多い場合にはインデックスを付けた方がよい。」ということになります。明らかにレコード追加がメインとなるテーブル、例えばテキストファイルをいったんワークテーブルに取り込んで、
それに何らかの更新を加えてからメインとなるテーブルに追加するような場合、ワークテーブルにはインデックスは付けない方がよいでしょう。
しかしそれ以外のテーブルでは、追加や削除がメインとなるのかレコードの抽出・読み込みがメインとなるのか、あるいはどちらの処理がスピードを要求されるのかによって判断することになるでしょうが、
その境界線を画一的な数字で決めることは無理なようです。

T'sなんとかに書いてあった。

525 :522:2008/10/23(木) 23:02:16
>523
ご回答、ありがとうございます。イメージはとてもよくわかりました。
そしたら、例えば次のようなフィールドを持つ「会員名簿」テーブルがあったとして、

ID(主キー), 名前, 年齢

次のような選択クエリを実行する場合、

SELECT * FROM 会員名簿 WHERE [年齢]<30

調べるのは[年齢]フィールドなので、そこにインデックスを設定しておけば
処理が速くなり、逆にIDや名前にインデックスを設定してもこの場合は
意味がないから不要、という考え方でいいんでしょうか。

だとすれば、「インデックスは主キーや外部キーに設定するもの」というより、
「検索条件に用いられるフィールドに設定するもの」と理解しておけばいいんでしょうか。


526 :名無しさん@そうだ選挙にいこう:2008/10/23(木) 23:08:29
「会員名簿」くらいなら、選択もインデックス無い方が早い
高々10フィールドくらいだろ

527 :522:2008/10/23(木) 23:47:42
>>524 >>526
ありがとうございます。
レコードの追加・削除がメインとなるテーブルのフィールドについては、インデックスを設定すると、
インデックスの更新も頻繁にしなくてはならず、時間がかかるから、インデックスは付けないほうがいい、
という理解でいいでしょうか。

でもその次の、「レコード選択では(中略)フィールド数が多い場合はインデックスをつけたほうが良い」
というところが分かりません。525に書いた、

SELECT * FROM 会員名簿 WHERE [年齢]<30

のSQLでは、抽出のための評価対象が[年齢]フィールドになっていますが、これはつまり、
各レコードの[年齢]フィールドを評価していき、条件に合致するレコードのみを抽出する、
という処理をするんですよね。この処理においては、[年齢]以外のフィールドの数が多くても少なくても
関係は無いように感じるのですが、その点はどう理解すればいいのでしょうか。

528 :名無しさん@そうだ選挙にいこう:2008/10/23(木) 23:53:48
>>525=522
その解釈で概ね宜しいかと思います。

また>>524さんが提起されている通り、インデックスがあるとINSERTやDELETEの際には
余分なオーバーヘッドが生じますが(歌本に新曲を追加する場合を考えてみて下さい)
一般的には追加時よりも参照時に速度が必要な場合が多いので、そういった場合には
インデックスは有用であることが多いです。

また主キーはレコードを一意に特定できるフィールドで、最も頻繁に使用されるはず
なので重複のないインデックスを作成しておきます。
(逆に言えば、主キーが頻繁に使われないようなテーブルは設計が悪いという事ですね)
と、ここまで書いておいて何ですが…
実はインデックスの持たせ方に原則はあっても絶対的な法則はありません。
歌本の例で曲が全部で10曲しかない場合、インデックスに頼らずに先頭から探した方が
早いことも考えられます。100万曲なら間違いなくインデックスは有用でしょう。
そんな訳でシステム全体を見渡した上で腕の見せ所といったところでしょうか?

>>527=522
フィールド数で判断するのではなく、レコード数で判断するのが正しいです。

529 :名無しさん@そうだ選挙にいこう:2008/10/24(金) 08:58:46
DBにレコードを追加することとDBを参照すること
どちらが手段でどちらが目的かを考えれば答えは自ずと決まってくると思うが・・・


530 :名無しさん@そうだ選挙にいこう:2008/10/24(金) 13:30:26
本当にインデックス付けた方が速いのか?
つーか、今日びインデックスなんて要るのか?
SQL Server とか、もうインデックスなんて無いよなぁ
100フィールドとかあると、確かにインデックスあった方が速いらすい

531 :名無しさん@そうだ選挙にいこう:2008/10/24(金) 22:12:58
リレーショナルデータベースなら「主キー/インデックス」は基本でしょ
それとなぜ >>530 の人はフィールド数とインデックスの関係で早いといっているのでしょうか?
普通インデックスって対象フィールドのレコード数が多いときに有効なものでしょ

532 :名無しさん@そうだ選挙にいこう:2008/10/24(金) 22:15:24
それと、自分はAccessと桐くらいしかデータベースを知らないけど、
SQL Serverでインデックスがないってどういうことかなぁないはずはないと思うけど...


533 :名無しさん@そうだ選挙にいこう:2008/10/24(金) 22:30:27
ISAM全盛期のままの人いるね
http://www.intel.co.jp/jp/business/glossary/5787109.htm

534 :名無しさん@そうだ選挙にいこう:2008/10/24(金) 22:31:34
http://www.tsware.jp/labo/labo_05.htm

535 :名無しさん@そうだ選挙にいこう:2008/10/24(金) 22:43:28
ああ、桐とかDBproとかはISAMだからインデックス作った方が断然早いよ
確か、DBproはISAM、桐は変形ISAM

536 :名無しさん@そうだ選挙にいこう:2008/10/25(土) 00:05:30
>>534
ご紹介頂いたページを拝見しましたが、テストとしては不適切に思えます。

このテストコード内のSQL句を見ると
Set rst = dbs.OpenRecordset("SELECT * FROM " & astrTableName(itblCount) & _
" WHERE (Count mod 10=0)")
となっていますね。この" WHERE (Count mod 10=0)"が曲者です。

少し考えれば分かるのですが、テーブルは[Count mod 10]の値を持っていません。
つまり、(Count mod 10=0)の真偽を評価するには全レコードを検査するしか方法はなく
フィールドCountに設定したインデックスはまったく関係がないことになります。

WHERE句の部分で、Countの値そのものを評価するような式に書き換えてテストすると
インデックスの有無でまったく異なる結果になるはずです。

# 念のため、"WHERE Count=乱数" としてSELECT文を1000回ループさせてみたところ、
# インデックスの有無で80倍ほどの開きが出ました。(2007+XP)

537 :522:2008/10/25(土) 00:06:13
>>533
ご紹介いただいたサイトを見てみて「ISAM 形式のデータベース」はあまり使われなくなってきた、
ということは分かったのですが、その情報だけでは、「インデックス」という手法自体が使われなくなって
きているのかどうかが分かりません。現在普及しているというRDBMSにおいても、インデックスは
依然として有効なのか、それともさして効果的でなくなっているのか。

...あ、せっかく情報頂いたのに、俺すごい偉そうですね、すみません。でも勉強になったので感謝です。


>>534
とても実証的な記事が載っているサイト、ご紹介ありがとうございます。
検索条件に従って対象のフィールドのデータを一つ一つ評価していく以前に、
そのテーブルにおける対象フィールドを特定する必要があり、
その際にフィールド数の多い少ないによる速度の違いが生まれる、ということですね。

ただ、この実験では、レコード数が膨大な場合と少ない場合との比較がされておらず、
その視点に基づくインデックスの有効性が結論に含まれていません。
>523 >528のアドバイスにもありますが、インデックスの本来の使途って、たぶんそこなんですよね?

でも、>>534のサイトに載っていた実験用ソースコードがとても便利そうなので、それを改変して、
その点についての実証は自分でやってみることにします。

ご回答くださった方々、ありがとうございました。


538 :522:2008/10/25(土) 00:13:45
質問は537ので締めるつもりだったのですが、
ほぼ同時刻に書き込まれた>>536で鋭い指摘が出てきたので....

そこまでは考えていなかったのですが、たしかにその通りですね。
T'sWareの中の人にこそっと教えてあげたら、感謝されるかも…



539 :名無しさん@そうだ選挙にいこう:2008/10/25(土) 01:36:29
>>538
ISAMの様にインデックスを別ファイルに持つ形式はさすがに廃りましたが
今でもISAMの考え方は生きているのだと思います。

例えばISAMでインデックスファイルを丸ごとメモリ上にキャッシュするようにしたら
処理が速くなりそうな気がしませんか? 実際これに近いことが昨今のRDBMSでも
行われているようで、全く同じSELECT処理でも2度目以降の方が速い事もよくあります。
またこの辺りの内部ロジックこそ各社がしのぎを削っている部分でしょう。

T'sWareさんの実験でフィールド数によって速度に差が出たのは、フィールドの指定に
フィールド名を使ったのが原因ではないでしょうか?
体験上、RS.Fields("フィールド名")よりも、RS.Fields(フィールド番号)の方が速いので
これを鑑みると、フィールド名で指定した場合はこれを内部でフィールド番号に変換してから
処理しているように思えます。この変換にかかるコストがフィールド数が多いほど高くなる
んじゃないかと。確証はまったくありませんけどねw

# 色々とテストしてみるのは大いに賛成です。
# また面白い結果が出たら是非教えて下さい。

540 :名無しさん@そうだ選挙にいこう:2008/10/25(土) 06:21:53
2度目以降が速いってのはOSのディスクキャッシュが効いてるような気がする

541 :534:2008/10/25(土) 08:34:27
>>536
> # 念のため、"WHERE Count=乱数" としてSELECT文を1000回ループさせてみたところ、
> # インデックスの有無で80倍ほどの開きが出ました。(2007+XP)

おお、GJ!
そのコードここに書いてよ、直ぐに誰でも検証できて、それで結論出て議論終了


542 :名無しさん@そうだ選挙にいこう:2008/10/25(土) 11:25:39
>>494
> これはあくまで一例
> 基本原理だけをクエリだけであらわした形
> 実際の運用を考えればやらなきゃならないことはもっと沢山ある

確かに、↓みると相当に大変そう
http://www.accessclub.jp/bbs3/wforum2.cgi?mode=allread&no=132840&page=0

>>496 が如何に御手軽便利か解かる www

543 :536:2008/10/25(土) 15:34:19
>>523, >>528, >>536, >>539 と長文の連投失礼しました。

>>541
テスト用のコードを上げておきますね。
私の場合、50000レコードに対して5000回繰り返しで試しました。

Private Sub TEST()
Call CreateTable 'テスト用のテーブルを作成し
Call AddRecords 'テーブルにデータを追加しておいて
Call SelectTest 'このテーブルに対してSELECT文を複数回実行。
Call DeleteTable '後処理としてテーブルを削除します。
End Sub

544 :536:2008/10/25(土) 15:35:17
Private Sub CreateTable()
Dim DB As DAO.Database
Dim TD As DAO.TableDef
Dim FLD As DAO.Field
Dim inpF As Integer
Dim inpIX As Byte
Dim i As Integer
inpF = CInt(InputBox("フィールド数を指定してください", "入力必須"))
inpIX = CInt(InputBox("インデックス種を指定してください", "0:なし,1:重複あり,2:重複なし"))
Set DB = CurrentDb
Set TD = DB.CreateTableDef("T_test")
For i = 1 To inpF
Set FLD = TD.CreateField("F" & CStr(i), dbLong)
TD.Fields.Append FLD
Next i
DB.TableDefs.Append TD
Select Case inpIX
Case 0
Case 1
DB.Execute "CREATE INDEX idx ON T_test (F1);"
Case 2
DB.Execute "CREATE UNIQUE INDEX idx ON T_test (F1);"
End Select
DB.TableDefs.Refresh
DB.Close
Set DB = Nothing
End Sub

545 :536:2008/10/25(土) 15:36:06
Private Sub AddRecords()
Dim DB As DAO.Database
Dim inpREC As Long
Dim i As Long
inpREC = CLng(InputBox("レコード数を指定してください", "入力必須"))
Set DB = CurrentDb
For i = 1 To inpREC
DB.Execute "INSERT INTO T_test (F1) VALUES (" & CStr(i) & ");"
Next i
DB.Close
Set DB = Nothing
End Sub

546 :536:2008/10/25(土) 15:36:52
Private Sub SelectTest()
Dim DB As DAO.Database
Dim RS As DAO.Recordset
Dim RCount As Long
Dim inpTest As Long
Dim dtStart As Date
Dim dtEnd As Date

Set DB = CurrentDb
Set RS = DB.OpenRecordset("SELECT Count(*) FROM T_test")
RCount = CLng(RS.Fields(0))
RS.Close
Randomize
inpTest = CInt(InputBox("テスト回数を指定してください", "入力必須"))
dtStart = Now()
For i = 1 To inpTest
Set RS = DB.OpenRecordset( _
"SELECT * FROM T_Test WHERE F1=" & CStr(Int(Rnd * RCount + 1)))
RS.Close
Next i
dtEnd = Now()
DB.Close
Set DB = Nothing
MsgBox "処理に要した時間は" & CStr(DateDiff("s", dtStart, dtEnd)) & "秒でした", vbInformation
End Sub

547 :536:2008/10/25(土) 15:37:46
Private Sub DeleteTable()
Dim DB As DAO.Database
Set DB = CurrentDb
DB.Execute "DROP TABLE T_test"
Set DB = Nothing
End Sub

以上です。お騒がせしました。

548 :名無しさん@そうだ選挙にいこう:2008/10/25(土) 16:46:00
>>536
パチパチ

549 :名無しさん@そうだ選挙にいこう:2008/10/26(日) 14:11:34
で、結局どんな結果になるんだ?
キャッシュ効いちゃうみたいで良く解らんかったけど

550 :名無しさん@そうだ選挙にいこう:2008/10/26(日) 17:37:58
>>536
の言うとおり、インデックスフィールドを演算してしまっては、インデックスは
利用されずに、全ての比較が「全件検索」での検索となってしまいます。

「インデックスのある/なし」に関わらず、SQL文の書きかたに問題があるため、
比較自体できていませんね。

また、ディスクキャッシュは1回目と2回目以降では差がありますが
(ハードディスクのアクセス状況をみると分かるのでは?)、2回目以降〜は
連続的にテストを行っているのであれば、基本的に全てディスクキャッシュが
聞いた形になると思われるので、2回目以降で比較を行えば正確に比較ができ、
良いと思います。


551 :534:2008/10/26(日) 20:12:09
>>543
それを俺が試した結果
 フィールド数:50
 レコード数:5000
 テスト回数:5000
インデックスあり は、インデックスなし よりも 4倍速かった
重複あり でも、重複なし でも同じ結果だった

552 :名無しさん@そうだ選挙にいこう:2008/10/27(月) 00:07:15
質問です。

これまでAccess2003で開発をしていたのですが、すでにAccess2007しか
購入することが出来ない状況となっています。そこで、新しく導入するところは
Access2003で作ったファイルをAccess2007で開いて実行するという形と
なるのですが、このような状況の時に起きると予測される不具合は何が
あるでしょうか?
一度Access2007形式で開いて保存しなおして運用の方が良いのでしょうか?

553 :名無しさん@そうだ選挙にいこう:2008/10/27(月) 02:01:39
俺の場合、2000→accdbにしたらVBAのコードで結構な数のエラーが出たので
コード追加して正常動作させたり、レジストリいじらなきゃエラー消えない部分もあったりして苦労した。

554 :名無しさん@そうだ選挙にいこう:2008/10/27(月) 09:18:43
2007でSandBoxモードが強制ONになっていくつかの関数(46個?)が
クエリ中&オブジェクトのプロパティで使えなくなったから
自分もいくつか書き換えは必要だったな。

あと2007で統一できるならいいけど同一の.mdbを2003でも2007でも使いたいとなると
自分にもよくわからん。人柱報告よろ

555 :536:2008/10/27(月) 18:47:34
>>552-554
ここが参考になるかと思います。
ttp://support.microsoft.com/kb/294698/

>>551=534
私も改めてきちんとテストしてみましたのでご参考までに。
テスト回数:5000で統一。(単位:秒)

フィールド数:10
              | 1,000レコード  | 10,000レコード   | 100,000レコード
インデックス無.       |  5,  5,  5 |  32,  33,  33 | 308, 302, 302
インデックス有(重複有)  |  2,  2,  2 |   2,   2,   2 .|   2,   2,   2
インデックス有(重複無)  |  2,  2,  2 |   2,   2,   2 .|   2,   2,   2

フィールド数:100
              | 1,000レコード  | 10,000レコード   | 100,000レコード
インデックス無.       | 14,  14,  14 | 43,  43,  44 .| 341, 337, 342
インデックス有(重複有)  | 11,  10,  11 | 11,  11,  11 .|  11,  11,   11
インデックス有(重複無)  | 11,  10,  11 | 10,  11,  10 .|  11,  11,   11

※インデックスがあるとレコード数の影響が極端に小さくなりますね!

556 :名無しさん@そうだ選挙にいこう:2008/10/28(火) 15:01:58
【 システム環境  . 】 WindowsXP, Access2007
【 VBAが使えるか .】 少しだけ・・・
【 VBAでの回答  】 可
【 検索キーワード 】 リレーションシップ、ループ

リレーションシップのつなぎ方について質問します。
多対多のリレーションシップは不可なのはわかりますが、
次のようなリレーションシップはOKなのでしょうか?

1.テーブルを3個作ります。それぞれ「テーブルA」「テーブルB」「テーブルC」です。
2.上記テーブルのリレーションを、次のように行います。
   テーブルAのフィールド1(一) → (多)テーブルBのフィールド2
   テーブルBのフィールド1(一) → (多)テーブルCのフィールド2
   テーブルCのフィールド1(一) → (多)テーブルAのフィールド2

こういうリレーションを作ると、多対多と同様に、参照が無限ループになるので
駄目だと思うのですが、いかがでしょうか?

あと、クエリー内でもリレーションシップ(矢印なし)が作成できますが、
それは、普通のリレーションシップと何が違うのでしょうか?

ご教示よろしくお願い申し上げます。





557 :名無しさん@そうだ選挙にいこう:2008/10/28(火) 19:18:20
クエリ内で設定する「線での結びつけ」はテーブル同士の結合する方法を
さしています
 矢印なし:内部結合
 矢印あり:左外部結合(あるいは右外部結合)
を示しています

内部結合は、テーブル間のキー項目同士が同じ値同士(=)であれば、
両方のテーブルのレコード同士を結合します。

外部結合は、矢印の元の方のテーブルの全行が必ず抽出結果に現れ、矢印先の
テーブルはキー項目が等しい(=)レコードのみ抽出し結合します。
(矢印元に対応する相手テーブルのレコードが存在しないレコードが現れます
 が、その場合その列には「NULL(ヌル)」が設定されます)

内部結合で生成される結果は結合条件に一致した「両方のテーブルに存在する」
レコードなので、場合によっては期待した結果が抜け落ちてしまうことがあります。
そういう場合、どちらか一方のテーブルを強制的に表示させたい時などに使います。
(よくある例では、担当テーブルと売上テーブルの結合で、売上げのない担当を
含めた全担当の売上げ実績を抽出/集計したい場合などです)


詳しくは、「内部結合/外部結合」等のキーワードで検索してみてください。

558 :名無しさん@そうだ選挙にいこう:2008/10/28(火) 20:11:42
リレーションシップと結合条件と参照整合性を混同してるやつ多いよな

559 :名無しさん@そうだ選挙にいこう:2008/10/28(火) 21:14:47
もうリレーションシップでNGにしても支障ないよなw

560 :名無しさん@そうだ選挙にいこう:2008/10/28(火) 21:50:26
画面の指示の仕方が同じ感じだし、機能に説明がないから分かりづらいんだよね

でも、リレーションシップ画面のテーブル間を結ぶ線をダブルクリックした
時にでる参照整合性とかを設定する画面にも「結合の種類」ボタンがあって
この中でも、結合の仕方を外部結合とかにすることで、リレーションシップ
画面でも左/右外部結合を設定できるけど、これって単にクエリでテーブルを
2つ以上出したときに、ここで設定した結合方法が初期値として自動的に設定
されるだけの機能なんでしょうか

誰か分かる人教えてください

561 :名無しさん@そうだ選挙にいこう:2008/10/28(火) 22:45:39
>>556
はい、駄目です。やってみれば分かると思うけどデータが挿入できない。
Aの挿入にはBにレコードが必要…Bの挿入にはCが必要…Cの挿入にはAが必要…以下ループ。となる。

その構造を使いたい場合は、多対多のリレーションシップを実装する時と同様に
A,B,Cのリレーションシップのどこかに仲介用のテーブルDが必要。
まあ、Access2007 なら複数値フィールドを使えば自動的に仲介用テーブルを作ってくれるけど。

詳しくはこちら。
http://office.microsoft.com/ja-jp/access/HP051884441041.aspx
http://office.microsoft.com/ja-jp/access/HA012337221041.aspx

あと、クエリ内で設定しているのは、他の方も説明してるけど、
リレーションシップではなくて単なる結合で、クエリ結果に他のテーブルの列を含めたいときに使う。
リレーションシップでの結合の設定が既定で反映されてるだけで、変更してもリレーションシップには影響しないよ。

>>560
うん、それだけの機能みたい。
> リレーションシップそのものは影響を受けません。
http://office.microsoft.com/ja-jp/access/HP051875371041.aspx

562 :名無しさん@そうだ選挙にいこう:2008/10/28(火) 22:46:56
クエリ画面での設定と違って、リレーションシップ画面で設定するぐらいだから、
何か特別な制約の意味とかがあるような気がするけど、どうなんだろうねぇ

563 :名無しさん@そうだ選挙にいこう:2008/10/28(火) 22:51:57
あ、今書きこんだけど、直前のタイミングで >>561 の人が答えてくれていますね

564 :名無しさん@そうだ選挙にいこう:2008/10/28(火) 23:29:55
このスレは間違った事を堂々と書く奴がいるから注意な

565 :>>556:2008/10/28(火) 23:33:46
>557様、>561様

いま自宅から書き込みしています。
ご教示いただきまして、どうもありがとうございました。
丁寧にご説明いただいて、本当に感謝しております。



566 :名無しさん@そうだ選挙にいこう:2008/10/28(火) 23:47:47
【 システム環境  . 】 WindowsXP, Access2007
【 VBAが使えるか .】 少しだけ・・・
【 VBAでの回答  】 可
【 検索キーワード 】 リレーションシップ

さっそくですが、もう一つ質問させていただきます。次のようなリレーションシップはOKでしょうか?
素人なりに調べてみたのですが、以下のような2系統のリレーションの定義は、例題としてどこにも
記載されていなかったので、根本的に間違えているのかなと不安なのですが、大丈夫でしょうか?
ご教示よろしくお願い致します。

1. 4つのテーブルを作ります。テーブルA、テーブルB、テーブルC、テーブルDです。
2. 上記テーブルに以下のような2系統のリレーションを作れますか?

      テーブルAのフィールド1(一) → (多)テーブルBのフィールド2
      テーブルBのフィールド1(一) → (多)テーブルCのフィールド2

      テーブルAのフィールド1(一) → (多)テーブルDのフィールド2
      テーブルBのフィールド1(一) → (多)テーブルDのフィールド3
      テーブルCのフィールド1(一) → (多)テーブルDのフィールド4

   イメージにすると、以下のような2系統のリレーションを作れますか?

      テーブルA(一) → (多)テーブルB(一) → (多)テーブルC

 
      テーブルA(一) −−−
                     |
      テーブルB(一) −−−−−−→ (多)テーブルD
      |
      テーブルC(一) −−−

567 :名無しさん@そうだ選挙にいこう:2008/10/28(火) 23:49:02
最後の縦線がずれてしまった・・・・orz

568 :名無しさん@そうだ選挙にいこう:2008/10/29(水) 00:23:38
>>566
可能だよ。
ただ、その場合、Bにない(B,A)と、Cにない(C,B)の組合せがDに登録できちゃうけど。
それでも問題ないならOK。

569 :名無しさん@そうだ選挙にいこう:2008/10/29(水) 02:23:10
リレーションシップなんて要らん。早くトリガを!

570 :名無しさん@そうだ選挙にいこう:2008/10/29(水) 02:47:33
このスレが間違ってるならおまえが正解を書けばいいじゃない

571 :名無しさん@そうだ選挙にいこう:2008/10/29(水) 03:11:21
>>566
Dの用途が分からんから、只のお節介かもしれないけど、
普通、A<-B<-Cとリレーションを作成するなら下のどっちかじゃないかい?

多 -> 一
A {A1}
B {A1, B1} -> A {A1}
C {A1, B1, C1} -> B {A1, B1}
D {D1, A1, B1, C1} -> C {A1, B1, C1}

A {A1}
B {B1, A1} -> A {A1}
C {C1, B1} -> B {B1}
D {D1, C1, B1, A1} -> C {C1, B1}, B {B1, A1}

A, B, Cのどんな組合せでもDに入れて良いなら、それで合ってる。

572 :名無しさん@そうだ選挙にいこう:2008/10/29(水) 23:17:00
>>418
バグです。

573 :名無しさん@そうだ選挙にいこう:2008/10/29(水) 23:58:24
2007はコンボボックスのRowSourceとかフォーム/レポートのRecordSourceとか
クエリのデザインビューでシコシコ作っても保存したはずが保存されてなくて
何度ブチ切れたことか・・・

574 :名無しさん@そうだ選挙にいこう:2008/10/30(木) 11:01:19
インデックスって標準SQLに採用されてんの?
ないよね

575 :名無しさん@そうだ選挙にいこう:2008/10/30(木) 13:05:46
過去ログどこだっけ?
たしか誰かが纏めたWebページあったよね、テンプレにも載せてほしい。

576 :>>566:2008/10/30(木) 16:59:04
>568様、>571様

ご教示いただきまして、どうもありがとうございました。
また、お礼が遅くなりまして、申し訳ありませんでした。
これからも、質問させていただくことがあると思いますが、
どうぞよろしくお願い致します。

577 :名無しさん@そうだ選挙にいこう:2008/10/30(木) 21:51:17
>>553-555
レスありがとうございます。
2003と2007の同時運用は難しいようですね。。。
2007に統一するのを検討してみます。

578 :名無しさん@そうだ選挙にいこう:2008/10/31(金) 09:09:14
private subのprivateの部分をpublicに書きかえれば、call出来るらしいのですが、デメリットはありませんでしょうか?

579 :名無しさん@そうだ選挙にいこう:2008/10/31(金) 09:29:12
デメリットなけりゃあ全部publicだろ

580 :名無しさん@そうだ選挙にいこう:2008/10/31(金) 09:46:29
>>579
使いわけをしたいので、具体的に教えていただければ幸いです。

581 :名無しさん@そうだ選挙にいこう:2008/10/31(金) 09:50:55
winXP
Version2003
VBA 可(簡単なものなら)

クエリのフィールドで例えば、ダンプと入力すると別のフィールドにD、
トラックと入力するとTと表示されるものを作りたいのですがどうすればよろしいですか?


582 :名無しさん@そうだ選挙にいこう:2008/10/31(金) 11:15:35
>>580
javaのクラスと同じと思っていいし、
そんな質問が出るくらいなら全部publicで問題ないはず。

583 :名無しさん@そうだ選挙にいこう:2008/10/31(金) 12:40:02
>>578
VBAはモジュールやフォーム,レポート内で使いますが、大雑把に言うと
個々の中だけで有効なものがPrivate,すべて共通に有効なものがPublicです。
詳しくは「スコープ」でぐぐってみてください。

>>581
入力すると表示に即反映されるようにするにはVBAが必要。
入力後、改めて表示した際に表示されるようにするだけならクエリだけで可能。
いずれにしてもIIF関数が使えそうです。

584 :名無しさん@そうだ選挙にいこう:2008/10/31(金) 19:57:59
同じ処理でもpublicで書いたほうが速い感じなのが気のせいじゃないなら
誰か理屈を説明してくれ

585 :名無しさん@そうだ選挙にいこう:2008/10/31(金) 22:18:51
気のせいだ

だから説明しない

586 :名無しさん@そうだ選挙にいこう:2008/10/31(金) 22:30:02
>>585
そっか。俺もそんな気がしていた。
Accessって人の気持ちを揺さぶるソフトだよな。

587 :名無しさん@そうだ選挙にいこう:2008/11/01(土) 10:38:10
Huron イイ!!

588 :名無しさん@そうだ選挙にいこう:2008/11/01(土) 11:47:34
2007でオートフォーマット変更しても反映されないのは不具合?
フォントと背景色は変わるのにピクチャだけ(なし)のまま

589 :名無しさん@そうだ選挙にいこう:2008/11/02(日) 11:45:40
【 システム環境  . 】 WindowsXP, Office2002, ADO2.8
【 VBAが使えるか .】 可
【 VBAでの回答  】 可
【 検索キーワード 】 Format関数

ExcelとAccessの連携についての質問です。ADOもからむので、どこのスレで尋ねようか迷いましたが、まずこちらで。
ExcelVBAでADOを利用して、.mdbファイルのデータを取得します。
mdbファイルには、2つのフィールド(日付、売上)からなる「日報」テーブルが含まれています。
月ごとの集計を取得するために、ExcelVBA側でRecordSetオブジェクトを生成し、以下のようなSQLを設定してOpenしたところ、
結果的に意図するレコードセットを取得することができました。

SELECT Format(日付,"yyyy/mm") AS 月, Sum(売上) AS 月間売上
FROM 日報
GROUP BY Format(日付,"yyyy/mm");

疑問なのは、SQL文の中にFormat関数が使われていますが、これはSQLの命令ではなく、AccessVBAの関数ですよね?
Accessがインストールされていないパソコンに、mdbファイルと、上記の仕様のExcelVBAコードが含まれたExcelブックをコピーして
試してみましたが、うまく取得できてしまいます。とても便利ですが、気持ち悪いです。このあたり、内部的にどうなっているのでしょうか。
Format関数などの命令はADOライブラリの中にあるのですか? あるいはOLEDBプロバイダで提供しているとか?



590 :名無しさん@そうだ選挙にいこう:2008/11/02(日) 12:58:43
普通に考えて、VBAのライブラリが処理しているんじゃ?

591 :名無しさん@そうだ選挙にいこう:2008/11/02(日) 13:47:13
そのSQL文自体を何が処理しているのかと考えてみて

592 :589:2008/11/02(日) 14:09:59
>591
ということは、Jetエンジンですか?


593 :名無しさん@そうだ選挙にいこう:2008/11/02(日) 16:35:19
Excel/Accessで関係なく、共にFormat関数はVBA関数としてあったと思います

594 :名無しさん@そうだ選挙にいこう:2008/11/02(日) 17:54:48
>>589
正解はこちら。
ttp://office.microsoft.com/ja-jp/access/HP010322311041.aspx

595 :589:2008/11/02(日) 18:05:59
>>594
んー、なるほど。
JetエンジンがVBAライブラリを参照しているわけですね。
ということは、VisualBasic for Applicationライブラリが存在し、
かつADOが使えるExcel2000以降がインストールされているパソコンなら、
Accessの有無に関わらず589の操作は可能とみなしていいわけですね。

ありがとうございました。


596 :名無しさん@そうだ選挙にいこう:2008/11/03(月) 00:55:17
「Access、桐、ファイルメーカー」今のところ(デスクトップ)データベースといったら、
ほとんどがこの3つのどれかだと思うけど、昔はいろいろあたったよね

現在、他のデータベースで使いやすいやつとかお薦めってないんでしょうかね
だれか、教えてください

597 :名無しさん@そうだ選挙にいこう:2008/11/03(月) 02:33:47
OOoのスレによるとBASEはAccessを超えた!らしいよ

598 :名無しさん@そうだ選挙にいこう:2008/11/03(月) 08:01:24
>>596
SprintDB Pro Desktop Companion 4.0


599 :名無しさん@そうだ選挙にいこう:2008/11/03(月) 10:55:53
>>596
SQLite

600 :名無しさん@そうだ選挙にいこう:2008/11/03(月) 19:04:35
>>596
MS SQL Server Compact Edition

601 :名無しさん@そうだ選挙にいこう:2008/11/03(月) 21:08:12
>>596
桐がまだ販売してたことを知り、軽くショック

602 :名無しさん@そうだ選挙にいこう:2008/11/03(月) 21:08:59
>>597
> OOoのスレによるとBASEはAccessを超えた!らしいよ
【無料DB】OpenOffice2.0?Base【Accessイラネ】
http://pc11.2ch.net/test/read.cgi/db/1103175670/

俺には解読できない暗号が書かれてるんだろな

603 :名無しさん@そうだ選挙にいこう:2008/11/03(月) 23:27:24
バージョンアップのたびに「超えた」と言うのは、Baseスレの伝統芸能だから。
あんまり構うな。そうでなくてもBaseは大変なんだから。

604 :名無しさん@そうだ選挙にいこう:2008/11/04(火) 00:01:21
>>601
桐が今でも販売していると何がショックなんですか(ビックリの間違い?)
むしろうれしい事だと思うけど

605 :名無しさん@そうだ選挙にいこう:2008/11/04(火) 00:04:40
>>604
●定価:オープン ●税込価格: 39,900円

Access入りのOfficeの方が安い・・・



606 :名無しさん@そうだ選挙にいこう:2008/11/04(火) 18:00:21
すみません、ADOを使ったレコードの削除についての質問です。

ADO Recordset にて、複数テーブルを結合して読み込み、
( INNER JOIN を使用 )それを削除( recordset.delete )する
という操作は、通常の操作と見て良いのでしょうか?
一度テストをしてみて、意図するようにレコードが削除されてたら
それで本番運用しても良いのでしょうか。

実際にコーディングしていて、気分的にちょっと気持ち悪くなって
きて、質問をしてみました。
(一度 SELECT して、それによって得られた主キーの一覧を文字列に
格納し、DELETE FROM table WHERE string といったSQLを実行した
方がいいのかな?)

607 :名無しさん@そうだ選挙にいこう:2008/11/04(火) 22:06:35
気分的にちょっと気持ち悪くなってきたわ

608 :名無しさん@そうだ選挙にいこう:2008/11/04(火) 22:25:29
うん。気持ち悪い。
削除するの?
フラグ立てて、見えなくするとかじゃ、ダメ ?

609 :名無しさん@そうだ選挙にいこう:2008/11/04(火) 23:43:13
Recordset.Deleteで、Accessがオエッて変なのを吐くと思う。

610 :名無しさん@そうだ選挙にいこう:2008/11/05(水) 00:00:13
>>606
今一具体的でないので分からないな
もう少し詳しく、具体的な処理内容やそれに対するコードを書いてみて


611 :名無しさん@そうだ選挙にいこう:2008/11/05(水) 01:16:00
>>610
レスありがとうございます。こんな感じです。

「T社員」テーブル(今回はこのレコードを削除したい)
ID:数値型(主キー)
氏名:テキスト型
フリガナ:テキスト型
性別:数値型

「T性別」テーブル
ID:数値型(主キー)
性別:テキスト型

recordset を open する時の SQL 文
SELECT T社員.ID, T社員.氏名, T社員.フリガナ, T性別.性別
FROM T性別 INNER JOIN T社員 ON T性別.ID = T社員.性別;

削除をするVBAコード
(「氏名」が「hiro」の場合に削除する)
Do Until rs.EOF
If rs!氏名 = "hiro" Then
rs.Delete
rs.Update
End If
rs.MoveNext
Loop

612 :名無しさん@そうだ選挙にいこう:2008/11/05(水) 03:31:14
WinXPSP2、Access2002です。
フォームAを開くと、テキストボックスxとコマンドボタンyがあり、コマンドボタンyをクリックすると、テキストボックスxの値を引数にしてフォームBが開くとします。
フォームAを開いた後にボタンyをクリックしてフォームBを開くのがほぼルーチンの作業なので、自動化したいです。
ところが、open、load、resize、activate、curretnのどのイベントでもフォームBが開けません。HELPによるとテキストボックスxの値が取得できないからだと思われます。
仕方なく、Timerイベントでやっていますが、フォームが開いてデータが全部揃ったことを意味するイベントってありますでしょうか?
フォームAが開いてデータも全て参照可能な状態→フォームBを開くという手順でプロシジャーを書くことは出来ますでしょうか?

613 :名無しさん@そうだ選挙にいこう:2008/11/05(水) 07:30:34
テキストボックスのコントロールソースはどうなってるの?

614 :名無しさん@そうだ選挙にいこう:2008/11/05(水) 10:36:35
>>613
DLookupです。そういえば、このコントロール表示に時間がかかることがあります。
もしかして、Dlookupが遅いことが原因という可能性もあるのでしょうか?

615 :名無しさん@そうだ選挙にいこう:2008/11/05(水) 11:11:14
Unique Table プロパティ設定しないと、join したレコードセット削除できないんじゃまいか

616 :名無しさん@そうだ選挙にいこう:2008/11/05(水) 16:37:05
Unique Table プロパティは何処で設定するのですか?
join したレコードセットは削除出来ているのですが。

617 :名無しさん@そうだ選挙にいこう:2008/11/05(水) 17:30:45
削除出来ているなら良いよ、忘れてくれ

618 :名無しさん@そうだ選挙にいこう:2008/11/05(水) 19:24:46
XPで作成したAccess2000のデータファイルをwin2Kにファイルを移動すると動作しなくなります。
動かすようにするには何か設定がいるのですか?
win2KにもAccess2000はインスコしてあります。

619 :名無しさん@そうだ選挙にいこう:2008/11/05(水) 19:38:13
>>614
わざわざテキストボックス経由せずにコードの中で直接DLookupすればいいのでは

620 :名無しさん@そうだ選挙にいこう:2008/11/05(水) 19:57:11
joinしたレコードを削除する操作は問題ないのかな?
DELETE * FROM WHERE 〜 でexcuteした方がいいのかしらん。

621 :名無しさん@そうだ選挙にいこう:2008/11/05(水) 20:02:01
>>618
そういう問題は通常起きません。
念の為確認しますが、データファイルというものは、mdbやmdeですか?
adpファイルとかだと、別な意味で動作しなくなると思いますが。

ここで原因を追究したかったら、どんなファイルを作ったのか?
どんなエラーメッセージが出るのか?などを具体的に書いていくしか
ないだろうね。今の状況だけじゃなんともいえないので。

622 :名無しさん@そうだ選挙にいこう:2008/11/05(水) 20:20:21
>>606
INNER JOINしたものでも現行VBAだと何故か削除できますね。
ただ不思議なことに、Access自身でそういう削除クエリを作って実行しようとするとエラーが出ます。
という事で、個人的にはDELETE * FROM をお勧めします。

>>612
よくあるパターンとしては、TextBox.Value とTextBox.Textの使い分けができていない事が考えられます。
ソースをよく確認してみてはどうでしょう?(見当違いなアドバイスだったらごめん)

>>618
>>621さんのご指摘の通り、Accessが直接関係しているエラーではなさそうですね。

623 :名無しさん@そうだ選挙にいこう:2008/11/05(水) 20:30:29
DELETE (テーブル名).* FROM
な具合に、どっちのテーブルの*なのか思い知らせてやればいいんだぜ

624 :名無しさん@そうだ選挙にいこう:2008/11/05(水) 20:41:56
>>622
レスありがとうございます。

> INNER JOINしたものでも現行VBAだと何故か削除できますね。
やはり、INNER JOINしてても簡単に削除が出来る方がおかしいんですよね?

> ただ不思議なことに、Access自身でそういう削除クエリを作って実行しようとするとエラーが出ます。
これは知りませんでした。こちらでも実際にやってみると削除は出来ませんでした。

> という事で、個人的にはDELETE * FROM をお勧めします。
DELETE * FROM でやることにします。

ありがとうございました。

625 :名無しさん@そうだ選挙にいこう:2008/11/05(水) 20:45:55
一応

JOIN 操作の結果を更新する: Unique Table

JOIN 操作の結果を更新する: Unique Table
ADO では、Unique Table 動的プロパティを使用して、複数のベース テーブルに対する JOIN 操作によって形成された Recordset 内の特定のベース テーブルへの変更を詳細に制御できます。
Unique Table の使用方法の詳細については、「ADO プログラマ リファレンス」の Unique Table 動的プロパティおよび Update Resynch 動的プロパティのトピックを参照してください。


626 :名無しさん@そうだ選挙にいこう:2008/11/05(水) 22:22:46
>>621
mdbファイルです。
エラーの詳細は調べてみます。
ありがとうございました

627 :名無しさん@そうだ選挙にいこう:2008/11/05(水) 22:59:55
>>618
VBAで、参照設定しているものが、異動先のWindows2000マシンにないとか。

Windows Scripting Runtimeとか参照している場合には、WSHが入っていない
Microsoft XML Parser 6.0ならば、MSXML6.0が入っていない

ってな具合に。参照しようとしてないもんだから止まる。それは起動途中に参照
するので、本体に問題なくてもそれだけで起動しないよ。

628 :名無しさん@そうだ選挙にいこう:2008/11/06(木) 00:34:19
未だにアクセス97を使用している貧乏会社なんですが・・・

以下のようなデータがあります
具体的には顧客ごとの工程管理なんですが

顧客番号 | 作業日  | 内容
 123456 | 08/11/12 | A
 123456 | 08/11/12 | B
 123456 | 08/11/13 | C
 223456 | 08/11/13 | D
 223456 | 08/11/14 | E
 223456 | 08/11/15 | F
 323233 | 08/11/13 | G
 423233 | 08/11/16 | H

これを顧客を縦軸 日付を横軸に以下のように抽出して表示することを上司から求められています


顧客番号 | 08/11/12 | 08/11/13 | 08/11/14 | 08/11/15 | 08/11/16 |
 123456 |    A   |        |        |        |        |
 123456 |    B   |        |        |        |        |
 123456 |        |    C   |        |        |        |
 223456 |        |    D   |        |        |        |
 223456 |        |        |    E   |        |        |
 223456 |        |        |        |    F   |        |
 323456 |        |    G   |        |        |        |
 423456 |        |        |        |        |    H   |

どのようにすれば実現できるのかさっぱり私の力量ではさっぱりわかりません
どなたかやり方をご教授下さい

629 :名無しさん@そうだ選挙にいこう:2008/11/06(木) 00:47:43
どうせなら、こうしようぜ

顧客番号 | 08/11/12 | 08/11/13 | 08/11/14 | 08/11/15 | 08/11/16 |
 123456 |    A   |    C   |        |        |        |
 123456 |    B   |        |        |        |        |
 223456 |        |    D   |    E    |    F   |        |
 323456 |        |    G   |        |        |        |
 423456 |        |        |        |        |    H   |

630 :名無しさん@そうだ選挙にいこう:2008/11/06(木) 02:07:56
>>628
【クロス集計クエリ】 で調べてみて下さい。

631 :名無しさん@そうだ選挙にいこう:2008/11/06(木) 02:18:47
後だしで途中の日付が飛んでるってのはなしな

632 :629:2008/11/06(木) 06:46:01
628です 後出しで申し訳ないですが日付が飛んでいる場合があります すみません

あと クロス集計は試しては見たのですが、 集計をしたいのではなく 工程管理なので
只の縦に顧客 横に日付順に 表示を行いたいだけなのですが可能なのでしょうか?
いろいろ調べては見たんですが、どうしても単純なられるの方法がわかりませんでした。

出来ましたらもう少し具体的にお願いできればうれしいです

>629さん
それが出来れば最高です やり方ご存じですか?

633 :628:2008/11/06(木) 06:46:58
すみません 名前間違えてました
>629さんごめんなさい

634 :名無しさん@そうだ選挙にいこう:2008/11/06(木) 08:24:05
俺だったら、格納用テーブルを別に作って、VBAのrecordset使って処理するのを
考えるかな。SQL文実行だけで一発でやろうとすると、構文が長くなりすぎて把握が
しずらくなるので、結局はVBAでちょっと眺めの処理するコードを書くのと同じこと
だと割り切ってるしw

格納用テーブルのフィールド
顧客番号、day1、day2、day3、day4・・・

もとテーブルは、ORDER BY 顧客番号 ASC で読み込む。
一行ずつデータを見ていきながら、格納用テーブルに、
データを書き込んでいく。

プログラムを工夫することによって、>>628のようにも>>629のようにも出来るし。

635 :名無しさん@そうだ選挙にいこう:2008/11/06(木) 08:55:07
>>632
縦横入れ替えもクロス集計クエリで可能だよ。

クエリのデザインビューを開いて、[クエリ]-[集計クエリ]を選択。
表示に必要なテーブルを追加したら、クエリを以下のようにしてみて。

フィールド : 顧客番号 | 作業日 | 内容
集計 : グループ化 | グループ化 | 先頭
行列の入れ替え : 行見出し | 列見出し | 値

データがない日付も列に含めたい場合は、
必要な日付の入った日付テーブルかクエリを別に作成して、
作業日と左結合すれば良いよ。

636 :628:2008/11/07(金) 00:14:18
>>635さん

やってみましたが同一の日に複数の値がある場合表示されませんでしたので、ちょっと駄目みたいでした
でもとても参考になりました。 ありがとうございます。

>>634さん
少し難しいのでまだ試せていませんが、次の休日にじっくりとやってみます。
ご教授ありがとうございます



637 :名無しさん@そうだ選挙にいこう:2008/11/07(金) 00:22:06
VBAでレコード舐めてExcelに吐き出すのがいいよ。レポートなんて再利用できないし。

638 :635:2008/11/07(金) 00:29:29
>>636
ごめん重複作業日の件を見落としていた。
その場合は単純に顧客番号+内容でグループ化すれば良いだけ。下ので試してみて。

フィールド: 顧客番号 | 内容 | 作業日 | 内容
集計: グループ化 | グループ化 | グループ化 | グループ化 | 先頭
行列の入れ替え: 行見出し | 行見出し | 列見出し | 値
並べ替え: 昇順 | | |

639 :名無しさん@そうだ選挙にいこう:2008/11/07(金) 00:41:57
>>638さん
ありがとうございます! 出来ました。
これで先に進めそうです 本当にありがとうございました。

他の皆さんもありがとうございました。 いろいろとヒントをいただき、まだまだ出来る事が増やせそうな
気持ちになってきました。 がんばります!


640 :名無しさん@そうだ選挙にいこう:2008/11/07(金) 09:48:15
Accesのレポートの背景に画像・PDFとか重ねるのどうやるの?
余白で切れてA4サイズのPDF重ねられないんだけど…

641 :名無しさん@そうだ選挙にいこう:2008/11/07(金) 12:39:26
>>640
桐にしとけ、簡単に可能だぞ

642 :名無しさん@そうだ選挙にいこう:2008/11/07(金) 13:31:46
>>636
VBAコードはこんな感じだな。(>>628の結果を得る場合。)
作業日のデータの型が分からなかったので、テキスト型を
前提としているなど、ざっとした処理内容になっているが、
これに付け加える形で目的のものは書けると思う。

変数
rs:元のテーブルのrecordset
rs2:統計表テーブルのrecordset
datestr:文字型
i:数値型

コード

Do Until rs.EOF
datestr = "day" & Right(rs!作業日, 2)
rs2.AddNew
rs2!ID = i
rs2!顧客番号 = rs!顧客番号
rs2(datestr) = rs!内容
rs2.Update
i = i + 1
rs.MoveNext
Loop

643 :質問です。:2008/11/07(金) 17:42:46
OS:Windows server 2003
Accessのバージョン:Access2003

ターミナルサービスを使用し、複数ユーザでAccessを使用したく
次のように、担当者ごとに、入力用MDBを用意してみました。
(入力用MDBの名前を変えるのは面倒なので、フォルダを別々に用意。)

担当者A:C:\Access2003\担当者A\入力用.mdb --→ SQL
担当者B:C:\Access2003\担当者B\入力用.mdb --→ Server
担当者C:C:\Access2003\担当者C\入力用.mdb --→ 2005
担当者D:C:\Access2003\担当者D\入力用.mdb --→ に接続

いまのところ問題はなさそうですが、
間違って同じ入力用MDBを複数ユーザが同時に開いてしまったら
予想通り壊れてしまいますね

複数ユーザでAccessを使用したい場合、この方法で問題ないでしょうか?
よろしくお願いします。


644 :名無しさん@そうだ選挙にいこう:2008/11/07(金) 17:49:52
>>643
Accessを単にフロントエンドとして使用しているということだよね?
それであれば同時に開いてもSQL Serverのデータは壊れないと思うけどな。

645 :名無しさん@そうだ選挙にいこう:2008/11/07(金) 17:54:21
−追加−
そういえば、なぜ入力用MDBをWinServer上に置いてターミナルサービス経由で操作するの?
めちゃくちゃ効率が悪い気がするんだけど。

各クライアントごとに入力用MDBを配置できない理由でもあるのかな?

646 :名無しさん@そうだ選挙にいこう:2008/11/07(金) 17:59:52
>>645
それ、俺も思った。
mdbを同時に開く危険性を今よりも低くしたいのであれば、
すべてのクライアントにAccessインストールしてmdbを
クライアントに置くしかないわけで・・・
ま、それでもネットワークの障害によってクライアントの
mdbが壊れることはあるようだけど。

647 :名無しさん@そうだ選挙にいこう:2008/11/07(金) 21:47:09
クライアントにMDB配置するよりも、ターミナルサービス使うとLAN上を流れるトラフィックが劇的に少なく済むんじゃまいか?

648 :名無しさん@そうだ選挙にいこう:2008/11/07(金) 22:10:15
すごいサイト見つけました
最新ビジネスソフトが格安でした
「格安PCサイト」で検索して
格安PCサイトってところです。
後払いで安心して買えました

649 :名無しさん@そうだ選挙にいこう:2008/11/07(金) 22:19:24
バックエンドがSQLServer2005なんだから各クライアントにフロントの.adpでいいだろ

650 :名無しさん@そうだ選挙にいこう:2008/11/08(土) 10:13:20
Accessとターミナルサービスを使ったシステムは見たことがあるけれど、
Access以外の部分ではどの系統のことを学べば良いのでしょうか?
Windows Server 系統?

651 :名無しさん@そうだ選挙にいこう:2008/11/08(土) 12:29:01

単純に、access買うよりCALの方が安いってことだろ

652 :名無しさん@そうだ選挙にいこう:2008/11/08(土) 12:54:32
>>650
クライアントからサーバーにログインして、直接サーバーを操作する(させる)わけですから
WinServerに関する知識は必須でしょうね。

>>651
Accessランタイムという手もありますね、特に2007からは無償で提供されてますし。

653 :640:2008/11/08(土) 15:10:19
InfoPath使ったら出来ますた
苦労してフォーム作った後でInfoPath入ってるPCでしか動かないことに気付きますた
桐にしときます

654 :名無しさん@そうだ選挙にいこう:2008/11/08(土) 17:31:11
ターミナルサービスを使ってシステムを構築中なのですが、
クライアントからリモートデスクトップ接続をすると、自動的に
サーバのAccessのファイルを開くような仕組みはどのようにしたら
構築できるのでしょうか?
こういうのを調べてみろ、みたいなヒントでも良いのでお願いします。

あと、フォーム上のボタンをクリックした時、自動でリモート
デスクトップ接続を切るまでの操作は実装可能なのでしょうか?

サーバ:Windows2003 Server
クライアント:WindowsXP

よろしくお願いします。

655 :名無しさん@そうだ選挙にいこう:2008/11/08(土) 18:15:36
>>654
Accessとは関係ないんですが、下記を参考にしてみてはどうでしょう?

Microsoft TechNet
<リモート デスクトップ接続の接続時に起動するプログラムを指定する>
ttp://technet2.microsoft.com/WindowsServer/ja/library/a59b1110-8293-4d77-9808-22d4e48d16381041.mspx?mfr=true

656 :名無しさん@そうだ選挙にいこう:2008/11/08(土) 18:49:53
>>655
その方法で一度やってみたのですが、接続の時点で失敗となってしまいます。
[プログラムのパスとファイル名] ボックスに、Accessの実行ファイルのパスを
入力してみたのですが、駄目でした。
「C:\Program Files\・(中略)・\MSACCESS.EXE」という文字列です。

考え方が違うのでしょうか?

657 :名無しさん@そうだ選挙にいこう:2008/11/08(土) 19:03:55
>>643
そのmdbファイルへのショートカットを各ユーザのデスクトップに作るなどして
対応してるのなら、間違えて別のユーザのを開くこともないと思うが、
そういう対処をしてても同時に開いてしまうという状況が生まれるのであれば、
別なところの見直しをした方が良いと思うぞ。
ログインする時のユーザ名を区別しやすいものにするとか。

658 :名無しさん@そうだ選挙にいこう:2008/11/08(土) 23:41:48
ターミナルサービスでNGにしたわ

659 :名無しさん@そうだ選挙にいこう:2008/11/09(日) 10:17:15
Accessからターミナルサービスを終了させる方法は?

660 :名無しさん@そうだ選挙にいこう:2008/11/10(月) 03:13:12
環境: Access 2003 SP3, Windows Vista, ActiveX Data Objects 2.8 Library, mdb
フォームフィルタの動作条件についてお聞きしたいのですが、

Dim p As New ADODB.Recordset
p.Open "SELECT * FROM hoge", CurrentProject.AccessConnection, adOpenStatic, adLockReadOnly, adCmdText
Set Me.Recordset = p

フォームのRecordSourceを使わずに上のコードを使ってレコードセットを設定した状況で、
ツールバーの[フォームフィルタ]をクリックすると、下のメッセージが表示され実行できません。
> 「フォームのレコードソースがレコードセットオブジェクトの場合、フォームフィルタは実行できません。」

ただ、[選択フィルタ]や OrderBy に値を設定するなどして、フィルタを実行した後は[フォームフィルタ]が実行できています。
フィルタを予め実行せずにフォームフィルタを実行できる方法や設定があるのでしょうか?

661 :名無しさん@そうだ選挙にいこう:2008/11/10(月) 10:37:37
adpでレポート作っています。
グループフッターに集計するところで躓いています。

データはこのようになっています。

日付 曜日 販売数
11/1 土   100
11/2 日   50
11/3 月   60
11/4 火   30
11/5 水   5
・・・ 

これを曜日別に合計を出したいのです。
ちなみに集計する式は月曜集計欄に =SUM( IIF([曜日]="月", [販売数], 0)
という感じなのですが「集計関数は、レコードソースの出力フィールドにのみ許可されています」というエラーが出ます。
adpではこういうsumとiifの使い方ってだめなんでしょうか?

662 :名無しさん@そうだ選挙にいこう:2008/11/10(月) 12:31:24
>>660
そういう操作をしたことがないのでよく分からないんだけど、
普通はコードを使って、フォームのレコードソースを操作するんじゃないのかな?
Me.RecordSourse="SELECT * FROM hoge" みたいに。

>>661
adpの場合、Jetを経由しないという速度的なメリットがある代わりに
Jetを経由しないが故にVBAの関数ライブラリが参照されないはず。(>>589-595
ということで、Server側のしきたりに従ってクエリ式を作ってくだされ。

663 :名無しさん@そうだ選挙にいこう:2008/11/10(月) 17:43:01
>>662
…やっぱりそうですよね。おとなしくしきたりに従います…

664 :名無しさん@そうだ選挙にいこう:2008/11/10(月) 21:15:56
TransactSQLでIIf使えたら楽なんだけどなw

665 :名無しさん@そうだ選挙にいこう:2008/11/11(火) 02:02:18
>>660
そういうことを聞きたいわけじゃないとは思うけど、ヘルプに
「フォームがレコードセットに連結しているときに [フォーム フィルタ] コマンドを使うと、エラーが発生します。」
と明記されているから、できないんじゃないのかナー。

ttp://msdn.microsoft.com/ja-jp/library/cc380231.aspx

他にもフィルタとか並べ替え関連のプロパティは全部無効になるとも書いてあるから、
自前でRecordsetをセットするのはいいけど、それならレコードセットの操作は
フォームの組み込み機能に頼らず全部自前で面倒見る覚悟でやれや
。。。ってことなのかな、と。

ちなみにフォーム開くときにVBAで一瞬フィルタかけてすぐに解除すると
フォームフィルタ使えたけど、フォームフィルタ画面で条件を
何も設定せずにそのまま解除しようろするとデータプロバイダが
何ちゃらってエラーが出た。
たぶん、それ出来たからやっていい操作ってことじゃなく、
本来許可しない操作がガード破れてできちゃったけど、
どっか(レコードセットの管理とか)が破綻しちゃうんじゃないのかな。
ちょっと香ばしすぎて、業務ソフトに使ったら即死亡な悪寒。

666 :660:2008/11/11(火) 09:28:25
レスありがとうございます。

>>662
リンクテーブルを使わない外部参照、ストアドプロシージャからの取得、
複数フォームにまたがるトランザクション、外部接続を一旦切断してバッチ編集させる場合等では
RecordSourceが使用できないので、仕方なくRecordsetを使っています。

これらの場合でもRecordSourceが使えれば良いのですが……。
一旦、ローカルのテーブルに挿入する手は、今回はコストが大きいため使っていません。

>>665
ヘルプについては見逃して言いました。リンクありがとうございます。
やはり、本来使用できないのが仕様で、たまたま実行できてしまっているだけなのですね。
私の環境でも、確かに通常の挙動とは異なります
(コンボボックスに列の値が表示されない、[閉じる]をクリックすると状況によっては異常終了する等)。
フォームフィルタは便利なので、正しく使える方法があるのなら、是非使用したかったのですが、
今回は諦めて、自前でフォームフィルタ似のものを実装することにします。

ちなみに Set Me.Recordse = p で一旦フィルタ関連の設定は無効にされるのですが、
再度設定してやると正しく適用されました。同様に[並び替え]と[選択フィルタ]は問題なく使用できています。

助言、ありがとうございました。

667 :名無しさん@そうだ選挙にいこう:2008/11/11(火) 19:20:17
インデックスを設定して、そのインデックスの順に合わせて絞り込みやグループ化すると
処理が早くなりますけど、絞込みとグループ化でそれぞれインデックスのキーを
指定しても絞込みの方にしかインデックスは利用されないのでしょうか。
具体的には、Index(日付, 科目, 補助科目)ってな感じでインデックスがあったとして、
絞り込み条件にこの3つ内、左のキーから絞込み条件を指定した場合、例えば

SELECT 日付, 科目, 摘要 FROM 取引履歴
WHERE 日付=Between #2007/04/01# And #2008/03/31# , 科目="現金"

は「日付,科目」までのインデックスが有効に使われると思いますが、
これが絞り込みとグループ化の指定で、

SELECT 科目, Count(科目) AS 件数 FROM 取引履歴
WHERE 日付=Between #2007/04/01# And #2008/03/31#
GROUP BY 科目

のような指定だと、「日付,科目」の順できちんとインデックスは使われるのでしょうか
(それとも「日付」までしか使われないのでしょうか)

どこかに、「インデックスと絞込みの条件・グループ化・並べ替え」との関係を
詳しく解説したところ知りませんか?(できればAccessについて)
分かる方よろしくお願いします


668 :名無しさん@そうだ選挙にいこう:2008/11/11(火) 22:52:11
絶対に使われるとか絶対に使われないとか明言はできんよ
クエリアナライザとかないんで・・・

669 :名無しさん@そうだ選挙にいこう:2008/11/11(火) 23:45:44
確かに検証できるツールが標準であるわけではないので、いくとおりかのSQL文による
ケースバイケースでのインデックスの利用/未使用は判定できないでしょうが、私の知
りたいのは「インデックスが使われる定石としての考え方」です。

インデックスとして設定した複合フィールドが「検索条件・グループ化条件」の両方で
連絡的に使われることがあるかどうかを知りたいのですが...

670 :名無しさん@そうだ選挙にいこう:2008/11/12(水) 13:59:15
「オブジェクトはゾンビ状態です。」

671 :名無しさん@そうだ選挙にいこう:2008/11/14(金) 20:14:37
うーんインデックスについての回答ないですねぇ
よそで聞いてみます

672 :名無しさん@そうだ選挙にいこう:2008/11/15(土) 16:51:55
otlook2002です。
フローティングのフォームがいくつかあって、alt+tabみたいにフォーカスを変えていく方法はありますか?
Ctrl+F6だとフローティングのフォームにフォーカスが移らないんですよね。

673 :名無しさん@そうだ選挙にいこう:2008/11/15(土) 20:59:26
いま、勤怠管理ソフトを改造中です。

複数のフォームをタブコントロールをつかって切り替えていると、フォームの数が多くなれ
ばなるほど多くなるので、遅くなるので、トグルボタンで切り替えるようにしました。

その中に、おまけ機能として、登録住所をGoogle Mapsで表示出来るようにしてみようと思い
まして、WebBrowserコントロールを貼り付けて、ローカルのGoogle Maps APIを用いて作った
map.htmlを読み込ませています。

右上に見えるものは、Google Maps APIを用いて、Accessに登録している住所をジオコーディング
させたものを、緯度経度に分けているのですが、この値をWebBrowserコントロールの中のHTML
に対して、投げることはできるのでしょうか?

Google Maps APIのcenterAtLatLng()を使えばウェブブラウザの場合にはできるそうなんですが
どのように、このAccessから、WebBrowserコントロール内のmap.htmlに対して、移動してほしい
位置へ飛ぶように、緯度経度情報を渡せますか?

http://www.uploda.org/uporg1786199.jpg

674 :名無しさん@そうだ選挙にいこう:2008/11/15(土) 23:00:07
やっと2007レポートはグリッドプロパティできて罫線使えるようになったけど
段組み印刷で項目名が段組みされないのは何なのよ
真面目に開発しろよ

675 :名無しさん@そうだ選挙にいこう:2008/11/16(日) 22:21:11
レポートで罫線使えるようになっただけ大進歩です。

676 :673:2008/11/17(月) 00:23:57
なんだかんだやっていたらできるようになりました。

すんません。

ちなみに解決手段は

1.Google Mapsを表示しているフォームは親と同じレコードソースを便宜的にあてる
2.WebBrowserコントロールを貼り付けて、レコードの移動と連動させるには
 A.Form_CurrentにおいてVBAを記述する
 B.以下のようなコードを記述する
    'フォーム内のテキストボックスに住所をコピーする
    Form_googlemaps!WebBrowser0.Document.all.address2.value = Form_社員マスター.住所.value

   'フォーム内のボタンを押す
    '1番目のフォームのなかの2個目の要素をクリックの意味。1個目はテキストボックス
   Form_googlemaps!WebBrowser0.Document.Forms(0).all(1).Click
3.読み込ませるmap.htmlには・・・
 A.geocoder = new GClientGeocoder();をfunction onLoad()に入れておく
 B.フォームの部分はこんな感じ
    <form action="#" onsubmit="moveAddress(this.address2.value); return false">
   <input type="text" name="address2" value="" />
   <button type="submit" name="btn01">移動する</button>
    </form>
 C.moveAddress()は、function moveAddress( ADDRESS )としてつくっておく。getLatLngを
   もちいて、map.setCenter()で移動させるようにする。その際にgeocoder.getLatLng()内に
   これらを入れておく。ジオコーディングしてから、map.setCenter()で移動させる仕組み。
4.これでAccessに入っている住所データを用いて、マップと連動できる。さらに、マーカーを
  うつように、マップ自体に仕込んだり、AccessのテーブルをXML出力後、それを読み込ませ
  るようにすれば、マップにマーカーをいっぺんに打てる。
5.最初のmap.html読み込み時は、フォームがbusyなのに緯度経度情報を渡そうとしてエラー
  になるので、on error resume next以下に、WebBrowser0.Busy = True の間はDoEvents
をDo while loopで読み込みを待たせる。その後、2-Bのコードを記述しておく。

677 :673:2008/11/17(月) 00:31:34
するとこんな具合に、できました
http://www.uploda.org/uporg1789541.jpg

1.をやっておかないと、レコード移動しても、最初の1回だけは移動してくれるのですが、
2回目は移動しません。Form Currentした時に、このフォームがレコードを移動したよとい
う認識が、レコードソースを割り当てておかないと認識しないようです。

このマップを表示するフォームに実用上レコードソースのデータは何一つ使わないので
すが、ここで嵌っていました・・・

次は、Accessで旅費計算をさせるプログラムをつくることにします。これでこんどは乗り換え
案内やルート検索のサイトなどと連動させてみたいと思います。ありがとうございました。

678 :名無しさん@そうだ選挙にいこう:2008/11/17(月) 00:39:15
すみません桐ってなんのことですか?

679 :名無しさん@そうだ選挙にいこう:2008/11/17(月) 01:12:17
ゴマノハグサ科の落葉高木

680 :673:2008/11/17(月) 01:49:24
>>678
へその緒を乾燥させたものをしまっておくものにも、桐の小箱が使われるよね。

で、ここでの話は、直感型データベースソフトのことをいう。
ただ身近で使っている人は俺の場合、一人しかしらないし見たこともない。

ファイルメーカー使いもあまりみたことがないけれど、こっちのほうがまだユーザ
数は多いと思われる。パーソナルデータベースはあまり選択肢がない世界だか
ら、なかなかアレなんだけれどね。

681 :名無しさん@そうだ選挙にいこう:2008/11/17(月) 08:19:43
Access2003のランタイムは今はもう入手できないのでしょうか?
サイトを探していても、そのファイルがダウンロードできる場所が見つかりませんでした。

http://office.microsoft.com/ja-jp/access/HA011208861041.aspx?pid=CH011228281041
ドキュメントはあるようなのですが。

http://www.microsoft.com/downloads/details.aspx?FamilyID=d9ae78d9-9dc6-4b38-9fa6-2c745a175aed&DisplayLang=ja
2007のはあるようですが。

682 :名無しさん@そうだ選挙にいこう:2008/11/17(月) 09:02:12
>>678
http://www.kthree.co.jp/index.html

このスレで出る質問事項の殆どが簡単便利に解決しちゃう魔法のソフト
でも高いよ、エグゼクティヴ向け

683 :名無しさん@そうだ選挙にいこう:2008/11/17(月) 10:04:37
>>681
Access Developer Extensions の購入が必要じゃないの?

684 :683:2008/11/17(月) 10:14:59
>>681
なんか見つけたみたい。
ttp://e-server.mydns.jp/server/modules/mydownloads/viewcat.php?cid=10

685 :名無しさん@そうだ選挙にいこう:2008/11/17(月) 18:52:34
>>683-684
ありがとうございます。
2003で作ったファイルを動かすことが出来ました。

686 :名無しさん@そうだ選挙にいこう:2008/11/17(月) 21:14:58
質問です。
Windowsの共有フォルダを利用して、mdbを動かした場合についてです。

以下のような操作方法を考えていますが、これだと逆にネットワークの負荷が
大きくなるのでしょうか?それとも、ネットワークの負荷は小さくなり、逆に
サーバ側の負荷が大きくなるのでしょうか?

まず、サーバに共有フォルダを準備し、そこにデータ用のmdbファイルと、
クライアント用のmdbファイルを置く。
クライアントPCからは、サーバの共有フォルダを開いて、クライアント用の
mdbファイルを開き、操作を行う。

687 :名無しさん@そうだ選挙にいこう:2008/11/17(月) 21:16:49
共有フォルダでNGにしたわ

688 :名無しさん@そうだ選挙にいこう:2008/11/18(火) 02:28:11
>>686
Accessはデータベースサーバーではありませんので
ローカルディスクにあったmdbが共有フォルダに移動した
だけの扱いになります。
>>687
そう邪険にしなさんなw

689 :名無しさん@そうだ選挙にいこう:2008/11/18(火) 13:31:06
>>688
サンクスです。

690 :名無しさん@そうだ選挙にいこう:2008/11/19(水) 12:28:20
上でも書きましたが、フォームがフローティングで複数開いている場合、フローティングではないフォームも含めたフォーム間のフォーカスの移動はどのようにするのでしょうか?
フローティングでなければCtrl+F6で出来るのですが。。。

691 :名無しさん@そうだ選挙にいこう:2008/11/19(水) 12:38:13
マウスクリック

692 :名無しさん@そうだ選挙にいこう:2008/11/19(水) 12:45:27
>>691
殺生な。。。仕事に使うためにはマウスフリー化が必須です。

693 :名無しさん@そうだ選挙にいこう:2008/11/19(水) 12:51:40
うん、分割フォームのフォーム部分とデータシート部分の行き来は、どうしてる?

694 :名無しさん@そうだ選挙にいこう:2008/11/19(水) 13:56:12
>>693
データーシートビューは全く使いませんね。全てフォーム上の操作だけのソフトウェアです。
小さいフォームまでいちいちSetFocusで指定するのも面倒だから、alt+tabみたいにフォーカス移動出来ればいいなと夢想しています。

695 :名無しさん@そうだ選挙にいこう:2008/11/19(水) 20:12:32
>>692
桐にしとけよ

696 :名無しさん@そうだ選挙にいこう:2008/11/19(水) 20:49:29
>>695
マウスフリーと桐はさすがにあまり関係ないだろ

697 :名無しさん@そうだ選挙にいこう:2008/11/19(水) 21:17:31
桐はキーボードだけで操作できるよ
まじに、マウスフリー

698 :名無しさん@そうだ選挙にいこう:2008/11/19(水) 21:50:39
>仕事に使うためには

だったらフローティングとか浮かれた機能使ってんじゃねーよ

699 :名無しさん@そうだ選挙にいこう:2008/11/19(水) 21:56:57
>>698
俺もそう思うんだけど、業務用ソフトだから仕方がない。
報告書作成フォームに書き込むときに、フローティングの履歴フォームを開いて参照しつつ書き込むようになっている。
フローティングを参照してから、報告書作成フォームにフォーカスを移すときにマウスが必要な設計w
しかもフローティングが5個くらい開ける設計w  何か、いい手はありませんか?

700 :名無しさん@そうだ選挙にいこう:2008/11/19(水) 21:58:25
孫の手

701 :名無しさん@そうだ選挙にいこう:2008/11/19(水) 22:02:01
>>700
ありがとうございます。でも、出来るだけ、Access内で解決したいなと思いまして。

702 :名無しさん@そうだ選挙にいこう:2008/11/19(水) 22:09:58
そうしたいなら、そのようにコーディングすればいいだけ。
それが面倒なら、あきらめればいいだけ。

703 :名無しさん@そうだ選挙にいこう:2008/11/19(水) 22:10:20
>>694
> データーシートビューは全く使いませんね。全てフォーム上の操作だけのソフトウェアです。
> 小さいフォームまでいちいちSetFocusで指定するのも面倒だから、alt+tabみたいにフォーカス移動出来ればいいなと夢想しています。

alt+tab って SetFocusやってるじゃねーの?
SetFocus を好きなキーに割り当てろよ、たぶん設定面倒だけど

704 :名無しさん@そうだ選挙にいこう:2008/11/19(水) 22:20:14
>>702 >>703
各々のフォームに対して、他のフォームにSetfocusするためのキーを設定するしかないですかね。
alt+tabはグループ間で順次Focusが移動するから、大雑把で使いやすいかなと思いました。
要するに、いちいち設定するのが面倒だな、大雑把なやり方があればいいな、ということです。

705 :名無しさん@そうだ選挙にいこう:2008/11/19(水) 22:29:03
業務用ってのがよくわからんがもしかして外部の業者とかに作らせたソフトなのか?

706 :名無しさん@そうだ選挙にいこう:2008/11/19(水) 22:31:42
>>705
詳しくはいえませんが、業者物のソフトです。年間ん十万円支払っています。

707 :名無しさん@そうだ選挙にいこう:2008/11/19(水) 23:33:42
そういうのって普通は物理的にソース修正できないようになってるか、あるいは
仮にできたとして勝手に改変したら保守契約対象外とかになったりしてまずいんじゃないの?

まあどういう契約になってるかわからんけど・・・

708 :名無しさん@そうだ選挙にいこう:2008/11/19(水) 23:36:22
バレなきゃ良い、必要な時に戻せば良い

709 :名無しさん@そうだ選挙にいこう:2008/11/19(水) 23:43:42
>>707
いじり放題です。もちろん、自己責任ですけどね。
ユーザーインターフェースをいじるくらいなら安全かなと。
チビッ子フォームがたくさんあるときにフォーカスを移動するとき、皆さんはどうされていますか?

710 :名無しさん@そうだ選挙にいこう:2008/11/19(水) 23:44:59
猫の手

711 :名無しさん@そうだ選挙にいこう:2008/11/19(水) 23:48:04
>>710
autohotkeyを使用すれば実現できるのはわかっていますが、Accessで(ry

712 :名無しさん@そうだ選挙にいこう:2008/11/22(土) 14:08:22
すみません、仕事で使っているファイルが壊れてしまったので教えてください。

【 システム環境  . 】 WindowsXPSP2, Access2002
【 VBAが使えるか .】 いいえ
【 VBAでの回答  】 否
【 検索キーワード 】 ブックマークが正しくありません

あるファイルを起動しようとすると「ブックマークが正しくありません」
というエラーメッセージが出て開けなくなりました。
その他のファイルは、現在も問題なく開けています。
壊れたファイルも、直前までは問題なく開くことができて、作業できていました。
上記ワードで検索し、以下のページに行きましたが良く分かりません。
ttp://www.accessclub.jp/bbs/0054/beginers21309.html
ttp://support.microsoft.com/default.aspx?scid=kb;ja;209137

ツールの「最適化/修復」というものを使うらしいのですが、
最適化元データベースを開く時に、やはり「ブックマークが正しくありません」と出ます。
どうか解決策を教えて下さい。

713 :名無しさん@そうだ選挙にいこう:2008/11/22(土) 14:47:18
>>712
該当ページ、ttp://support.microsoft.com/default.aspx?scid=kb;ja;209137 にある、
【破損したデータベースの回復】を試せば良いんだが?

1.Accessは最新版に
2.破損ファイルのコピーを作っておく
3.ldbファイルは削除しておく
4.壊れたファイルを開こうとするのではなく、Accessのみ起動して最適化/修復を試す
5.それで駄目だったら、空のデータベースを作成し壊れたファイルからインポートする
以下、省略

714 :名無しさん@そうだ選挙にいこう:2008/11/22(土) 15:26:50
細かい手順。

>>712
とりあえず、壊れたファイルを適当な場所にコピーしてバックアップ。
壊れたファイルと同じフォルダに、壊れたファイルと同じファイル名で拡張子が.ldbのファイルがある場合は、それを削除。

ファイルを直接開いてないかい?
直接開いてエラーが出る場合は以下の手順で、空の Access を開いて最適化を試してみる。

1.Windows の[スタート]->[すべてのプログラム]から Access を選択して開く。
2.Access のメニューから[ツール]->[データベース ユーティリティ]->[データベースの最適化/修復]を選択。
3.壊れたファイルを選択。
4.修復したファイルの保存先のファイル名を聞かれるので、適当なファイル名を入力して保存。
5.4で入力したファイルを開く。開ければ修復できたので、壊れたファイルと置き換えて終了。

上の手順で駄目なら以下の手順で、全てのデータのインポートを試してみる。

1.Windows の[スタート]->[すべてのプログラム]から Access を選択して開く。
2.Access のメニューから[ファイル]->[新規作成]を選択。
3.新規のファイル名を適当に入力して保存。
4.Access のメニューから[ファイル]->[外部データの取り込み]->[インポート]を選択。
5.壊れたファイルを選択。
6.オブジェクトのインポート画面が開いたら全てのオブジェクトをインポート。
 [テーブル]、[クエリ]、[フォーム]、[レポート]、[ページ]、[マクロ]、[モジュール]の各タブで
 [すべて選択]をクリックして全て選択後、OKをクリック。
7.インポートが終わったら、使えることを確認。大丈夫なら、壊れたファイルと置き換えて終了。

715 :名無しさん@そうだ選挙にいこう:2008/11/22(土) 15:38:40
>>713-714
ご解答ありがとうございます。
破損ファイルのコピーは取りました。
ldbファイルと言うものを探しましたが、同じフォルダには何もありませんでした。
Accessのみ起動→最適化/修復しても、「ブックマークが正しくありません」と出ます。
空のデータベース作成からのインポートも試しましたがうまくいきません。
空のデータベース作成→外部外部データの取り込み→インポートをしようとしても、
やはり「ブックマークが正しくありません」と出てきました。

他のファイルでしたら最適化もインポートもできます。何がおかしいのでしょうか。

716 :名無しさん@そうだ選挙にいこう:2008/11/22(土) 15:50:48
>>715
うーん、ダメ元で decompile してみる?
適当なショートカットを作成して、リンク先を以下のように変更。
作成したショートカットから一度開いたあと、壊れたファイルを直接開く。

リンク先:
"C:\Program Files\Microsoft Office\OFFICE10\MSACCESS.EXE" "D:\Hoge\hoge.mdb" /decompile

D:\Hoge\hoge.mdb の部分は壊れたファイルの場所とファイル名に変更してください。
Accessのインストール先が違うなら、C:\Program Files〜の部分も一緒に変更。

717 :名無しさん@そうだ選挙にいこう:2008/11/22(土) 16:47:56
>>716
ありがとうございます。
試してみましたが、こちらの方法でもダメでした。
ショートカットから開く時に、また「ブックマークが正しくありません」と出てきます。

718 :名無しさん@そうだ選挙にいこう:2008/11/22(土) 18:01:51
>>717
ここにある JETCOMP.exe を使って、最適化を試みてください。
Jet compact utility is available in download center
http://support.microsoft.com/kb/295334/EN-US/

使い方
1.ページ中央の「Download the JETCOMP.exe package now」をクリックしてJETCOMP.exe をダウンロードします。
2.ダウンロードした JETCOMP.exe を実行して適当なフォルダに解凍してください。
3.解凍されたフォルダの JETCOMP.exe を実行してください。
4.Database to Compact From [Source] の方に壊れたファイルを指定。
5.Database to Compact Into [Destination] に最適化したファイルの保存先の場所と
 ファイル名(適当なファイル名を入力)を指定してください。
6.Compact をクリックして最適化を実行します。
7.5で入力したファイルを開く。開ければ修復できたので、壊れたファイルと置き換えて終了。

719 :712:2008/11/22(土) 18:52:39
>>718
ありがとうございます。
1〜4までは進めたのですが、5が良く分かりません。
5ではどのように入力したら良いのですか?

4ではボタンを押して、壊れたファイルを指定できたのですが、
5でもファイルを開く画面になり、保存先指定やファイル名の入力ができません。
適当にファイルを作るとcompactを押せますが、エラーが出てしまいます。

720 :名無しさん@そうだ選挙にいこう:2008/11/22(土) 19:03:07
>>719
5で入力するのは保存先のファイル名なので適当に (保存先のフォルダ名)\db1.mdb とか。
既にあるファイル以外を指定してください。

ボタンを押すと、ファイルを選択するウィンドウが開きますが、
そこで既にあるファイルを選択して Compact をクリックするとエラーになります。
ウィンドウを開いて選択した場合は、ファイル名だけを直接入力して適当な名前に変更してください。

721 :712:2008/11/22(土) 19:08:51
>>720
細かいご指導ありがとうございます。
5でC:\db1.mdbと入力し、Compactを押したのですが、
「Error compacting database.」と出てきました。

ですが、4で壊れていないファイルを指定すると問題なく処理が進みました。

722 :名無しさん@そうだ選挙にいこう:2008/11/22(土) 20:00:59
>>721
確認なのですが、壊れたファイルは Access 2002 で作成したファイルですか?
Access 97 で作成したファイルを Access 2002 で使用しているような場合では、
JETCOMP.exe の画面で、Destination is 3.x database format を選択する必要があります。

あと、一旦 Error が表示された後で、
正しいファイル名を指定しても Error compacting database と表示される場合があるので、
一旦閉じてから、再度実行してみてください。

それでも駄目な場合は、データを一旦、取り出して、
手作業で復旧するしかないかもしれません。

Access のリンクテーブルを使う場合
1.Windows の[スタート]->[すべてのプログラム]から Access を選択して開く。
2.Access のメニューから[ファイル]->[新規作成]を選択。
3.新規のファイル名を適当に入力して保存。
4.Access のメニューから[ファイル]->[外部データの取り込み]->[テーブルのリンク]を選択。
5.データを取り出すテーブルを選択
6.元のAccessと同じ形式のテーブルを作成して、テーブルのデータをコピーしてください。

Excel に取り出す場合は以下を参考にしてください。
http://support.microsoft.com/kb/304561/

723 :712:2008/11/22(土) 22:20:34
>>722
現在確認中です・・・
とりあえずDestination is 3.x database formatを選択してもダメでした。

データ復旧ですが、4の外部データ取り込みが上手くいきませんでした。
今回も同じく、「ブックマーク〜」とエラーメッセージが出てしまいます。

724 :名無しさん@そうだ選挙にいこう:2008/11/22(土) 23:08:19
>>723
起動すると自動的に何かフォームが開いたり、コマンドを実行するようになって
いるかい?たとえば、autoexecマクロがあったりとか、起動時にODBCリンクを
張ってどこかに接続するようになっているとか。

Shiftキーを押しながら起動してみて、フォームとかautoexecが実行されない状態
で、同じようにエラーがでるのならば、復旧は諦めて、データのサルベージに移行
しましょう。その前に、そのmdbが有るフォルダに、database1.mdbなんて感じのへ
んなmdbがあったら儲けものなので開いてみましょう。

さて、データのサルベージですが、
1.Excelや他のAccessから、対象となるmdbへ接続して、データを取り出す方法。おもに
ODBCを利用した接続となる。

2.MySQLのMigration Toolkitを使って、一度MySQLへAccessをインポートし、無傷の
同じmdbでMySQLへODBCリンクをはって接続。データを戻す方法。こちらはMySQLや
MyODBCが必要なので非常に手間が掛かる。

3.http://msdn.microsoft.com/ja-jp/library/cc708919.aspxを使って、SQL Server形式に
してみて、SQLサーバ経由で、ADPでもつかって取り込み直す

4.各種変換ツールを使う(CSVに変換などなど)

mdbはモジュール単位での破損や、本体そのものの破損と破損といってもいろいろあって
軽傷ならばサルベージで助かることもあります。

725 :名無しさん@そうだ選挙にいこう:2008/11/23(日) 01:10:24
簡単に復旧できたらバックアップの重要性を理解しないまま
いつかまた同じことを繰り返すだけ

726 :名無しさん@そうだ選挙にいこう:2008/11/23(日) 02:28:30
やれる限りの方法を試してみるということは、それで良いと思う。
だけど、駄目な時は駄目だぞ。どんな方法をやってみても。
簡単に復旧できたらバックアップの・・・という意見には俺も賛成だな。

727 :名無しさん@そうだ選挙にいこう:2008/11/23(日) 06:19:47
>>725
自分も同意見

だから、自動的に起動時にバックアップをつくるモジュールを付くって
autoexecで作動するようにしています。最大5個を常に起動時に作り
続ける仕様になっていて、このおかげで実際に、自動最適化でぶっこ
われて なんて目に遭っても、大丈夫。

終了時の自動最適化が結構、ファイルが壊れる原因になっているよう
な気が最近はしているので、はずすべきなのかもしれんけれど。

728 :名無しさん@そうだ選挙にいこう:2008/11/23(日) 16:16:51
>>727
> 最大5個を常に起動時に作り続ける仕様になっていて
kwsk

729 :712:2008/11/23(日) 16:46:04
>>724
起動時に自動でフォームが開いたり、コマンドを実施するようにはなっていませんでした。
Shiftを押しながら起動してもブックマークが云々言うので、復旧は無理そうですね・・・
現在、サルベージ手段というのをググって調べています。
が、相当深刻な損傷みたいです・・・

730 :名無しさん@そうだ選挙にいこう:2008/11/23(日) 20:06:02
>>728
http://www.accessclub.jp/bbs/0050/beginers20072.html
http://www.moug.net/tech/acvba/0070012.htm

ここのを参考にしていろいろ必要なものだけに削って、パラメータなんかは
iniファイルから読み書きにしてある。バックアップの個数とか、バックアップ
ファイル名なんかがそれ。

で、autoexecマクロにプロシージャの実行で、このプロシージャを割り当てて
起動時に自動バックアップ、古い物を削除、という具合にして、最大5で設定し
てある。

これ、パーソナルレベルなら結構使えるなぁというのが自分の感想。C/Sの場
合は、いくらクライアント側のmdbが壊れても問題ない(完全にUIに徹するので)
この方法は使っていない。

mdbで完結するようなものは、こういうのは必須だと思うけれど、これくらいの
レベルでは実装されていないのが惜しいね。

731 :名無しさん@そうだ選挙にいこう:2008/11/23(日) 20:37:06
>>729
ODBCでまず接続してみてそれでも、同じようにエラーがでる場合には、かなり
厳しいかもね。

Excel -> Accessで接続するものをODBCドライバを設定しておいて接続。MSSQL
経由でデータをExcelに引っ張れるなら、サルベージは可能かもしれないけれど、
プログラムそのものは復旧はできない。

無傷な過去のコピーがあればいいんだけれどね。

732 :712:2008/11/23(日) 21:17:55
>>729
1ヶ月前にバックアップを取っているので、データさえサルベージできればよいのですが・・・
通常も週1でバックアップとっているのですが、今回は直前に取ったバックアップも同様のエラーが出ていました。
ウインドウ右上の×を押して閉じたのがいけなかったのか。

733 :名無しさん@そうだ選挙にいこう:2008/11/23(日) 22:45:23
>>730
詳しいレスありがとうございます。
紹介してあるサイトなどをじっくりと読んでみたいと思います。

734 :名無しさん@そうだ選挙にいこう:2008/11/24(月) 13:16:22
セル内での文字数設定の方法がわかりません。
「文字数オーバーです、切り詰められました」というメッセージが出て、
それ以上文字の入力が出来ません。

アドバイスお願いします。

735 :712:2008/11/24(月) 13:49:40
だめだー。どう足掻いてもサルベージすらできそうにないです。
ご協力頂いた皆様、大変ありがとうございました。
次からはバックアップをもっと頻繁にとって、終了は×を押さずに終了するようにします。

736 :名無しさん@そうだ選挙にいこう:2008/11/24(月) 15:03:21
×押しちゃダメなの?

737 :名無しさん@そうだ選挙にいこう:2008/11/24(月) 20:49:52
×を押すとファイルが壊れる仕様なんて無いと思う。
別なところが問題かと。


起動時に自動でバックアップという案は良いな。
AccessはSQLServerみたいに常駐できないからな。
起動時はmdbファイルを開くのではなく、VBの
プログラムを開かせて、ファイル操作でバックアップを
取るなんていう案もあるな。

738 :名無しさん@そうだ選挙にいこう:2008/11/25(火) 00:23:36
終了時の自動最適化はoffの方が安全かな?
確かにファイルが壊れるのは自動最適化onの時の方が多い気がする。

739 :名無しさん@そうだ選挙にいこう:2008/11/25(火) 20:49:11
アクセス2003なんですが
すでに作られたデータベースの一部のテーブルに新規でレコード書き込んだり
修正したりできないのですがこの設定を解除するにはどうしたらよいのでしょうか?
たぶんパスワードなどはかかってないと思います。

ちなみにこういった初歩的な知識を得るために書籍を買おうとおもうのですが
アクセス2003できる大事典でもかっとけばOKでしょうか?

データベースの知識はシスアドで勉強した程度で
ほとんどありません。


740 :名無しさん@そうだ選挙にいこう:2008/11/25(火) 21:33:41
教えて下さい

テーブルA
社員名、フラグ
クエリA
社員名、フラグ
フラグにチェック入った社員名のレコードは表示させない
テーブルB
社員名(データはクエリAから引っ張る)、フラグ、出勤時間、退社時間
クエリB
退社時間に時間が入力されたら表示しない


ここで質問ですがクエリBのフラグにチェックするとテーブルAのフラグにチェックさせるにはどうしたらいいのですか?

741 :名無しさん@そうだ選挙にいこう:2008/11/25(火) 23:07:32
桐にするといいよ

742 :名無しさん@そうだ選挙にいこう:2008/11/26(水) 01:50:13
テーブルA
社員名 テキスト型
フラグ  YES・NO型
クエリA
社員名 テキスト型
フラグ  YES・NO型
フラグにチェック入った社員名のレコードは表示させない
テーブルB
社員名 ルックアップ型(データはクエリAから引っ張る)
フラグ YES・NO型
出勤時間 日付型
退社時間 日付型
クエリB
社員名 ルックアップ型(データはクエリBから引っ張る)
フラグ YES・NO型
出勤時間 日付型
退社時間 日付型
退社時間に時間が入力されたら表示しない

たぶんクエリBで選択した社員名のフラグ(チェックボックス)をチェックしたら
テーブルAの社員名のレコードのフラグもチェックできるようにしたいのかな?

UPDATE テーブルA SET 社員名 ='ぬるぽ' WHERE フラグ = true;
とかできるのかな?よくわからないけど・・・
オレより詳しい人よろしく><




743 :名無しさん@そうだ選挙にいこう:2008/11/26(水) 05:22:58
トリガを使いたいという意味かな?
Accessだったら、参照整合性くらいの機能しかもってないので、
プログラム側で制御しないと無理なのでは?

744 :名無しさん@そうだ選挙にいこう:2008/11/26(水) 05:37:00
>>739
> すでに作られたデータベースの一部のテーブルに新規でレコード書き込んだり
> 修正したりできないのですがこの
それが具体的にどのような操作なのかによって、対処方法が異なる。
例えば、更新不可の設定になってるフォームから更新しようとしてる場合は無理だし。

> ちなみにこういった初歩的な知識を得るために書籍を買おうとおもうのですが
> アクセス2003できる大事典でもかっとけばOKでしょうか?
そういうことは、自分で判断するものでは?
質問者がこれまでどういう勉強をしてきたかなんて細かくは分からないし。
Accessの操作に関する説明が多く書かれてる書籍を読んだらどうかなって
位しかいえない。

745 :名無しさん@そうだ選挙にいこう:2008/11/26(水) 11:52:54
OS:xp  acceess:2003です。

単票形式のフォームにクエリのデータを表示させた時、ホイールを回すと
表示されているデータが前後のレコードのデータに変わってしまいます。
これが起こらないように設定したいとおもうのですが、なかなかうまくいきません。
やり方があったら教えて頂けませんでしょうか?

フォームの「イベントプロパティのホイール使用時」のプロシージャを作成して
exit sub1行だけのルーチンを作ってみましたがダメでした・・・・

くだらない質問で恐縮ですが、アドバイスお願いします。

746 :名無しさん@そうだ選挙にいこう:2008/11/26(水) 14:34:12
>>745
それはみんなが辿る道。
ここの「レコード移動を抑止する」を読んで、お好みの手順で解決してください。
ttp://www.f3.dion.ne.jp/~element/msaccess/AcTipsFrmMouseWheelEvent.html

他に、常に1つのレコードだけを表示するようにして、
自分でレコード移動ボタンを実装するって方法もある。

747 :名無しさん@そうだ選挙にいこう:2008/11/26(水) 14:58:12
>>740
テーブルAとBのフラグを同一として扱いたいなら、
テーブルBのフラグは削除して、連結クエリを作れば良い。具体的には、まずテーブルを以下のように修正。

テーブルA: 社員名、フラグ
テーブルB: 社員名、出勤時間、退社時間

そして、テーブルAとテーブルBを社員名で連結したクエリCを作って、それを元にクエリBを作る。

クエリC:
SELECT テーブルA.社員名, テーブルA.フラグ, テーブルB.出勤時間, テーブルB.退社時間
FROM テーブルA INNER JOIN テーブルB ON テーブルA.社員名=テーブルB.社員名

クエリB:
SELECT 社員名, フラグ, 出勤時間, 退社時間 FROM クエリC WHERE 退社時間 IS NULL

これでクエリBのフラグはテーブルAのフラグを参照するので、クエリBからテーブルAのフラグを更新できる。

748 :名無しさん@そうだ選挙にいこう:2008/11/26(水) 16:28:24
連結フォームの動作の制御は面倒だよな。必ず意図しない動きがある。
だから、俺はいつも非連結フォームにコマンドボタン配置する方法でやってるな。
(更新不可にしたデータシート形式のフォームや、サブフォームにおいては別。)
多くの人はこういう結論になってるんじゃないのかなと思うが。

749 :名無しさん@そうだ選挙にいこう:2008/11/26(水) 18:00:51
桐のクロスエクセル機能スゲー
アクセスより全然エクセルとの連携良い

750 :名無しさん@そうだ選挙にいこう:2008/11/26(水) 18:06:41
>>748

それを言うと、必ずといっていいほど「だったらVB使えよ」というレスがつくね。
俺も非連結派なのだが、実を言うとAccessを使い始めたとき
Undoを知らなかっただけという話なんだけどねw

751 :745:2008/11/26(水) 18:07:14
>>746
ありがとうございます。早速参考にします。


752 :名無しさん@そうだ選挙にいこう:2008/11/26(水) 20:04:04
すみません、質問です。
非連結フォームで作っていて、そのフォームが閉じられる際の
警告メッセージを出すために、ユーザがデータを変更したかどうかを
チェックするには、みなさんは、どういう方法を使っていますか?

753 :名無しさん@そうだ選挙にいこう:2008/11/26(水) 20:16:13
>>752
データを変更したら、どこかのテキストボックスに1をいれる。

そして、メッセージボックスをつかって、1ならばyes noのメッセージボックスを
出し、そうでなければメッセージを出さずに閉じる。

754 :740:2008/11/26(水) 21:09:02
>>747
ありがとうございます
早速組み直してみます。
レスを下さった方ありがとうございました。

755 :名無しさん@そうだ選挙にいこう:2008/11/26(水) 21:49:31
非連結使うやつはVB使えよ

756 :名無しさん@そうだ選挙にいこう:2008/11/26(水) 21:54:53
まあ別に使ってもいいけど「非連結を使ってる俺のほうが賢いっていうか〜」的な発言は
さすがに看過しかねるわな

757 :名無しさん@そうだ選挙にいこう:2008/11/27(木) 07:36:57
>>753
そういった方法しかないのでしょうかね。
その作り方だと、フォーム上に配置しているオブジェクトのデータ変更の
可能性があるイベントすべてにテキストボックスの値を変更する記述を
しなければなりませんよね。

758 :名無しさん@そうだ選挙にいこう:2008/11/27(木) 10:51:15
10行くらい表示可能な明細フォームで、表示データが10明細に満たない場合、
マウスホイールを一回下に回した後、ホイールをもどしても明細の先頭行が
表示されません。
これを解消する方法(=ホイールの操作のみで先頭行を表示する方法)がありましたら
教えて下さい。

今はコマンドボタンで「先頭行へ移動」というのを作って対応しています・・・・

759 :名無しさん@そうだ選挙にいこう:2008/11/27(木) 15:03:57
>>757

ttp://www.accessclub.jp/bbs3/0329/superbeg99744.html

760 :名無しさん@そうだ選挙にいこう:2008/11/27(木) 18:05:57
WINXPSP2とAccess2002です。
あるPCにアカウントを追加しました。データーを一式コピーしてAccessで開こうとしたら「問題が発生したため…」が出て開けなくなりました。
別のPCでは開けるファイルなので、Accessの問題と考え再インスコしましたが同じ状態です。インスコするときにユーザーの名前のところがデフォルトで古いアカウントが表示されているので
アカウント変更に伴う現象だと思いますが、心当たりはございますでしょうか?古いアカウントとデーターは削除済ですのでアカウントを変えてログインできなくて検証ができない状態です。
宜しくお願いします。

761 :名無しさん@そうだ選挙にいこう:2008/11/27(木) 19:03:21
>>760
自己解決しました。
無関係と思い書かなかったのですが、英語版のWindowsXPでした。その言語設定をJapaneseにしたら開けるようになりました。


762 :名無しさん@そうだ選挙にいこう:2008/11/27(木) 19:24:57
>>759
情報ありがとうございます。リンク先を見てみます。

763 :名無しさん@そうだ選挙にいこう:2008/11/27(木) 22:32:27
>>758
Access2007にする

764 :名無しさん@そうだ選挙にいこう:2008/11/28(金) 13:07:38
>>763
そうなんですか・・・・・
ありがとうございました。

765 :名無しさん@そうだ選挙にいこう:2008/11/28(金) 19:01:27
>>764
そのフォームを一度閉じさせて再度表示させるという方法くらいしかないのでは?

766 :名無しさん@そうだ選挙にいこう:2008/11/29(土) 18:49:33
Access2003とAccess2007は1台のPCに共存出来るのでしょうか?
こういうものってインストールは出来て、初期動作の部分は問題なさそうであっても、
一部に不具合が出たりするって事ってありますよね。

767 :名無しさん@そうだ選挙にいこう:2008/11/30(日) 14:06:55
ありますよね

768 :名無しさん@そうだ選挙にいこう:2008/11/30(日) 18:17:47
【 システム環境  . 】 Windows2000, Access2003
【 VBAが使えるか .】 いいえ
【 VBAでの回答  】 必要であれば
【 検索キーワード 】 コンボボックス テキストボックス

よろしくお願いします。

同一フォーム上にある複数のコンボボックスで選択した値、
テキストボックスで入力した値を
同じフォーム上の別のテキストボックスに、改行してまとめたいのですが
方法がわかりません。

例えば、「コンボ1:県名 コンボ2:市区町村 テキスト1:番地 テキスト2:建物名」 を
テキストボックス2:住所へ以下のように表示させたいのです。
------
県名
市区町村
番地
建物名
------
実際はもっと多数のコンボボックスから値を取得することになります。
Access利用環境が会社のみなので、すぐに実行できませんが
どなたか教えていただけますか?よろしくお願いします。

769 :名無しさん@そうだ選挙にいこう:2008/11/30(日) 18:42:38
>>768
そのコンボボックスに表示されてるデータがどういう形なのかにもよる。
VBAでの記述では、
Combobox1.RowSource = "SELECT ID, 県 FROM T県名"
Combobox2.RowSource = "SELECT ID, 市区町村 FROM T市区町村"
だったら、
TextBox1 = Combobox1.Column(1) & vbCrLf & Combobox2.Column(1)
となる。

Accessの利用環境が会社のみという状況であれば相当厳しくないか?
Office2003 もしくは Office2007 の Personal もっているのであれば、
Access2007はUPGで買うことが出来るから検討した方が良いとおもう。

770 :768:2008/11/30(日) 18:57:19
>>769
早速のご回答ありがとうございます、助かります。

VBAは触ったことがなく、検索しながら、想像しながらで申し訳ないのですが…

コンボボックスのデータは全てテキストで、別テーブルにて管理しています。
まさにT県名、T市区町村というような、単純なテーブルの値です。

改行定数を挟んで、各コンボボックスの何列目のデータかを指定しながら
繋げていけばよい、という事でしょうか。(違ってたらスミマセン)

そうですよね、自宅でも環境を整えないと厳しいと思いつつ…
ボーナスが出たら購入しようと思います。

月曜に会社に行ったら、試してご報告します。ありがとうございました!

771 :名無しさん@そうだ選挙にいこう:2008/11/30(日) 22:22:13
>>770
コンボボックスのプロパティーを設定する場合は、以下の項目になります。
値集合タイプ:テーブル/クエリ
値集合ソース:SELECT 〜(>>769の文)


> 改行定数を挟んで、各コンボボックスの何列目のデータかを指定しながら
> 繋げていけばよい、という事でしょうか。(違ってたらスミマセン)
それであってます。
SELECTで指定したフィールドが何番目なのかを指定します。
一番目のものは、「0」と指定します。例の場合は2番目なので、
「1」と書いてます。

772 :768:2008/12/01(月) 09:22:14
>>769 >>770
うまくいきました!ありがとうございます!

教えていただいたものをどこに記述するか、から始まり、四苦八苦しましたが
テキストボックスにフォーカスした時に、選択されているリストボックスの値が
反映するようになりました。

あと、コピーボタンを作って、
テキストボックスの値をクリップボードにコピーできるようにしてみました。
作ってるとどんどん便利になりますね、もっと勉強しようと思います。

何度も申し訳ありませんが、もうひとつだけ伺ってよいでしょうか。
またしたい事を思いついてしまったのですが、今回は複雑になってしまいそうな…

768の変形です。
各リストボックスの横にボタンを配置して、ボタンを押したもののみ
テキストボックスに改行して追加していく、というのは難しいでしょうか。

前回は、テキストボックス側の制御で、表示するものを順番に指定、という形ですが
コンボ選択し、その横のボタンをクリックしたものを
テキストボックスに転送する、というような動作です。

順固定ではなく、以下のように必要なものだけを好きな順に追記する、という形です。
その時々に応じて、必要な情報を改行してひとつのテキストボックスにまとめられると
ぐっと便利になります。
------
県名
建物名
市区町村
------
自分でも少しがんばって見ますが、どうぞよろしくお願いします。


773 :名無しさん@そうだ選挙にいこう:2008/12/01(月) 15:14:53
>>772
コンボボックスの横にあるボタンには、こういう記述になるかと。
me.テキスト4 = me.テキスト4 & vbCrLf & me.コンボ2.Column(1)

クリックするボタンの順序に関係なく、「県名は絶対に最初に表示する」という
ルールを設けるのであれば、インターフェースの見直しをすることになるだろう。
各種コンボボックスの横にチェックボックスを入れ、テキストボックスの
横に一つだけコマンドボタンを置くとか。
その場合は、以下のような感じで制御をすることになるだろう。
If me.チェック2 = True Then
me.テキスト4 = me.テキスト4 & vbCrLf & me.コンボ2.Column(1)
End If

ここでこういう質問を続けてると、そろそろ煽りの発言が来るぞw
真面目に答えてる俺も俺だがw

774 :768:2008/12/01(月) 22:32:47
>>773

何度もありがとうございます。
いい加減にしなきゃ、そろそろお叱りを受ける頃ですね。

例の如く、出社しないと試せません。
クリックするボタンの順に並べたいので、1つ目の記述でよさそうです。

明日試して、ご報告だけさせていただきます。
ありがとうございました!

775 :名無しさん@そうだ選挙にいこう:2008/12/02(火) 19:04:36
教えて下さい。
SqlServerにあるテーブルのリンクテーブルをAccessに作って参照しているのですが、
SqlServerのテーブルにフィールドが追加されたりしてもリンクテーブルは古いままです。
もちろんリンクしなおせば新しくなるのですが、なにか自動的に新しくするような方法はないのでしょうか?

776 :名無しさん@そうだ選挙にいこう:2008/12/02(火) 19:34:39
>>775
autoexecを利用するなどして、ファイルを開くたびにリンクを更新するプログラムを動かすとか。

っていうか、通常はそういう風にサーバDBのテーブルのフィールドが日常的に変動するなんて
状況は無いからそういった仕様になっているのだと思うが。

777 :名無しさん@そうだ選挙にいこう:2008/12/02(火) 22:02:40
SQLServerに.adpで接続しないでリンクテーブルとか、もうね・・・

778 :768:2008/12/02(火) 22:11:22
>>773
おかげさまで、ほぼ思い通りの形になりました。

普段の仕事では全く触れない部分で困っていたので
本当に助かりました。
後は本を調べながら、詳細を作りこもうと思います。

ありがとうございました!

779 :名無しさん@そうだ選挙にいこう:2008/12/03(水) 09:29:31
>>777
ちょっとデータを参照したいときとか
ODBCでMDBにリンクテーブル作るけどな。
俺は、adpよりmdbのクエリの方が感覚的に使いやすい時があるから。

780 :名無しさん@そうだ選挙にいこう:2008/12/03(水) 15:31:59
すみませんが、教えてください
Access2003では有効だったSQL文が、Access2007ではエラーとなります

メッセージ***************
実行時エラー'3075'

クエリ式 'WK_特売スケジュール用.01 = '2' の','\'!'\又は'()'の使い方が正しくありません
*************************

問題のSQL文

UPDATE Aテーブル
SET Aテーブル.01 = '○'
WHERE Aテーブル.01 = '2'

01は項目名(全角)
Access2007では下記のように修正すると実行できます

UPDATE Aテーブル
SET Aテーブル.01 = '○'
WHERE "Aテーブル.01" = '2'

テーブル項目名が数値(全角)なのが影響してるのでしょうが、お客が作ったものなので
修正が結構な量なので、ソースを変更せずに解決できる方法はありませんか?

781 :名無しさん@そうだ選挙にいこう:2008/12/03(水) 17:37:25
>>780
ソースを変更しないとエラーでとまるのだから、ソースを変更するしか方法がなさそうに
思うんだけど・・・
それでもどうしてもというのであれば、プロパティーの設定あたりを試行錯誤的に変更
してみるしかないと思う。
実行している環境がどういう状況なのか分からないので、解決方法となるかどうかは
分からないけれど、Access2003のランタイムを使って実行するという手段もあると思う。

Accessなんかでは、フィールド名に数字だけを使うとか、先頭に数字を使うとかすると
エラーでうまく動かなかったりする経験があったので、俺はフィールド名は「文字+数字」
にするようにしてるな。そういう規則になるように、文字列の置換をするのも手段としてある。
置換だと労力かからないけど、それは駄目なのかな?

782 :名無しさん@そうだ選挙にいこう:2008/12/03(水) 18:42:03
>>781
ありがとうございます
2003のランタイムは試してみます

数値項目はまずいでよっては言ってるんですけど・・
複数端末でMDBのネットワーク参照してるんで
DBはいじりたくないとのことで

783 :名無しさん@そうだ選挙にいこう:2008/12/03(水) 18:44:24
>>780
つ ttp://support.microsoft.com/kb/932994/ja

そもそもフィールド名の先頭に数字を使うなんて・・・

784 :名無しさん@そうだ選挙にいこう:2008/12/03(水) 20:27:24
半角ならともかく、全角も駄目なのか。
相変わらず妙なことをしてくれる>MS

785 :名無しさん@そうだ選挙にいこう:2008/12/03(水) 21:41:14
半角と全角の数字が混在
半角スペース
半角カタカナ
・(ナカグロ)
()(カッコ・カッコ閉じ)

テーブル名フィールド名にこれらの文字を使いまくりのDBが動かなくなって
作った人間も会社辞めちゃったからアンタなんとかしてって持ち込まれる仕事は
もうイヤだお・・・

786 :名無しさん@そうだ選挙にいこう:2008/12/03(水) 22:43:47
>>784
理解に苦しむエラーはたしかにあるね。

なぜか、ボタン押すとエラーを吐くようになったので、Visual Basicの画面に行き、特に
ソースに問題もないので、元の画面に戻ると素直に動く。

で、閉じてから再起動し、ボタンを押すとまたエラー。
で、その後、ボタンに割り当てていたマクロを""でくくって、マクロ名をきちんと指定する
とエラーを吐かなくなるというへんな現象が起きていた。ついさっきの話。

他のマクロはとくにこんなことしていないが、このフォームのこのマクロだけがこういう
現象が起きた。>>780のエラーも過去にどうやって克服したか忘れたけれど、こういう
パターンじゃない時に起きたことがある。

787 :名無しさん@そうだ選挙にいこう:2008/12/03(水) 22:45:36
>>785
俺も今のMySQLクライアントがそんな感じ。なので、テーブル名とかクエリ名などを
見直している。

一定の規則を設けて名前を付け替えているよ。

788 :名無しさん@そうだ選挙にいこう:2008/12/03(水) 22:46:19
>>780
金もらって修正するか2003のまま我慢しろの2択だな。
簡単に出来る方法を調べるのにも時間はかかるんだし。

789 :名無しさん@そうだ選挙にいこう:2008/12/04(木) 07:26:57
>>780
テーブルじゃなくて、クエリをつかってみるとか

790 :名無しさん@そうだ選挙にいこう:2008/12/04(木) 09:19:40
780です
皆さんレスありがとうです

>>783
ここには自力ではたどり着けませんでした
おかげ様で現象よく理解できました、客への説得材料になりますね

>>789
VBAでガチガチにSQL文使用しているので
しかも1画面表示するのに100発以上(例の01は日付です)

791 :名無しさん@そうだ選挙にいこう:2008/12/05(金) 10:43:52
OS:XP ACCESS2003です。

抽出条件入力→明細表示→(明細をダブルクリックで選択された
明細データの)詳細データ表示という画面遷移を作っています。

ここまではよいのですが、詳細データ表示画面に「次レコード」「前レコード」という
コマンドボタンを付加し、前後のレコードを表示出来るようにしたいのですが、最初に表示された詳細データと
新規登録のデータしか表示されません。

なにか解決方はないでしょうか?

GoTorecord acNext と GoToRecord acPreviousを使っています。
詳細データ表示画面に飛ぶときは、docmd.openform AAAA, , ,stLinkCriteriaを使っています




792 :名無しさん@そうだ選挙にいこう:2008/12/05(金) 11:50:39
フォームを開く時にstLinkCriteria使ってフィルタをかけているから悪いんじゃね

フィルタかけずにフォーム開いて、開いたフォームの「開く時」イベントでレコードの
移動をすれば出来ると思う

XXXX → 開く元のフォーム(明細表示)
AAAA → 開いたフォーム(詳細データ表示)
XXXXの「商品ID」 WクリックでAAAA開くとすると

フォームXXXXの商品IDダブルクリック時イベントは
DoCmd.OpenForm "AAAA" だけ

フォームAAAAの開く時イベントに
Me.Recordset.FindFirst "商品ID=" & Forms!XXXX!商品ID で該当レコードへ移動

その後のレコード移動は
GoTorecord acNext と GoToRecord acPrevious でおk

がんばってちょ





793 :791:2008/12/05(金) 12:08:47
>>792
ありがとうございます。
とてもわかりやすいです。というかコードそのままですね。
サンクスでした!

794 :791:2008/12/05(金) 20:15:53
>>792
教えていただいた通りやっているんですが、
Me.Recordset.FindFirst "商品ID=" & Forms!XXXX!商品ID
がうまく動いてないようです。デバッガで確認したところ「Forms!XXXX!商品ID」は予想通りの
値が入っているんですが、詳細画面に表示されるのは明細画面に表示(抽出)された
レコードの先頭になってしまいます・・・・・。

現在、レコードの抽出はクエリを使ってやっているんですが、RecordsetはDAOを使わない
と駄目なんでしょうか?


795 :名無しさん@そうだ選挙にいこう:2008/12/05(金) 20:33:44
792ではないが…

明細行をダブルクリック→ 詳細フォームが開いていなければ開く→
→ 詳細フォームのレコードソースを操作して→ 詳細フォームをRequery

これじゃ駄目なのかな?

796 :名無しさん@そうだ選挙にいこう:2008/12/05(金) 21:05:42
>>794

Forms!XXXX!商品IDのデータ型はテキスト型?

テキスト型なら
Me.Recordset.FindFirst "商品ID='" & Forms!XXXX!商品ID & "'"
になるんだけど

ためしに確認してみたら、テキスト型を ’’ 無しで検索すると
レコードの先頭にいってしまった

確認してみて

797 :名無しさん@そうだ選挙にいこう:2008/12/06(土) 07:55:15
>>796
数値型(オートナンバー)です。
もう少し調べてみます。ありがとうございました。

>>795
レコードソースの操作がピントきませんが、そちらの方法も調べて試してみます。
ありがとうございました。

798 :794:2008/12/06(土) 08:16:28
>>796
先頭レコードが表示された時の詳細画面の動きですが、「次レコード」、「前レコード」のボタンを押すと、
明細画面で選択したレコードを基準にして前後のレコードが表示されてます・・・。
(商品CDが昇順で表示されているとして、CD:6をダブルクリックした場合、詳細画面でCD:1が表示され、
「次レコード」を押すとCD:7が表示されるということです)

一応ご報告までです。

799 :794:2008/12/06(土) 21:37:07
>>792でのアドバイスを参考に、
明細画面、詳細画面だけの簡単なものを作ってテストしたら、きちんと動きました。
なんとか先が見えてきました。
レス下さった方ありがとうございました。

800 :名無しさん@そうだ選挙にいこう:2008/12/07(日) 14:41:16
mdbをサーバ側(データのみ)とクライアント側(フォームのみ)に分けているのですが、
このクライアント側のmdbの内容を変更した場合、各クライアントのmdbファイルを
更新するのに良い方法は無いのでしょうか?

VB.NET などでは自動で更新プログラムを探しに行くという機能があるようですが、
ちょうどそれにあたるものを実現する方法です。

mdbのバージョンアップの要望が細かいレベルで頻繁にあるというのと、クライアントが
PCをなおしこんだりしていて、mdbファイルを更新する作業が出来ないことがあるという
状況なので、そういう方法が無いかなと思っています。
今は、サーバの共有フォルダにクライアント用のmdbファイルをおいておき、
各クライアントは、そのファイル実行するという方法で対処していますが、やはり、
ネットワークの負荷が気になっています。

OSやAccessのバージョン、VBAなどについては柔軟に対応出来るので、問いません。
よろしくお願いします。

801 :名無しさん@そうだ選挙にいこう:2008/12/07(日) 14:54:54
サーバ側mdbにバージョン情報入れといて「バージョンアップしろやゴルァ」って表示すればいい。
更新なんてファイルコピーだけでいいんだろ?batでも出来る。

802 :名無しさん@そうだ選挙にいこう:2008/12/07(日) 18:03:52
>>801
なるほど。batファイルの機能を使えば良さそうですね。
ありがとうございます。

803 :名無しさん@そうだ選挙にいこう:2008/12/07(日) 23:53:04
WinXP Pro
Access2003
文字列を返す関数を呼び出してレポートに表示させていますが、
そこで、理解できないエラーがでて困っております。
お知恵をお貸しいただければと思います。

レポート表示時
初回起動時1頁目は正しく表示され2頁目、3頁目に移るとエラーとなる。

レポートを閉じて(Accessは開いたまま)
再度開くと1頁,2頁,3頁と関数から取得した文字列が表示されます。
ソースというより、設定とか、Accessの基本的な部分で間違っているのかなと
思うのですが、似たような事象を経験されたかた折られませんでしょうか?

ソースは下記のように単純なものです。

Function returnHoge(customerCode As String, pageNo As Integer, koukiKind As String) As String

sqlHoge = "SELECT * FROM HOGE"
Set rsHoge = CurrentProject.Connection.Execute(sqlHoge)
returnHoge = rsHoge.Fields(0)

End Function

804 :名無しさん@そうだ選挙にいこう:2008/12/08(月) 09:02:28
フィルタで絞り込んだレコードのメモ型フィールドの値を、一気に置換するには、どうすれば良い?

805 :名無しさん@そうだ選挙にいこう:2008/12/08(月) 10:46:18
会社で作成していたフォームを自宅に持ち帰って修正しようと開いてみたところ、
「立体のくぼみ」でプロパティ設定していたテキストボックス等が設定通り表示されません
(枠線に囲まれただけの設定になってます)。

OSのデザイン設定に依存していると思うのですが、何処をいじればいいのかわかりません。
くだらない質問で恐縮ですが、どなたか教えて下さい。

環境 会社自宅とも access2003 os:XPです。

806 :名無しさん@そうだ選挙にいこう:2008/12/08(月) 14:15:31
>>804

メモ型ってUpdateできないのか?

807 :名無しさん@そうだ選挙にいこう:2008/12/08(月) 19:07:16
>>805
たとえば、ボタンもおなじくOSの設定に影響を受ける。

下のスタートボタンが、クラシックだとWindows95からお馴染みの四角いボタン
になる。それがAccessの中でも反映されるわけだ。これはタスクバーで右くり
した後のプロパティの中と、デスクトップ上で右くりした後のプロパティの中に
あるデザインのところでカエルことができる。

また、Access2007からは、Accessのオプションの中にあるフォーム上のコントロールに
Windowsのテーマをj使用するがある。これにチェックがはいっていると、今さっき語った
内容が適用され、チェックがはずれていれば適用されない。

http://www2.uploda.org/uporg1841332.jpg

808 :名無しさん@そうだ選挙にいこう:2008/12/08(月) 19:37:31
>>806
お忙しい所恐縮ですが、少々具体的に教えてくださいませ。
表形式フォームでフィルタ掛けて目的のレコードに絞り込んだ状態で、表示されてるレコードのメモ型項目を一気に更新したいのですが。

宜しく、お願いいたします<m(__)m>

809 :名無しさん@そうだ選挙にいこう:2008/12/08(月) 21:20:29
>>808
フィルタが掛かった状態のものをテーブル、もしくはクエリとして、別の更新クエリ
を用意する。更新クエリはこのフィルタがかかったものと、あらかじめ用意しておい
た別のテーブルとを比較して実行する。

これで行けるのでは?

俺はこの手法で、テーブルにある一部の値(たとえば、経理課コードなど)を変更
するために、ブラックリストテーブルと、逆に値として抽出されるように一部のフラグ
を変更するホワイトリストテーブルを用意してあって

様々な更新クエリをこの2つのテーブルを元に作成し、適用、テンポラリのテーブル
の値をさらにフォームで表示して計算し、レポートを作成なんてやっている。まぁ、こ
れも、使っている給与計算システムがしょぼいからに他ならないからこうしているん
だけれどね。

810 :名無しさん@そうだ選挙にいこう:2008/12/08(月) 21:38:33
>>808
図にするとこんな感じ
http://www2.uploda.org/uporg1841638.jpg

メモ型だからできないなんてことはないと思う。かくいう自分はバックエンドをMySQLに
して、ODBCでリンクしたテーブルを元にこうした、ブラックリストテーブルを活用して、
既存の給与計算システムではできないことを実現しているのであるが、その際のMySQL
側のテーブルの該当箇所のデータ型はCHAR(255)となっている。これが、Access側で
は、メモ型として認識される。

811 :名無しさん@そうだ選挙にいこう:2008/12/08(月) 21:45:51
>>809
なんか難しそうで良く解らないのですが、済みません ^_^;

> フィルタが掛かった状態のものをテーブル、もしくはクエリとして、別の更新クエリ
この、フィルタが掛かった状態のものをクエリとして取得する方法が思いつきません。

原理が良く解っておらず、自分でもトンチンカンな事を書いているかもしれませんが、
DAOレコードセットはcloneでフォームでフィルタが掛った状態を容易に取得できますが、どうやってレコードセットにSQL UPDATE掛けるのか?
それとも、フォームの「フィルタの編集」から「クエリとして保存」はあるのですが、その操作をどうやってマクロやVAに乗せるのか?
ヒントでも何でもアドバイス頂ければ幸いです。

一応、VBA は Me.Filter と Me.RecordSource を変数に代入する程度は使えます。

812 :名無しさん@そうだ選挙にいこう:2008/12/08(月) 21:46:49
>>809

808ではないが、いまいち意味が解らんなぁ。
更新クエリ使うのはいいとして、比較する必要があるのか?
抽出条件さえあっていれば問題なさげだが。

813 :名無しさん@そうだ選挙にいこう:2008/12/08(月) 21:52:17
>>811-812
言葉足らずですまん・・・・
人に物を伝えるのって難しいね・・・ なんか凹んでしまった。

814 :名無しさん@そうだ選挙にいこう:2008/12/08(月) 21:53:34
>>810
>>812

済みません。
リロードせずに被りました。
教えて頂いてる事の基本的な点が解ってません。

その図の「フィルタしたクエリ」の作り方が…
フォームをフィルタした状態のクエリの取得方法が解らないです。

バカバカしい、基本的な問題かもしれませんが、教えてくださいませ。

815 :名無しさん@そうだ選挙にいこう:2008/12/08(月) 21:59:39
>>808

どうせコマンドボタンを配置するのだろうからクリック時イベントに

Dim MySQL As String

MySQL = "UPDATE 更新テーブル名 SET 更新フィールド名 = 更新内容 WHERE 抽出条件"

CurrentProject.Connection.Execute MySQL

でいいのでは。



816 :名無しさん@そうだ選挙にいこう:2008/12/08(月) 22:05:05
>>815
有難うございます。
それは解ります。

> MySQL = "UPDATE 更新テーブル名 SET 更新フィールド名 = 更新内容 WHERE 抽出条件"

この、MySQL へ代入する文字列を、 Me.Filter と Me.RecordSource から生成する方法が解らなくて困っています。
初心者に教えて下さい<m(__)m>

更新フィールド名 :[メモ] (メモ型フィールド)
更新内容:"もうダメポ"

817 :名無しさん@そうだ選挙にいこう:2008/12/08(月) 22:06:54
>>815

フィルターはどうやってかけているの?

818 :名無しさん@そうだ選挙にいこう:2008/12/08(月) 22:11:31
>>817
表形式フォームからフィールド値を右クリック、"ちょめちょめ"を含む とかです。

819 :名無しさん@そうだ選挙にいこう:2008/12/08(月) 22:22:02
>>818

それ、本当にフィルター?
俺はVer.2002なのだが、そんなのでてこないぞ。
2007は知らんが。

820 :名無しさん@そうだ選挙にいこう:2008/12/08(月) 22:22:28
普通に、
CurrentDb.Execute "UPDATE " & Me.RecordSource & " SET メモ='もうダメポ' WHERE " & Me.Filter
で良いんじゃない?

821 :名無しさん@そうだ選挙にいこう:2008/12/08(月) 22:33:57
>>819
そうです 2007です。

>>820
有難うございます。

代入する場合は、単純に両端に " を付けて
MySQL =""UPDATE " & Me.RecordSource & " SET メモ='もうダメポ' WHERE " & Me.Filter"
これで、宜しいでしょうか?

822 :820:2008/12/08(月) 22:43:06
>>821
両端の"は要らない。
あと、Execute の後に Me.Requery しないと多分、フォームの表示は更新されない。

あと、>>820 の方法だと、Me.RecordSource に「SELECT * FROM T1 INNER JOIN T2 ON T1.ID=T2.ID」とか、
直接クエリを書いてる場合は、動かないので注意。その場合は保存したクエリを使ってください。

あと、いちいちクエリにせんでも↓みたいにループさせる方法もあるよ。
Dim p As DAO.Recordset
Set p = Me.RecordsetClone
Do Until p.EOF
p.Edit
p("メモ") = "もうダメポ"
p.Update
p.MoveNext
Loop

823 :名無しさん@そうだ選挙にいこう:2008/12/08(月) 22:48:42
フィルターは2003以前の右クリ一発でイコール条件の値が入力できる仕様に慣れてると
2007の右クリ→左クリ→値入力の仕様がかなり面倒に感じるな・・・

824 :名無しさん@そうだ選挙にいこう:2008/12/08(月) 22:53:57
>>822 さん、および皆様、有難うございます。

何か解って来ました。
[メモ]はメモ型フォールドで、"もうダメポ"は改行含んで数行あります。

数行のメモ型データを、バリアント型変数に代入して、
>>820 の 'もうダメポ' の部分を バリアント型変数 に入れ替えれば動きますよね?

いま自宅で Accessなくて試せないので、明日やってみます。

825 :名無しさん@そうだ選挙にいこう:2008/12/08(月) 23:13:01
>>810
CHAR(255)ならテキスト型でも全然問題ないんだから
NVARCHAR(1000)とかで試してみればいいのに・・・

826 :名無しさん@そうだ選挙にいこう:2008/12/08(月) 23:36:11
すみません、質問です。

【 システム環境  . 】 Access2003
【 VBAが使えるか .】 はい
【 VBAでの回答  】 可

サブフォームをデータシート形式で表示させているのですが、
そのデータ表示形式を複数の条件でソートをすることは可能なのでしょうか?
SQL文でいう、ORDER BY 商品ID, 日付 にあたるものです。
まず、商品ID順に並び替えを行い、同じ商品IDがある場合は、そこを日付順に
並び替えるというものです。

フォームのプロパティの「並び替え」の欄に「商品ID, 日付」としても、
目的のようになりません。

827 :820:2008/12/09(火) 00:05:45
>>824
補足。置き換えるデータは ' で囲むこと。あと、データの ' は '' に置き換えないとエラーになるよ。
なので、完全なコードを書くとこんな感じ。

Dim p_val As Variant
p_val = "もうダメポ"

Dim p_memo As String, p_sql As String
p_memo = "'" & Replace(Nz(p_val), "'", "''", , , vbBinaryCompare) & "'"
CurrentDb.Execute "UPDATE " & Me.RecordSource & " SET メモ=" & p_memo & " WHERE " & Me.Filter

正直、Execute を使った方法だとレコードを再表示しないとフォームに表示された値が更新されないので、
あんまりお勧めしない。更新速度が気にならないなら >>822 の下にあるループを使った方法をお勧めする。

>>826
親フォームの並び替えプロパティを設定してないかい?
子フォーム(サブフォームのソースフォーム)の並び替えプロパティを設定すれば出来るはずだけど。

828 :820:2008/12/09(火) 00:08:18
>>827 修正。消し忘れてた。
×Dim p_memo As String, p_sql As String
○Dim p_memo As String

829 :名無しさん@そうだ選挙にいこう:2008/12/09(火) 01:36:55
xp access2003です。

あるフォームのテキストボックスのプロパティ設定で下のようなコードを書きました。
Me.AAAAA.BackStyle = 1
テキストボックス名AAAAには全角の括弧が含まれているですが、コンパイルエラーに
なってしまいます。
Me.[AAAAA].BackStyle = 1 としてもうまくいきません。
全角の括弧を使わないテキストボックス名に変更して解決は一応したのですが、
どういうふうにすればコンパイルエラーにならなかったのでしょうか?

830 :名無しさん@そうだ選挙にいこう:2008/12/09(火) 01:56:35
>829
全角の括弧を使う時点で自殺行為だが、一応
Me("全角の括弧を使ったコントロール名").BackStyle = 1
とかかな。

831 :名無しさん@そうだ選挙にいこう:2008/12/09(火) 02:11:44
>>830
>全角の括弧を使う時点で自殺行為だが
そうなんですか・・・・勉強になりました。
ありがとうございました。

832 :824:2008/12/09(火) 08:48:14
>>827
お早うございます。
ごうも有難う。

833 :名無しさん@そうだ選挙にいこう:2008/12/09(火) 20:43:12
どうかお力を貸してください。

【 システム環境  . 】 WindowsXP SP3, Access2003,2007混在
【 VBAが使えるか .】 はい
【 VBAでの回答  】 可

SQL

834 :名無しさん@そうだ選挙にいこう:2008/12/09(火) 20:45:19
すいません、途中で送信してしまいました。

【 システム環境  . 】 WindowsXP SP3, Access2003,2007混在
【 VBAが使えるか .】 はい
【 VBAでの回答  】 可

SQLServerとAccessを利用して開発をしています。今は複数人でひとつのADPファイルの
開発をしていて、それぞれ開発した差分(フォームやプロシージャ、モジュールなど)を
手動でインポートやコピペしているのですが、差分を自動で検出してひとつにまとめると
いったことはできないのでしょうか?
いろいろ調べてみましたが、そういった内容はでてこなかったもので教えてくださいませ。
お願いいたします。


835 :名無しさん@そうだ選挙にいこう:2008/12/09(火) 21:27:23
>>834
>開発をしていて、それぞれ開発した差分(フォームやプロシージャ、モジュールなど)を
>手動でインポートやコピペしているのですが、差分を自動で検出してひとつにまとめると
>いったことはできないのでしょうか?

「差分」がどのレベルかわかんないけど、オブジェクト単位ならVSSでできた気がする。
もし同じモジュールのあちこちを複数人でいじっていてそれをマージしたいという話だったら、
無理じゃないかと思うが。。。

836 :名無しさん@そうだ選挙にいこう:2008/12/09(火) 21:53:35
Visual SourceSafe 使え

837 :名無しさん@そうだ選挙にいこう:2008/12/09(火) 22:07:45
>>835>>836
ありがとうございます。こんなソフトがあるんですね。
どうもありがとうございました。


838 :名無しさん@そうだ選挙にいこう:2008/12/10(水) 10:18:59
すみませんおしえてください。

フォームに変更ボタン、保存ボタン(フォームオープン時は使用不可)をつけて、
変更ボタンを押すと各項目が編集可能になり、保存ボタンが押下できるようなる。
保存ボタン押下後、編集不可にして、保存ボタンも押下出来ないようにする。

というのを作ってるんですが、
Me.保存,Enabled = False の一行をどこにいれればいいのかわかりません。

保存ボタンの「フォーカス喪失時」「フォーカス喪失後」にいれて試してみたんですが、
「コントロールがフォーカスを取得しているときは、コントロールを無効にすることはできません」
という(エラー)メッセージが出てしまいます。

どなたかご教授願います。



839 :名無しさん@そうだ選挙にいこう:2008/12/10(水) 10:32:55
>>838

Me.保存,Enabled = False は保存ボタンのクリックイベントの
編集不可処理後に書けばおk

その前に hoge.SetFocus でフォーカスを他へ移しておけば
問題なし

840 :名無しさん@そうだ選挙にいこう:2008/12/10(水) 10:36:23
>>839
なるほど・・・  早速ためしてみます。
さんくすです。


841 :ライトレール321:2008/12/10(水) 10:44:30
OS:Windows XP SP3
Access Version:2003
コンボボックスで一度リストから項目を選択し、BackspaceかDeleteで削除して空白にした場合、
前に選ばれていた項目の値が残ってしまいます。
テーブルビューでは空白になっているのですが,そのテーブルをクエリで参照すると前に選ばれて
いた項目の値がそのままになっているのです。完全にNullにするには,どうしたらよいのでしょうか。
コンボボックスの値集合ソースはクエリです。よろしく,お願いします。

842 :名無しさん@そうだ選挙にいこう:2008/12/10(水) 14:17:29
>>841
SelectedIndexの値を-1にしたら良さそう。

843 :名無しさん@そうだ選挙にいこう:2008/12/10(水) 15:36:31
OS:Windows XP SP2
Access Version:2003

クエリを使って表示されているフォーム上で、ある処理をする時に
別のテーブルを検索してレコードを取得したいのですが、
どのようなオブジェクト、メソッドを使えばいいのでしょうか?

おおざっぱな質問ですみません。

844 :名無しさん@そうだ選挙にいこう:2008/12/10(水) 15:55:11
>>843  男は黙って Dlookup

845 :名無しさん@そうだ選挙にいこう:2008/12/10(水) 17:39:45
>>843
もしくは CurrentDb.Execute か CurrentProject.Connection.Execute

846 :名無しさん@そうだ選挙にいこう:2008/12/11(木) 10:27:27
http://res2ch.blog76.fc2.com/blog-entry-3778.html

どっかで見たと思ったら このスレじゃん だれだよww

847 :名無しさん@そうだ選挙にいこう:2008/12/11(木) 10:52:04
教えて、

Yes/No型のフィールド[FLAG]の値を反転させるのは、
Me.[FLAG] = Me.[FLAG] * -1
で旨く行きませんでした。

スマートにカッコよくやるには、どう記述すれば良いですか?

848 :名無しさん@そうだ選挙にいこう:2008/12/11(木) 10:55:23
【 システム環境  . 】 WindowsXP Pro SP2, Access2003
【 VBAが使えるか .】 いいえ
【 VBAでの回答  】 否

日付時刻型で書式が[mm/dd/yyyy hh:mm:ss]になってるフィールドから
選択クエリで前日のデータだけ抽出したいのですが方法がわかりません

試しに抽出条件を
format(DateAdd("d",-1,Date()),"mm/dd/yyyy hh:mm:ss")
と式を指定しても前日の00:00:00のデータしか抽出されず・・・。
前日の00:00:00〜23:59:59と指定する方法があればどなたか教えてください。
よろしくお願いします。

849 :名無しさん@そうだ選挙にいこう:2008/12/11(木) 12:35:20
>>847
Notを使う

>>848

850 :名無しさん@そうだ選挙にいこう:2008/12/11(木) 12:36:08
>>848
DateDiffを使う

851 :名無しさん@そうだ選挙にいこう:2008/12/11(木) 12:36:44
>>849
Not Me.[FLAG] ででけますた

852 :名無しさん@そうだ選挙にいこう:2008/12/11(木) 12:44:20
>>848
2007の右クリックフィルタで前日を選ぶと、Me.Filterの値は下記のように設定されるよ

Year([])=Year(Date()) AND Month([])=Month(Date()) AND Day([])=Day(Date())-1)

853 :名無しさん@そうだ選挙にいこう:2008/12/11(木) 13:54:14
>>852
848ではないけど、その式では正しく動作しない気がするんだが…

854 :852:2008/12/11(木) 14:37:30
最初のカッコ ( 外した
最後のカッコ ) 外し忘れた
他は項目名を消して[]にしただけ、まんま2007の右クリック日付フィルタが作ったもの

855 :名無しさん@そうだ選挙にいこう:2008/12/11(木) 14:53:05
>>852
その式で、本日がyyyy年mm月01日の場合でも動作する?
動作するんだったら、Ver.2007が内部で適当に解釈してくれてるんだろうね。

856 :852:2008/12/11(木) 15:04:49
なるほど、元旦になったら試してみる

857 :しましま:2008/12/11(木) 19:46:46
>>848
まず、日付時刻型で書式が[mm/dd/yyyy hh:mm:ss]になってるフィールドと書かれていますが、
登録時点で「時間」のデータが不要であれば、カットしたほうが後々の(今回のような)
後処理で余計なことを考えなくていいのでなるべく「日付部分だけ」(時間は00:00:00となる)
でデータをとっていったほうが後での扱いが楽です。
(今からでも更新クエリで日付部分だけにすれば、00:00:00の日付として抽出できることに
 なりますね)

もし時間部分も必要でカットできないのであれば、対象日付の条件式部分で
>= DateAdd("d",-1,Date()) AND < Date()
とすれば良いです。

ちなみに日付型のフィールドであれば、内部的にデータはリテラル値(数値)で記録されているので、
書式は関係ないので、Format関数による整形は不要です。

※日付リテラルでは1日を「1」でカウントしているので、前日は
「DateAdd("d",-1,[日付])」 以外にも、「Date()-1」で表現できます。
この性質を理解した上で別に式を書くならば、条件部分は
 Betwenn Date()-1 AND Date()-0.00001
としても有効です。
(ちなみに1秒は「0.00001」で表します)
自分の場合、このように前後1日であれば、わざわざDateAdd関数は
使いわずにこの方法で書くようにしています。


858 :しましま:2008/12/11(木) 19:56:35
参考までに、時間も含め記録されている日付型のデータから、今日のデータを
抽出する場合の条件は、
 Betwenn Date() AND Date()+0.99999
となります。
(0.99999の部分は時間部分「23:59:59」を表します)

試しに書式やFormat関数などを利用して、「数値データ→日付形式」として
見たり、逆に「日付データ→数値形式」として表示してみると、相互の関係が
よく分かりますよ。

859 :名無しさん@そうだ選挙にいこう:2008/12/11(木) 20:28:48
>>857-858
内部的にリテラルだからといって、それを利用してコードを書くと
後々になってから思わぬバグの原因になったりするからお勧めしない。
(Access側の内部的な仕様変更など)

860 :しましま:2008/12/11(木) 20:35:52
あともう一つ。
条件式中で使う分には、「Date()+0.99999 」の表現でも問題ないけど、
表示項目として使うならば、CDate関数またはFormat関数で最後に変換しましょう。

861 :名無しさん@そうだ選挙にいこう:2008/12/11(木) 20:45:56
ttp://support.microsoft.com/kb/210276/ja

>マイクロソフトは、この情報をプログラミング言語の使用方法の一例として提供するだけであり、
>市場性および特定目的への適合性を含めて、明示的にも黙示的にも、一切の保証をいたしません。

こんな1文を見せられると、わざわざ好き好んで小数点以下をこねくり回す使い方は
個人的にはやりたくないとも思ったり・・・

あと1日は60秒*60分*24時間=86400秒だから1秒が0.00001なら23:59:59は0.86399じゃないと
納得いかんてのもあるw

862 :名無しさん@そうだ選挙にいこう:2008/12/11(木) 20:49:34
ちなみに2009年1月1日はうるう秒でAM8:59:00からAM9:00:00の間隔が60秒じゃなくて61秒になる。
内部的にどんな値が埋め込まれるか全然わからんわ・・・

863 :名無しさん@そうだ選挙にいこう:2008/12/11(木) 21:16:13
【 システム環境  . 】 WindowsXP, Access2007
【 VBAが使えるか .】 少し
【 VBAでの回答  】 可
【 検索キーワード 】 リレーションなど

色々と自分で考えてみたのですが、経験不足のため分からないことがあります。

1.次のようなリレーションは可能でしょうか?

  (1) 【テーブルA;フィールド1】(一) → (多)【テーブルC;フィールド1】
  (2) 【テーブルA;フィールド1】(一) → (多)【テーブルB;フィールド1】
  (3) 【テーブルB;フィールド2】(一) → (多)【テーブルC;フィールド2】

  テーブルAからテーブルCに、直接的にリレーションを作ると同時に、
  テーブルAからテーブルBを経由してテーブルCへと、間接的にリレーションを作るのですが、
  こうしたリレーションを同時に作ることは可能でしょうか?

2.上記の回答が可能な場合、こうしたリレーションの作り方は変則的ですか?常識的ですか?
  書籍とネットで一からはじめているので、手掛かりがなにもない場合、すごく不安になってしまいます。
  『自分がやろうとしていることは、変なのかな?』と。

ご教示よろしくお願い致します。



864 :名無しさん@そうだ選挙にいこう:2008/12/11(木) 21:19:47
リレーションでNGにしてる俺の判断は間違いなく正解

865 :名無しさん@そうだ選挙にいこう:2008/12/11(木) 22:28:28
【 システム環境  . 】 WindowsXP SP2, Access2007
【 VBAが使えるか .】 少し
【 VBAでの回答  】 可

最近accessを使い始めた者です。お手柔らかにお願いします。

仕事の進捗度合を計るために、日々受け付けた書類のうち何件未処理件数があるかを把握できるようにしたいと考えています。
あるテーブルをもとに@日付、A書類受付件数、B書類処理件数をフィールドに持つクエリを作成したのですが、ここに

 各レコードに入力された日付までの受付件数の和−各レコードに入力された日付までの処理件数の和(=未処理件数)

をレコードとして持つような第4のフィールドをこのクエリに追加したいと思っています。可能でしょうか?
可能な場合にはどうかその方法をご指導願います。

866 :名無しさん@そうだ選挙にいこう:2008/12/11(木) 22:38:04
質問です。といっても問題というわけじゃないのですが

Access + MySQLの環境で、自分はチェックボックスの場合、MySQL側のデータ型
をTINYINT(1)にしてあります。これで、YES/NOをやらせているわけです。

ですが、ウェブサイトを見ていると、YES/NOの場合にはENUM型を使う的な表現が
ありました。実際にはどちらが実用上正しいのでしょうか?

運用する上では別段困ってもいないのですが(クエリでフィルタする時も、-1か0の
どちらかで判定させるようにしているので)なんとなく気になったので質問と相成りま
した。

867 :名無しさん@そうだ選挙にいこう:2008/12/11(木) 22:52:40
>>864
NGにしてるのに読めるのか?

868 :名無しさん@そうだ選挙にいこう:2008/12/11(木) 23:24:27
>>863
テーブルごとの従属関係で考えると分かりやすいんじゃないかな?
TblA→TblB→TblCと考えるなら、以下のようで良いと思う。

[TblA; Fld1]→[TblB; Fld1]

[TblB; Fld1]→[TblC; Fld1]
[TblB; Fld2]→[TblC; Fld2]

>>865
DSum関数を使えば、ある日付までの合計を求めることができるので
フィールドにDSum関数を使った式を設定すればOK!
でもその手の処理を実現するのはどんな方法でも重くなりがち。

>>866
ENUM型にしておくとYes/No以外が入力された場合の処理がしやすいという
考えがあるんじゃないかな?

869 :名無しさん@そうだ選挙にいこう:2008/12/11(木) 23:31:07
まさか、被るとは……。

>>863
1.可能です。
2.要件によります。
そのリレーションの場合、Bにはない(A.1, B.2)の組合せがCに挿入できますけど、
それが求める要件なら問題ないです。

>>865
自己結合して、結合の条件を自分の日付以前で良いんじゃないでしょうか。
SELECT A1.日付, A1.受付件数, A1.処理件数, SUM(A2.受付件数 - A2.処理件数)
FROM T1 A1 LEFT JOIN T1 A2 ON A2.日付<=A1.日付
GROUP BY A1.日付

870 :869:2008/12/11(木) 23:47:50
>>869 訂正です。
×GROUP BY A1.日付
○GROUP BY A1.日付, A1.受付件数, A1.処理件数

871 :>>863:2008/12/12(金) 00:31:53
>>863です。

>>868さん、>>869さん、ご教示いただきまして、どうもありがとうございました。
>>869さんのご指摘のとおり、Bにはない組み合わせも、Cに挿入したかったのです。
>>868さん、私の言葉足らずで、ご迷惑をおかけし、申し訳ありませんでした。
お二人のアドバイスで、自分がどこに躓いているのか、よく分かりました。

お二人のおかげで、大変助かりました。頭の中のモヤモヤがすっきりしました。
本当にありがとうございました。

872 :名無しさん@そうだ選挙にいこう:2008/12/12(金) 07:38:43
【 システム環境  . 】 Windows2000, Access2000
【 VBAが使えるか .】 はい
【 VBAでの回答  】 可
【 検索キーワード 】

accessから不要になったxlsファイルを削除したいんですけどどうすればいいでしょうか?
GetObjectとか使っての操作や新規作成ならなんとか分かります

873 :名無しさん@そうだ選挙にいこう:2008/12/12(金) 08:17:08
>>872

普通にFSOあたりを使えば?

874 :名無しさん@そうだ選挙にいこう:2008/12/12(金) 08:43:24
>>872
' ファイル TESTFILE には、データが含まれているものと仮定します。
Kill "TestFile" ' ファイルを削除します。

' 現在のフォルダにあるすべての *.TXT ファイルを削除します。
Kill "*.TXT"



875 :名無しさん@そうだ選挙にいこう:2008/12/12(金) 13:43:39
クエリーDef 最強伝説

876 :名無しさん@そうだ選挙にいこう:2008/12/12(金) 22:04:09
消えた質問者。
回答貰って放置とは、まともな社会生活営めてるのかなぁ?

877 :名無しさん@そうだ選挙にいこう:2008/12/13(土) 07:21:53
>>873-874
ありがとうございました

↓こんな感じでいけそうですね
ttp://www.nurs.or.jp/~ppoy/access/access/acEt011.html
ttp://www.nurs.or.jp/~ppoy/access/access/acEt012.html

878 :843:2008/12/13(土) 09:38:34
>>844
>>845

アドバイス感謝です。
お礼が遅れてすみません。

879 :名無しさん@そうだ選挙にいこう:2008/12/13(土) 23:29:46
先日書き込みさせていただいたものですが、
どなたかアドバイスをいただけないでしょうか
コードを書き直してもくいうまくいかずてずまり状態なのです。
必用な情報があればできるだけ記載いたしますので、
なにとぞアドバイスのほどヨロシクお願いいたします。


> WinXP Pro
> Access2003
> 文字列を返す関数を呼び出してレポートに表示させていますが、
> そこで、理解できないエラーがでて困っております。
> お知恵をお貸しいただければと思います。

> レポート表示時
> 初回起動時1頁目は正しく表示され2頁目、3頁目に移るとエラーとなる。

> レポートを閉じて(Accessは開いたまま)
> 再度開くと1頁,2頁,3頁と関数から取得した文字列が表示されます。
> ソースというより、設定とか、Accessの基本的な部分で間違っているのかなと
> 思うのですが、似たような事象を経験されたかた折られませんでしょうか?

> ソースは下記のように単純なものです。

> Function returnHoge(customerCode As String, pageNo As Integer, koukiKind As String) As String

> sqlHoge = "SELECT * FROM HOGE"
> Set rsHoge = CurrentProject.Connection.Execute(sqlHoge)
> returnHoge = rsHoge.Fields(0)

> End Function


880 :名無しさん@そうだ選挙にいこう:2008/12/13(土) 23:59:51
もしかして1回聞くより2回聞いたほうが回答の確率が2倍になるとか思ってる?

881 :名無しさん@そうだ選挙にいこう:2008/12/14(日) 00:06:18
>>879
returnHogeの使われない引数たちが哀れだなと思った

882 :名無しさん@そうだ選挙にいこう:2008/12/14(日) 00:19:38
>>878
ごめん、CurrentDb.Execute じゃレコードセットを開けなかった、
正しくは CurrentDb.OpenRecordset だった。

>>879
エラーが出るときにレコードセットに何が返ってきているか確かめた?
あと、理解できないエラーって、具体的にどんなエラー?

883 :名無しさん@そうだ選挙にいこう:2008/12/17(水) 11:09:22
xp sp2
access2003です。

項目が10個くらいある単票フォームに保存ボタンをつけてます。
保存ボタンが押された時に、複数個ある項目のどれか一つでも更新されたかどうかを
簡単にハンドリングできる方法があった教えて下さい。

各項目の更新後処理イベントにフラグを設定するしかないのでしょうか?


884 :833:2008/12/17(水) 11:10:47
× 更新後処理イベント
○ 変更時イベント
でした。

885 :名無しさん@そうだ選挙にいこう:2008/12/17(水) 12:19:48
>>883
Me.dirty

886 :名無しさん@そうだ選挙にいこう:2008/12/17(水) 15:16:22
>>885
ありがとうございました。

887 :名無しさん@そうだ選挙にいこう:2008/12/17(水) 15:41:58
すみません、access97で教えていただきたいのですが、誤って削除してしまった
フォームは復旧不可能でしょうか?
ググった限りでは不可能な様なのですが、、


888 :名無しさん@そうだ選挙にいこう:2008/12/17(水) 16:42:28
質問
Access でテーブルの連結併合処理をするにはどうしたら良いでしょうか?

[店舗],[商品]
A,ぺぺ360ml
B,無印ローター
D,天まで昇れ!
B,業務用コンドーム
E,えろりっ娘
A,オルガスター
C,サガミオリジナル
F,亀甲縛りセットver.2
B,失神バイブ力丸
F,ICロイヤルタッチ
B,淫魔:サキュバス


これを以下にしたいです

[店舗],[店舗の扱い商品]
A,ぺぺ360ml オルガスター
B,無印ローター 業務用コンドーム 失神バイブ力丸 サキュバス
C,サガミオリジナル
D,天まで昇れ!
E,えろりっ娘
F,ICロイヤルタッチ 亀甲縛りセットver.2

889 :名無しさん@そうだ選挙にいこう:2008/12/17(水) 16:50:51
予想回答
桐にしとけ

890 :名無しさん@そうだ選挙にいこう:2008/12/17(水) 17:12:08
>>888
アクセスでは無理だとオモ、それが出来れば桐は滅亡。

891 :名無しさん@そうだ選挙にいこう:2008/12/17(水) 17:57:20
>>888
2段階のクエリでできると思います。
1.テーブル作成クエリを実行
 「店舗をDISTINCTで単一化」+「店舗の扱いは演算で""」で、新規テーブルへ書き出し

2.更新クエリを実行
 最初のテーブルと新規テーブルを「店舗」で外部結合して、「店舗の扱い」に
 元テーブルの「商品」を追加するように更新値を設定

試してみてください。

それにしても、すごいテーブルだなぁ。普通考えつかないって...

892 :名無しさん@そうだ選挙にいこう:2008/12/17(水) 18:00:49
>>888
VBAのADOでやるしか思いつかないね。クエリのウィザードとかをやる方法ではないんじゃないかな。

大雑把に言うと以下のような感じ。
1.読取り側のテーブルを最初から最後まで読み込みながら、
  店舗名を取り出し、書き込みテーブルに(重複しないように)追記する。
2.もう一度読取り側のテーブルを最初から最後まで読み込みながら、
  取扱商品名を抽出し、書き込みテーブルに書き込む。

(処理効率が悪いというデメリットを解決する方法までは思いつきません。)

893 :888:2008/12/17(水) 18:23:39
>>891
試してみましたが、旨くいきました
有難うございます<m(__)m>

894 :888:2008/12/17(水) 19:53:56
ああ、>>891 で教えて頂いた方法だと、データ内の順番は保障されないのね
"無印ローター 業務用コンドーム 失神バイブ力丸 サキュバス" 内の単語の出現順序

事前に元テーブルを並べ替えて於けば、たぶん・おそらく・仕様保障外だろうけど・ほぼ確実に、その順番で出てくる気はするのですが

895 :名無しさん@そうだ選挙にいこう:2008/12/17(水) 22:16:23
明示的にorderbyしないと並びは保証されないって
この質問はもうテンプレ入りでいいだろ・・・

896 :名無しさん@そうだ選挙にいこう:2008/12/18(木) 08:18:43
SQL全般的な話として、「データ無いの順序は ORDER BY しないと保障されない。」とされている。
テーブルって内部的にはデータの格納や取得の効率性を考えて作られているものであって、
Excelのワークシートじゃないのだから、そういう動きになるのは当たり前。

897 :名無しさん@そうだ選挙にいこう:2008/12/18(木) 08:45:40
xp sp2 access2003です。

現行:
テーブル1の項目A(テキスト型)を、フォーム上でコンボボックス定義で入力項目にしていました。
且つその入力項目は集合値タイププロパティで値リストとして定義。

変更後:
値リストに当たる部分をテーブル化して、コンボボックスから選択できるように変更しようと
思っているのですがうまくいきません。

行った作業としては以下です。
1.テーブル1の項目Aをルックアップウィザードを使用して値リストを定義したテーブル(テーブル2)を関連づけ。
2.それに伴いテーブル1の項目Aの方が数値型に変わる
3.フォーム上の入力項目の集合値タイプ、集合値ソースをテーブル2に定義しなおし。

テーブル2の構造は以下です。
ID,XXX
1,ABC
2,CDE
3,FGH

上の様な変更をおこなった後、フォームを実行してリストの値を項目に設定すると、「入力されたデータの型が
あやりまりです。例えば数値型の項目に異なる値が入力されました。」みたいなエラーメッセージが出てきます。

フォーム上の項目のプロパティを弄れば正常になると思うのですが、どなたかアドバイスいただけないでしょうか?
ちなみにテーブル1の変更した項目を新規にフィールドリストからフォームに貼り付ければ正常に動きます。
変更対象の項目が多いのでできればプロパティ設定で直る方法を教えて頂ければとおもいます。
宜しくお願い致します。




898 :名無しさん@そうだ選挙にいこう:2008/12/18(木) 13:42:16
>>897
連結列が間違ってるんじゃないかな?

899 :名無しさん@そうだ選挙にいこう:2008/12/18(木) 14:04:53
>>898
その辺はあまり弄ってないです。
ちょっと調べてみます。
ありがとうございました。

900 :名無しさん@そうだ選挙にいこう:2008/12/18(木) 23:03:55
【 システム環境  . 】 WindowsXP, Access2003
【 VBAが使えるか .】 はい
【 VBAでの回答  】 可
【 検索キーワード 】 DMax関数

 レポート中に表示される最後のレコードをテキストボックスに
表示させたいです。

レコードは100件ありまして、
テーブル名:社員テーブル
フィールド名:社員ID

 表示させたいテキストボックスのコントロールソースに

=DMax("社員ID","社員テーブル")

 と書き込むと、レコードの一番最後が表示されてしまいます
(100件目のレコード)

レポート毎にレコード表示を10件ずつ区切っており、レポート毎の
最後のレコードをテキストボックスに表示させるにはどのように
記述すればよろしいでしょうか?ご教示よろしくお願い申し上げます。

901 :名無しさん@そうだ選挙にいこう:2008/12/19(金) 00:06:52
「10件ずつ区切っており」の条件でレポートをグループ化して
そのグループヘッダorグループフッタに貼り付けたテキストボックスで
DMaxじゃなくてMaxを使う。

あとDMaxもMaxも「最大」であって「最後」じゃないから
詳細セクションは社員IDの昇順で並べとくように

902 :名無しさん@そうだ選挙にいこう:2008/12/19(金) 09:57:25
値を2以上返すサブルーチンを作る方法ってありますか?
functionは戻り値一つですよね・・
外部変数に代入して、呼び出し側から参照するしかないのでしょうか?

903 :名無しさん@そうだ選挙にいこう:2008/12/19(金) 10:35:21
くだらない質問なんですが・・
変数A(string)がNULLかどうかを判定するのは↓じゃダメなんでしょうか?
if A = NULL then
exit sub
endif
デバッガでAがNULLなのは確認できてるのに、exit subに入ってくれません。

904 :903:2008/12/19(金) 10:39:53
自己解決しました。
if isnull(A) = true thenでいけました。

905 :名無しさん@そうだ選挙にいこう:2008/12/19(金) 12:56:37
>>902
Typeでユーザー定義型(構造体)を宣言しておいて、
関数の戻り値をそのユーザー定義型で返すようにすればいいと思いますよ。

906 :名無しさん@そうだ選挙にいこう:2008/12/19(金) 13:25:01
>>903
返す値が多かったり厳密な型が必要なら >>905 の言うように
Type やクラスモジュールで定義した型を使えばいいし。

もっと手軽な方法なら、戻り値用の変数を引数に含めておいて、それに返すとか。
Function GetValues( result As Long ) As Long
result = 1
GetValue = 2

戻り値を Variant 型にして配列で返すとか。
Function GetValues() As Variant
GetValues = Array(1, 2)

他に Collection 型や Dictionary 型で返す方法もある。
Function GetValues() As Collection
Dim result As New Collection
result.Add 1, "val1"
result.Add 2, "val2"
Set GetValues = result

状況に応じて使い分ければ良いよ。

907 :名無しさん@そうだ選挙にいこう:2008/12/19(金) 15:53:42
>>905
>>906
ありがとうございます。
じっくり読ませて頂いて参考にします。

908 :名無しさん@そうだ選挙にいこう:2008/12/19(金) 18:06:08
>>901
誠にありがとうございました。

909 :名無しさん@そうだ選挙にいこう:2008/12/20(土) 05:35:05
xp sp2 access2003です。

フォーム上の住所をダブルクリックしたときに、
ブラウザを起動してgoogleで該当住所を地図表示させたいのですがうまくいきません。
ブラウザ起動、グーグル表示までは、まぁ簡単にできるのですが、
「住所を入力して結果を表示する」ところはVBA側からは命令できないのでしょうか?


910 :名無しさん@そうだ選挙にいこう:2008/12/20(土) 06:32:19
それは桐じゃないと無理だわー

911 :名無しさん@そうだ選挙にいこう:2008/12/20(土) 10:52:49
Access 2007 で、外部のデータベース(MySQL or オラクル)
を ODBC 経由でリンクテーブルとして使っています。

オフラインでの処理が必要となることも多いので
その時はローカルのテーブルにコピーして作業しています。

サーバ側が Microsoft SQL Server だと、Access で
オフライン処理するときに特別に便利な機能があるのでしょうか?
たとえばローカルに一時的にれぷりけーとして、オンラインに
なった時にマージしてくれるとか。

Access 2007 でも MDB ファイルであれば MDB ファイル同士の
「レプリケーション」の機能は健在なのですが、
外部の RDBMS のデータをオフラインで使うため機能を探しています。

912 :名無しさん@そうだ選挙にいこう:2008/12/20(土) 13:09:33
>>909
まったく意味が分からない。
googleマップも単にurlで渡された住所を表示しているだけでしょ。
googleのurlを呼べるのにマップが呼べないってのはありえなくね?
呼べてるのか呼べてないのかどっちよ。

913 :名無しさん@そうだ選挙にいこう:2008/12/20(土) 13:18:37
強いて言うならサーバ側がSQLServerだとODBCみたいな
ウンコ接続使わなくていいのが最大のメリット

914 :名無しさん@そうだ選挙にいこう:2008/12/20(土) 14:10:29
>>912
http://maps.google.co.jp/mapsは呼べるんですが、
このURLの入力フォールドに住所を入力後の検索結果が呼べないという意味です。
ちなみに両者のURLは同じです。


915 :名無しさん@そうだ選挙にいこう:2008/12/20(土) 19:44:32
>>914
このテクニックをつかうか
http://www.ktservices3.com/blog/archives/2007/06/accessgoogle_ma.html

それとも、自分が作ったように仕込むか?
http://www3.uploda.org/uporg1869833.png

後者は、別途HTMLファイル(Google Maps API)が必要なケースと、Google Statics Maps
APIを用いて使うケースの二種類がある。

後者のVBAは行数はそれほどでもないが、説明するのはちょっと難しい。

916 :912:2008/12/21(日) 01:06:50
>>914
ああ、そういうこと。
googleの検索パラメータ名は各サービスで統一されている(されつつある)ので、
マップスじゃないほうのgoogleと一緒で"?q=検索ターム"を付ければ、、、って、
>915 のリンク先にも書いてあるね。読んで。

917 :名無しさん@そうだ選挙にいこう:2008/12/21(日) 11:13:35
すげででかいレコードセットに対してループ処理を始めてしまいとまりません。

Do Until rs.EOF
 ここでなんか処理
rs.MoveNext
Loop

こういうときって、中断する方法はないものなんでしょうか?

918 :名無しさん@そうだ選挙にいこう:2008/12/21(日) 11:45:01
Do Until rs.EOF
 ここでなんか処理
 if やめますか? then Exit Do
 rs.MoveNext
Loop

919 :名無しさん@そうだ選挙にいこう:2008/12/21(日) 11:54:21
【 システム環境  . 】 WindowsXPPro, Access2003
【 検索キーワード 】 access 移行 , access net 等

社内で使っているデータベースを子会社でも同期をとって使用したく思っています
検索してみてSQLServerやVB.Netなどというものを使うという事までは理解したのですが
どれが良いのか把握できていません

いい選択肢はどれでしょうか? よろしくお願いします

920 :919:2008/12/21(日) 12:07:15
もう少し検索してみたらODBC,やOLE DBという手法が一般的なんでしょうか?
DBシステム自体は外注したものなのであまりわからず申し訳ないです

921 :名無しさん@そうだ選挙にいこう:2008/12/21(日) 12:09:58
外注先に聞け

922 :918:2008/12/21(日) 12:48:44
とりあえずループ内に DoEvents 入れてみた。

923 :名無しさん@そうだ選挙にいこう:2008/12/21(日) 19:45:29
>>922
[Ctrl]+[Break] 押してみ

924 :名無しさん@そうだ選挙にいこう:2008/12/21(日) 22:24:36
>>917

Private StopFlg As Boolean

Sub BtnGo_Click()
 StopFlg=False
 Do Until rs.EOF
  ここでなんか処理
  DoEvents
  If StopFlg = True Then
   If Msgbox("やめますか?", vbYesNo) = vbYes Then
    Exit Do
   Else
    StopFlg = False
   End If
  End If
  rs.MoveNext
 Loop
End Sub

Sub BtnStop_Click()
 StopFlg = True
End Sub


925 :名無しさん@そうだ選挙にいこう:2008/12/22(月) 19:47:40
>>915
>>916
アドバイスありがとうございます。じっくり参考にさせていただきます。
お礼が遅れて失礼しますた。

926 :名無しさん@そうだ選挙にいこう:2008/12/23(火) 12:09:16
リストボックスのなかの一つのフィールドの
値をクリックしたら拾える方法はありますか

でそれをSQLで検索かける方法があったら教えてください

927 :名無しさん@そうだ選挙にいこう:2008/12/23(火) 15:27:08
xp sp2 access2003です。

クエリに設定した複数の検索条件のうちの一つを、
ある条件の時、検索条件からはずしたいのですが、
VBAでそのへんのコントロールがきるでしょうか?


928 :名無しさん@そうだ選挙にいこう:2008/12/23(火) 22:05:33
VBAからCreateQueryDefすればいいじゃない

929 :名無しさん@そうだ選挙にいこう:2008/12/24(水) 07:17:30
>>926
Me.リスト.ItemsSelected でどうかな?
取得した文字列を結合してSQL文にし、recordsetで開けばおk

930 :名無しさん@そうだ選挙にいこう:2008/12/24(水) 07:24:03
XP sp3
Access2003
VBA可

サーバ(データのみのmdb)と、クライアント(操作のみのmdb)に分けてあり、
両方のmdbを最適化したら、一部のフォームにて、コンボボックスに表示される
データが異なっていました。コンボボックスはあるテーブルの連結で作っています。
指定しているテーブルのデータであることは変わりはないのですが、
どうも、指定した通りにフィールドが表示されないような不具合がある感じです。

テーブル連結のコンボボックスのRowSourceはこういうSQL文の方がいいとか、
こういう指定は辞めた方がいいという法則のようなものはあるのでしょうか。
それともこういった不具合は出た都度対応するしかないのでしょうか。

よろしくお願いします。

931 :名無しさん@そうだ選挙にいこう:2008/12/24(水) 08:52:12
>>930
もしかして、値集合ソース(RowSource)にテーブル名だけを指定してないかい?
SELECT [フィールド名] FROM [テーブル名] みたいにフィールド名を含めた SQL かクエリを設定しておけば、
普通は問題ないはずなのだけど。

932 :名無しさん@そうだ選挙にいこう:2008/12/24(水) 10:08:16
>>928
ありがとうございます。
とっかかりが出来ました。

933 :名無しさん@そうだ選挙にいこう:2008/12/24(水) 12:20:25
ACCESS2000
WindowsXP
バーコードコントロールを使用してJANコードを扱っているのですが
レポートのバーコードの大きさを縮小できません。
縮小されずにバーコードの画像?が切れてしまいます。
ACCESS2003以降では直ってますでしょうか?

934 :名無しさん@そうだ選挙にいこう:2008/12/24(水) 13:36:55
【 システム環境  . 】WindowsXP,Access2007,Excel2003VBA,ADO2.8
【 VBAが使えるか .】 少し
【 VBAでの回答  】 可
【 検索キーワード 】 adLongVarWChar,LONGCHAR,adVarWChar,definesize

メモ型カラムで255以上の文字列を開くのに困っています。

Dim objDB As New ADODB.Connection
Sub Acxx
Dim SQL As String
Dim objrs As ADODB.Recordset
Call objDB.Open("Acc")
SQL = "select 詳細 from 変更 where 変更No = '99' --注1"
Set objrs = objDB.Execute(SQL)
Msgbox IIf(IsNull(EmpDynaset.Fields(0)), vbNullString, EmpDynaset.Fields(0))
Exit Sub

この状態でFields(0)にnullが帰ってきます
google先生に聞いたところdefinesizeを指定する必要があるとのことで
注1の詳細をleft(詳細,len(詳細))とすると一応255以上の文字列は帰ってくるのですが全文かえって来ません
正確に全文を取得するにはどこを治したらいいのでしょうか?


935 :名無しさん@そうだ選挙にいこう:2008/12/24(水) 13:43:57
コピペミス
×Msgbox IIf(IsNull(EmpDynaset.Fields(0)), vbNullString, EmpDynaset.Fields(0))
○Msgbox IIf(IsNull(objrs.Fields(0)), vbNullString, objrs.Fields(0))


936 :名無しさん@そうだ選挙にいこう:2008/12/24(水) 14:37:07
>>933
2003以降のことは知らないけれど、この辺が参考になるかも知れない。
バーコードは種類によって色々な制約(決まり事)があるので・・・
ttp://www.accessclub.jp/bbs/0167/beginers53694.html

>>934-935
コードとしては間違っていないと思うし、そのまま取得できそうなもんなんだが・・・
SQL内の「変更」ってのがテーブルではなくクエリだとしたら下記が該当するかもしれない。
ttp://www.fujlog.net/r/000066.html


937 :名無しさん@そうだ選挙にいこう:2008/12/24(水) 16:11:14
>>936
「変更」はテーブル名です。
IsNullを抜いたら正常にselectされました。
ただ他文字列型のカラムでnullが帰ってくると
実行時エラー94 nullの使い方が不正です。
がでてきます、Null対策にIsNullをいれていたのですが。。。
Nullの扱い方を変えたので他の箇所でバグを呼びそうですが
対策としてVariantに格納後VarTypeで置換えでエラーは治まりました

Dim objDB As New ADODB.Connection
Sub Acxx
Dim SQL As String
Dim objrs As ADODB.Recordset
Call objDB.Open("Acc")
SQL = "select 詳細 from 変更 where 変更No = '99'"
Set objrs = objDB.Execute(SQL)
Dim Tmp as Variant
Tmp = objrs.Fields(0)
Tmp = IIf(VarType(Tmp) <= 1, "", Tmp) 'Null対策
Msgbox objrs.Fields(0)
Exit Sub

Nullの扱いってムズカシィorz

938 :936:2008/12/24(水) 16:13:48
>>937
だったら、NZ関数ってのがAccessにはあるので使うと便利ですよ。
とりあえず取得できて良かった。

939 :934:2008/12/24(水) 16:54:08
>>936
NZ関数をいれると
未定義関数 'NZ' があります。
だそうです
構文の不備?既にカラム名にカッコ、スペースで混沌と。。。

940 :名無しさん@そうだ選挙にいこう:2008/12/24(水) 18:51:48
>>931
レスありがとうございます。
RowSourceにはテーブル名だけではなく、SELECT ・・・を指定しています。
SELECTで指定したり、データ表示の関係のものが、フィールドの順序どおりに
なっていないのが関係しているのかもしれませんので、再度状況を調べて質問してみます。

941 :名無しさん@そうだ選挙にいこう:2008/12/25(木) 04:31:16
>>929
ありがとうございます。アクセスは使い始めたばっかりなので大変です。
会社にいったら早速試してみます。質問してよかったです。

942 :933:2008/12/25(木) 10:06:35
>>936
レスありがとうございます。
2000では変則的な方法しかなさそうですね。


943 :名無しさん@そうだ選挙にいこう:2008/12/25(木) 15:01:05
『Office2003のメニューキー シーケンスの使用を続けます。
取り消すには ESC を押してください。』

これ邪魔で死にそうなんですけど、何とかなりませんか!!!

944 :名無しさん@そうだ選挙にいこう:2008/12/25(木) 22:13:58
WinXPsp2にACCESS2002です。130MBくらいのmdbファイルです。
VBEでちょっと変数の名前を変える程度のコードを書いて保存ボタンを推すとフリーズしてしまいます。
コメントのためのシングルクォートを入力して保存ボタンを押すだけでフリーズしてしまいます。
最適化/修復をしても同じです。解決策はありますでしょうか?

945 :名無しさん@そうだ選挙にいこう:2008/12/25(木) 22:20:57
>>944
空のDBを作成して全てのオブジェクトをインポート。

946 :名無しさん@そうだ選挙にいこう:2008/12/25(木) 22:29:09
>>945
ありがとうございます。
問題の原因としては何が考えられるのでしょうか?
また何故、空のDBにインポートすると改善するのかヒントをご教示いただけましたら幸いです。

947 :945:2008/12/25(木) 22:43:33
>>946
システムオブジェクトの破損が疑われるので、同オブジェクトが破損していない新規DBへ
ユーザーオブジェクトをインポートして修復を試みるということです。
>>712以降も参照してみてください。

948 :名無しさん@そうだ選挙にいこう:2008/12/25(木) 22:47:48
>>947
ありがとうございます。googleで調べてみますね。
助かりました。

949 :名無しさん@そうだ選挙にいこう:2008/12/26(金) 01:25:12
>>943
2007から2003に戻せば幸せになれるでしょう。

950 :944:2008/12/26(金) 02:19:00
>>947
インポートをするとあるモジュールに来たところでフリーズします。
元mdbからエクスポートしようとしても、VBEからエクスポートしようとしてもフリーズします。
VBEでコード全部をを見ることは出来ますが、モジュール全体を連続表示にするとフリーズします。
プロシジャーを一つずつメモ帳にコピペするしかないのかな。。。

951 :944:2008/12/26(金) 02:53:04
>>950
解決しました。数日前のバックアップから問題のモジュールを持ってきて入れ替えたらインポートも上手く出来ました。
問題のモジュール以外にもインポート/エクスポートの定義がおかしいと怒られたので、定義を全部削除しました。
最適化/修復で見つからない破損があるんですね。

952 :名無しさん@そうだ選挙にいこう:2008/12/27(土) 10:03:10
エクセルとリンクのときのとき文字列にしたいのに数字になったり
日付が数字になったり、明示的に指示する方法はないので仕様か
 もちろんSQL命令で無く、ウィーザードからです

953 :名無しさん@そうだ選挙にいこう:2008/12/27(土) 10:15:45
エクセルと連携したかったら桐にしときな

954 :名無しさん@そうだ選挙にいこう:2008/12/27(土) 10:30:31
職場のランパソだから無理です

955 :名無しさん@そうだ選挙にいこう:2008/12/27(土) 13:29:08
能力が桐レベルなんだから桐が使えない職場なんか辞めちまえ

956 :名無しさん@そうだ選挙にいこう:2008/12/27(土) 13:39:29
まあ最初からアクセスですべて組めばいいわけですが
エクセルしか使えないのが多くてどうしようもないです

ちなみにアクセスは県内の事務所だけで1000台以上ありますので
入れ替えは不可能です。
また桐を入れようにも権限がないのでインストールすらできません。

最悪コードを書いて変換してしまえばいいわけですが。
たとえば゛備考欄を数字でインポートしてエラーだらけなんて話にな
りませんよね。

957 :名無しさん@そうだ選挙にいこう:2008/12/27(土) 14:01:37
ウィーザードとか言ってる時点で1000台の会社から1台の会社に転職すべき

958 :名無しさん@そうだ選挙にいこう:2008/12/27(土) 14:03:26
皆さんはコード化がめんどくさくないのでつか

959 :名無しさん@そうだ選挙にいこう:2008/12/27(土) 14:04:10
つか型変換選択ぐらいサポートしとけといいたい

960 :名無しさん@そうだ選挙にいこう:2008/12/27(土) 15:03:50
表計算なんて全セルVariant型みたいなもんだろ
変換もへったくれもあったもんじゃねーよ

961 :名無しさん@そうだ選挙にいこう:2008/12/27(土) 16:10:04
>>952
Excelとリンクする場合は>>960さんもおっしゃっていますが、Excel側にデータ型の概念が
ありませんからAccess側でも明示的に指定する方法はありません。
インポートであれば指定できるんですけどね。

962 :名無しさん@そうだ選挙にいこう:2008/12/27(土) 16:24:42
やっぱりできないってことだけでおkです
ありがとうございました。

963 :名無しさん@そうだ選挙にいこう:2008/12/28(日) 15:13:01
リストボックス、新規行で先頭フィールドだと↓押した瞬間に閉じちゃうんだけど、そんなもの?
Access ダメじゃん、根本的欠陥を抱えてる

964 :名無しさん@そうだ選挙にいこう:2008/12/28(日) 15:27:49
アクセスはキッチリとは動かないから恐る恐る設計してください。
キッチリ動かしたかったら桐にしときな。

965 :名無しさん@そうだ選挙にいこう:2008/12/28(日) 16:32:50
>>963 が日本語に根本的欠陥を抱えていることまではわかった

966 :名無しさん@そうだ選挙にいこう:2008/12/28(日) 16:38:54
在日じゃないの

967 :963:2008/12/28(日) 17:16:41
済みません
リストボックスとかコンボボックスとかで、値を選択したいのですが
キーボードで行いたいのです

Alt+↓ でリストボックスを開いて、↓ で値を選択しようとすると、↓ 押した直後にリストボックスが閉じてしまいます
再び Alt+↓ を押さなければなりません
新規行で、ID(オートナンバー)除く最初のフィールドです

何か設定が間違ってますか?
それとも、正しい動作ですか?

968 :963:2008/12/28(日) 17:20:32
書き忘れました
表形式フォームです

969 :名無しさん@そうだ選挙にいこう:2008/12/28(日) 18:10:42
>>968
2003 では普通に選択できるのだが。

コンボボックスだよね?

970 :963:2008/12/28(日) 19:40:37
>>969
ごめんなさい
2007です、リストボックスでもコンボボックスでも発生します

↓ を押した瞬間に、Form_BeforeInsertイベントが発生し、編集中の鉛筆マークでて、ID が(新規)からオートナンバーの数字に変わって
一番最初の選択候補が選択された状態で、コンボボックスが閉じてしまいます

二番目以降の選択肢をキーボードで選びたいときには、再び Alt+↓ 押してドロップダウンリストを開き直さないと選べませんorz

971 :名無しさん@そうだ選挙にいこう:2008/12/29(月) 02:49:10
もってないから2007で何がどう変わったのか知らないけど、
リストボックスが開いたり閉じたりするわけ?
もうそのイメージがわかないというか、想像つかない。
2007どういうアプリになっちまってるのやら。

972 :名無しさん@そうだ選挙にいこう:2008/12/29(月) 08:30:18
>>970
その部分だけサンプルで切り出した物があると助かるんだけれどね。

俺も2007使いだから。

973 :963:2008/12/29(月) 09:17:06
サンプル作って再現しますた

★T_サンプル
[ID]:オートナンバー
[年月日]:日付/時刻
[名前]:テキスト

T_サンプル を開いた状態で、作成複数のアイテム(フォーム)リボンをクリックして表形式フォーム作成
デザインビューにして、Txtbox_名前を右クリック、コントロール種変更でコンボボックスに変更
値集合タイプ:リスト,値集合ソース:エリカ,リエ を設定

[名前]を数行入力して[年月日]は未入力で良い)、レコードセレクタで全行選択→コピー→新規行に貼りつけ
を何度かして40行くらいに増やす
フォームを閉じる

1.フォームを開く
2.Ctrl+↓ で最終行に移動
3.新規行[名前]に移動して、Alt+↓ でリスト開く、↓ で"リエ"を選ぼうとすると、"エリカ"が選ばれて閉じてしまう

以上の、2.の後、3.の前、の画面状態によって描画更新され、先頭候補が勝手に選ばれてドロップダウンが閉じてしまう感じ

974 :名無しさん@そうだ選挙にいこう:2008/12/29(月) 18:42:18
>>970
当店の雰囲気に合った服装というのは勿論ですが、
何よりもその服装がお客様ご自身に合っているかどうか、
という点を最も重視してチェックさせて頂いております。
特別に決まりや基準があるわけではなくファッションの基本と同じですので、
難しくお考えにならずにご来店頂ければと思います。

975 :名無しさん@そうだ選挙にいこう:2008/12/29(月) 19:04:46
>>974
桐にしとけ

976 :名無しさん@そうだ選挙にいこう:2008/12/30(火) 11:55:14
WindowsXP SP3
Access2003

Accessを使って作ったアプリの操作途中で必ずではないのですが「メモリ不足です」
という旨のエラーが出て終了してしまいました。
良く調べてみると、フォームを開いたり閉じたりしている操作の際に、
メモリが圧迫されていっていることが分かりました。
これは、対処しようがないのでしょうか。それとも、VBAのコードの書き方の問題
なのでしょうか。よろしくお願いします。

極端な事例ですが以下のような手順で、メモリが圧迫されていくのが確認出来ると思います。
(メモリは、タスクマネージャのプロセスの「MSACCESS.EXE」の「メモリ使用量」で
確認しています。)

まず、ラベルやコマンドボタンなどを一切配置していない空のフォーム(フォーム1)を作る。
次に、コマンドボタンだけを配置したフォーム(main)を作り、以下のコードを追加する。

Private Sub コマンド0_Click()
For i = 1 To 1000 Step 1
DoCmd.OpenForm "フォーム1", acNormal
DoCmd.Close acForm, "フォーム1", acSaveNo
Next i
End Sub

フォーム(main)を開き、コマンドボタンをクリックする。

977 :名無しさん@そうだ選挙にいこう:2008/12/30(火) 19:55:03
つ ttp://www.geocities.jp/step06hy/database_lec_Acces5.htm

978 :名無しさん@そうだ選挙にいこう:2008/12/30(火) 23:25:54
>>977
すでにFAQみたいなことだったのですね。
詳しい情報が書かれたサイトの紹介、ありがとうございます。

979 :名無しさん@そうだ選挙にいこう:2008/12/31(水) 10:36:33
WindowsXP SP3
Access2000

テーブルAとBを結合させ、テーブルAの全レコードと、Bの一致するレコードを抽出したいのですが
うまくいきません。
Bに条件を入れると完全に一致するレコードしか出て来ないのですが、何がいけないのか分かりません。

SQLビューで見ると下記のようになっています。

SELECT A.HIN_CD,B.SURYO
FROM A LEFT JOIN B ON A.HIN_CD = B.HIN_CD
WHERE A.BUNRUI = 200
AND B.YMD = #12/31/2008#

LEFT JOINしてもBに条件が入っているとダメなのでしょうか?
この条件でAのレコード全部を出す方法を教えて下さい。

980 :名無しさん@そうだ選挙にいこう:2008/12/31(水) 11:24:09
AndをOrに変える

981 :名無しさん@そうだ選挙にいこう:2008/12/31(水) 12:56:23
そもそもテーブルAの全レコードを取得したいって時点で
WHERE条件を指定したらダメだろ・・・

982 :979:2008/12/31(水) 13:14:21
ありがとうございます。
では

SELECT B.HIN_CD,B.SURYO
FROM B
WHERE B.YMD = #12/31/2008#

をクエリ1として保存し、

SELECT A.HIN_CD,クエリ1.SURYO
FROM A LEFT JOIN クエリ1 ON A.HIN_CD = クエリ1.HIN_CD
WHERE A.BUNRUI = 200

とすれば良いのでしょうか?

983 :名無しさん@そうだ選挙にいこう:2008/12/31(水) 13:29:01


984 :名無しさん@そうだ選挙にいこう:2008/12/31(水) 14:36:54
>>979
>テーブルAとBを結合させ、テーブルAの全レコードと、Bの一致するレコードを抽出したいのですが

>>982
>WHERE A.BUNRUI = 200

Aの全レコードがほしいのかほしくないのか、どっちなんだよ!

985 :982:2008/12/31(水) 14:54:40
説明不足ですみません。
BUNRUI(主キーではない)=200のレコードを全て欲しいんです。

HIN_CD BUNRUI 
100     100     
101     200
102     200
103     200

B
HIN_CD SURYO YMD
101     1    2008/12/31
102     2    2008/12/20
103     3    2008/12/31

とあったら
101でSURYO 1
102でSURYO 0
103でSURYO 3
と取得したいんです。

986 :名無しさん@そうだ選挙にいこう:2008/12/31(水) 15:10:01
桐にしとけよ

987 :名無しさん@そうだ選挙にいこう:2008/12/31(水) 15:19:21
> 102でSURYO 0
Nz(クエリ1.SURYO, 0)

988 :名無しさん@そうだ選挙にいこう:2008/12/31(水) 15:51:36
>>979=982=985
サブクエリを作って外部結合でいいと思うよ。

SELECT
Q1.HIN_CD, Q2.SURYO
FROM
(SELECT * FROM A WHERE A.BUNRUI = 200) AS Q1
LEFT JOIN
(SELECT * FROM B WHERE B.YMD = #12/31/2008#) AS Q2
ON Q1.HIN_CD = Q2.HIN_CD;

※数量がNullで困るなら>>987にあるようにNz関数を使うこと。

989 :名無しさん@そうだ選挙にいこう:2008/12/31(水) 15:56:19
要は・・・結合してから絞り込むのか、絞り込んでから結合するかの違いです。

990 :名無しさん@そうだ選挙にいこう:2009/01/01(木) 01:36:51


991 :名無しさん@そうだ選挙にいこう:2009/01/01(木) 22:27:16
access2002を使っています。
2つのテーブル(またはクエリの結果)が全く同じものであることを確かめる
にはどうしたら一番効率的でしょうか?

※2つのテーブル(またはクエリの結果)のレコードの順序は同じとは限らなく、
 また、フィールドは空白をとる可能性があるものとします。

992 :991:2009/01/01(木) 22:35:09
すいません、忘れました。
できればVBAを使わない方法がいいです。

993 :!omikuji!dama:2009/01/02(金) 00:39:33
>>991-992
それぞれをテキストファイルにエクスポートしてから
ファイル比較ツールを使うという方法はどうだろう?

994 :名無しさん@そうだ選挙にいこう:2009/01/02(金) 00:59:29
Access2007をクライアントとしたクラサバシステムを開発することとなりました。

チーム開発(といっても3人)なので、VSSによるソース管理をしたいのですが、可能でしょうか?
2003まではVSSアドイン( http://www.microsoft.com/downloads/details.aspx?FamilyID=2ea45ff4-a916-48c5-8f84-44b91fa774bc&DisplayLang=en )を利用してましたが、2007用が見当たりません。

ご存知の方ご教示ください。




995 :名無しさん@そうだ選挙にいこう:2009/01/02(金) 01:35:49
つ ttp://office.microsoft.com/ja-jp/access/HA102188681041.aspx

996 :994:2009/01/02(金) 08:02:41
>995
ありがとうございました。
検討します。

997 :名無しさん@そうだ選挙にいこう:2009/01/02(金) 10:22:15
>>991
インポートなりユニオンなりして
固有のレコードなり重複クエリなりして
レコード数チェック

998 :991:2009/01/02(金) 11:30:06
997さん
ありがとうございます。試してみますが、空白やNULL値があっても比較できるでしょうか?

999 :名無しさん@そうだ選挙にいこう:2009/01/02(金) 12:19:28
テキストファイルにはNullの概念がないから
長さ0の文字列とNullを別物として比較するのは難しいな

1000 :名無しさん@そうだ選挙にいこう:2009/01/02(金) 12:57:54
1000なら俺はこの世界の「神」になる

1001 :1001:Over 1000 Thread
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。

366 KB
★スマホ版★ 掲示板に戻る 全部 前100 次100 最新50

read.cgi ver 05.02.02 2014/06/23 Mango Mangüé ★
FOX ★ DSO(Dynamic Shared Object)