Access使い集合!

このエントリーをはてなブックマークに追加
1名無しきぼう
UNIX時間(1970年から秒単位10桁やつ)を
Access or VB で yyyy/mm/dd hh:mm:ss に変換する方法を
教えて下され!
2デフォルトの名無しさん:01/11/07 05:34
>>1
検索しろ、検索したら5秒で見つかった。
3名無しきぼう:01/11/07 05:54
>>2
見つからなかった・・・。
詳しく教えてほしい!
朝一で提出する仕事か?お互い頑張ろうな(藁
だが単一質問糞スレは立てるなよ
5名無しきぼう:01/11/07 05:55
4>>
これからこのスレ熱くしようヨ!
>>1は死刑

===========終了==========
74:01/11/07 06:02
悪いな、アクセスって使った事ない(藁
て事で漏れも
〜終了〜
俺も今検索したら8秒で見つけた。
そういや、Accessスレって見たことねーな。
でも、
================= End ======================
10デフォルトの名無しさん:01/11/07 07:58
とりあえず1はどこでどんな検索をして見つからなかったのかを書け。
そうすればきっともっといいアドバイスがもらえるぞ!
11:01/11/07 08:00
気になってひっかけようとしたが…。
検索キーワードって?
それだけわかればEND
122:01/11/07 10:56
>>8
俺が勝った
>>9
あることはあるのだが・・・
「プログラムを組む」ことを前提にしてないのよね。

ACCESS2000総合相談所
http://pc.2ch.net/test/read.cgi/bsoft/965614164
14デフォルト名無しさん:01/11/07 18:40
アクセスって運用してたら壊れない?
気になって5分ほど検索してみたが見つからず。
Cのライブラリのソース見たほうが早いか。
16名無しきぼう:01/11/08 02:27
あら見つからないや。
17Windowsドシロウト:01/11/08 02:32
Win32API呼べば?
18デフォルト名無しさん:01/11/08 09:42
確かに関数ではなさそうだね。
ロジック考えてみるかな。
というか検索でひっかかった人ってホントなの?
とりあえずやってみた。Access97
使用関数:DateAdd

フォームにテキストボックスとコマンドボタンを配置。
ボックス名: box1
ボタン名: com1

サンプルサブプロシージャ
Dim Serial_Sec As Long

Serial_Sec = Me!box1

MsgBox "現在日付:" & DateAdd("s", Serial_Sec, "1970/01/01")

あとグリニッジ標準時間からローカル時間への差分を加える。
キリのいい値を与えると、時刻表記部分が省略されるので
そのところを加味してやる。
注・2038年までしか対応できないのよね。この場合。
20デフォルト名無しさん:01/11/08 18:46
>19
999999999 → 2001/09/09 1:46:39
この結果は違う。
>>20
それはGMT。
日本時間にするには、+9時間しなければならない。
22デフォルトの名無しさん:01/11/08 20:47
MSDE使え
どうせタダでついて来るじゃろ
23デフォルト名無しさん:01/11/09 08:02
DateAdd関数で終焉!
24デフォルト名無しさん:01/11/09 08:03
次なるお題にいこうぜ
>>20の補足
Format(DateAdd("s", Serial_Sec + 32400, "1970/01/01"), "yyyy/mm/dd hh:mm:ss")
こんな感じになるか。時間差の補正はDateAddの外でやってもいいね。
>>14
アクセス使って30年・・壊れたことなどないわ(w
27デフォルト名無しさん:01/11/09 18:52
>>26
壊れるって。
例えばアクセスの再インストールしたらアプリがなおることがあるし、
レポート印刷が急に止まらなくなったこともあったなー。
ユーザーに対応をお願いできないことが多いよ!
>>27
壊れるのではなく、元から壊れてる。
つか、アクセスって30年前からあるのかよ(藁
VBAでフォームを閉じるコマンドを多用すると壊れるらしいよ
31デフォルト名無しさん:01/11/12 06:44
ロジック的なもんで壊れるのか、蓄積されたデータ量で壊れるのか。
とにかくいきなりおかしくなるので、原因究明が難しい。
とりあえずバックアップから戻してくるか
エクスポートインポートで作り直して復活させる。
やっぱ個人ユーザーレベルのソフトになっちゃうのかな。
>>14
ネットワーク共有で複数ユーザ同時使用で壊れやすい
ttp://www.naboki.net/access/achell/index.html
33まじっすか:01/11/12 22:52
来月からACCESS2000でC/Sシステム作るんだけど・・・
クライアントとサーバには、それぞれ何をインストールすれば良いんでしょう?

マジレス頼みます。m(__)m
てな事で真っ先にバックアップツールの導入から
かんがえましょ。
>33
サーバー:MDBファイルを置いておく
クライアント:ACCESS2000でDAO
これ最強
>>33 マジレス
サーバー:ACCESS2000に入ってるMSDEにSP3
クライアント:ACCESS2000 & SR1 & SP2 & その他のパッチ
>>33
まじれす:
サーバ:MSDE(最新バージョン)
クライアントAccess2000以降でMDBではなくADPで作る
Access2002ならストアド作成が楽になる。

やってはいけないこと:
プログラムとデータを一緒くたにしたMDBをサーバに置きファイル共有
各クライアントはサーバ内MDBのショートカットをデスクトップへ貼り付ける

でも、これでも動いてるケースもあるなぁ(死)
バックアップと最適化は欠かさないから最悪のシナリオはかろうじて防いでる。
38デフォルト名無しさん:01/11/13 19:02
>37
各クライアントにショートカット置いて運用してるよ。
不安定この上ないけどね。
排他とかのへんが弱いのかな?
>37の「やってはいけないこと」的な物を作って
「C/Sシステムです」と堂々と言いきるうちのSE...

早く氏んでほしい。
40デフォルトの名無しさん:01/11/13 19:50
>>39
ウチの上司もだな。
それでいて「自分はすげぇ、オマエラはカス」
的な喋り方をする。もうやってられんね。
ウチもいる、やっぱみんなどこでもやってんだな
自分が辞めた方が早い気もするけど
4239:01/11/13 21:36
>40-41
安心した...ってより、この業界大丈夫か?という不安の方が大きくなったヨ...
'90年代初期にBtrieve中心で育ってきた連中にはAccess(JetDB)と
SQLServerの違いがわかっていない奴が混じっているように思う。

そもそもAccessのDB部分はISAMに毛の生えた程度のモノとの認識を
していれば、そうそう間違いを犯さないと思うのだが。
45デフォルトの名無しさん:01/11/14 17:23
Accessでクリスタルレポートを使う利点ってなんでしょうか?
また関連本でお勧めあったら教えてください!
46デフォルトの名無しさん:01/11/14 17:43
>>37 やってはいけないこと
うちそればっかり。
サーバ側データ使うアプリは
外注。
>45
無い。
クリレポって操作性悪いわデバッグしにくいわでAccessの
レポートの方がずっとマシ。

そんな訳で、Accessに限らずクリレポ使うメリット自体が無い。
他の帳票ツールを使ったほうが幸せになれるに100ペリカ。
48デフォルト名無しさん:01/11/16 09:17
>>47
激しく同意
49デフォルトの名無しさん:01/11/16 14:41
>>47,48

じゃあ、アクセスでクリスタルレポート使用することってできるの?
50名無しきぼう:01/11/17 00:00
今からバグ修正…。
頼むぜアクセス君。
F5連打で追ってく、劣悪作業が朝まで続く…。
51VB厨房:01/11/17 00:15
yyyy/mm/dd hh:mm:ss

通常なら5万円もらう。(うそ
BAKA = yyyy/mm/dd
int i;
while(a1!=0){
i++;
   a1=mid(t,BAKA,"/")
  a2=mid(a1+1,BAKA,"/")
  t=a2;
 
if(i==1)UNKO=right(mid(BAKA,a1,a2),2)
else UNKO=UNKO+mid(BAKA,a1,a2)
}
>49
使えるよ...
使おうとは思わんけど。
53デフォルトの名無しさん:01/11/21 17:32
えらい不人気だねぇ〜
やっぱプログラミングツールとしては認めてもらえないってこと?
やっぱ単体Exeを作れないのがイタイ。
DAOは好きだ。
56デフォルト名無しさん:01/11/26 18:59
どんな言語でもそうだと思うが、人が組んだソース追ってくのは辛い。
業務支援システムの修正にはいったが、アクセスはプロパティとか厄介。
規約なく作られるとメンテできん!
変数も関数も名前の付け方に統一性もなく、なにもかもわからん!
解析してたら、今日だけでメモ25枚までなったぞ。
今日はもう帰る!
これから作るひと、ある程度わかりやすい名前つけよーぜ。
'コメントも忘れるなよ…。
57デフォルトの名無しさん:01/11/27 18:59
access97でつくったアプリのデータはaccess2000で改変できないの?
>57
普通に開くには2000形式に変換しなきゃいかん。
そうでないなら、リンク張ればできるよ。
59デフォルトの名無しさん:01/11/28 19:17
>>50
>F5連打で追ってく、劣悪作業が朝まで続く…。

お疲れさま。
デバッグは疲れるけど、ACCESSのデバッグ環境は最強だと思うよ。
デバッグ中に新しいコードを追加していけるのは、とっても便利。

デバッグ環境の違いで MS-C から TurboC(TurboDebugger) に乗り換えた
こともあるけど、今まで使った中で MS-ACCESS のデバッグ環境が最高だね。
CとVBじゃ・・・。(以下略)
>59
2000のVBAウインドウってなんか使いにくいのはワシだけ?
62デフォルトの名無しさん:01/11/28 23:11
>>61
VBAウインドウが別ウインドウになって、使いやすくなったよ。
ウチは21インチ2つのマルチディスプレイ。
(左ディスプレイが従来のACCESS用、右ディスプレイがVBA用)

解像度低いと、確かに使いにくいね(ノートPCの時は特に)
>>62
そんなでかいのマルチで使ったところで自己満足だけだな(w

フライトシュミレータはやってみたいがな(w
64デフォルトの名無しさん:01/11/28 23:35
>>63
ACCESSの開発で食ってるけど、解像度が高いと生産性が2割は高いよ。
ストレスも溜まりにくいし。
ただ、左右が広いので 首がちょっと疲れるけど。
6562:01/11/29 00:11
>>64
解像度が高いのに越したことはない、
漏れも21インチ使ってるしな・・・
マルチなど意味が無いと逝っているのだ。

そんなんで生産性を騙ってるようじゃぁレベルがしれるぞ(w
6663:01/11/29 00:13
間違い63だった(w
サブとして使い古しの14インチ液晶とかあると、
ペイントツールなんかでは結構便利。
コーディングではあんま意味ないけど。

しかし液晶ってなかなか安くならんね。
Acと関係なしsage
68デフォルトの名無しさん:01/12/06 09:56
わしゃ、廉価版レポートユーティリティとして使っているんだが
他の価値を見いだした人っている?
オラとかSQL鯖とかのフロントエンドツールとしてはこれ以上無いくらい役立つYO!
70名無しきぼう:01/12/14 13:19
shell関数を使ってIEを起動させているのですが
Shell("C:\@@@.exe" & " " & ファイル.htm, vbNormalFocus)
で、exeファイルって端末によって置き場所違いますよね。
なにか良い方法はないですか?
>70
CreateObjectツカエ。
htmlファイルに対して、直接Shellを実行すればよいのでは?
(関連づけだから、絶対IEで起動させたい、という向きには向かないけれど)
IEに限らず、関連付けさせたAppを起動したいだけならShellExecuteを使うというテも
74名無しきぼう:01/12/14 13:46
>71
CreateObjectでできた。
サンクス""
>73
ちなみにほかのAppはマスタメンテナンス画面で
拡張子とexeのフルパスを入力してもらうようにしているのだが
ShellExecuteをちょっと調べてみます。
主にACCESS97 で開発してたけど、最近ACCESS2000の仕事が入るようになった。
2000だと、なんでもないフォームを開くのに20秒位待つことがあるし、
フォームの修正を書き込むのに10秒くらい待つことがある。
なんか不安定な感じ。

2002ならサクサク動くのかな。
使っている人がいたら教えてください。
>75
SR当ててる?
あと行ロック外すとか...
まぁ、不安定ってとこには同意。
7775:01/12/16 01:55
助言をありがとね。
早速 パッチを全部当てたけど、変わらなかった(ガックリ)
まぁ致命的な障害ではないので、しばらく様子を見ます。
78レポートの出力の質問の人:01/12/19 11:54
Access97です。
レポートをファイルとしてメール送付などしたいのですが...

・レポートをWord形式やExcel形式で出力するとレイアウトがめちゃくちゃ
・mdbごとメールするのは、ヘン

ということで一旦行き詰まりました。

思いつきで、PDF形式に出力できないかな、と調べたところ、
Adobe Acrobat のPDF Writer で要件満たせそうですね。
ですがちょっとAcrobat 値段が高いです。
フリーソフトでAccessのレポートをPDFに出力できちゃうのって
ありませんかね?
または、PDFにこだわらないので、Accessのレポートを一般的な
アプリで開けるファイル形式に出力する方法があれば、教えていただき
たいのですが...

同じ要件を経験された方、アドバイスお願いします。
レポートをうまいことHTMLに書き出す、とかどうよ?
80レポートの出力の質問の人:01/12/19 12:42
>>79
なるほど、調べてみます。
レス遅くてごめんなさい。
81デフォルトの名無しさん:01/12/19 13:37
>75
ハードのスペックは?
AC2000自体が重いからなぁ
82レポートの出力の質問の人:01/12/19 16:40
ぐあっ、「出力」アクションに出力形式「html」が余裕でありますね。
そんなことも知らないオレ、もしかして逝ってヨシですか。
でもこれ使うと罫線が省かれちゃう感じです。
PDFかな。やっぱ。
レポートをPDF形式に出力できるフリーソフト情報キボンヌ。と。
>>82
おまえ、スナップショットをしらんのか?
84レポートの出力の質問の人:01/12/20 00:30
>>83
PrintScreenでハードコピーとることですか?
今回だけの用件ならいいんですけど、
今後も定期的にレポートをメール送付したいのです。
複数のページを適切な大きさで表示してスナップショットとって
保存するという手順は、避けたいです。

スナップショットの意味が違ってたらごめんなさいde巣。
そのときは教えてください。
>>84
あのなぁ。。。

レポートを指定してエクスポート時にスナップショット出力してみ・・・
スナップショットビュアで簡単に閲覧できる
(インストールディスクに入っている)

マジに知らんのか(w
86レポートの出力の質問の人:01/12/20 10:57
>>85
マジに知らんかった。
ありがたやありがたや。
さっそく...と思ったらその機能が見あたらない。
セットアップでいろいろ追加しても出来ない。
もしや?と思いAccess2000をセットアップ。したらあった。
(>>78の最初で書いたけど、Access97だったんですよ。)

実際利用してみると、これいいですね。
レポートの印刷→PDF Writerだと若干レイアウト崩れるんですが、
スナップショットに出力だとレポートのプレビューそのまんま保存される。
(スナップショット→PDF Writerはきれいに仕上がる。)

スナップショットは97にはなくて2000からみたいですね。
うちの職場、2000の必要性が特になくて、みんな97なんです。
今回の要件でみんな2000なり2002なりにアップグレードしましょうってのは難しい。
てなわけで汎用性考えると97で作らなきゃならない。
取引先がスナップショットビューア持ってるとも限らない(ていうか持ってない)。

Acrobat買うってことになりますかね。(今実験で使ってるPDF Writerは借り物)
Readerはタダたから取引先にも入れてもらいやすいし。

いずれにせよ>>85氏に感謝。
>スナップショットは97にはなくて2000からみたいですね。
>うちの職場、2000の必要性が特になくて、みんな97なんです。
バカタレ・・97に、はいっとるワ!
漏れも97めいんだしな、
ビュア持ってなけりゃ、一緒に送ったればよいだろが!
8887:01/12/20 12:19
>>86
フト気になって探してみたら。。。ナイ。。。(汗

http://office.microsoft.com/japan/downloads/9798/snpvw80.aspx
ココカラDLセイ....(大汗
89レポートの出力の質問の人:01/12/20 15:28
>>87>>88
超感謝。
Viewerダウンロードしました。
で、DLページからたどってココ↓
http://office.microsoft.com/japan/assistance/9798/snapshot.aspx
によると、97のSR-1以降からスナップショットにエクスポートできるはずなんですが...
うちのは97SR-2なのにエクスポート時の[ファイルの種類]にスナップショットがない!
Access自体インストールし直しても、SR-2入れ直しても、y2kpatch入れ直しても、
Valuepackのデータアクセスパック入れ直しても出ない。。。

惜しいところまで来てると思うんですが...
9087:01/12/20 15:58
>>89
ここまできてデキンかったら知らんワ!
OSの再インストロールだな(w
91レポートの出力の質問の人:01/12/20 16:27
>>90
そうだよね、ホント。
89以前は、「できそうだけどやり方が分からなかった」
89では「できるはずなのにできない」
自分も投げ出したいよ。とほほ。

あとは自分でなんとかします。
いろいろありがとさん。
仕事(プログラマの人)でAccess使ってる人はいます?

Access2000の動作不安定さが怖くて、
未だに97を使ってますが、皆さんはどうですか?
市場にはAccess2002も出てますけど・・・
正直、2000にメリットを感じないス。
94デフォルトの名無しさん:01/12/22 01:34
>>92
93さんがいうように、個人的にはメリットは感じませんでしたが、
お客さんの要望でバージョンアップをしました。
もう、1年ぐらい前の話です。

一応、バグ等はありましたが、プログラム側で避けながら
動かしてます。

ACCESSが動作不安定という話をよく聞くけど、
私のところでは、どのバージョンでも問題ありませんでした。

もちろん、リリース前に何度もテストして問題を排除は
してますけどね。

不安定って、具体的にどのような症状ですか?
>92
 @ 最適化、バックアップをこまめに行うシステム構築
 A テーブルとそれ以外にオブジェクトを分ける

 最低限これだけやっておけば、そんなに不安定にはならない。
むしろアホなのは、付属のJet君。DB接続にJet使うんなら
97も2000も大差ないよ。
 2000で一応ネットワーク環境にちーとばかし強くなったみたい
(ページロックできる)なんだけど、どーにもファイルサイズが
肥大化するんで、どっちみちマルチユースには向かないねー。
>95
行ロックじゃなくて?
まぁ、どっちにしろ2000のあれはユーザを騙す為の小手先の実装だけどさ。
97デフォルトの名無しさん:01/12/25 13:55
>>96
小手先実装というのは、行ロックするために、
1行を2Kに増やしている(結局ページロックと同じ)だけという意味?
だとしたら、SQLServerの行ロックだって同じじゃなかったっけ?
>97
SQL鯖もそうなの?ヒィ
99デフォルトの名無しさん :01/12/25 23:01
教えてください。

サブフォームで自動採番したいんです。
[親フォーム]の[No,]は1・2・3・4・5・・・・
と自動化できました。このように↓

-------------------------------------------------------------
Private Sub Form_BeforeInsert(Cancel As Integer)
If DCount("No,", "テーブル") = 0 Then
Me![No,] = "1"
Else
Me![No,] = DMax("No,", "テーブル") + 1
End If
End Sub
-------------------------------------------------------------

その[No,]ごとにサブフォームがぶら下がっているのですが、
サブフォームにある[No,]にさらに採番したいのですがうまくいきません。
どうしたらよいのでしょうか??

こういうことがしたいです。↓
親フォームNo,1 サブフォームNo,1・2・3・4・5・・・
親フォームNo,2 サブフォームNo,1・2・3・4・5・・・
親フォームNo,3 サブフォームNo,1・2・3・4・5・・・
        ・
        ・
        ・
        ・
100デフォルトの名無しさん:01/12/26 00:06
>>97
SQLServerは、行ロックできるよ。排他ロックはできないけど。
101デフォルトの名無しさん:01/12/26 15:00
久しぶりにAccess2kでフォーム一個だけ作ってと頼まれたんだけどさ
単票フォームでマウスのホイール移動でレコード移動しちゃうのって抑制できんの?

誰か知ってる人居たら教えてくれません?
10292:01/12/26 15:41
>>93-95
遅いレスですいません。
私の環境(納入先も含め)、フリーズが多かったです。
原因不明としか言いようがないのですが・・・(これが困る)

私としては、AccessのDBに気を使いながら運用するのは
無理があるので、MSDE(できればSQL-Srerver)を使ってます。

画面は小規模であれば、Access97
多少規模が大きい場合は、VB or Delphiで作ります。

画面を作る上では、Access97とAccess2000って
そんなに違わないと思うんですけど

それでもAccess2000や2002を使う理由って
あるんでしょうかね・・・
>>102
いや些細なことなんですけどね

例.伝票更新画面にて(帳票形式)
 赤伝切った行は背景赤くしてよん

結果.赤伝の行は赤くすると
 全行真っ赤かやん
by Access97

行毎にカラー指定できるんはAccess2000から・・・
104102:01/12/26 16:38
>>103
Σ(´Д`ズガーン 知らなかった・・・
10595:01/12/26 17:12
>103
 あ、そーだな。まぁ一応、Ac97で一行毎に色付けることも
できるよ。手間かかるけど。
 そーかー、そーだったなー。条件付書式設定って、結構
かゆいトコに手届いていいカンジだ。

>101
 それ、いろんなトコで論議されてるけど、結局のとこ、
「ホイールのないマウスを使うのが一番」って結論だったと思う。
106102:01/12/26 20:29
質問ついでなんですけど、
AccessでMDE形式で配布って使ってますか?

レポートの用紙設定ができないから、
配布しづらいので、私は使ってないけど・・・

MDE形式は軽くて早いから魅力だけど、
レポートが無いプログラムってあんまり無いから、実際は使えない(泣
Accessは普通にやると設計時のプリンタ覚えてるんで面倒臭ぇのは事実。
だが用紙設定が出来ないって現象は聞いたことないケド...
>>105
そう手間はかからんぞ(w
まだまだ甘いな(w
109デフォルトの名無しさん:01/12/27 03:18
>>106
レポートオブジェクトだけのmdbを外出しにすりゃ
mdeでも何の問題ないぞ(w
>>108
ほんとに手間かけずにできますですか?
ん〜、できたらその source (ポインタ)を示して欲しいんですが。

# 「諦めな」っつうのは見つかったが(涙
>>110
http://www.ruriplus.com/msaccess/tch/tch_024.html
ruriさんとこのサンプルだ(W
>>111
ありがとうございます。
113101:01/12/27 12:07
>>105
サンクス
まあどうせ客に納めるものじゃないからホイール使うなってことにするよ(w
しかしこう気軽にレコードの移動をされると困るよね普通

まあ編集するレコードだけワークにひっぱてくる構造にすれば良さそうだけど
114106:01/12/27 12:14
>>107
例えば、用紙設定でB5をA4に変えても、
次に印刷するとB5のまま

私の書き方が悪かったみたいで・・・
「用紙設定の保存」が出来ないってことです。

>>109
レポートだけ外出しした時って、どうやって印刷するの?
AccessObjectライブラリでコーディングとか?

私も挑戦したけど、良い方法が浮かばなくて諦めた経験あり(泣
MDEの事を聞いて良かった
>>106
最近アクセスを使っていないのでうろ覚えだが
各パソコン端末に同じ名称のアクセス用プリンタを用意する。
"AccessA4Tate"とかね。
そしてレポートのページ設定で「通常使うプリンタ」でなく、
「その他のプリンタ」を選び、そこで"AccessA4Tate"を指定する。
…というような方法で逃れていたような気がする。
単票なら普通、非連結だろ
>まあどうせ客に納めるものじゃないからホイール使うなってことにするよ(w
>しかしこう気軽にレコードの移動をされると困るよね普通
これで飯食ってるなら普通ではないな。
>>101
>単票フォームでマウスのホイール移動でレコード移動しちゃうのって抑制できんの?
これってMS的には「仕様です」って言いそうだけどプログラムエラー(Bug)の類なのか?
>>114
>レポートだけ外出しした時って、どうやって印刷するの?
>AccessObjectライブラリでコーディングとか?
少しは努力してから聞くように
119114:01/12/27 16:02
>>118
>少しは努力してから聞くように
スマソ
前に外出しにするように努力したけど、
あまり良い方法ではなかったので、どんな方法か知りたくて

その時は、印刷に関するコーディングを外出しのmdbに仕込んで、
外出しmdbがコマンドラインオプションのパラメータを判断してから、
印刷(プレビュー、用紙設定)を行うようにしたんだけど・・・
なんかスマートじゃなかったので、使わなかった

違う方法なのかな?
120101:01/12/27 16:08
>>116
ハァ?
非連結にしといて追加、更新時に書き込めと?
自分で使う使い捨てのツールにそんな作りはしませんて
そういう無駄なところに労力裂いても意味が無いでしょ

ここに書き込んでる人の大半がAccessで飯食ってるなんて
妄想を膨らませないでね(はぁと
じゃぁ聞くなよ(ワラ
>>121
禿同(藁
123デフォルトの名無しさん:01/12/27 17:20
SQLを学ぶ上で、Accessを買ってくるのは妥当でしょうか?
Windows環境なので、他にまともな選択肢が無さそうなんですが。
>123
「SQLの入り口として」とりあえず初めてみるには妥当だと思うな。
めんどっちィ設定何もやらずにとりあえず動くし。
ある程度慣れたらOraとかSQL鯖とかに逝けばいいんでないか?
>>123
現行バージョンのACCESSならMSDE(SQL Serverの機能限定版)も付いてくるよ。
GUI管理ツールが無いなどの問題点もあるけどSQLの勉強には十分かと。>MSDE

というわけでACCESSでも良いんでは?参考書も多いし。

できれば無料、かつメジャーなのでというのなら体験版(90日とかの期間限定)があるものも。
(Oracle、SQLServerなど)
>>120
飯食ってるならと書いたはずだがな(w
素人だったら、そんなことにこだわるなよ(w

もっとも漏れは、非連結用の関数ライブラリにして、
ツール使ってるから、簡単な非連結フォームなら3分
かからん(w
127123:01/12/27 19:12
>>124-125
参考になりました。
学習用にMSDEをとりあえず使ってみようと思います。
ちなみに会社では仕事でOracleとAccess使ってます。
(まだほとんど出来合いプログラムの変更作業とかです。)
このOracleとAccess、いっしょに使うことが多いんですが、
相互にテーブル参照できないのがつらいですね。
>>127
ACCESSにてODBC経由でOracleのテーブル等が見れるが、これじゃダメなの?
129デフォルトの名無しさん:01/12/28 00:02
>>128
やりかた教えてほしいです。
>>129
ただ聞く前に、検索しろ。この板の掟だ

・・・ホントカヨ(w
131128:01/12/28 11:55
>>130
かなり同意。

>>127
いくらなんでも少しは自分で問題解決する癖をつけるべき。
例えば google で "ACCESS ODBCの設定 Oracle" とやると
http://ws.31rsm.ne.jp/~mahou/ac2000/gaibu/g05.htm
なんてのが引っかかる(勿論スカも沢山あるが)
これを参考にやってみるも良し、本を買うのも良し(というかこっちを勧める)。
>>131
やさしいねぇ。
ACCESSの開発はエンドユーザと関わることが多いので、あなたのような
サービス精神満点のプログラマが、良い仕事ができるんだろうねぇ。
ACCESS2002って、使っている人いる?
134デフォルトの名無しさん:02/01/06 00:57
保守あげ
135デフォルトの名無しさん:02/01/06 08:59
AccessのmdbファイルをWin共有フォルダに入れてマルチユーザで
使おうと思います。

それで「排他制御をしろ」と言われたのですが、それはVBAを使う
ということでしょうか。もっと簡単にAccessの機能は使えないので
しょうか?
検索するとAccess2000なら、レコード単位の排他制御ができる、と
書いてあるのを見かけますが、Access自身のヘルプを見ても書いて
ありません。

どなたか、教えていただけないでしょうか?
>135
ヘルプで「ロック」をキーワードに探してみ。
しかし、レコードロックは急激なMdb肥大化を伴う諸刃の剣。
素人には(略
137135:02/01/06 16:14
>>136
ありがとうございます。
とにかく、どこを見ればよいかわかりました。
あとは、勉強します。
138デフォルトの名無しさん:02/01/07 01:35
客先でACCESS2000で開発ということになり、
帳票をペラペラと出力することになったのですが、
プレビューではしっかり出力されているのに、
印刷するとデータが出力されないで、白紙状態で印刷されます。
プレビュー時に次ページをめくったりすると正常に印刷されるようです。

レポートのフォーマット時(イベント)に処理を行っているので、
それが原因かと思うですが、解決策が浮かびません。
どなたか、教えてください。
よろしくおねがいします。
(フォーマット時の処理は、レコードがなくても罫線を出力するという処理です。MSDNにあった奴)
139デフォルトの名無しさん:02/01/07 12:06
Access野郎Aチームあげ
140デフォルトの名無しさん:02/01/07 12:27
>>138
とりあえず、そのフォーマット時の処理を止めたらどうなるか実験してみれ
141デフォルトの名無しさん:02/01/07 12:31
>>138
>印刷するとデータが出力されないで、白紙状態で印刷されます。
>プレビュー時に次ページをめくったりすると正常に印刷されるようです。

これでうまくいくんだったら、
印刷する前に、redrawまたはrequeryをやってみたらどう?
142尻たがり:02/01/07 14:03
Accessのフリー版ってないんでしょうか。
オフィス互換スイートとかなぜか、Access互換はないもので。
MSDEではなくて、GUI重視のDBを使いたいのですが...。
ご存知の方よろしく。
143尻あがり:02/01/07 15:30
寿
144尻ふぐり:02/01/07 19:30
>142
割れ
>>142
無償ではないがランタイムはあるよ。
開発にはACCESSが必要。
フリー版があればオレも欲しいよ。
146尻たがり:02/01/08 18:44
>>145
つうか、Accessクローンですね。WordとかExcelはあるのですが。
サーバ上に構築とかではなくて、ローカルで気楽にデータベース作って
SQLごりごり書けて、ビュー切って活用できる操作性は非常に評価してまして。
雑誌とかでもチェックしてるけれどなかなか見当たらないもので。

競合製品だとbtrieveデスクトップ版とかになってしまうのかも。
素直に購入を考えます。ありがとうございました。
147138:02/01/09 12:10
レポートの詳細セクションのフォーマットイベントを利用すると、
この現象が発生することがわかりましたので、
フォーマットイベントは利用しないで、別の実現方法を考えて回避しました。
今後、フォーマットイベントを使用したときに、
また同じような現象が発生しそうな気がするのですが。
148138:02/01/09 12:16
というか、プレビューと印刷に差異が生じるってのは、
どういうことでしょう?
>>148
プレビューした状態で印刷を行うと、
印刷時に発生しないイベントがあるから、それで違うんじゃないの?
150デフォルトの名無しさん:02/01/15 21:23
初心者です。急遽フォームをつくることになってハマってます。
店舗データを検索、登録、更新するフォームです。
簡単だといわれたのですが、コンボボクスを使って検索して表示
する方法がわかりません。
それから、そのコンボボックスに、データにない文字列がはいったら
新規入力に切り替える方法というのがわかりません
どうしたらいいでしょう?たすけてください
"NotInList/リスト外入力時" イベント
>>150 人によって作り方は違うと思うけど
フォーム上に非連結の店舗選択用コンボボックスを作ってAfterUpdateイベントで
Me.RecordSource="select * from 店舗データ where 店舗コード='" & 店舗コンボ & "'"
みたいな感じで目的のレコードを表示できます。
153ななし希望:02/01/19 07:24
テーブルに設定している
数値型の入力制限している桁数(値)を
ロジックで取得したい。例えば999→3とか。
そんなことってできますか?
徹夜でココでつまずいてます…。
>>153
いったん文字列に変換してから長さを調べる。
関数でできる。
155ななし希望:02/01/19 08:00
有効桁数を取得するには?
プロパティらへんの値ってとれるんでしょうか?
>153
 Len(Cstr(数値型フィールド))
 これくらいできんと。

>>155
 オブジェクト.DecimalPlaces が有効桁数

 ここってム板(技術板)だよね?
>>156
DecimalPlacesは、テキストコントロルでしか使えないんじゃないの?
>>153>>155は、テーブル定義から直接値を取得できないか?
と言っているのでは?ちなみに俺はしらん。
158デフォルトの名無しさん:02/01/19 18:06
AccessというよりRDB全般初心者の質問です

企業→顧客大カテゴリ→顧客小カテゴリ
という感じで木構造のデータがあったときに
(1企業は顧客大カテゴリを複数持つ、
1顧客大カテゴリは顧客小カテゴリを複数持つ)
これをRDBに直すにはどのようにするのが得策でしょうか?

木構造のノードにあわせて1枚テーブルを作るのでは
テーブルが大量になってしまって得策ではない気がします。
159デフォルトの名無しさん:02/01/19 18:58
>>158
正規化してテーブル分割を行った結果、テーブルが大量に増えたのであれば、
それはそれでいいんじゃない?

仮定として、1つの小カテゴリが複数の大カテゴリに所属する可能性がない
(大カテゴリと小カテゴリの関係は1対多であって、多対多ではない)のであれば、
企業テーブルと顧客カテゴリテーブルの2つでも作れますね。
すみません。誰か助けてください。

現在、複数列を出力するレポートを作成しております。
レコード件数によってレポートヘッダーに配置した
見出しラベルの表示・非表示を制御をしようと思い、

if レコード件数>20 then
ラベル.Visible=True
else
ラベル.Visible=False
end if
というコードをレポートの詳細フォーマットに記述したのですが、
表示・非表示が切り替わりません。
Debug.Print ラベル.Visible でプロパティを確認したところ、
プロパティ自体はきちんと設定されているのに、
プレビュー表示には反映されていません
これはどういう現象なんでしょうか
161160:02/01/19 19:12
あ、しまったsageにチェックいれたままだった。
ageさせてください。
162デフォルトの名無しさん:02/01/19 19:26
>>160
詳細に書いてもだめ。
そういう場合一番簡単なのは、ヘッダーのラベルコントロルを
テキストコントロルに変えて、
値を=iif(sum(xxx)>20,"ふーん","")みたいな感じがよいと思う。
163160:02/01/19 19:46
>>162
素早い返答ありがとうございます。
文字だけだったならばその方法でいけるのですが、
ラベルの枠線を表示して表形式のタイトルにしてあるのです。
枠線の表示・非表示の切り替えは
やはりコードを記述するしかないと思うのですが
どのイベントに記述すれば変更が反映されるのでしょうか?

Visibleプロパティが反映してくれさえすればよいのですが・・・・。
164160:02/01/19 22:15
あ、すみません。自己解決しました。
作成したレポートはサブレポートとして使用するものだったのですが、
メインレポートの詳細フォーマットイベントにコードを記述したら
なんとか表示・非表示を切り替えてくれました。

お騒がせいたしました。m(__)m
165デフォルトの:02/01/25 08:45
アクセスのCREATE構文でオートナンバーの型を指定するにはどうしたらいいのでしょうか?
どなたかご教授ください。

Access2002使ってるよ(開発はしてない)。
ビューとストアドの変わりにクエリーってなってた、、、中は同じだが。
ピボットテーブル要らねー。
2000の時から思ってたのだが、あのバカHELPはもう治らんのか?>M$
167名無し:02/01/29 17:19
未だAccess97なんですけど…開発環境。
取り残されてるぅぅ。
168デフォルトの名無しさん:02/01/29 17:37
>>167
Access97は自宅では現役だぞ〜〜〜!!(爆)
半年前までは、Ac1.1から2000まで入れていたが・・・<職場
少なくともヘルプの出来に関しては97最強(ワラ
170名無し:02/01/30 11:33
>>169
確かにヘルプにはお世話になりました。
現在はOracleと繋いで開発しております。
>167
 大丈夫。MDBな限り、2000も2002もそうは変わらないよ。
Helpに関しては97が最強と違うか?
 ただ、2002からプリンタオブジェクト?が加わって、レポート
関連が幸せになったらしいが。
 客先でチマチマとプリンタを設定せずに済むならイイナー。
Acは97が一番良かった。
2002は、まださわってないですけど
173デフォルトの名無しさん:02/01/31 12:45
>167
うちもAccess97です。それどころかあと3年間は社内で
Ac97とAc2kが共存するので、開発はAc97で、実行は
97、2kどちらでも動かなければいけない。そういうわけで
あと3年間Ac97で作らなければいけません(涙
既存mdbアプリをWeb化すべく、java勉強しています。
それでもデータベースはmdbかMSDE(号泣
174名無し:02/02/01 17:00
確かに97で作ったのを2000で動かすと動かないのが
多いですが、困ったもんですね。気を付けることって
ありますか?
175173:02/02/01 17:21
>174
97mdbを2000mdbに変換し、Ac2kで変換後2000mdbを動かす場合
サブフォームの更新が時々うまく行きません
(Me!サブフォーム.SourceObject = Me!サブフォーム.SourceObject)
最初から2000mdbを作って同じプログラムを書くと、きちんと動いている
ので、この時点でもう作り直すしかないと思いました。
そういうわけで、Ac2kと97を共存させるのなら、97mdbをベースに
し、2kmdbに変換しないこと。(回答になってなくて失礼)

97mdbをAc2kで97モードで動かすように変換後、Ac2kで動かす
・オブジェクトの追加・削除ができません。テーブルやクエリーを
削除して作り替えているようなものは(リンク張り替え含む)
テーブル=データを全て削除後にデータを追加
クエリー削除=クエリーのSQLプロパティを変更する
・DloopUp関数などのDなんとか関数の戻り値に2バイト文字があると
文字化けするので、RecordSetを使って書き換え
・関連つきファイルを起動する時は、Shell関数ではなくShellExecute使用
・Format関数の書式が0.###+#のように符号付き指数にすると、戻り値に
余分な0がつくので削除する
>>174
いったいどんな作り方すると、動かない奴が出てくるんだ?
漏れの作った奴で不具合が出たものは一つもないが(w
177 ◆SQLyndSs :02/02/02 10:00
>>176

VBA使ってると自ずと動かないところが出てくると思うが。
まったく動かないということはないだろう。
178176:02/02/02 14:43
>>176
今まで作ったもの
(ちなみにネットでも公開している、ユーザ数も軽く数千)
97→2000→XPいずれも不具合の経験無し

逆にどんなことで引っかかるか教えてほしいものだ(w

179デフォルトの名無しさん:02/02/02 18:36
>>178
175に書いてあることはどうなの?
180178:02/02/02 19:41
>97mdbを2000mdbに変換し、Ac2kで変換後2000mdbを動かす場合
>サブフォームの更新が時々うまく行きません
こんなことなったことないが・・・
元々の作りに問題があるだけだろ
181デフォルトの名無しさん:02/02/03 17:15
>>180
じゃ、結論として97で作ったものは2000で動くと。それでいいね?
182178:02/02/04 00:01
>>181
だからそう書いただろ?
どうやったら不具合が出るのかを知りたいのだ
183デフォルトの名無しさん:02/02/04 12:33
>>182
自分で「作りかたが悪い」から不具合がでるって
書いてるやん。
184175:02/02/04 13:44
話が進んでいますね。
うーん、サブフォームの更新はいろいろ書き方があるのですが、
私はSourceObjectプロパティを書き換えて更新するのが確実
だと思っています。私が書いたことは実際に起こったことだし、
私の技量は中級ぐらいかと。
サブフォームは親フォームと非連結です。不定期に更新されない
ようだったので、私は97mdbファイルは、2000mdbに変換しても
100%動作保証されないと思っています。
178さん、あなたならサブフォーム更新をどのように書きますか?
まじで教えて下さい。私は前述のように、
Me!サブフォーム.SourceObject = Me!サブフォーム.SourceObject
です。
あと、Accessでも比較的簡単なプログラムでは、問題なく動いていました。
185178:02/02/04 13:51
>サブフォームは親フォームと非連結です。
これは当然として・・

>私はSourceObjectプロパティを書き換えて更新するのが確実
だと思っています
これをやるいみがわからんなぁ・・・
無論漏れはやりません。
それにここだけエラーが出るなら回避すればいいと思うが(w
186175:02/02/04 14:00
>178さん
あるテーブルのデータをサブフォームで表示していて、
テーブルのデータを更新後、サブフォームの表示を
更新する場合はどのように書かれますか?
おそらく私がへぼいだけだと思いますが、
Me.Requery
では、サブフォームまで更新されないことがあったので、
SourceObjectプロパティを書き換えているのです。
Access97でこの方法だと、私が作ったものに関しては
100%更新されます。
187デフォルトの名無しさん:02/02/04 14:34
緊急です!
Microsoft Jet のエラーで
「1つ以上の必要なパラメーターが設定されていません」
というのはどういうときに出るエラーでしょうか?
またその対処方法は何でしょうか?
お願いします!
188デフォルトの名無しさん:02/02/04 14:38
>187
何をやっててそのエラーが出たかを明示すると吉。
SQL文がおかしい時にも出たような。
189178:02/02/04 15:13
175
>更新する場合はどのように書かれますか?
>おそらく私がへぼいだけだと思いますが、
>Me.Requery
FAQだな
リクエリーは、テーブルのデータを再読み込みするに過ぎない
テーブルにデータをきちんと書き込む前にrequeryを行ったところで
更新はされない。
リクエリーの前にきちんとテーブルに書き込むように。

190187:02/02/04 15:19
>>188
解決しました。
すみません、無いフィールドに対して UPDATE 実行してました・・・。
逝ってきます!
191デフォルトの名無しさん:02/02/04 15:27
>>186
よくわかんねぇけど、その場合親フォームからだと
Me.サブフォームコントロール名.form.requery
じゃないのか?
192175:02/02/04 15:28
>178さん
Requeryの前にきちんとテーブルに書き込むとは、

recordset.Update
recordset.Close
db.Close
Me.Requery

のことでしょうか?(Docmd.RunSQL後にRequeryでもよさそうですね)
193175:02/02/04 15:35
>191さん
あなたの言う通り。
192の「Me.Requery」を「Me!サブフォーム.Form.Requery」
にするとばっちりでした。そう言えばFormプロパティを使って
〜と書いたことがあったんだった。
厨をさらしてしまったです。
この書き方でAc2kとの比較をしたことはないなぁ。いつも
SourceObject強制書き換えだったし。ありがとう。
>192
Docmdって基本的に非同期実行だったはずなんで、あんまり
使わないほうが幸せになれそうな気がします。
195通りががり:02/02/04 18:54
>>193
それで動いたのなら、そもそも>>175
「最初から2000mdbを作って同じプログラムを書くと、きちんと動いている 」
は、つじつまが合わないんでないかい?
dlookupの件も別のところに問題があるってことはないの?

別に揚げ足を取る気はないのだが、
ACCESSを非難する意見(mdbがすぐ壊れるとか)の多くは、
使い方が間違ってることの方が多いいように思う。

それからこれも揚げ足取りではないし>>193に言っているわけでもないが、
97>2000への移行で問題を出したくないなら、
なんで変換だけで終わりにするのよ?
新規で2000MDBを作成して、そこにAC97から2000に変換したMDB
からオブジェクトをインポートするんだよ。
その後は、一つ一つテストして問題ないかどうか試せばOK。

別にACCESSを擁護する筋合いはないのだが、
なんか不当に低く評価されているような気がするので書いてみました。
196あんつ:02/02/04 20:34
テーブルで他のテーブルの一覧から選択して自動的に入力できるようにするにはどうしたらいいの?
フォームではできるのですが。。
197VBA厨房:02/02/04 22:24
VBAでクエリで表どうしを外部結合→表作成すると時間がかかる
またはAccessがフリーズしてしまうので

「フィルタで抽出した1レコードをテーブルの1レコードとして作る」
これを繰り返し実行してテーブル作成ってできるんですかね?
どうしたらいいんでしょうか?
Access使うなってのは無しで
198175:02/02/04 23:52
>>195
>なんか不当に低く評価されているような気がするので書いてみました。
これはそうなのだが(w
仕事がVBとかCばっかりくるのよね。。逆らっても仕方ないし(w

個人的にはAccessがよいのだがな(w

199デフォルトの名無しさん:02/02/05 02:22
>>197 とりあえず・・・ACCESS使うな。
200デフォルトの名無しさん:02/02/05 09:52
>>196
フィールドのルックアップをコンボにして〜って感じ?
201デフォルトの名無しさん:02/02/05 09:55
>>197
何をやろうとしてるのかサッパリわからん
テーブル作製なり、追加のSQL作ってCurrentdb.Executeじゃいかんの?
1
>197
 テーブルを沢山作りたいって話?できんことはないでしょうが、
CreateTableつかって地道にシコシコやるかね。
 あるいはさ、そのフィルタの抽出元と、新たに作成するテーブルって、
同様のフィールド内容になるわけでしょ。
 だったら、空のマスターテーブル作って、Docmd.CopyObjectした後、
フィルタ抽出後にINSERTかけてやれば?
 
 てゆーかむしろ、テーブルわんさかと作成するような処理がどんなモノなんか
気になるね。そっちの具体的説明してもらったほうが、幸せなカンジ。
 ほかに処理方法ありそうだけど。設計は大丈夫?
204 :02/02/05 11:14
ADO使う
205デフォルトの名無しさん:02/02/06 11:06
>131
http://ws.31rsm.ne.jp/~mahou/ac2000/gaibu/g05.htm

リンク切れてるよん(W
206175:02/02/06 13:27
>195さん
私の書き方が足りないようです。
DLookUp関数の件は間違いないです。実際に動かしてみて再現しますので。
もちろん全てがそうとは言えないでしょうけれど、こちらででる以上は
対策をしなければいけませんし。
サブフォームの件は別の書き方がある、というのを教えて頂いただけで、
それを2000で検証したわけではありません。もちろん検証結果によって
次からこの方法に変えるでしょう。しかし、SourceObjectを更新する
方法はAc2kでも有効(のように見える)ですし、私が前述したことは
事実です。

私は予算が少ない仕事ばかりだったせいか、Access(たまにVB)の
開発が圧倒的に多いです。AccessはVBのようにVBA主体で作ると、
VBと何ら変わりがないと思います。レポート機能、mdb内でワークテーブル、
クエリーを自由に持つことができるのは、大きなメリットだと思われます。
適切な運用方法を取れば、安いコストでRDBを使えるわけですから。
>>175
おまえがもしこれで飯食ってるならDLookUp関数(D系関数)
等使うのはやめておけ。
コードが見づらい上、遅い、インデックス効かないなどなど
デメリットだらけだ。オマケに問題もあるようだしな(w

プロなら、データはSQLでサクッと取得しろ
208195:02/02/06 19:32
>>175=>>206
なんか、話が食い違っているので、気になっておいらも試してみた。
AC2Kでは確かに、親フォームをrequeryするだけでサブフォームも更新されるようになってる。
以前のバージョンでは更新されなかったのに。
これをもって>>175の見解となったわけだね。

おいらはサブフォームを更新するときには、前から>>191が書いた方法で
やってたから、逆にAC2Kで、こんなことが出来ると思ってなくて>>195を書いたんだよ。
結果として中傷になってしまったことはあやまりまする。ごめんよ。

でも、サブフォームをいじる場合、例えばプロパティー参照とかの場合は、
forms!親フォーム.form!サブフォーム!サブフォームのコントロル!.XXXX
とするのはACCESSではFAQレベルだよ。

Dlookupの件も、少なくともおいらは一度も不具合を感じたことがありません。
逆に、再現性があるなら書いてよ。こっちでも試してみるから。

>>207
indexが効かない、遅いというのはそうなんだけど、
起動時に1回だけ参照するような場合は、結構便利だよ。
テーブルに2〜3000程度のレコードしかない場合(中小企業の顧客マスタとか)だと、
関数使ってもそれほど変わらないから、おいらは使ってる。

コードの見易さは・・・書き方次第かな?
素直に変数に入れてそこにコメント入れておけば、見にくいということはないと思う。
まあ、どんな関数も使い方次第だろうけどね。
209195:02/02/06 19:34
>>208
追伸。突っ込まれる前に書いておく。
最近のVBAでは、!を使うのはタコってことになってるらしいね。
おいらも勉強しなきゃ!
「!」って駄目なの?Me!txtCode.valueとかの?
「.」より速いってヘルプに書いてあったから使ってたけど。
>>208
>indexが効かない、遅いというのはそうなんだけど、
>起動時に1回だけ参照するような場合は、結構便利だよ。
SQL使ったって大して手間かからんだろ?
もっとも漏れは関数化してるがな
まぁ。割り切って使うなら否定はしないが。。

ちなみに漏れは、D系関数・Find系メソッドを山盛り
使ってるやつを、瞬時に「ヘタレ厨房」と断定している(w
・IIf大量使用
・D系関数大量使用
・レコードセットを開いている
・Find系大量使用

コレをループの中でやられた日にゃぁ
213175:02/02/07 10:30
>208
195さん検証して下さってどうもです。
ほとんど独学状態なので、怪しいところは突っ込んで下さい(^^
説明不足なのはご容赦下さい。私Requeryをほとんど使わないです。
プロパティを強引に書き換えて更新するのが好きで(w
サブフォームで入力させるようなフォームをほとんど書かないので、
たまにサブフォームを参照しようとすると思い出すのに苦労します。
DLookUp関数ですが、普通の書き方です。戻り値が2バイト値を含む
値を、LabelコントロールのCaptionに設定すると、文字化けが
たまにおこるんです。Ac97mdbをAc2k上で、97モードとして変換して
Ac2k上で97モードで動かす場合に発生しました。

Me!の!はアクセススピードが速いといろんな本で見かけました。
そのため使っています。.と!をどのように使うかが分かっていれば
どちらでもいいのではないでしょうか?
D系関数は、対象テーブルのデータ数が少ない場合には使ってもいいと
思っています。もちろん207さん、212さんにも激しく同意です。
SQLでさくっとがよいですね。

どうにか周りを説き伏せて、Javaへ移行しようと勉強中です。
教えてくれる人がいないので、本と2ちゃんが頼りです(w
皆さんはソフト会社勤務ですか?うらやましいです。
214デフォルトの名無しさん:02/02/07 11:36
(1) Forms!フォーム2!テキスト0 = Forms!フォーム2!テキスト0 + Forms!フォーム2!テキスト2
(2) Forms("フォーム2").テキスト0 = Forms("フォーム2").テキスト0 + Forms("フォーム2").テキスト2

それぞれのコードを10000回実行したところ、
(1)が8秒
(2)が12秒
という結果でした。
結構差が出ますね。
「!」より「.」のが書くときは楽なんですが。

実行環境はAccess2000です。
その値が正しいなら一回130nsの差だ。気にするな。
a
217デフォルトの名無しさん:02/02/07 13:05
>214
 ! が実行速度が云々ってより、どっかのBBSで、「古臭い」って指摘受けて
以来使っていない。実害はあるのかね → !
 文法上消えそうってなら大問題だと思うけど。
>195
 ! がタコな理由ってわかります?
自分は最近使わないよーに心がけてるんだけど、某BBSで
「古臭い」って意見があって、タコな理由としてはイマイチ
納得できん状態のまま。実害ってないの?
 D系はインデックス効けば結構使えたりすると思うんだがねー。
ちろっとテーブルの中身見るときには便利だと思うが、
 F系、IIFを使われると結構鬱だね。

>212
 そん中に
 ・Like大量発生
 ってのも入れといて。てゆーか今、そーゆーコードが別窓で
 開いてたりする
219218:02/02/07 13:43
>217
 ごめん、被った。
皮?
221デフォルトの名無しさん:02/02/07 18:24
WindowsXP上でAccess95使ってる人っているかなぁ〜?

Accessを起動してからMDBを読み込めば問題ないんだけど、
拡張子MDBファイルをAccess95で開く設定にすると、
うまく立ち上がらないんだけど・・・
ウチの環境だけの問題なのかなぁ??
222デフォルトの名無しさん:02/02/08 15:43
Access97のmdbをAccess2000へ変換、Access2000上で動かすと、
アプリケーションエラーが出て逝ってしまいます。
連結フォームでデータ入力、データファイルは皆で共有という
危険なシステムなんですが、連結フォームで新しいデータを入力
すると、文字を入力した途端にメモリ違反状態です。
ファイルの最適化・修復・新規ファイルにエクスポート、データファイルの
最適化などでも治りません。
このままだと作り替えなのですが、このような状態になられた
方はいらっしゃらないでしょうか?
ちなみにコンパイルエラーなどは全くありません。
>>222
>すると、文字を入力した途端にメモリ違反状態です。
まず、どこで不具合が出るか特定してから聞け。
コードも無しに落ちるようなこと無いだろが?
助けてください。
上司が[得意先]って感じのフィールド名を多用します。
>>224
SJIS環境だけなら問題ないんじゃない。
>>224
このあいだ引き継いだソフトのバグとってたら
フィールド名が[得意先]でソースのなかで[得意先No.]って書いてましたがなにか?
カラム名には、漏れは半角英数しかつかわんな・・・
日本語使いたい時もグッとこらえている(w
>>226
発見しづらいバグだねぇ。
昔ひらがなの「へ」とカタカナの「ヘ」違いでばぐったことがある。
[得意先コード]って普通、英語では[CustomCode]であってる?
Customerのほうがいいのか?
230デフォルトの名無しさん:02/02/10 19:49
>>229
[TokuisakiCode]
[DenpyoKubun]
>>230
>DenpyoKubun
漏れもこう書いている(w
下手に英語使うと意味わからんくなって自爆するし(w
ところで、なんでフィールド・カラムの2通りの呼び名が
流通してるんだろ?
233デフォルトの名無しさん:02/02/12 09:32
質問です。
AccessからSQLServer上のテーブル(リンクテーブル)を
リネームすることは可能でしょうか?
どなたかわかる方よろしくお願いします。
Access97とSQLServer6.5です。
234デフォルトの名無しさん:02/02/12 10:12
>>233
SQLServer上のテーブルをリネームってのは無理じゃない?
クライアントに存在するリンクテーブルオブジェクト名を変更するのなら簡単だろうけど。
Accessクライアントから見れば同じ事だ。
235デフォルトの名無しさん:02/02/12 11:25
>>234
やはり無理ですか・・・
ありがとうございました。
236Midnight:02/02/12 11:36
>233
新しいテーブル名でCREATEして、INSERTして、旧テーブルをDROP。
最後にリンク張りなおし、とかじゃダメ?
>233
SELECT * FROM table;
っていうビューを作ったらどう?

…テーブルのリネームが必要な設計って一体?
238 ◆SQLyndSs :02/02/12 11:55
>>233
パススルークエリー使えばいいんでないのん?
239デフォルトの名無しさん:02/02/12 12:08
>>236
「最後にリンク張り直し」のところをテーブル名のリネームにしたいんですけど…

>>237
CSVファイルから、ただインサートする処理です。
ただしCSVファイルの正誤を1レコードずつ行わないといけないので…
既存のデータはアップデート、新規はインサート、おかしいデータはエラー
ログを書き出しと言う形です。

一件ずつ処理するには遅すぎるので、サーバの新テーブルに直接インポート
して旧テーブルと比較、それで旧テーブルをドロップ、新テーブルを旧テー
ブルの名前にリネームという感じにしたかったんですが…
240デフォルトの名無しさん:02/02/12 12:14
>>238
すいません、初心者なもんで・・・
なんですか、そりゃ?
241 ◆SQLyndSs :02/02/12 12:33
>>240
パススルー クエリー
このクエリーは、Microsoft SQL Server などの ODBC データベースに、サーバーに対応するコマンドを使って直接コマンドを送ります。たとえば、パススルー クエリーを使ってレコードを取得したり、データを変更したりできます。

ヘルプくらい見ようよ…。
242デフォルトの名無しさん:02/02/14 09:48
>223
コードは全くないんです。本当にデータの新規追加時は、
連結フォームの機能に頼りっきりです。
VBA実行中にここで落ちた!なら報告のしようもあるの
ですが、新規追加用フィールドに文字を入力した途端
(もちろんイベントプロシージャ一切なし)にメモリ違反
で落ちるんです。

社内のヘルプデスクにきくと、回避方法はありませんと
言われてしまいました。しかし、連結フォームで新規追加が
できないわけではないので、結局作り替えかなぁと思います。
243223:02/02/14 10:31
>242
atok使ってないか?
244223:02/02/14 11:55
>>242
追加
漏れの経験では、コントロール数が多すぎると不安定になるな。
元の奴からコントロールを出来るだけ取り変換し、後で少しずつ
追加してみ。
>社内のヘルプデスクにきくと、回避方法はありませんと
>言われてしまいました。しかし、連結フォームで新規追加が
>できないわけではないので、結局作り替えかなぁと思います。
たいがい、作り方がショボイのが原因だ(w
245242:02/02/14 14:48
223さん、ありがとうです〜
ATOKは使っていません。おじさん達は分かりませんが、
新しいWindows2000には絶対に入っていません。
個人的にはATOK萌えなんですが。
作り方がしょぼいには激しく同意いたします。

コントロール数は多めです。
切りはりしながら実験してみますです。

ところで、某サイトとのマルチポストになるのですが、
どうかお許し下さい。
Access2000のコンボボックスに数値データを入力
した後に、文字列を入力すると、入力したデータ型
不正エラーが出てしまいます。(非連結フォームです)
246242:02/02/14 14:50
Win2000、Access2000です。

親フォーム:サブフォーム枠 frmDetail、テキストボックスtxtdata、ボタンあり
サブフォーム:コンボボックス cmbdata

どちらも非連結フォームです。
親フォームのテキストボックスに好きな値を入力し、ボタンをクリックすると、
サブフォームの内容が書き換わります。
以下はボタンクリック時の処理です。

With Me!frmDetail.Form
.cmbdata = Null
.cmbdata.Tag = ""
.cmbdata.Format = ""
.cmbdata.RowSourceType = "Table/Query"
.cmbdata = Me!txtdata
.cmbdata.RowSource = ""

.cmbdata = Me!txtdata ←ここでエラーが発生
.cmbdata.RowSource = "select VALUE from T_WRK_TEST order by ID;"
End With

回避する方法はないでしょうか?
詳しい方、どうかご教授下さい。
>>246
さすがに厨房すぎて快投する気にならんな(w
248242:02/02/15 17:45
>247
そう言わずにぜひお教え下さい。
97では動いていたんです。こういう使い方が間違えているのかも
しれないけれど・・・
>>246
無意味な箇所がイパーイ
つーかエラーでなかったぞ
WinXP,Access2002だけど。
とりあえず名前をDataを先頭大文字にして欲しかったり
まんまコピペしたけどエラーでなかった。
Win2000,Access2000で。

つーか
Me.frmDetail.Form.cmbData = Me.txtData
だけでいいんじゃないか?
各イベントでRowSorce書き換えるようなソフトなんざ、メンテ面倒だぞゴルァ

実はコンボボックスとみせかけて、実はリストボックスなんていうオチじゃないよね?
252246:02/02/18 10:59
みなさんどうもです。
問題のコントロールは間違いなくコンボボックスです。
なんでこんな処理かというと、クライアントがExcelっぽい
入力をしたい、値の候補は出せと言って・・・
で、左側に部品名一覧リストボックスを配置して、入力したい
部品をクリックすると、右側のコンボボックスが表みたいに1列に
並んだところに表示される。で、部品毎にスペック(データ型)は
ばらばらなので、ある1つのコンボボックスには文字型、数値、
金額型のデータが入れ替わり表示され、そのデータ一覧が
RowSourceに設定されるという設計なんです。
メンテは私1人がやっております。
Access2000でエラーでませんか?サービスパックは何
でしょうか?Microsoftに問い合わせると、そういう仕様
なんだと言われました・・・

作った私も不条理だと思う処理です(涙
>作った私も不条理だと思う処理です(涙
あーた、、、こんなん作って金取ってたら不条理でっせ(藁
254デフォルトの名無しさん:02/02/18 18:00
>>252
思いついたことをいろいろ試してみるしかないね。
DoEventsいれるとか。RowSourceの設定と代入を逆にしてみるとか
なぜエラーが発生するのか原因を追求したいのならば別だけど
動かすことが先決ならばそうした方がいいと思う。

255252:02/02/18 19:45
>253
そんな〜クライアントの要望だったんです〜〜
これでも頑張ったんです〜
>254
唯一の可能性が、RowSourceに設定するクエリーで、表示されるフィールドを
文字型にするとうまくいくらしい、です。CStrをかけて試してみます。
頑張ってみます。
>>252の説明がさっぱり理解できないのはオレだけですか?
1つの方法でダメだと思ったら別の方法も考えなよ。
257sage:02/02/19 23:42
質問があります。
一つのフィールドの中に「山田 花子,やまだ はなこ,女」
のような複数の情報をもったレコードがあります。
これらの情報を「山田 花子」、「やまだ はなこ」のように
分割して別々のコンボボックスでリストを作りたいんですが、
どのようにすればよいでしょうか?
自分で調べてもどうしても分からないんです。
よろしくお願いします。

>>257
カンマ区切りであればカンマまで取り出してリストにすればいいのでは?

でも、1つのフィールドに複数の情報を持っていることがおかしいし、
ばらばらに表示させた後何をさせるつもりなの?
設計から考え直すことをおすすめします。
>>257
テーブル構造に氏名、氏名かな、性別を持たせる。
DB系アプリではプログラムで妙な処理をせずに
テーブル構造に素直に反映させた法が良いかと。

んで駄目ならSplit関数でばらして処理かな...
260デフォルトの名無しさん:02/02/24 04:28
納品書って英語ではinvoice?
っていうか、販売管理用語の英訳載ってるサイト無いですか?
>>260
それは請求書。
普通の和英でもでてると思うが。
>>260
英語でテーブル名つけるか・・・ハマルゾ(藁
263デフォルトの名無しさん:02/02/24 11:11
ウチの会社、テーブル名「請求書」「業者」「銀行」…。
わかりやすすぎ。
テーブルの頭にはT_とか何とかつけたほうが便利っぽい
>>264
おれもテーブル名で悩んだことがあるけど「T_」は、つけないほうが良い気がする。
テーブルでもクエリーでも振る舞いは同じなので区別する必要は無いと思うのです。
なんとなくだけど。
266デフォルトの名無しさん:02/02/24 16:20
ローカルのマスタテーブルはL_
データテーブルはT_
とかしてる。
267jun:02/02/24 17:00
アクセス使いのみなさん質問よろしいでしょうか?

アクセスでOLEオブジェクトでBMP画像を格納して
それを、VC++6.0にODBCで接続して BMP画像をLongバイナリ
データで読み込むのですが、VCで表示するために

BYTE *p = (BYTE*)GlobalLock(m_pSet->m_column1.m_hData);

FILE *fp = fopen("aaa.bmp", "wb");

fwrite(p, 1, m_pSet->m_column1.m_dwDataLength, fp);

fclose(fp);

GlobalUnlock(m_pSet->m_column1.m_hData);

(m_column1 という変数が ロングバイナリはいってます)

とやったのですが、aaa.bmpというロングバイナリにbmp拡張子
つけてみたんですが、ファイルの作成はできるのですが
表示が できません・・・たぶん バイナリデータの頭に
アクセスでペイントを開くデータがあるからだと思います。
どうやって解決したらよいでしょうか?
おねがいします! ながなが すみません!
クソ質問投げるなよ
まず質問の仕方ってのがあるだろ。
m_pSetってなんだよ。
BITMAPINFOHEADERかRIFFのヘッダが入ってるんとちがう?
つーかできたファイルをダンプしてみりゃわかる。
ダンプして貼りつけろ。
ダンプっつーのはこういうやつだから。
掲示板だとずれるかなあ
76 65 72 6c 6f 61 64 69 - 6e 67 20 23 3c 20 69 73 verloading #< is
20 61 20 62 61 64 20 69 - 64 65 61 2e 0a 0a 20 2d a bad idea... -
20 4d 61 63 69 65 6a 20 - 53 74 61 63 68 6f 77 69 Maciej Stachowi
61 6b 0a                     ak.
271jun:02/02/24 21:19
>>268
クソ質問ごめんなさい!!
でも、反応ありがとうございます!
m_pSet とは RecordSetクラスのポインタです!

>>269 270
ダンプとは、これでよいのでしょうか?
化けっちゃってるんですが・・?
00000000 15 1c 38 00 02 00 00 00 - 16 00 0e 00 14 00 2a 00 ..8...........*.
00000010 ff ff ff ff 83 72 83 62 - 83 67 83 7d 83 62 83 76 ....ビットマップ
00000020 20 83 43 83 81 81 5b 83 - 57 00 50 61 69 6e 74 2e イメ..ジ.Paint.
00000030 50 69 63 74 75 72 65 00 - 01 05 00 00 02 00 00 00 Picture.........
00000040 07 00 00 00 50 42 72 75 - 73 68 00 00 00 00 00 00 ....PBrush......
00000050 00 00 00 40 30 01 00 42 - 4d 36 30 01 00 00 00 00 [email protected].....
00000060 00 36 04 00 00 28 00 00 - 00 40 01 00 00 f0 00 00 .6...(...@......
00000070 00 01 00 08 00 00 00 00 - 00 00 2c 01 00 00 00 00 ..........,.....
00000080 00 00 00 00 00 00 00 00 - 00 00 00 00 00 00 00 00 ................
00000090 00 ff ff ff 00 16 15 36 - 00 59 56 8b 00 28 26 42 .......6.YV..(&B
000000a0 00 14 13 1d 00 27 1f 58 - 00 29 1e 6a 00 55 3c 98 .....'.X.).j.U<.
>>261
英語のNorthwindと照らし合わせたら納品書がinvoiceってなってた
273デフォルトの名無しさん:02/02/24 22:34
T_ Q_ F_ R_ M_ とか付けたがるコボラーは氏んでください。
>>272
業種とか会社とかにもよると思うが、納品書=請求書って場合も
結構あるからね。
多分英語で納品書という単語はないと思う。(知らないだけかも)
そのあたりの概念の話になるような気がする。
納品はdeliveryかな・・・。(自信なし)
275デフォルトの名無しさん:02/02/27 03:58
 OLEオブジェクト型にWAVEサウンドを挿入したいのですが、
どうしもテーブルにパッケージと表示されてしまいます。
 WAVEサウンドとテーブルに表示するにはどうしたらよいのでしょうか?
ご存知の方よろしくおねがいします。
276デフォルトの名無しさん:02/02/28 15:28
TransferSpreadsheet
をつかってテーブルの内容をEXCELに書き込みたいんだけど
うまくいかないッス
ファイルだけはできるんだけど中身が無し
もう一度実行するとうまくいく…
出力するセルの位置が決まってるから
OutPutToだとだめなんです…

277デフォルトの名無しさん:02/02/28 15:40
>>276
DoCmd.OutputTo
を使ってみては?

関係ないんだけど、客先のAccs2000環境下で突然「共有ロック数違反」が出始めた。
とりあえずレジストリいじってJetのロック数を増やして対処したんだけど、NT4.0→Win2000へのパフォーマンスが著しく低下。
いい方法無いかな?
278デフォルトの名無しさん:02/03/04 13:45
テーブルを開き、直接データを入力する際に
"123 " の様に、文字列の最後に半角空白を追加して保存したいのですが、
"122" と空白が除去された状態で保存されてしまいます。

何か、キー操作などで空白を最後に追加することはできないのでしょうか?

 
>278
 テーブル直接叩いてるんなら無理。不可能。全角スペースなら入るけどな。
テーブルに別セッションで書きこめばオッケーだよ。
 フォームから登録するとか、モジュールで書きこむとかね。

 あるいはそのデータを利用する際に & " " って追加してやれ。普通はこうする
と思うが、冗長なスペースが必要ってこともあるんだろうな。
280278:02/03/04 18:01
>>279
直接TBLに書き込むと無理なんですね・・・
難しくもないのでコードで書きます。
ありがとうございました
281デフォルトの名無しさん:02/03/04 20:18
今帳票出力のシステム作ってるんですが、ACCESSのレポート機能では柔軟な表ができそうもないので、
EXCELで罫線等は引き済みのテンプレートを作って、
印刷時にテンプレートをローカルにコピーし、それにデータを貼り付けていくという方法をとっています。

ですが、出力データが数千件とかあった場合、EXCELに出力するのも限界があるのかな。。と考えています。
あとパフォーマンスも落ちるし。
(100件程度でも2分ぐらいかかっています)

みなさんはACCESSのレポート機能で対応できない帳票を出力したいとすると、どんな手法をとりますか?
よければ教えてください。
帳票用ソフト使うってのはだめ?
>>281
柔軟な表って何だ?
ちなみに漏れは、ライン・サークルメソッドをライブラリ化しているから
どんな帳票もラークラク(w
284281:02/03/05 09:11
>>282
帳票用ソフトなんてあるんですか^^;
全然考えてませんでした。ちょっと調べてみます。
でも買わないといけないのであれば却下されそうだ・・・

>>283
柔軟な表・・そうですね・・格子状の罫線がバリバリな表とか・・・
いわゆる、ACCESSのレポート機能にある
下方向に「ヘッダ・詳細・フッタ」の形式では対応できない表です。
(柔軟、ってのはちょっと表現間違っていたかも^^;)
今やってるのは、横方向に詳細が続くようなものなので、
ACCESSのレポート機能では対応できないのです。
(しかも格子状の罫線つき)

ライン・サークルメソッドをライブラリ化してるとのことですが、
よければ詳しく教えて頂けますか?
最終的にはACCESSのレポートに出力してるんでしょうか?
>>284
ヒントだけ教えてやろう・・・・
四角オブジェクトを貼り付けてその座標を取得
それを元に縦横ループ
286明日納期:02/03/05 11:42
お願いです、助けて下さい!
モジュール開けようとしたら
「オートメーション エラーです。(Error 440)」
で開かないんです。
復旧できないのでしょうか?
>>286
スデに死んでいる(w
新規mdbにできるものだけインポートしろ

Access97で作ったものならまだ救いはあるが・・・・
288明日納期:02/03/05 11:54
Access97で作ってます。
もうホント藁にもすがる勢いなんです。
方法があるのならお願いします。教えて下さい。
>>288
そりゃラッキーかも(w

Access2000に変換→97形式に変換
できればそれでよし
モジュールが生きてりゃラッキーだな

うまくいくかどうかは保証はせんがな(w
290明日納期:02/03/05 13:42
>>289
だ、駄目でした…。
モジュール死んでるようです。
諦めて過去のバックアップから作り直します。
どうもアドバイスありがとう御座いました。
291281:02/03/05 14:32
>>285
罫線についてはなんとなくわかりました・・・
で、出力するのは、ACCESSのレポートなんですよね?
ちなみに、285さんなら、横方向に詳細部分を出力したいときには、
どのようにしますか?
自分はTEXTコントロールを1ページ分ぎっしりおいて、その名前を元に改行などの制御しようとしたんですが、
ACCESSのレポートはどうやらオブジェクトをおける数に制限があるらしく、
256個(255だったかな?)でエラーになってしまいました。


関係ないですが、世の中には、VBAから(VB?)直にプリンタ制御をして出力を行う
つわものもいるとかいないとか・・・
でもあまり現実的ではないかなぁ。
>>281
>で、出力するのは、ACCESSのレポートなんですよね?
当然だ(w
>自分はTEXTコントロールを1ページ分ぎっしりおいて、その名前を元に改行などの制御しようとしたんですが、
>ACCESSのレポートはどうやらオブジェクトをおける数に制限があるらしく、
>256個(255だったかな?)でエラーになってしまいました。
ちなみに漏れはワーク連結のサブフォームを使う(サブレポートは何故かエラーになる)

頭使えよ・・・

293281:02/03/05 15:27
>>292
レポートの中にサブフォーム使うんですか・・・
正直あまり使いたくないけど・・・・とりあえずやってみます。

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

他に案のある方がいらっしゃいましたらら、引き続きお願いします。
>>293
ワードの差込ファイルってのは?
EXCEL入っているんならワードもあるだろうから...
295デフォルトの名無しさん:02/03/05 23:32
>>281の話題は漏れも激しく興味がある。
幸い漏れはまだ帳票は単票形式の簡単な表しか扱ってないから
ACCESSのレポートでことたりてるが。

たしかに横方向に詳細が伸びたらレポートじゃ無理っぽいなぁ。

目標は、軽く、そしてより柔軟な表を作る方法ッスね。

横方向に詳細がのびるレポートですが、サブレポートで作ったことがあります。
子レポートの「詳細」の「高さ」を一明細分に設定し、ページ設定の「レイアウト」で
「列数」に横に並べる数を設定します。
親レポートのサブレポート部分の高さは、子レポートの詳細の高さと同じにします。
こうすると、複数の詳細が横方向に伸びていきます。
サブレポートの「印刷時拡張」を「はい」にすると、明細が多い時も折り返して印字できます。


297デフォルトの名無しさん:02/03/14 07:58
フォーム上にグラフがある時、
コマンドボタンでフォームを閉じると二度とそのフォームは開けない。

…俺だけでしょうか?
298◇ ◆fxGikXRE :02/03/15 09:37
ちょっと教えてください。
みなさんはツリービューを作成するときに何を使ってますか?私はツリービューコントロールを何も考えずに使用して作成したのですが、comctl32などのバージョンが違うとactivXエラーが起きて動きません。
セットアッププログラムを作成すればいいのでしょうが、そうでないやり方があれば、そちらで組替えたいのですが。
何かいいやり方がありましたら教えてください。
299デフォルトの名無しさん:02/03/15 09:56
>>298
comctl32.dllの単独配布はマズいらしい。
Microsoftが用意しているcomctl32.dll配布のページがあるぞ。

参考文献
http://www.ikehouse.co.jp/mirror/softlib/comctl32.html
300デフォルトの名無しさん:02/03/15 13:22
300
301デフォルトの名無しさん:02/03/20 00:18
ちょっと教えてください。
サブフォームから別フォームをOpenし、そのフォームのclose時に
パラメタ(入力されたテキストボックスの値)を渡したいのですが、
[Forms]![親フォーム]![サブフォーム]![テキストボックス]=Me![テキストボックス]
で受けてくれないのですが、何か方法があるでしょうか?
302デフォルトの名無しさん:02/03/20 00:50
Forms![親フォーム]![サブフォーム].Form![テキストボックス] = Me![テキストボックス]
かな?
303sage:02/03/20 01:21
>>302
Thx!
Tipsレベルでした
Access で同時接続数増やす方法ってないの?
知ってたらだれか教えて。
>>304
何の接続?
306デフォルトの名無しさん:02/03/22 00:27
VBAで「ページ設定」イジる方法って無いのかな?
せめて用紙サイズと方向だけでも、ここのレポートで設定したいのだが……
>>306
ヘルプに載ってるよ。
くまなく探せ。
308デフォルトの名無しさん:02/03/22 14:01
誰か助けてください。お願いします。

ACCESSのVBで、フォーカスがあるレコードだけ
の編集、追加、更新禁止ってどうやればいいんですか?

例えば、あるチェックボックスがオンになったレコードだけ
編集不可とかにしたいんです。
309読まずにカキコ:02/03/22 14:08
>308 レコードを移動した時にカフカを切り替えてやればいーやん
310デフォルトの名無しさん:02/03/22 14:14
>>309
me.[あるコントロール名].locked = Trueとすると、
フォーム上に出ている全てのレコードの
[あるコントロール名]がロックされてしまいます。
1つのレコードの[あるコントロール名].だけロックしたいのですが、どうすればいいのかわかりません。
>310
それじゃマズイの?
312デフォルトの名無しさん:02/03/22 14:27
>>311
例えばフォーム上で 
[受注日] [仕入先コード] [納品日] [納品チェック]が1レコードとします
これが何レコードも連続で並んでいるわけですが、そのうち
[納品チェック]がonになっているレコードだけロックしたいんです。
313読まずにカキコ:02/03/22 14:42
>310
だから、レコードを移動した時に呼ばれるイベントプロシージャのなかで、
If me.[チェックボックス].Value Then
 me.[あるコントロール].locked = True
Else
 me.[あるコントロール].locked = False

みたいのでできないかな?
もちろん全レコードがロックの対象なのは変わりないけど、見かけ上1レコードだけ対象。
314デフォルトの名無しさん:02/03/22 14:49
>>313
すみません、やってみましたができません
315読まずにカキコ:02/03/22 15:19
>314
んなはずねー
ちゃんとForm_Current辺りに書いたか?
316デフォルトの名無しさん:02/03/22 15:54
>>315
すいませんできました。
ありがとうございます。

欲を言えば、レコード移動時ではなくて、
チェックがオンになったと同時にロックかけれませんか?

[チェックボックス]_AfterUpdate()中でです
>>316
ロックをかけたいコントロールのフォーカス取得後に
書けばいいのではないでしょうか?
318デフォルトの名無しさん:02/03/22 16:22
>>317
ありがとうございます。さっそくやってみます。
319デフォルトの名無しさん:02/03/22 16:52
初めまして。某会社でAccessでシステム作ってる者です。
と言っても1週間前から始めたばっかりのド素人ですが(汗

んでVBAに関して基本的な事かもしれませんが質問です。
あるボタンを押すとそれに連動して、
テキストボックスのLocked、BackColorが変更されると言う処理を
ユーザ関数を使って作っているところなのですが(一部省略)、
どうにもうまく反映されずに困っております。

'ボタンを押す
Private Sub cmdAllCanChg_Click()
ToCanChg (tbxName.Name)
End Sub

'ここに飛んで処理する
Private Sub ToCanChg(tgtName As String)
Me.tgtName.Locked = False
Me.tgtName.BackColor = vbWhite
End Sub

ToCanChgで受け取るtgtNameと
cmdAllCanChgで渡しているtbxName.Nameが
テキストボックスのName(変更したいテキストボックス)になるのですが、
これをToCanChgで記述しているようにしても
「メソッドまたはデータ メンバが見つかりません」
とエラーになってしまいます。

自分でも指定の仕方がなんとなく違うのは判るんですが、
この場合どうやって指定すればいいのでしょうか?

ご解答頂ければ幸いです。(´ω`)ノ
320読まずにカキコ:02/03/22 17:02
>319
引数を As Objectにすりゃいいんじゃないか?
321319:02/03/22 17:09
320さん解答ありがとうございます。
Private Sub ToCanChg(tgtName As Object)
としてみたのですが、やはりエラーになってしまいます。

 実行時エラー'424'
 オブジェクトが必要です。

自分も最初「As Objectか?」と思ったのですが、
どうもこれも違うようで…。
322読まずにカキコ:02/03/22 17:19
>321
あー、言い忘れたけど呼び出し側も.Nameじゃなくてコントロールそのまま渡してね
323319:02/03/22 17:27
つまり、こう言う事でしょうか?

 'ボタンを押す
 Private Sub cmdAllCanChg_Click()
  ToCanChg (Me.tbxName)
 End Sub

 'ここに飛んで処理する
 Private Sub ToCanChg(tgtName As String)
  Me.tgtName.Locked = False
  Me.tgtName.BackColor = vbWhite
 End Sub

…何故だかToCanChg (Me.tbxName)で
「オブジェクトが必要です」
と返されてしまいます(;´Д`)
(ちゃんとtbxNameは存在します)
'ここに飛んで処理する
Private Sub ToCanChg(tgtName As Object)
 tgtName.Locked = False
 tgtName.BackColor = vbWhite
End Sub

引数は As Object 、 Meは不要
325デフォルトの名無しさん:02/03/23 14:19
どなたかご存知ならどうか教えてください。

フォームA、フォームBを作成し、Aの中にBをサブフォームとして
組み込みました。
フォームB作成時にはgetFocus等の関数を定義していたのですが、
サブフォームとして組み込む事が原因なのか、
フォームAで開くとサブフォーム(フォームB)の関数が呼ばれません。

フォームBで作成した関数を有効にするためには
どうすればいいのでしょうか?分かりません。
どなたかどうかお教えください。よろしくお願いします。
326デフォルトの名無しさん:02/03/23 19:26
日付型のコントロールに値が入ってないのをチェックする方法がわかりません

datebox:日付型変数

if datebox.value = Null then
・・・・
end if

これでは駄目なのはわかるのですが、どうすればよいのでしょうか?
どなたかご存知ありませんか・・
>326
ヘルプでIsNull関数をちぇけらっちょ
328306:02/03/25 10:38
>>307
……うう、見つかりません(T_T) ヒントプリーズ(涙)
>>326
If IsNull(.[datebox]) Then
...
end if
330307:02/03/25 12:32
>>328
prtDevModeで検索すれば出てくる。
使い方はココに載ってた。
ttp://www.akj.co.jp/aug/qa/ans0001-0050/0340.html
331デフォルトの名無しさん:02/03/25 12:56
Oracleでいう MINUS ってAccessだとなんなんでせうか?
要は二つのテーブルから重複しないレコードをとりたいんだが・・・

JOINっでくっつけてErrorさばいてもいけそうな気がするんだけど
AccessのSQLってVBA関数との切り分けがよくわからん・・・
319です。
亀レスですが>>324さんありがとうございました。
結局動かなかったので関数での処理は諦めました…。

ですが、未だ平行して原因を調べていこうと思います。

色々とどもでした。(´ω`)ノ
333ゲット!
すんません、自己解決しました。

 'ボタンを押す
 Private Sub cmdAllCanChg_Click()
  Call ToCanChg (tbxName)
 End Sub

 'ここに飛んで処理する
 Private Sub ToCanChg(tgtName As Object)
  tgtName.Locked = False
  tgtName.BackColor = vbWhite
 End Sub

上で呼ぶ場合のCallが抜けていただけのようで…。
Access97では省略出来ないんですね(;´Д`)

失礼致しました。
1.  Call ToCanChg(tbxName)

2.  ToCanChg tbxName

どっとも通るよ。カッコの有無に注目。
ちょっとキモイけどね。
336334:02/03/26 23:54
>>335さん、本当ですね。
自分的には上の方が関数っぽくていいかなーと。
下は確かにキモイかもw

補足どもっす。
337デフォルトの名無しさん:02/03/27 10:03
Access2000のMDBのセキュリティって破られたりしちゃいますか?
なんか破られることもあるよと言われたので不安なのですが・・・
338デフォルトの名無しさん:02/03/27 11:31
>>337
セキュリティが気になるような用途でJet使っちゃいけない。
共有フォルダに置かないとリンク貼れない上に、ファイルコピーで全部持っていけるACCESSにセキュリティ?
340337:02/03/27 11:53
>>338
て言うことは破られちゃうってことですね(w
完璧なセキュリティっていったらやっぱりMDEか・・・
341337:02/03/27 11:55
>>339
え?どういうことですか?(w
>>340
ソースの隠蔽に対するセキュリティだったの?
343338:02/03/27 12:20
>>340
揚げ足を取るようで申し訳ないが……

世の中に「完璧な」セキュリティなど絶対に存在しない。

このような認識では(本当にセキュリティを必要としてる業務をやるのなら)
素直にセキュリティのスキルを持った外部業者に委託したほうが吉。
今のあーたはセキュリティを語るスキルを持っていないよ。

まず、あーたの必要としてる「セキュリティ」って何?
 何を誰から守るの?
 期間は?
 許容される費用は?
 用意できる保守体制は?
これに即座に答えられなければ、そもそもセキュリティなんぞ気にするだけ無駄。
344337:02/03/27 13:22
>>342
>>343
あ、言葉が足りなくてすみません。
自分はAccessプログラミングは、ひよっこなので確かにスキルは持っていません。
プログラミングの部分は他の人が担当しています。
いままでは、お客さんが素人の人が多かったのでセキュリティにこだわってなかったのですが、
今回は、そうではないのでソースの隠蔽をしようということになったのですけど、、
345デフォルトの名無しさん:02/03/27 13:26
低レベルな質問で申し訳ないのですが、よろしければどなたか教えてください。

オートナンバー型のデータをリセットしたいんです。
全部レコードを消しても、以前のデータの番号が残っているのか、
番号が途中からになってしまいます。
どうすれば0にリセットできるのでしょうか?
346デフォルトの名無しさん:02/03/27 14:17
最適化。
>>345
オートナンバーを使わないという選択肢もある。
348345:02/03/27 16:13
>>346
>>347
ありがとうございます
漏れはオートナンバーとは、一意の数値を生成するものだと考えている

>オートナンバー型のデータをリセットしたいんです。
>全部レコードを消しても、以前のデータの番号が残っているのか、
>番号が途中からになってしまいます。
>どうすれば0にリセットできるのでしょうか?
そんな作り方なら、作りなおせ(w
>>394
まぁそうなんだけどね。
顧客には「連番」という意識があって、後から要望が出ることもあるね。

以前ORACLEのシステムで、全てのテーブルのIDを一個の「順序」でまかなったことがある。
(伝票IDが「10」の次が「1000」になったりする)
理屈では問題ないと判っていても、なんとなく抵抗があったよ。
つーか、オートナンバーはユーザから隠蔽しろよ(W
352306:02/04/01 00:12
>>344
つまり、エンドユーザーが勝手にソース弄るのを防ぎたいだけなのね?

(1)データ部分と、フォーム/レポート等の部分を二つのMDBに分ける
(2)フォーム/レポート部は、スターツアップで常に隠しディレクトリから上書き
(3)ソースいぢくっても次の日には復活

これ以上のことをしようとするならAccessなんかやめれ
353デフォルトの名無しさん:02/04/01 00:18
えと、厨房で申し訳ないが……

A1 B1 C1 D1
A1 B1 C2 D2
A2 B1 C2 D1

ってデータをレポートで
A1 B1 C1 D1
      C2 D2
A2 B1 C2 D1

って〜印刷したいのだけど、「重複データ非表示」では巧くいかない(T_T)
グループ化で出来るのは判ってるんだけど、段々にしたくない(同一行に印刷したい)
のが悩みの種
VBAで出来る(グループヘッダとフォーマット時にコード書いて)は判ってるんだけど、
もー少しスマートな解決方法はないでしょうか?(^^;
354デフォルトの名無しさん:02/04/01 00:34
>>353
漏れは、出力用にテーブルを1つ作成してそこにVBAで出力したい形に
書き出してから、レポート呼び出してやってた。
って、あんましスマートじゃないね。
355353:02/04/01 15:40
>>353
結局VBA書いちまいました(^^;

動作には問題ないのだけど、問題が一つ。抽出条件で一つも該当しない場合に印刷を指示したときに、
詳細の中の項目を見て何かしてるコードを書くと「指定された式には値がありません」ってエラーになっちまうだぁよ(T_T)

これ、誰か回避方法しりません?
一番ベタな方法としてはOpen時にレコード件数調べてゼロならOpenをCancelするというのがある。
357デフォルトの名無しさん:02/04/01 17:34
上のほうに書いてある スナップショットって
ACCESSのVBAの処理でエクスポートの処理を
することって可能なのでしょうか?

当方 ACCESS97です。
358353:02/04/02 00:17
>>356
えと、わざわざDAO作って同じSQL文を流してやる以外に、レコード件数知る方法ってあるのでしょうか?(^^;
RecordsetCloneのRecordCount、又はEOFを調べるのが楽かも。
これなら1行だべ。
360デフォルトの名無しさん:02/04/05 02:58
すいません。超初心者です・・誰か教えてください。

メニューフォームの「入力」ボタンを押すと以下の手順で
DBの入力フォームが開きます。

1.メニューフォームから入力フォーム(単票形式)を「追加」モードでオープン
2.入力フォームにあるいくつかのフィールドをマクロで設定

こうすると、入力フォームが立ち上がりデフォルト値が表示されます。
この入力フォームに「キャンセル」ボタンをつけ、追加をキャンセルさせたい
のですが、どうやっても出来ません。

DBを直接「テーブル」で編集する時、追加の途中で「ESC」を押せば、追加をキャンセルできます。
これと同じ事を実現したいだけなので、必ずできる方法があると思うのですが・・
誰か、その方法を教えてください。
(現在、どうしても追加されてしまうため、「キャンセル」ボタンが押された時
追加したレコードを削除する・・という無駄な処理を走らせてとりあえず逃げています)

可能であれば、マクロでの実現方法を教えてください
VBは今のところ詳しくないので・・
361デフォルトの名無しさん:02/04/05 10:05
沈んでしまったーよ。推薦書スレッド。
というわけでアクセス使いの皆様。アクセスVBAの良書を教えてください。
362名無し:02/04/05 11:56
>>360
えっと、一行なんだけどだめかな? <VBA
Private Sub コマンドボタン名称_Click()
Me.Undo '←これだけ
DoCmd.Close
End Sub
>>362
ESCでダメっていう状態なんだから、Me.Undoしても無駄と思われ。
むしろ、フィールド値を設定してるマクロに問題がある気がする。
364デフォルトの名無しさん:02/04/05 18:10
>361
 AccessVBAの良書って何かなー。谷尻かおりの本はよく見ていたけど。
VBAなら、VBの本見たっていいし、どっちかといえば、DAO、ADOについて
ページ割いてる本があればいいね。

>360
 VBよかマクロの方がよっぽど実現が難しいと思うけど。
365デフォルトの名無しさん:02/04/05 22:15
俺としてはAccess2000表現百科500(技術評論社)を挙げとく。
いわゆるTips集だが例が沢山あるので重宝する。
薄っぺらい本なので割高に思えるが、よく見ると薄い紙を使っていてそれなりにページ数がある。
本はかさばるという理由で嫌がる人とか考慮してるのかな。
366デフォルトの名無しさん:02/04/06 02:42
>362
ありがとうございました!出来ました。

>みなさん
あの、、お聞きしたいのですがマクロってあんまり使わないものなんですか?
僕が初心者ってのもあるんだけど、VBAでがしがし組むと
バグりそうでコワイんです
マクロだとなんとなく安心できるし、一覧から選択するだけの
簡単プログラミングだしって事で

1.マクロで可能な事は徹底的にマクロで組む
2.マクロで不可能な事は仕方なくVBAを使う

ってスタイルでやっていこうと思っていたのですが
間違ってますか??
367デフォルトの名無しさん:02/04/06 03:20
>>366
マクロめんどくさいので、漏れはVBAで全部組んでしまう。
>>360みたいなやつもVBAでADOなり使ってレコード追加関数作って
やってるしな。
368デフォルトの名無しさん:02/04/06 09:42
>366
 貴方の立場次第だな。事務片手にAccessやってる人間なら、
いちいちVB覚えるのめんどいべー、ってのはわからんではないが、
こっち側(開発サイド)の人間なら、おそらく間違っている。
 「マクロだけの販売管理」みたいな「マクロのみ」を謡う本が
あるが、結局はVBAへ移行しよう、ってまとめられているはずだ。

 だまされたと思って、2、3ヶ月やってみ、VBA。ごたくはいいから。
その際、必ずHelp(F1)と良書を片手にすることだ。良質サイトを
お気に入りにいれとけ。
369デフォルトの名無しさん:02/04/08 01:48
>>367,368
判りました、ありがとうございます。
今やっている仕事は、(自分的に)短納期なので
まずはマクロを考えますがこの先はVBAへ移行しようと思います。

あとマクロを優先に考えていた理由の一つとして、
完成したアプリのメンテを他の人にお願いする場合
VBAを極力使わない方が多くの人に投げる事が出来ると考えたからです
でも、「Accessでプログラムできる人」のほとんどはVBAを使える人
なんですね。
他人がマクロで書いたソフトをメンテする…。
とてもじゃないけど無理だ。
折れ、VBAは普通に使えるけどマクロはほとんど知らないや。
逝ってヨシっすか?
用意されているマクロの組み合わせだけで「実現し得る処理」の有限範囲と
VBAでプロシージャを記述して「実現し得る処理」の有限範囲が等しいなら
マクロオンリーでも構わないわけでして。。。
しかし現実的にはVBAで表現できる世界の方が広いわけで。(と、思っています)

ちなみに「マクロをVBAコードに展開」する機能を使えば、マクロで表現されて
いる処理はVBAコードにおちてしまうので、「マクロ=VBAコードの塊」なんだなぁと。
それなら、マクロ->VBAと進むより、始めからVBAで記述したほうが良いだろうと
いう判断で今日に至っているわけです。

既にVBAで記述できるのであれば、マクロの存在は忘れちゃって結構ではないかと。
マクロでもVBAどっちでもいいが、一つだけ。


「混在はやめとけ」


おしえてくださいな

プロジェクトの起動時にDBに繋ぎにいかないようなことって出来るの?
メンテ用サーバと実稼動用のサーバとでいちいち接続変えるのはユーザさんは無理なのねん
>>374
えーと、サッパリわからん。
リンクテーブル?
Access2002の*.adpで出来るプロジェクトってやつです〜
リンクテーブルはMDBだよねー たしかー
んでプロジェクトって直接DBのテーブルとかビューとか表示してるので、
起動時にサーバーに繋ぎに行っちゃうんですよ
繋がないとテーブルとかない状態なんだよ 何も出来ん
だけど前にも書いたけどバックアップ用にサーバー置いてるのね
今は問答無用でメインのサーバーに繋ぎに行ってるからいいけど、
ユーザー側ではあまりの問答無用さに
とらぶったらバックアップ用に切り替えられないのさー
ってことで起動時にプログラムで接続先切り替えられるようにしたいのね
だけどやっぱり問答無用でつなぎにいっちゃって・・・ってかんじです
2002使ったことないや。
ゴメン。
378デフォルトの名無しさん:02/04/10 01:37
AccessXPを違法コピーしてる人おしえて!

AccessXP違法コピーして、ライセンス認証したがまずい?
しかも使ってるうちに、「この機能はまだインストールされていません、CDを入れてOKボタンおして」
みたいな事言われて、違法コピーしたCDつっこんでもxxx.cabがみつかんないとかいって怒られるのはなぜ?
単にコピーのしかたが悪かったのか?それとも手の混んだプロテクトでもかかってるのか?
>>378
通報しますた
>>378
オープンライセンスのプロダクトキーと
ディスクキットがあれば・・・

とりあえずやめとけ
381デフォルトの名無しさん:02/04/10 14:45
すいません、どなたか教えて下さい。

フォームに入力したメールアドレスを、SQLを使ってテーブルに書き込む処理において、
以下のようなコードを書きました。

DoCmd.RunSQL
("INSERT INTO NewTable (MailAddress, field1,field2, field3)
 SELECT " & MailAddress & ", " & NewData1 & ", " & NewData2 & ", " & NewData3 &";")

MailAddressはString型の変数で、フォームに入力されたメールアドレスは
一旦ココに格納されます。
で、これを実行するとメールアドレスの@(アットマーク)が抜けてしまうらしく、
SQLの構文でエラーになってしまうのです。

 例)[フォームにて入力]
   [email protected] (MailAddress変数に格納)
   ↓
   [エラー]
   実行時エラー '3075'
   クエリー式 'omaemona

   2ch.net' の 構文エラーです。

これは@が何か別な処理を行っている、と言う事なのでしょうか?
やはりエスケープ文字のような処理が必要だったりするのかな…。

お時間ございましたら宜しくお願いします ( ´ω`)ノ
>>381
'[email protected]'ってなるようにしてるよね あたりまえか・・・
383382:02/04/10 16:01
シングルコーテーションでくくっているかってことだから
384381:02/04/11 00:18
>>382さん

正直、シングルコーティションが抜けてました(汗

 DoCmd.RunSQL
 ("INSERT INTO NewTable (MailAddress, field1,field2, field3)
  SELECT '" & MailAddress & "' , '" & NewData1 & "' , '" & NewData2 & "' , '" & NewData3 &"' ;")

…なんだか点ばかりですが動きましたw
解説どもです。
385デフォルトの名無しさん:02/04/11 17:45
とある市販のAccessソフトを解析中
セキュリティがアマアマでコードまるわかり(ワラ

コードもSQLが全くなく、findfirstだけだ
こんなんで5万以上取るなよ(ワラ
386デフォルトの名無しさん:02/04/11 20:12
すいません、JavaやってたVBA初心者です。

DoCmd.OpenFormからリターン地を受け取りたいのですがどのようにすればよいのでしょうか?
(MsgBoxみたいにOK,NGボタンの判断がしたい)

教えてください。
387デフォルトの名無しさん:02/04/12 12:37
モーダル(acDialog)でOpenFormして
Form_Close()のとき、呼び出し側の適当なPublic変数に値を返そう。
388デフォルトの名無しさん:02/04/13 03:25
>> 387
やっぱりその手しかないのですね・・・
Javaやってた的にはここらへんがしっくりこないが、、、
でもVBAほんと判りやすいね
389デフォルトの名無しさん:02/04/13 09:08
>385
 晒してくれんか?
 ホントにFindFirstだけで検索投げてんの?Seekもなし?
390デフォルトの名無しさん:02/04/13 11:16
>>389
いくらなんでも晒すのはまずいだろ(ワラ

社外秘とかゆうパスジェネレートコードも混じってるし(ワラ
バレバレだが(ワラ
391デフォルトの名無しさん:02/04/17 01:01
初心者です

単票フォームに入力したデータをレコードに登録する方法教えて下さい
←→キーとか押した時レコードに登録されるんだけど
そうじゃなくてボタンとか押したら強制的に登録!・・としたいんですが・・

具体的には「ESC」キーを押しても再編集できないようにしたい
392デフォルトの名無しさん:02/04/17 01:05
>>391
VBAでDAOやADO使って、追加関数を作成してしまうのが一番らくだと思う。
これで分からなかったら、さらに質問して。
393デフォルトの名無しさん:02/04/17 01:11
>>392
返答ありがとうございます。
すいません←→キーじゃなくて、[<][>]ボタンの間違いでした。

単票フォームで編集中のデータを強制的に[<][>]ボタンを押さずして登録する方法を知りたいのですが
DAO,ADOでできますか?
394デフォルトの名無しさん:02/04/17 01:15
できるよ。
登録ボタン作って、そこからVBAコードを呼び出すだけ。
DAOのが簡単だが、ADOのがエレガントなコードが書ける(ワラ
395デフォルトの名無しさん:02/04/17 01:20
>>394
ありがとうございます。ちょっと調べてみます
左にある鉛筆ボタン押しておけばOKだ(w
397デフォルトの名無しさん:02/04/17 10:21
全くの初心者質問ですがご容赦下さい。

現在Accessを使って社内のちょっとしたシステムを構築中でして、
テーブル名、フォーム名、そのオブジェクト名、
その他モジュール名、関数、変数と自分で作る部分が多い訳なんですが、
これらは日本語で宣言(作成)しても大丈夫でしょうか?
一応VB、Delphiとプログラミングを行ってきたので
あの宣言方法

 Dim strItteyoshi As String
 Dim intOmaemona As Integer

型や形式を変数の頭に英字で省略して付記するやり方で良いのかどうか
ちと判断に苦しんでいる状態です。

プログラミングの性質上、2バイト文字を使うのは多少いただけない気がするのですが、
後々保守などを考えた場合かな表記の方がいいのかな、
とも思っている次第で…。
自分のやりやすい方でやれと言われればそれまでですが、
Accessシステムにおいて通例などございましたら御教示頂きたい次第です。
(´ω`)ノ
398デフォルトの名無しさん:02/04/17 10:25
>>397
>型や形式を変数の頭に英字で省略して付記するやり方で良いのかどうか
>ちと判断に苦しんでいる状態です。
ソレがベストだと思って作っているがなにか?
つまり、↓こう言う感じですね。

テーブル:tblSample
クエリ:querySamle
フォーム:frmSample
レポート:repSample
ページ:pgSample
マクロ:mcrSample
モジュール:modSample

日本語での宣言に関してはどんなもんでしょうか。
>397
宣言方法はそれでいいと思う。
要はシステム内で統一されていれば良い訳で。

2バイト文字の名称は不具合を呼び込む可能性が高くなるので使用しないほうが吉。
...なんだけど、分かりやすいという意味では否定出来ない。
そのへんは、どっちを優先するかを量りにかけて決めてくらはい。
401質問君:02/04/17 22:04
1.AccessMDB(テーブルのみ)を共有フォルダに置く
2.実行PCのMDBに共有テーブルへのリンクを貼る。
3.クエリーで抽出する → 1万件のテーブルから抽出で、結果は10件

この場合、イメージとしては1万レコードをダウンロードして
ローカルで検索する、って感じになるんでしょうか?
>>397
ベタベタな方法だけど、テーブル名や項目名を[]でくくれば不都合は防げる

>>401
この場合はリンク先へクエリーを投げて、リンク先からその結果(10件)だけを
取得するイメージでいいんじゃないかな?>ALL
403質問君:02/04/17 22:24
>402
レスどうもっす。
ちょっと質問が悪かったみたいですが、考えたいのは通信量等なんです。

VB+oo4oな場合のクライアント側の負荷ってOracleへクエリー投げるのと
検索結果10件の受信と画面表示等の処理だと思うんです。

MDB共有Accessの場合だとクライアントPCにかかる負荷が
・1万件の受信
・その1万件をSELECTする
この2つがもろにクライアントにかぶってくる気がするんです。

>>402
残念だがJetDBE3.5までで確認した範囲では、その認識はハズレです。
対象としているリンク先テーブルのデータ数が1万件なら、その全データが
ローカル側に流れ、ローカル側のJetDBEでSQLの処理が行われますです。

>>401&403
そんな訳で、ローカル側のJetDBEの負担を気にするならば、共有DBを
ODBC対応DBMSに置き換えるなどの工夫が必要になると思います。
405デフォルトの名無しさん:02/04/18 00:06
>>404
そうだね。漏れも以前ネットワークでDB組んだときにそうだった気がした。
なんで、DBをSQLServerにしたらものすごい速度が向上したよ。
クライアントはAccessだったけどね。
その辺が気になるなら、MSDEっていう選択肢もあるね。
SQL鯖使っててクライアントツールが揃ってるなら楽〜
407質問君:02/04/18 01:12
>404-406
ありがとうございます。
それに合わせてもう1つお願いします。

DBMS(OracleなりSQLServerなり)に対してリンクテーブルを貼り、
そのリンクテーブルにクエリで抽出・集計した場合はどうなるんでしょう?

例1)SELECT * FROM table WHERE Prikey<5 ; (0−4が抽出されて5レコード)
例2)SELECT SUM( kingaku ) FROM table ; (1万レコードの合計で結果は1レコード)

おのおの5レコード・1レコード分の通信しか行われない、って認識でOKですか?


SQLServerやMSDEは経験無いので良くわかないのですが、OO4OのCreateDynasetで
SQL投げた時とほぼ同じって見てもいいのなら楽だな〜
もしそうならAccessマンセーになってしまうかも。
408デフォルトの名無しさん:02/04/18 01:14
>>407
詳しく計ってないが、SQLServerではそんな感じだったよ。
旧バージョンの話(Access97[Jet3.5])で申し訳ないですが
・リンクテーブル
 リモートDBMSとAccessの間にJetDBEを介在する
 リモートDBMSとのセッションはAccessを終了するまで切れない
 クエリーは基本的にリモートDBMSに丸投げだが、Access固有の
 方言SQL構文が含まれている場合は、一部リモートDBMS、固有部分は
 JetDBEで処理される(JetがSQLの解釈、翻訳をして処理を投げる)

・パススルークエリー
 JetDBEを中間に介さず、クエリーをリモートDBMSに丸投げ
 セッションはクエリー開始から終了までの間だけ。その後は開放
 SQL構文はリモートDBMSのものに従う。Access固有の構文は不可

ということで、どちらを利用するか悩みどころ&手放しに楽できない
って想いを引きずっているんですが。。。
一応、リモートDBMSへの接続パフォーマンスは
パススルークエリー > リモートテーブルだそうです。

Access2000以降では、こういったわずらわしさは無いのでしょうか?
昨年まで勤務していた会社で市販パッケージシステム(SQLServer7 & VB5)を
相手にAccessでデータ抽出、帳票を作成する仕事をした時の話なんですが
パッケージ開発元のエンジニアから、「SQLServerのテーブルにリンクは
"絶対に"張らないでインポート使ってください」と釘を刺されました。

理由として「データ整合性を保てなくなる恐れがある」ということでしたが
これって、Accessでセッション張りっぱなしになると他のプログラムの
データ処理にどの様な影響をおよぼすのでしょうか?
411デフォルトの名無しさん:02/04/18 03:25
>>410
そんなドキュソ開発会社は手を引いて、別なとこに作成依頼しなさい。
>>411
いや、元勤務先ともパッケージ開発元とも既に縁が切れているので
あとの事はどうでもいいんですが。
ただ、モヤモヤしたものが残って気持ち悪いんですよ。
DBMSに心得有りって人に聞いても最終的には「わからん」で終わって
しまうんで。
想定で良いので「起こりうる事象」を知りたいだけなんですよ。

# 何が起こるかわからんけど問題が噴出しなけりゃOKってことで
# システム組んでいると言うなら、それはそれでいいんですけど。
SQLServer側で何一つ制約をつけてないっていうだけだったりして〜
414デフォルトの名無しさん:02/04/18 13:34
 日本語を変数に使うのはヤメトケって示唆がやっとMSから出てるね。

http://www.microsoft.com/JAPAN/support/kb/articles/J070/3/15.asp

 これどーよ?具体的に何が起こるか明記されてないところが、以下にもMSっぽいが。
>具体的に何が起こるか明記されてない

パルプンテ!!
416デフォルトの名無しさん:02/04/18 22:21
>>414
で、たまに半角英数使ってると、勝手に全角に変換されるのは
何とかならんのか(w
417デフォルトの名無しさん:02/04/19 03:22
>>412
おそらく急なDB仕様変更が頻繁におこると想定して作ったんだろ。
平たく言えば、未完成品をつかまされたわけだ。
>>417
世の中には10年以上前のテクノロジーで停滞しているエンジニアが
混じっているってことでよろしいですか?

少なくとも約300社は"未完成品"と称す代物を掴まされているわけで。:-P

>>411殿や>>417殿に製作依頼したら良品を納めてくれたのかな?・・・
419デフォルトの名無しさん:02/04/19 04:34
グループ設定しているのに、レコードによってグループ集計できているところと
できてないところがあるのは、日付制御の関係か?思う節が見当たらなくて
困っているのだが・・・
>>419
日付制御ってなに?
つーか、やっている処理の内容を書かなくちゃ答えようが無いと思うが。
421デフォルトの名無しさん:02/04/19 04:41
条件式は大丈夫?
422419:02/04/19 04:44
初心者でスマソ。
グループ集計させたい項目が5つあって、その中に日付が2つあります。
一つは入力日付で一つは伝票日付みたいな感じで、当然同じ日付のものは
合計して数値を出したいのですが、不思議なことにあるデータ部分は合算
できていて、ある部分は合算してくれない・・・データの記述ミスも探し
問題は無いのだが。
423デフォルトの名無しさん:02/04/19 04:46
条件式を晒してみそ。
424419:02/04/19 04:53
SELECT Sum(KENSADT.DENPDT) AS DENPDTの合計, KENSADT.SEIHINCD, KENSADT.DENPMON, KENSADT.DENPWEK, KENSADT.CHECKDT, MS_KB.KBNM, Sum(KENSADT.UKESU) AS UKESUの合計, Sum(KENSADT.FAL1) AS FAL1の合計
FROM KENSADT INNER JOIN MS_KB ON KENSADT.KBCD = MS_KB.KBCD
GROUP BY KENSADT.SEIHINCD, KENSADT.DENPMON, KENSADT.DENPWEK, KENSADT.CHECKDT, MS_KB.KBNM, KENSADT.KBCD,
ORDER BY KENSADT.SEIHINCD, KENSADT.DENPMON, KENSADT.DENPWEK, KENSADT.CHECKDT;

sum(DENPDT)は動作確認でつけています。
425デフォルトの名無しさん:02/04/19 05:01
どれが何をさしてるかよく分からんのだが。。。
426デフォルトの名無しさん:02/04/19 05:56
あなたは7桁プログラマーですかい?
>>425
これだけ(>>422 >>424)で>>419さんの思惑が理解できる人は神ですね。
見にくいよぉウワァァlン
SELECT Sum(KENSADT.DENPDT) AS DENPDTの合計,
KENSADT.SEIHINCD,
KENSADT.DENPMON,
KENSADT.DENPWEK,
KENSADT.CHECKDT,
MS_KB.KBNM,
Sum(KENSADT.UKESU) AS UKESUの合計,
Sum(KENSADT.FAL1) AS FAL1の合計
FROM
KENSADT INNER JOIN MS_KB ON KENSADT.KBCD = MS_KB.KBCD
GROUP BY
KENSADT.SEIHINCD,
KENSADT.DENPMON,
KENSADT.DENPWEK,
KENSADT.CHECKDT,
MS_KB.KBNM,
KENSADT.KBCD,
ORDER BY
KENSADT.SEIHINCD,
KENSADT.DENPMON,
KENSADT.DENPWEK,
KENSADT.CHECKDT;
>414
これって更新日が4/10だが、最近になって出た記事って事?
>>424
これのどこに日付処理がある?
431デフォルトの名無しさん :02/04/24 20:32
すみません質問です。
アクセス使って、Exchangeのパブリックフォルダにメールを投稿する
ツールを作っているんですが、その際に

「指定した名前のフォルダがExchange内に存在するか」
を調べる関数がわかんなくて困っています。
ローカルフォルダに存在するかどうかなら
dir関数とか使えばいいんでしょうけど、Exchange内の存在チェックって
どんな関数使って確かめられるんでしょうか。
432デフォルトの名無しさん:02/04/26 01:56
VBA超初心者の質問・・・
「コンボボックスに何も指定されていない」ということを取得するにはどうすればよいのでしょうか?

コンボボックスの値に何も指定されていない場合

>> MsgBox コンボボックス1

とすると Nullの使い方が不正です。というようなエラーが出ます。

それならば・・と

>> If コンボボックス1 <> Null Then
>> MsgBox コンボボックス1
>> End If

とすると、常にMsgBoxが表示されません。(常にIf文の値はNullと判断されているようです??)

環境はWinWP / AccessXPです。
どなたか教えてください
>>432
Nullの判定は IsNull() 関数で行います
If IsNull( コンボボックス1 ) Then ...
434デフォルトの名無しさん:02/04/26 02:40
>>433
あ、ありがとうございます!!なるのど、そーやってやるのか・・
これで3時間悩みました(>_<)ありがとうございます!!
435デフォルトの名無しさん:02/04/26 03:07
>>428
DENPDT=伝票データ
KEMSADT=検査データ
DENPMON=月伝票
DENPWEK=週伝票
CHECKST=チェックデータ
までは想像できたけど、

UKESU=受け数?
FAL1=不合格?
SEIHINCD=製品CD?
KBCD=???
436デフォルトの名無しさん:02/04/26 04:55
>>435
既に質問した彼はここを見ていないでしょう? 放置、放置。

# しかし振り出しといて姿を現さないのは無責任だよなぁ。。。
# 意思伝達にも難あり。
437デフォルトの名無しさん:02/04/26 11:56
>433
 重箱のスミ突っつくようだけど、評価をするときとか、規定値省略に
頼らない方が後々イイと思うが。

If IsNull(HOGE)=True Then

>>437
Isなんたらは関数名から真偽値を返すと予測できるため別にかまわないと思われ。
439デフォルトの名無しさん:02/04/26 22:52
>>437,438
てゆーかどちらでもいいと思われ。
440デフォルトの名無しさん:02/04/27 01:26
>>437
なんか、感感俺俺みたいでキモチワルイなぁ・・・
いや、Accessたんは明示的にTrueをつけとかないとメモリが云々と聞いたことが
あるようなないような気がする
>>441
ソース希望
443デフォルトの名無しさん:02/04/28 01:14
>>422
日付、時分秒まで入っているんじゃない?
444デフォルトの名無しさん:02/04/28 01:19
(ノ゜ρ゜)ノ ォォォ・・ォ・・ォ・・・・
445デフォルトの名無しさん:02/04/29 01:31
access2002の場合、フォームまたはレポートの存続期間中に追加できる
コントロールおよびセクションの最大値は754とある。そしてこれは、
コントロールを削除して再追加した場合でも追加数が754でアウトとなる。

これは、accessがフォームへのコントロールの追加数をカウントしている
ためだと私は思う。

ではフォームも同様に、ヘルプの「データベースのオブジェクトの数 32,768」
ということから、フォームを削除して追加した場合でもその追加の回数が
32,768になったらアウトになるのだろうか?


だれか分かる人いる?
>>445
そんなに追加したこと無い
447デフォルトの名無しさん:02/04/29 05:38
ファー眠い・・誰かたすけて・・
初心者の質問・・

表形式のフォームでフッターに値の合計値を出しているのですが
表形式のフォームってカーソルとかで「レコードを移動」するまで
編集中状態で合計値も変わらないですよね?
カーソルを移動しなくても合計値に値を反映させたいのですが、、

>> Private Sub 値_Change()
>> Me.Recordset.Update
>> End Sub

とすると、「対応するaddNew,Editが必要」といって怒られます。。
ちなみに合計値は
コントロールソースプロパティに
>> =Sum([値])
と指定。。何が悪いんだ!?つーか根本的に間違ってる???・・・
>>447
こうしろ

Private Sub 値_Change()
 DoCmd.RunCommand acCmdSaveRecord
End Sub
449デフォルトの名無しさん:02/04/29 13:49
>>448
できました!やったー涙出そう・・ありがとうございます
>>446
そうですか。そりゃそうだろうな。

要は、データシートビューのサブフォームがありまして、
そのソースになっているクエリのフィールド数・ソース・
名前が動的に変化するのに対応したいのですわいな。
451デフォルトの名無しさん:02/04/30 15:47
フォームでパスワード入力画面を作りたいのですが、
パスワード文字列を隠す為に"*"にするにはどうしたらいいでしょうか?
(よくパスワード入力であるやつです)

ご存知の方、お教え願います。
「パスワード」か「パスワード入力コントロール」を検索キーワードに
ヘルプを引いてみそ
>>451
2000か2002だったら「定型入力の構文と例」の「有効な定型入力の文字」って
ところを見るのだ。(ヘルプな)その一番下
454451:02/04/30 16:59
ありました^^;
お騒がせして済みません^^;
455デフォルトの名無しさん:02/05/01 09:31
文字列比較についてなんですが、
ACCESS(VB?)の場合、
”AAA"="aaa"がTRUEになってしまいますよね。
これをちゃんと大文字小文字の判別を行いたいんですが・・・
(検索でいう大文字と小文字の区別)
HELPとか見てもそれらしいものがなく・・・

ご存知の方、よろしくお願いします。

456山太郎:02/05/01 12:04
>455
Option Compareステートメントを調べてみよう。
457デフォルトの名無しさん:02/05/01 17:03
VBAをつかって外部テーブルのインポートする方法ってある?
458山太郎:02/05/01 17:20
>457
TransferDatabaseトカ...
他にも、SQL使っても出来るでよ。
459デフォルトの名無しさん:02/05/01 19:22
リストボックスをウィザードで作って、データにクエリを指定すると・・・
一部値を表示しない(#Name??とかウィザード画面に出てきて、実行したら値を表示しない)ものがあります。
なんか、クエリの条件にフォームの値を指定しているとそうなるみたいなのですが・・これってどうして??どうにもなりませんか?

WinXP,AccessXPです
条件がおかしいか、コントロール名がおかしいかだろ。
もう一度調べてみ。
461デフォルトの名無しさん:02/05/02 10:52
暇つぶしに某社のオンラインソフト(Oh!ナンチャラ)を解析してみた
D系、find系の嵐で、関数名が日本語・・・
・・・・会社のレベルが知れるぞ(ワラ
462デフォルトの名無しさん:02/05/03 05:56
ウインドウの閉じるボタン[X]と、DoCmd.Closeで動きが違うのですが・・
インデックスで「重複なし」を指定したフィールドで
重複した値を指定した場合、[X]ボタンだとエラーウインドウを表示してくれるのですが
「OK」ボタンを作成し、「DoCmd.Close」を指定した場合エラーをエラーウインドウを出さず、
何事もなかったようにデータを破棄するようです。
現在ADOで重複チェックをして逃げていますが、[X]同様の動きをさせるにはどうすれば良いのでしょうか??
463デフォルトの名無しさん:02/05/03 07:04
>>462
ほんとだ。
ちょいと汚いが、DoCmd.Closeの前に、
DoCmd.DoMenuItem acFormBar, acRecordsMenu, acSaveRecord, , acMenuVer70
を入れて、エラートラップしる。
464デフォルトの名無しさん:02/05/03 07:08
>>463
やってみます。ありがとうございます。
今気づいたのですが、「マクロ」の「閉じる」は「X」ボタンと同じ動きをしますね。

マクロ→VBA変換をすればどういうコードになっているのか判るんだけど
なんか、その機能が俺のパソコンにインストールされてないらしく
しかも今手元にAccessのCDがなくてインストールできないときた(>_<)

だれか、マクロの「閉じる」のVBAコード晒してぇぇぇ
465デフォルトの名無しさん:02/05/03 16:17
>462、>464
ヘルプにそう書いてあるYO!
そもそも終了させる時点で足掻いてもはじまらないと思うが。
DoCmd.Closeの前でなんとかしろ。

466デフォルトの名無しさん:02/05/03 16:21
Accessで色々システム作ったなぁ
467デフォルトの名無しさん:02/05/03 17:24
EXCEL大好きのユーザのために、フォーム上でテーブルのデータを
変更・オートフィルタを出来るようにする方法を教えてください。
PC環境が悪いのでなるべく効率よく…。
>>467
Docmd.OpenTable
469デフォルトの名無しさん:02/05/08 10:02
>464
 マクロの 閉じる をVBAに変換してみたら、そのまんま
Docmd.Cloce になったけど。
470デフォルトの名無しさん:02/05/09 07:24
質問させてください!
Access2000使ってるんですけど、
Access2000形式のmdbがVisualBasic6.0Enterpriseで
認識してくれません…
Dataオブジェクトのdatabasebaneプロパティで指定してもハネられます。

大学のパソコンでも自宅のパソコンでも友人のパソコンでも
できなかったのでハード環境は関係ないと思われます。
あと、いずれもフルインストールの状態です。
ガイシュツかもしれませんが、お願いします。
471デフォルトの名無しさん:02/05/09 09:22
Access2000または2002のデータベースに登録しているメールアドレス宛てに
Outlook Expressからメールを送信したいのですができますか?

Outlook2000、2002では実験して成功はしたのですが、
Outlook Expressから送信する情報が見当たらないので、
できるかできないかだけでも知りたいのですが・・・

>>470
ODBCデータソースとか作成した?
Accessのモジュールにも接続するための記述しなければいけなかったよね
あ〜、今思い出せないなぁ(忘れちゃったので全然違うこと言ってたらスマソ)

接続するとこまでなら
本を見て最初からやればできると思うよん
>>471
残念ながらOutlook ExpressはOLEオートメーションに対応していません。
ので無理です。
>>470
SP4以上入ってる? どうでもいいけどAccessの質問じゃないよなぁ。
http://www.asia.microsoft.com/japan/msdn/vstudio/downloads/sp/VS6FIXES.asp
474471:02/05/09 10:23
>>472
あらら〜、やっぱり無理でしたか(w

ネットやってたらOutlook Express5以上を使用したメール送信ソフト
があったので、今ならできるようになったのかな、と思ったんだけどな〜(w
Access以外ならできるってことじゃないだろうし、Outlookの間違いだったんだろうか・・・

レスさんくすです^^
ちょいと質問。
Access97で使ってたモジュールをAccess2002でも使おうと思ってインポートしたんですが、
実行すると変数宣言の部分でエラーが出てはねられてしまうんです。

 Dim db As Database
 Dim rs As Recordset
 Dim tbldef As TableDef

はねられるのはdbとtbldefなんですが、
これってAccess2002で別な宣言に変わったりしたんでしょうか?
宣言の一覧を見るとAccessObjectとか
新しいのが追加されてるみたいだし…。

お時間ございましたら答えて頂けると嬉。
単発質問で申し訳ないんですが(´ω`
476デフォルトの名無しさん:02/05/10 00:04
>>475
VBAの[ツール][参照設定]を見てみ。DAOがチェックされてないと使えないぞ。
漏れも97から2000移行した時にこれで1週間迷ったから。
(おそらくこれが原因だと思うが、ちがう?)
477475:02/05/10 09:52
Microsoft DAO 3.6 Object Libraryにチェックを入れたら
難無く通りましたー

俺も今週ずっとこれで時間費やしてました…。
つか、普通わかんねぇよヽ(`Д´)ノ ウワァァン

レクチャーありがdございます
>>476サソ
>471
BASP21.DLLでも使え。
479470:02/05/12 01:27
>>473
レスありがとうございます!SP5とMDAC2.6日本語版で解決!
ただ、Access97のmdbならJet3.15で参照できたのですが
2000だとJet4.0でないと参照させてくれませんでした。
他のエンジン(?)はまだ試してませんが…
>>479 それで?
481デフォルトの名無しさん:02/05/15 19:45
すんまそんー
どなたか教えて下され。

フォームに配置したテキストボックスやリストボックスの値を
変数に代入するなりして使おうと思ってるんだけど、
取得する所で毎回「そのコントロールがフォーカスを取得して無いと値を取得できん!」
みたいな感じで弾かれてしまうんです。
これってどうにかして無効化出来ないもんでしょうかね…。

毎回SetFocusして変数に代入して…なんてやってたら
日が暮れちまうよウワァァン

お時間があったらアドバイスおながいします。
.valueと.textの違いわかってますか?
>>482
これが正解だが、関数作ったことある?って聞いてみたい。
484481:02/05/15 20:02
>>.valueと.textの違いわかってますか?

それはOKです。

ただ、その.valueだったり.textを取得しようとすると、
前述した「フォーカスを取得してねーぞゴルァ」となってしまうのです。
485381:02/05/15 20:15
つかすいません。思いっきりボケてました(;´Д`)
てっきり.valueを指定したものだと思ってました。

改善前>>

 Dim strOmaemona As String
 Me.tbxMemberID.SetFocus
 strOmaemona = Me.tbxMemberID.Text

 Call MsgBox("あなたのメンバーコードは" & strOmaemona & "です。",vbInformation,"(´∀`)")

改善後>>

 Call MsgBox("あなたのメンバーコードは" & Me.tbxMemberID.Value & "です。",vbInformation,"(´∀`)")

つか疲れで返事があいまいになってしまって申し訳ないです。
今日はもう回線切って帰ることにします…。

くだらない質問に答えて下さってありがとうございました。鍛錬します。

>>483さん
関数は作ったことありますよ。
GUIまわりの処理はスタイルシートのように殆ど関数でやってます。
逆に言えば関数に関してはその位のレベルですД
486481:02/05/15 20:16
上の名前481でしたスンマソ

;´Д`)ノ
変数は使ったほうがいいと思った
ご指導の通り、コピペしました。しかしこの板始めてだけど強烈やな。色んなhomepage参照して
色々、調べましたがいまいち画テンがいきません。なぜ遅いのか、知りたいです。

mdbをAccess2000で変換し、connection string をjet.oledb.3.51から4.0にかえて、activex
とか変えて、プログラムに結合しなおしたが処理が3.51に比べて
10倍以上かかるようになってしまった。そんなに4.0って遅いの。
ちなみに自分はAcess95をAccess2000にアップして使ってます。
ソースは以下のようですがとくに問題無いとおもうんだけど。
だれか教えてください。

Private Sub subTransCostDwn()
Dim SP(12)
filenum = FreeFile
Open gListpath & "\rxalltrncost.csv" For Input As #filenum

SQL = "delete * from TransCost "

ADO_Connection.Execute SQL, , adCmdText

Do Until EOF(filenum) = True
Input #filenum, d0, d1, d2, _
, SP(1), SP(2), SP(3), SP(4), SP(5), SP(6), SP(7), SP(8), SP(9), SP(10), SP(11), SP(12)

SQL = "select * from TransCost where dealyear = " & Format(wAcntYear)
SQL = SQL & " and transcd = '" & d2 & "' and lensnm = '" & d4 & "'"

Set rs = New ADODB.Recordset
rs.Open SQL, ADO_Connection, adOpenStatic, adLockOptimistic

If rs.RecordCount = 0 Then
rs.AddNew
rs!dealyear = d1
rs!transCd = d2

End If

For i = 1 To 12
j = i + 3
If j > 12 Then
j = j - 12
End If
rs.Fields("shpqty" & Format(j)).Value = SP(i) + rs.Fields("shpqty" & Format(j)).Value

Next
rs.Update
rs.Close
Loop


Close #filenum


End Sub
489デフォルトの名無しさん:02/05/18 19:01
質問の時はあげとけ
>>489 あんまし、強烈なんで、これ以上、言われたくなかったから上げれんかった。
色々調べてるけど、よかったら教えて。
>>488
>Set rs = New ADODB.Recordset
とりあえず、これをDo Loopの前においてみないか?
1回ループするごとにNewするのは明らかに効率悪すぎ。
で、ループ終わったらちゃんとSet rs = Nothing もしておけよ。
488ですがプログラムロジックも色々変更してテストしましたが
そんなに関係はないようです。
ゆっくり寝てから、色々実験したらAccess95で作ったmdbをACCESS2000で
変換すると処理が遅くなることを見つけました。完全に同じ物には
やはりならないようだ。ほっとした。休養は大事だね、
493山太郎:02/05/19 02:35
昔バージョンはDAO使ってたって事は無いのかのぅ?
>>488
うーん、あとは変数の宣言(型も)を明示的にやってるか、くらいだよな。
でもあんまり変わらないかも。
488ですが、やはりwin98でjet.oledb.4.0を使うと遅いという結論に
達しました。型宣言とかいろいろいじってみましたがあんまりかわりません。
レコードの項目数が多いほどおそくなります。
理由はわかりません。access97で3.51を使うことにしました。
oledbの早いのが見つかったら、移行することにしました。
ただ、今まで問題視した人もいただろうし。自分だけじゃないようなきもするし。
ADOよりDAOの方が速いぜって話もあるんだが・・・
497デフォルトの名無しさん:02/05/20 15:17
>>496
実際どうなん?
>497
前にVBマガジンで検証やってたが、そのときは
DAOのほうが速かったはず。
499 :02/05/20 23:19
ADOのがエレガントなコードが書ける(漏れは)
速さはしらん。
500デフォルトの名無しさん:02/05/21 09:58
DAO=速いけど汎用性なし
ADO=遅いけど汎用性あり のトレードオフだと思ふ
501デフォルトの名無しさん:02/05/21 10:48
で、MSは汎用性を重視しちゃったと。
速いのがよければSQL Server(しかしひどいネーミングだね)使えと。
しょせんアクセスはフロントエンドだから、速さはいらんと。
502デフォルトの名無しさん:02/05/21 11:35
>488
実際に速度測ってみたけど、ADO、DAO云々よか、
491 の指摘通り、New をLoopから外したら劇的に早くなったんだけど。

 MSDEもある今、AccessだけでDBアプリ組むことに利点は感じられないし、
ADOXでごまかしながら、DAOのオブジェクト郡をカバーできると思うんで、
DAOにこだわる必要はないのでは?
 Accessのみなら、断然DAOに決まってるけどね。使いやすい。他にも
RDOやらODBCDirectやら、オブジェクトがたくさんあって混乱するやつは
以下のリンクが参考にはなると思う。

http://www.int21.co.jp/pcdn/vb/noriolib/vbmag/9904/msdb
503デフォルトの名無しさん:02/05/21 11:39
まあ、DAOで組んだやつをADOに置き換えるのも
たいした手間じゃないし、どっちでもいいような
気がするけどね。上位ラッパー作っちゃってもいいし。
むしろJet-DBEを闇に葬り去ってほしいのだが。
初めからデータの格納はMSDE、データの加工(?)は
Access(Form & Report)でやるほうが、のちのち
恩恵があると思うがどうよ?
505デフォルトの名無しさん:02/05/21 12:10
DAOはもうマックロソフトもサポート打ち切って、
将来がないからねえ。。。
お世話になっております。488です。
adodb.recordsetをnewするのを Do Loop の前にもってくるのも
やってみましたが、自分の環境では処理速度はあまりかわりませんでした。
googleで検索しましたら、以下のページをみつけました。

http://homepage1.nifty.com/tsware/labo/labo_22.htm

やはり、oledb.4.0はoledb.3.51に比べて遅いみたいです。この速度では
自分のプログラムは稼動できません。なにか、代替方法を考えるか
oracleかなにかを使うしかなさそうです。しばらく、今のプログラムを
いじらずに3.51のままにしたほうが良いみたいです。
しかし、microsoft、一体全体・・・・・ あとは言いたくないです。
507デフォルトの名無しさん:02/05/23 14:40
木構造データってどう扱っています?
今二分木構造のデータを扱っているのですが、

(親ID、子ID、左右種別)

を組にして内部に持とうとしています。いろいろ
探してもあまり参考になるものがみあたらない
のですが、こういうのに定石ってありますか?

#RDBMSなんて使うなっていう話もあるが。

上記のような形でデータを持っているとすると、
それをACCESSのVBAでツリービューとして表
示することもできるのでしょうか?

#Grape cityなんかのツールを使えばよさげ
#なのですが、標準では無理?
MS TreeView(ocx)をフォームに貼ったら簡単できると思うけど・・・
Accessデータを2分木表現するのも、Treeに大量のデータ表示するのも激しく
自然の理に反してる気がするんですが。
万が一やるならMS TreeViewは再配布可能だが配付条件知らんので調べてください。
>>508
ありがとうございます。

私もACCESSでこの手のデータを取り扱う
のも、ましてや視覚表現するのもあまり気は
進みまないのですが、お客様のご要望(^^;
なので、検討だけはしているところです。

#木構造の表示はとりあえず勘弁してとは
#言ってありますが……。
>>509
Win32API呼び出して、自力描画してやれば?
>>510
めいっぱい値切られているので、
手のほうもめいっぱい抜きたい
というのが本音(^^;
512488:02/05/24 21:57
microsoftの英語版homepageからJet40SP6_9xNT.exeをダウンロード
し実行したところ、処理速度は改善され、3.51と同じか、ほんのちょっと早いくらいに
なりました。これで過去の資源は使えそうです。
>>512
いいこと聞いた
514デフォルトの名無しさん:02/05/27 10:33
>512
それらしきものは見つけたけど、ダウンロードしようとすると
Sorry, there is no Microsoft.com web page matching your request.
と言われてしまった。
どこから落としてのか教えてキボンヌ
http://support.microsoft.com/default.aspx?scid=kb;JA;q239114
IEで(5.0sp2)素直に落ちるが
516デフォルトの名無しさん:02/05/27 10:51
>515
サンクス
でも俺Win2Kなんだけど、Jet40SP6_W2K.exe を
入れようとすると言語が違うってはねられちゃうのな・・・
517デフォルトの名無しさん:02/05/27 17:50
Access 97でADO使ってるのですが、Access 97じゃあ CurrentProject
オブジェクトを作ってくれないから、カレントデータベースに接続でき
ません。
Access 97 + ADOでカレントデータベースを参照する方法ないですか?
結局、DAOのCurrentDB関数で名前を取得して、ADOで接続することにしました。
あんましスマートじゃないけどしかたない。
97 & ADO でがんばる理由って、どんなの?
煽りじゃなくて、俺もよくわかんないから聞いてみたい。

しかしAccessって、フォームのRecordSourceにDAOとかADOのRecordSet渡せたら
非常に使い勝手がいいと思うんだけど、最近のはできるのかな?
俺は97以上に上げさせてもらえないんでわからん。
コレできるんだったら、なんとしても全社バージョンアップさせたいのだが。
520デフォルトの名無しさん:02/05/28 10:11
メッセージボックスについて質問です
if msgbox("いいですか?",vbyesno)=no then
 …
 … 
end if

このような場合、
Msgboxが開いた時はNoの方にフォーカスがくるようにしたいのですが
方法ってありますか?

>>520
ヘルプ読め。載ってるから。
>>520
vbDefaultButton[n](nは1〜4)との併せ技じゃないの?
どちらか
@(推薦)質問のロジックを逆にする。
→常にYesをデフォルトとするほうが選択ミスをしない
Aフォームでメッセージボックスを自作する。
MsgBox "hoge", vbYesNo + vbDefaultButton2
if msgbox("だめですか?",vbyesno)=vbYes then
 …
 … 
end if
にすれば標準「はい」でもOK
業務アプリ組むときは、必ず「いいえ」をデフォにしてる。
メッセージボックスに、どれだけ注意事項書こうが読まれやしないし。
527デフォルトの名無しさん:02/05/29 10:22
ACCESS2000でヘルプが表示されないっす
サポート技術情報見たらヘルプ立ち上げてからって書いてあったんですが
やはり駄目です。例えばADODB.RecordsetのRecordsetにカーソル合わせて
F1押してもRecordsetの説明が出てこないのです(なき
528SupportDESK ★:02/05/29 16:28
Test
529雲珍:02/05/30 01:43
Access2000のMDBサイズについて教えてください。

Access2000をDB扱いしてVB画面から色々いじってます。
処理としては、「ファイルを読んでテーブルを作成して、
いろんな処理をしたら、テーブルを削除してまたファイルを読んで」を繰り返します。
ファイル数450に対して、この作業を繰り返すとMDBのサイズが1.2Gを超えました。
本番環境ではファイル数1200程度なので、ファイルサイズがもっと大きくなると思います。

さて、MDBのサイズが2G程度になった場合の弊害はあるんでしょうか。
530仕様書無しさん:02/05/30 01:54
>この作業を繰り返すとMDBのサイズが1.2Gを超えました。
>MDBのサイズが2G程度になった場合の弊害はあるんでしょうか。
貴方が他のプロから笑われること
>529
まともな設計者からキティ扱いされることが一番の弊害だと思います。

マジレスすると、オブジェクトの削除を繰り返すのはかなりMDBが肥大化する
ので止めたほうがいい。

また、Access2000のレコードロックを外さないとMDBがやたらと肥大化する。

そもそも2G以上はAccessの定義に引っかかるから作成できない。
>>529
>>530-531さんに同意。
>テーブルを削除してまたファイルを読んで」を繰り返します。
どうもこの文面を読むと、同じレイアウトのような気がするな。
普通は区分フィールドなり設けておいて、レコードの削除後、
「インポート」→「区分フィールド書き換え」をくりかえし、一括処理するもんだが・・・。
ケースによっては、「終了時に最適化」の設定をしておいて、一括処理後に
全てのレコードを削除して、終了する手もあるが。

今の流れでは、全体の処理時間もかかってるんじゃないか?
533雲珍:02/05/30 23:58
レスどうもです。
>>531
テーブル自体削除ではなく、インポートしたレコード全削除です。
それでも、肥大化することには変わりないのですが。

>>532
区分フィールドとはどういった意味を持つフィールドでしょうか。
時間的には、恐らく4時間半程度かかると思われます。
が、現行(汎用機上)では丸二日かかる処理です。
ある程度ファイルをインポートしたら、途中で最適化を行うようにしようと思ったのですが、
db.closeしても、CompactDatabaseが実行できませんでした。
最適化を行うにはDBが閉じていることが条件ですが、
db.closeではまずいのでしょうか。

結局何がやりたいのか、それをふまえた上で設計しなおすのが一番。
無理を通せば道理が引っ込む、なんて方法で作られたソフトなんてろくなもんじゃない。
535532:02/05/31 11:47
>>533
つーか、もう少し概要を詳しく書け!

1200の外部ファイルは、レコード数はどれくらいになるのかとか、
>>529でいってる「いろんな処理」はどのような処理なのかとか、外部ファイル毎に処理内容が違うのかどうかとか。
2chでも書けることはいっぱいあるだろう。

最適化にも何通りかやり方があるが、いまのままでは、>>534さんのようなレスしかできない。
536デフォルトの名無しさん:02/05/31 17:52
>>529

俺も似たようなことやってるなー

ローカルにTEMP(WORK)テーブルを作って、作業するレコードをそこにインサート。
レポートとかテーブルはこのtempテーブルをレコードソースとしてみてます。
処理が終わったらDELETE * from [TEMPテーブル名] を発行。
まぁ、これでも肥大化はしてくので、適度に最適化はやってます。

まぁ、参考までに聞いてね。
これも間違ってるかもだし。
間違ってたら訂正キボンヌです。
537雲珍:02/06/01 02:02
>>532
大変失礼しました。
外部ファイルのそれぞれのレコード数はバラバラです。
確認できたものだけですと、最小で200、最大で45000件でした。
もっとレコード数の多いファイルもあると思います。
やりたいことの概要としては、
「全ファイルの中から条件にあうレコードの件数を集計する」
というものです。
(条件にあるがどうか調べるために、いろいろなテーブルを読みに行く必要がありますが。)
ファイルのフォーマットは同一です。

>>536
私の仕事が、今まさにそれです。
最終的には集計した結果を帳票出力します。
538:02/06/01 04:04
載させていただきます
http://www.h4.dion.ne.jp/~k.seed/index.html
539デフォルトの名無しさん:02/06/01 09:22
>537
ちょっと待て、雲珍!
あなたのやりたいことって、本当にインポートが必要なのか?
テーブル見に行って、条件みて、件数カウントするだけなら、

SELECT Count(*) 〜 WHERE 〜

で集計とれるんじゃないの?
SQLはわかる?
540雲珍:02/06/01 13:35
>>539
SQLはわかります。
件数をカウントする対象は、ファイルにあるレコードです。
ですので、全ファイルをインポートしてテーブルを作成する必要があると思ってます。

>>540
UNIONは?と言ってみる
542デフォルトの名無しさん:02/06/01 14:33
>540
いや、ファイルにあるレコードって、何?
CSVとかそういうの?
テキストでおいてんの?
MDBではない形式なのね?
ファイルがCSVならリンクにすればいいだろうし、それが出来ないようならMDBにインポートする事自体辞めたほうがいい。
MSDEなら改善されるかな?
544532:02/06/01 20:12
>>537
詳しい説明ありがとう。

何で読み込むだけ読み込んでおいて、一括で処理しないのかと思ってたんだが、
ひょっとして1200個すべて読み込むだけで2GB超えちゃうのかな?
レコードの削除も使用領域を開放しないだけで、増えちゃうわけではないだろうし。

となると、Accessに取り込まずに処理することだ。
CSVなら、>>543が言ってるようにリンクさせるかInputステートメントだな。
汎用機のことがちょっと出てたので、固定長の区切文字のないファイルなら
Line Inputで変数にでも取り込んでLeftなり、Midなりで処理しろ。

どちらもヘルプに簡潔なサンプルが載ってるから、一度見てみれ。

それじゃ、頑張れ!!
545雲珍:02/06/02 04:21
ファイルのレコードは固定長です。
なので、532さんのおっしゃるように
インポートせずに一行ずつ読んで処理するという方法も考えたのですが、
テーブル化した方がSQLで速く楽に集計できると思って安易にインポートを選択しました。

私としては途中で最適化を行うようにしたいのですが、
以前に書いたとおりうまくできませんでした。

>>545
最適化を行いたいならまず「安易に」選択することをやめなよ。
よーく調べてよーく考えてから方法を選択したほうが
小手先の「最適化」よりずっと良い結果が得られる。
一般論ぽくてすまんこ。
547532:02/06/02 06:33
>>545
君の信念には参っタヨ。

ここでウダウダ説明するよりもRURI++氏のページを見たほうが早いだろう。
ttp://www.ruriplus.com/msaccess/faq/faq_037.html

但し、全体の処理の途中でいったんAccessを閉じるので、起動時に初めてなのか
途中からなのか判断できるよう細工が必要だ。

俺なら最適化の直前にどこまで読み込んだかファイル名でもテキストファイルに書き出しておく。
そのファイルがなければ、読み込みは最初から。すべての処理が終わったら、そのファイルは削除だ。

ま、これも勉強だから色々やってみれ。実際中身をみてないからInput系がベターとも限らんし。
548ななし:02/06/02 09:16
>>101
>>113
>>117

超亀ですが・・・。

私も>>105さんとほぼ同意見。
ホイール付きマウスに固有のWindowメッセージをフックすれば、無効化できるらしい
けど、メッセージフックなんて、危険性高いし、めんどくさいし、周辺機器に固有な
処理は、ハードが変わる都度、アプリのメンテを余儀なくされそうな気がするので、
開発・保守コストを考えたら、全然お奨めできないと思う。

# かなり憶測が入ってるけど。(W
549雲珍:02/06/02 18:28
>>532 さん
ありがとうございます。

いろいろ試したいところなんですが、
期間的にもうあとがない状態なので残念です。

550デフォルトの名無しさん:02/06/03 10:36
Access2002からMDEでもプリンタ設定できるようになった
みたいですけど試した方います?
サンプルが英語だからサッパリわからん(汗
551デフォルトの名無しさん:02/06/03 11:04
>550

MSのサイトくらい調べような。これのことかな?

http://www.microsoft.com/japan/msdn/officedev/officexp/odc_acc10_printers.asp
552550:02/06/03 11:11
>>551
うん。そのページでリンク貼ってあるサンプルMDBが英語なのです。
553デフォルトの名無しさん:02/06/04 10:30
CSVへのリンクテーブルって正直重いですね・・・
今やってるのは社内システムだからいいようなものの・・・・

まぁ件数をカウントするだけなら・・・いいのかな?

>>553
そりゃCSVのデータ形式から考えればDBに比べて重いのは当然だろう。
555へたれ:02/06/04 11:00
Access2k
サブフォーム(帳票形式)のテキストコントロールのプロパティを
標準モジュールからいじりたいのですが。


sub test()
Forms![親フォーム].[subエリア].[入力数値].DecimalPlaces = 3 ’小数点以下3桁表示
end sub

実行時エラー438
オブジェクトはこのプロパティまたはメソッドをサポートしていません。

となります。

小2時間ほど悩んでます。
サブフォームのコントロールのプロパティを変更するにはどうすればよいのでしょうか?
556だー:02/06/04 11:41
Forms![親フォーム].[subエリア].[入力数値].DecimalPlaces = 3

じゃなくて

Forms![親フォーム]![subエリア]![入力数値].DecimalPlaces = 3

じゃねえか〜
557へたれ:02/06/04 11:45
サンクス!
できました。感謝感激です。
>553
処理内容にもよるが、直接読んだ方が速いで。
559デフォルトの名無しさん:02/06/05 13:10
テーブルの項目に半角スペースを登録したいんですが、
いくらやってもNULLになってしまいます。
半角スペースって登録することできないのでしょうか?

まぁ、別の方法考えればいいのですが、
気持ち悪いので質問させていただきました。
560デフォルトの名無しさん:02/06/05 14:02
>559
テーブルの項目ってフィールド名か?フィールド名を半角スペースで
済ませたいってこと?
それとも、テーブルに直接データ打ちこむと消えてしまうってこと?

テーブル直打ちで半角スペースは打ちこめないよ。クエリか関数はさめばOK
561デフォルトの名無しさん:02/06/05 15:24
>>560
データですね。
CSVをインポートするときに
「, ,」のデータを読み込ませたらNULLになってしまったので。

関数かクエリー使えばいいんですね。

ありがとうございます。

562not 560:02/06/05 16:08
>>561
>>560

 話がかみ合ってないような。

 フィールド名を空白にしたい→クエリ使えば?

 CSVの空白データを読み込みたい→," ",としたら?

という2つがすれ違っているような。違う?
563デフォルトの名無しさん:02/06/05 17:07
>>562
CSVの' 'を読み込んで、データを空白にしたい、ってことです。
フィールド名は関係ありません^^;

混乱させたみたいで申し訳ないです。
564デフォルトの名無しさん:02/06/05 17:08
>>563
自己レス訂正

' ' → , ,

ですね
>>563
何故にそうしたいのか晒した方がいいのでは…
566563:02/06/06 09:22
>>565
お客さんから更新データが毎回CSVで来て、それをこちらの
一時テーブル(CSVをそのまま反映するので、本来は日付型やYES/NO型でもすべてテキスト型にしてあります)にセットし、
さらにその一時テーブルをマスタのテーブルにUPDATEするシステムなんですが、
その時に「更新しない項目」の扱いについて検討中なんです。

その時、
,,が一時テーブル入るとNULL → 更新しない。
,文字列,がテーブルに入る → その値で更新

となるんですが、
じゃあ消去したい時はどうすればいいか?って話の時に、
消去したい項目にはスペースを入れるのはどうか?という話になったんです。
ですが、上でも書いたとおり、「, ,」を一時テーブルにインポートするとNULLになってしまうので・・・

ひょとしたらこの仕様時点で大きな過ちを犯してるかもしれないので、
ついでにアドバイスなぞいただけたらありがたいです。

一応現段階としては、スペースは止めて、消去したい項目には、「del」みたいな実データにはありえない文字列をセットして
転送してくれという話になりつつありますが・・・
>>566
> 消去したい項目にはスペースを入れるのはどうか?
これはAccessのテーブル(一時テーブル)にデータが入っているのであれば
当該フィールドが「Is Null」のデータを削除クエリーで消去すればいいのでは…?

CSVをインポート→一時テーブル→削除クエリー

または

CSVファイルをリンク→削除クエリー
568デフォルトの名無しさん:02/06/06 11:07
あるテーブルの値を、別のテーブルに反映(更新)させる時、
更新クエリを使ってやることができますか?

さっきからやってるんだけどいかんせんうまくいかない・・・
コードにSQLで書いたほうが早いかな?
569デフォルトの名無しさん:02/06/06 11:56
>>567
ISNULL=TRUEのデータは更新しない項目、つまりマスタの値をそのまま保持するんです。


というか・・・普通更新のシステムってこんなことするんですかね・・・
別所で更新データを生成して、それとは別のシステムに転送して更新させるみたいな。

普通は更新は対象項目をオーバーライトするものだとばかり思っていたんですが・・
>>568
クエリーのテーブル表示に「あるテーブルの値」と「別のテーブル」を表示して
できるけど「あるテーブルの値」が複数ある場合は最後のデータが反映されるようだ

事前に「あるテーブルの値」をクエリーで絞り込んでおくこと…かな?
571567:02/06/06 12:11
>>569

では、クエリーを使って IsNull=Falseをデータを更新するとか?
572デフォルトの名無しさん:02/06/06 12:55
>>571
おお、なるほど。
そうすればとりあえずは全角スペースならデータとして埋め込んでくれますね。
ありがとうございます。
573デフォルトの名無しさん:02/06/06 16:59
NULLとEmpty値の違いがよくわからない・・・

空文字をセットしたい時には、
= NULL とやるか、 = ""
とやるか、どっちがいいんでしょうか?
>>573
ヘルプよりコピー
******
Empty 値は、初期化されていない (初期値が代入されていない) バリアント型の変数を示します。
Empty 値を含むバリアント型の変数は、数値データと共に使われるときは 0、文字列データと共に
使われるときは長さ 0 の文字列 ("") として扱われます。

Empty 値を Null 値と混同しないでください。Null 値は、バリアント型変数に有効なデータが意図
的に格納されていないことを示します。
******

クエリーで抽出条件を「""」や「Null」ばわかると思うが?
575デフォルトの名無しさん:02/06/07 02:57
アクセスのテーブルをエクセルにエクスポートする方法って無い

一括して全部エクスポートで良いんだけど。
>>575
OfficeLinkが手っ取り早い
マクロにもその手のものがあると思うけど…
577532:02/06/07 10:08
>>575
576の方法以外に、ファイル−エクスポート。
そんなに大きくなければ、全てのレコードを選択してコピペでもいける。
がんばってVBAコード書くのが一番さ。
579VBA厨房:02/06/07 11:29
テーブルに登録されているレコードやクエリの結果を
他形式のファイルにエクスポートする時に、Docmdオブジ
ェクトのTransferSpreadsheet,TransferTextメソッド
を使うと保存先ファイル名をフルパスで指定してエクス
ポートする方法しか知らないのですが、

www.interq.or.jp/hot/tsatoh/tryaddress/tryaddress27.htm
のように、ダイアログを表示させて保存させるには
どうしたらいいのでしょうか?
ちなみに上のサイトの方法でやろうとしてもMicrosoft Common
Dialog Contrlが無いのでできないんです。

助けて・・・

>>579
なんかよくわからんけどAPIでGetOpenFileNameA呼べば?
581デフォルトの名無しさん:02/06/07 15:25
>575
いっとくけど動作保証しないよ。
Public Sub AllTableToExcel()
Dim TD As TableDef

For Each TD In CurrentDb.TableDefs

If TD.Attributes = 0 Then
DoCmd.TransferSpreadsheet acExport, acSpreadsheetTypeExcel97, TD.Name, "c:\" & TD.Name & ".xls"
End If
Next

MsgBox "------------糸冬 了------------"

End Sub
c:\に沢山できてるでしょ?ダメ?

>579
API公開してるサイトがあるから探してこい。
582VBA厨房:02/06/07 15:49
>>580
とりあえずコモンダイアログ使わないで
作れました。疲れた・・・
2ch万歳
583Z80A相当:02/06/07 16:00
ちょっと質問なんですけどAccess のVBAで
今開いてる自分自身のmdbファイルのパスを取得したいんですけど可能でしょうか。
リンクに相対アドレスをつかいたいもので。
解る方いらっしゃいましたらお願いします。
>>583
Private Sub コマンド1_Click()
MsgBox "このファイルのパスは " & CurrentProject.Path & "です。", vbInformation + vbOKOnly, "パス参照"
End Sub

とか?
>>583
ここ ttp://www.ruriplus.com/msaccess/index.asp
ttp://www.ruriplus.com/msaccess/faq/faq_008.html より

************************************************************
次のユーザー定義関数を作成します。

【7.0, 97】
Function GetCurrMDBDir() As String
Dim db As DATABASE
Dim FullPath As String
Dim ilop As Integer

Set db = CurrentDB()
FullPath = db.Name
For ilop = Len(FullPath) To 1 Step -1
If Mid(FullPath, ilop, 1) = "\" Then Exit For
Next
GetCurrMDBDir = Left(FullPath, ilop)
End Function

【2000 以降】
Function GetCurrMDBDir() As String
Dim db As DATABASE

Set db = CurrentDB()
GetCurrMDBDir = Left(db.Name, Len(db.Name) - Len(CurrentProject.Name))
End Function
**************************************************************
586Z80A相当:02/06/07 18:00
>584 様、>585様
的確&素早く答えていただいて全くもって助かりました。
ありがとうございました。

ACCESSでWEBデータベースは出来ますか?
会社にWEBサーバーあるんで、そこに置きたい
588デフォルトの名無しさん:02/06/10 17:55
>>587
イントラネットでなら、できると思われる。
ただ、.netは知らないですわ。2000までの話。


>>587
InterDev経由でならやったことある。
590しろ:02/06/11 13:44
ムカついたのでご報告します。
WindowsXP上でAccess97で作ったDBをAccess2002に変換したところ、
関数の戻り値がおかしくなりました。
ヘルプで検索しても関数ちっとも出てこないし・・・(-_-;)
2000より更にヘルプ使いにくくなりましたね。。

Microsoftに電話したところ、下記のように言われました。

Switch関数、Choose関数の戻り値は、Access2000以降のものを
OSのWindows2000以降のもので使用すると数値で返ってくるはずの
値が全てテキスト型になってしまいます。
Access97ではこの現象はないそうです。

また、Access2000以降でもWindows98等で使用する場合には
正しい型
で返ってくるそうです。
Access2000からの障害ですが未だに治ってないそうです。。。

また、この問題については、Microsoftの英語のサイトにしか記載が
ないそうなので、ご参考までにご報告します。

・・・きっー!!使えないよー(>_<)
うむぅ、どちらの関数も使った事無い...
だが勉強にナターヨ。
592デフォルトの名無しさん:02/06/11 15:06
Access2002ランタイムで納品している方いらっしゃいますか?
Office97,Office2000またはAccess97,Access2000を混在させたらやはり不具合がでますかね・・・。

Access2002ランタイム単一でいれることにこしたことないのですが
旧バージョンのOffice、Accessと混在させているという経験者がいらっしゃいましたらアドバイスきぼんぬ
 
593デフォルトの名無しさん:02/06/11 19:23
>>590
おれも使った記憶がないが、有益な情報ありがとう。
>>590
そんな関数使うやついないだろ(ワラ
595しろ:02/06/11 23:48
>591>593>594
え?そうですか?使わない?クエリで条件分岐するような関数は
どうしてますか?そういう事ってやらないですか?
モジュールでは確かに使わないけど・・・。

>592
試験的にやった事はあります。
実行させるショートカットに 
 "パス名 /runtime"
と指定したもので実行させるようにする必要がありますが、
OfficeはともかくAccessが入ってると、動作は微妙に怪しくなるかも
しれないです。
あまり答えになってなくてすみません。
>>595
漏れは、if、Select使った関数自作している。

IIF、swich、Chooseなんて関数、コードの中でも、
どうしても使わざるをえない場合以外使わん。
根本的にキライだからな(ワラ
597595じゃないけど、、:02/06/12 00:50
IIF、swich、Choose使いまくってました。。。
スマソ。。
598しろ:02/06/12 01:31
>596
私も何度も出てくる関数の時は自作はします。
同じくSwitchやChooseは、コードの中では使った事はないなー。
クエリ内で使うのみです。

>597
>590で書いた問題は、IIFでは発生しないそうです。
検証はしてませんが。クエリ内では私も同じく使いまくってます。
要注意です。
・・・謝る事は無いと思うが?
599596:02/06/12 02:02
ちなみにD系関数などもつかわん

遅い等も大きな理由だが、最大の理由は
「コードがエレガントではなくなる」
からだ(ワラ
600デフォルトの名無しさん:02/06/12 02:36
>599
Accessごときにエレガントを求めても・・・
601592:02/06/12 02:51
>>595
レスありがとうございます。
やはりAccessは共存させないほうがいいみたいですね。

Officeは未だに97使ってる人もいるので心配だったのですが、
この分は気にしなくていいようなので少しホッとしました。
>>599
> ちなみにD系関数などもつかわん
同意。もちろん、使うべきときは使うが。

なんかあったらすぐD系関数つかうやつが多すぎないか?
どういう動作をしているか理解しているのだろうか?
select文でDLookupなんかつかうな。
マ板あたりから房がまぎれこんだらしいな(藁

>600
Accessなんぞ趣味で使うアフォは少ないだろうし、
コードの見栄えを優先してD系使わないってのは
いかがなもんか。
まぁ、>602 の指摘通り、SELECT投げながらDlookUp使う
バカも多いのは確かなんだけどね。
2000程度のテーブルなんか見に行くときはそんなに速度差も
出ないし、ラクでいいと思うが。
accessファイルのパスワードを解除する方法ってあるのでしょうか?
いたずらされてしまって困ってしまいました。
教えてください。
よろしくお願いいたしますm(_ _)m。
>604
ない。諦めれ。
606デフォルトの名無しさん:02/06/12 17:49
起動時の設定で、ツールバー等を非表示にする、という設定がありますが、
どんなにがんばっても、「メニューバー」残ってしまいます。

システム上でフィルタ機能を使っていると、
このメニューバーでフィルタを解除することができてしまうので、消したいのですが・・・
何か方法はないでしょうか?

ちなみにメニューバーってのは、「ファイル」とか「ウィンドウ」とか「ヘルプ」が
あるバーです。

#一応ヘルプも探したんですけど・・それらしい項目はなかったです。探し方が悪かったかな?
607しろ:02/06/12 17:56
1.メニューバー右クリック → ユーザ設定
 新規作成で、適当な名前を付けた「メニューバー」を作る
(ツールバーじゃありません)
 中味は空っぽでOK!

2.ツール→起動時の設定で、起動時に使用するメニューバーを
 1で作成したものに変更

3.Accessを再起動させた時に、1で作成したメニューバーの小さい奴
 がでてくるので、×で閉じてしまいます。

次回起動する時はメニューバーはないはず。
メニューバーを表示させたいときは、Shiftを押しながら起動!

これでどう?
608デフォルトの名無しさん:02/06/12 23:54
>>604
あるよ。どこで見たっけなぁ^^;;
参考にならん発言でスマソ
609デフォルトの名無しさん:02/06/13 00:00
レポートを印刷プレビューで確認したら問題ないのに、
実際に印刷したら、長い文が改行されたり、2ページにまたがったりする。
何故でしょうか?
commandbars("menu bar").enable = false
97でこれやるとALT押したときえらいことになったけど
611デフォルトの名無しさん:02/06/13 09:04
>604
ビジネスソフト板のAccess総合相談所スレで自分が答えた
ことがある。まずはぐぐってみれ。
パス解析するフリーソフトがあるから。
>>607
できました!ありがとうございます!
613デフォルトの名無しさん:02/06/13 16:50
Access2000でサブフォームを仕込んだデータシートビューのフォームを、サブフォームを展開した状態で開く方法ってありますでしょうか?
614デフォルトの名無しさん:02/06/13 18:21
>>609
プリンタドライバ最新にしる!
>>609
プリンタをドライバで最新にしる!
616help:02/06/14 17:07
Access2000・Windows2000
Accessを起動したときにいきなり予め作成されているクエリのデザイン画面を起動したいですがAccess・VBAでクエリをデザイン画面で開くことはできますか?

DoCmd.OpenQuery "xxxx" ,acViewDesign
618help:02/06/14 18:22
≫617
ありがとうございます。
DoCmdオブジェクトを使用すれば、大概のアクセス昨日をVBAで実行できるんですね。
参考になりました。
619mai:02/06/14 19:21
フォームにリストボックスをつくり、
自オブジェクトのクエリ名の一覧を表示したいのですが。
可能ですか?
可能の場合その方法または参考URLを教えていただきたいのですが
よろしくお願いします。
>>619
Currentdb.QueryDefsをFor〜Eachあたりで回して.Nameプロパティを参照。
あとはリストボックスのRowSourceに区切りを追加したテキストとしてつっこめばok。
ある程度数が増えると入りきらないんで、そんときはなんとかしたほうがいい。
621デフォルトの名無しさん:02/06/15 09:08
>619
620 のついでに言うとRowSource には制限があり、2024Kbyte。
文字列として処理をされるから、クエリオブジェクトが恐ろしく
膨大にあるのであれば、パンクを防ぐために、一工夫が必要になるね。

# まー、そこまで増える場合は設計見直すのが先決だな
622デフォルトの名無しさん:02/06/15 10:42
>>619
つーか、クエリオブジェクトの一覧表示して、何がしたいかでこの先が決まってくると思う。
623mai:02/06/15 12:35
≫620、621、622
ありがとうございます。
リストボックスより実行するクエリを指定してもらい
選択したクエリの実行結果を別フォームのサブフォームとして表示するように
したかったのですが。
2024kbまでいかないとおもいますので、検討してみます。
624621:02/06/15 16:47
>623
ごめん、すげー鬱氏。

>2024kbまでいかないとおもいますので
2024Kbyteってありえんわな、2kの間違い。

鬱氏ついでに、カンタンなアドバイス。

If Lenb(Strconv(〜.RowSource,vbFromunicode))<2024 Then

こんな具合でちゃんとエラートラップしとけ。
625mai:02/06/17 16:56

ありがとうございます。
やはり無理っぽいですね。
クエリとAceessエクスポート機能をじかに使ってもらうかたちで逃げようと思います
あん?
適当なローカルテーブルにクエリ一覧を出力すればいいんでねーの?
627mai:02/06/18 09:19
選択したクエリの実行結果を別フォームのサブフォームとして表示し、
エクスポートボタン(コントロール)をおすと特定のファイルにエクセル形式で検索結果と別シートにクエリ条件エクスポートするようにしたかったのですが…
私の知識では、ちょっと思いつかないので。
628しろ:02/06/18 20:39
>627 maiさん
DAOは出来ますか?
コンテナオブジェクトを使って、クエリ名をDAOでテーブルに
書き出せばできますよ。

そのテーブルをリストボックス等に使えばいいです。

Containerオブジェクトのサンプル
--------------------------------------
'テーブル、クエリ名を順番にメッセージボックス表示します。

Dim Db As Database, ContMy As Container
Dim MyDoc As Document, strName As String

Set Db = CurrentDb()
Set ContMy = Db.Containers("Tables")

For Each MyDoc In ContMy.Documents

 strName = MyDoc.Container 'オブジェクトタイプ
 strName = strName & " " & MyDoc.Name 'オブジェクト名

 If MyDoc.Name Like "*MSys*" Then
 Else
  MsgBox strName
 End If

Next MyDoc

Set ContMy = Nothing
Set Db = Nothing
-------------------------------------
※テストする場合は、スペースが入ってるので消してください。
629mai:02/06/19 09:17
>>628
ありがとうございます。
これにリストボックスに追加ロジックを埋め込めば想像通りの処理が出来そうです。
大変感謝しております。私の実力不足ですね。
DAO関連を学習するURL等おしえていただければ幸です。
よろしくおねがいします。
630デフォルトの名無しさん:02/06/19 10:11
今クエリを使って計算や判定などをやろうと思っているのですが・・・

クエリ内での同一レコードの合計や平均の算出、
cLngなどを使った型変換、IIFでの判定、
等、本来コードでもできることってありますよね。
こういうのってクエリでやってもいいものなんでしょうか?
(結果はちゃんと出ています。パフォーマンスとか、テクニック上の問題で)

合計や平均なんかはいいけど、型変換はあまりよろしくない。等、
皆さんの意見を聞かせてください。
631デフォルトの名無しさん:02/06/19 10:22
>>630
クエリ内でやるほうが普通はパフォーマンスはいいでしょ。
クエリにもよると思いますが
632デフォルトの名無しさん:02/06/19 10:25
>630
動いているならヨシだ!

パフォに関していえば、キャストが頻繁にあったりすると多少落ちる。
更に、IIFやSwitchなんか酷使してると最悪。あとで見直すときとか、
他人が見たときは悲惨、見たくもなくなる。
IIF使わないといけないってクエリは大体設計がおかしい、経験上。
単純な集計なら速い・楽でいいけどね。
IIFを多重に使われたりすると保守で死にそう。
ユーザ定義関数をうまく使ってくれたほうがマシ。
634630:02/06/19 11:11
早速の回答ありがとうデス。
IIFに冠しては自分もいい噂聞かなかったのですが、
クエリでの計算フィールドで、既存の項目のNULLによって●を出力する、
ということを急にしなければならなかったので、結局IIFを使いました。
(自分では、IIFってのはEXCELでのIF関数みたいなものだと思っている)
まぁIIF使ったのはこんだけです。

とりあえず今回はこのまま進めちゃいます。
社内システムだし(笑

引き続き意見があったらお願いします。
保守面倒だからってタブー視するこたないと思う。
使った方が早いと思ったら使えばいいし。
そもそもAccessを使う、っていう選択自体が工数削減を目的としたものだろうし。
>634
それくらいの用途なら使っても問題無しだ。
637yuki:02/06/19 13:41
cl/sv Access+Oracle oo4o接続 OS共にwin2000
のシステム開発をおこなうのですが、
oo4o関連の参考図書として、情報量が豊富なものと初心者向けのものメジャーなものを教えていただきたいのですが。
よろしくお願いします。
638デフォルトの名無しさん:02/06/19 13:55
たとえばPCの管理で
メインテーブル:id(オートナンバー型)、管理番号、PC名、その他フィールド
ソフトウェアのライセンステーブル:ソフトウェアの名前,id(長整数型)

という構成でフォーム(ソースはメインテーブル、サブフォームに
メインテーブルのidに対応したソフトウェアの表示)からDAOを使って
データベース操作をする時、一つ前の更新情報を履歴としてメインの
テーブルに残すために
管理番号はそのままでidだけ変更してメインのテーブルにレコードを
追加したいのですが、idがオートナンバーなので、それに対応した
サブフォームの表示ができないんです。

助けて…
639デフォルトの名無しさん:02/06/19 14:18
>>638
オートナンバーなんかやめればいいじゃん
640VBA厨房:02/06/19 14:49
641mai:02/06/19 16:23
>>640
ありがとうございます
この方法は一度検討したのですが、
Access2000の場合、書式を設定しないと文字化けしてしまうし、
特定セルに出力できないためあきらめました。
642しろ:02/06/19 17:13
>640 maiさん
エクスポートは文字化けしたりする事は多いですし、
シートを選んでエクスポートしたり、特定のセルを選んだりしたいなら、
AccessからExcelのVBAを操作して指定してやる必要があります。

>628 
DAOについてですが、簡単に検索してみましたが初級用のサイトで
よさそうなのは中々見つけられませんでした。

ちなみに私の場合、DAOはA4サイズの薄っぺらい「AccessVBA上級」?とか
「Access応用」?とかそんな名前の本で勉強しました。
今手元に無いので出版社とか判らないのですが、PC関係の本が多めに
置いてある書店の端っこの方に置いてあると思います。
(といってもこの本がオススメと言うわけではないですが・・・(^_^;))

ご参考まで。
レポートに配置されたのテキストコントロールに連結されているデータを
コード部分で”何も入っていない”と判断する式はこれだとまずいのでしょうか?
どうもうまくいかなくて困っています。

If Me![*****] = Null Then
line1.Visible = False
txt1.Visible = False
End If

プロシージャはFormat部分にコードを書いてます。
644デフォルトの名無しさん:02/06/19 20:17
>643
Nullは値と思いがちなんだが、Accessが評価してない値の「状態」だ。
比較するには値が確定してないと結論が出せないのはわかるだろ。

だから、Nullであることを確認したいときにはIs系関数を使ってみれ。
If IsNull(Me![*****]) Then
 ・・・・・
>644
nullは値ではなく状態なのですね・・・。
だからイコールで結ぶのではなくIsNullで値を確定する、と・・・なるほど

ありがとうございます!感謝!!
ちなみに、Isnull("")の結果はFalse。
オレはいつも
If Isnull(Me.小林) or Me.小林="" Then
ってかたちで判定してる。
If Nz(txtTest) = "" Then
じゃダメか。
648しろ:02/06/20 11:06
>646 同じく
If Isnull(Me.小林) or Me.小林="" Then
とやってますが、最近は
If Isnull(Me.小林) or Len(Me.小林)=0 Then
にしてます。
Me.小林=""
と言う文字列の判定より
Len(Me.小林)=0
の方が処理が早いと何処かにかいてあったので・・・。
>>646 >>648
Me.小林を二つ書くくらいなら関数にしろよ。
650647:02/06/20 11:17
いやだからNzじゃだめ?
651しろ:02/06/20 11:22
>649
質問ですが、例えばこのような書き方をする場所が一度しかなくても
関数にしてます?
どの程度の使用頻度で関数にするとか決めてます??
実行速度とか、保守の面とかではどうなんでしょう?
ご参考までに教えていただけると嬉しいです。
652しろ:02/06/20 11:23
>647
この場合ではNzは使った事無いな。特に問題はないですか?
無いなら便利そうだから使ってみようと思うけど・・・。
653646:02/06/20 11:32
>>649
自分で使うときは関数にしてるよ。
方法の提示ということで開いて書いたんだが。
>>651
コードが見やすくなるなら一度しかなくても関数にする。
二度、三度あるなら結構関数にするだろうし、
「最近は」といえるくらいならほぼ確実に関数にする。
実行速度の低下は限りなく0に近い。数万回程度じゃ体感できない。
まともな関数(関数外の変数への直接なアクセスが少ない等)なら保守性は上がる。

もし関数を日常的に作成していなければ、それはプログラムと呼べるレベルに達していない。
655しろ:02/06/20 12:00
>654
ご回答ありがとう!なるほどー。

> 二度、三度あるなら結構関数にするだろうし
・・・・
2、3回でてくる物だと大抵関数にしてます。
つーか、何度も同じ事書くのはめんどくさいので関数にしてます。

↓ただ、これが結構心配だったのです。

> 実行速度の低下は限りなく0に近い。数万回程度じゃ体感できない。
> まともな関数(関数外の変数への直接なアクセスが少ない等)なら保守性は上がる。

逆に保守しにくいんじゃないかとか、実行速度がカナリ落ちるのでは?
とか思ってました。

でも、
> コードが見やすくなるなら一度しかなくても関数にする。

これは、場合によると言う感じでした。
 If Isnull(Me.小林) or Len(Me.小林)=0 Then
この程度の長さのもので、1度しか使わないような場合は
関数にする方が判りにくいかと思って、関数にはしていませんでした。
(ちなみに、今回の例の物は関数にしてます)

周りに参考になる人間がいないので、大変参考になりました。
ありがd!!
656デフォルトの名無しさん:02/06/20 21:12
すんません、どなたかご教授下さい。

Access2002において以下のようなコードを書き、実行しました。
(一連の処理はあるのですが端折ってあります)

1  '宣言
2  Dim ThisDb As Database
3  Dim ThisRs(1) As Recordset
4
5  '代入
6  Set ThisDb = CurrentDb
7  Set ThisRs(0) = ThisDb.OpenRecordset("MST_tblFinance", dbOpenDynaset)
8  Set ThisRs(1) = ThisDb.OpenRecordset("MST_tblBank", dbOpenTable)

7行目で「型が一致しません」と言うエラーが出てしまうのですが、
宣言に間違いなどございますでしょうか?

…もうだめぽ(;´Д`)ノ
656です。
自己解決しますた。

後で結果を書きに来ますー
<Before>

1 '変数宣言
2 Dim ThisDb As Database
3 Dim ThisRs(1) As Recordset
4
5 '代入
6 Set ThisDb = CurrentDb
7 Set ThisRs(0) = ThisDb.OpenRecordset("MST_tblFinance", dbOpenDynaset)
8 Set ThisRs(1) = ThisDb.OpenRecordset("MST_tblBank", dbOpenTable)
9 Set ThisRs(0) = ThisRs(0).Open
10
11 'レコードセット移動
12 ThisRs(0).MoveFirst
13 ThisRs(1).MoveFirst

<After>

1 '宣言
2 Dim ThisDb As Database
3 Dim ThisRs(1) As Object
4
5  '代入
6 Set ThisDb = CurrentDb
7 Set ThisRs(0) = ThisDb.OpenRecordset("MST_tblFinance", dbOpenDynaset)
8 Set ThisRs(1) = ThisDb.OpenRecordset("MST_tblBank", dbOpenTable)
9
10 'レコードセット移動
11 ThisRs(0).MoveFirst
12 ThisRs(1).MoveFirst

Beforeの9行目で7行目の処理とダブっていたThisRs(0).Openを削除、
Afterで3をObjectでの宣言に変えたら動きました。

疲れた…
659デフォルトの名無しさん:02/06/20 23:14
>>658
オナニーは部屋でやってください。
>658
何故Object型だと問題ないのか?
型が違うというメッセージの意味は?
これを考えてみて欲しい。

ヒントは、参照設定・DAO・ADOだ。
がんがれ。
661mai:02/06/21 16:51
入力フォームを作成して、コマンドボタンを押すとテーブルの該当項目に追加するロジックを作ったのですが、
DoCmd.GoToRecord , , acNewRecを使用すると、フォームの各コントロールの入力値が消去されてしまいます。
コントロールの入力値はそのままで、テーブルに項目を追加したいのです。
何か良い方法、アドバイスお願いします。
>>661
.DefaultValueに突っ込むとか非連結にするとか。
663mai:02/06/21 19:35
≫662
ありがとうございます。
項目数がおおいのでDefaultValueに値をいれる方法よりも、
テーブルに追加する方法を変更したいのですが・・

よろしくお願いします。
664662:02/06/21 21:06
>>663
よろしくと言われてもなぁー。
つーか項目多いったって255も無いわけだろ?
そもそもコントロールのコレクションを回してみるとか、やりようはあるだろう。
良い方法が見つかったらここに書いてくれ。
よろしくお願いします。
665デフォルトの名無しさん:02/06/24 11:18
コンボボックスの規定値を、その前に入力されたフィールドの値から
設定したいのですがやりかたがわかりません。

品名を選んだら品名テーブルに登録されている勘定科目が
規定値になる。ただし変更も可。

コンボボックスに表示される要素の何番目にその勘定科目が存在するか
を調べてセットするんだと思いますが(For Each?)
書き方が全然わかりません。
>>665
Private Sub こんぼ_AfterUpdate()
Me.こんぼ.DefaultValue=Me.こんぼ
End Sub

こーゆーこと?
667665:02/06/24 15:00
>>666 さんのシンプルな回答?がわかりません(涙

◆コンボA  品名:品CD:勘定CD(名以外は非表示)
◆コンボB  勘定名:勘定CD
コンボAで、ある品名を選択したらコンボBにその勘定名がセット
される(変更は可能)ってイメージです。

複数列あるコンボの規定値セットは
コンボB=コンボB.itemdata(n) n…上から何個目
しか知らないのですが DefaltValueで複数列を"ああ;11"
とか"ああ,11"みたいに直接書セットできるのでしょうか?
668666:02/06/24 15:42
>>667
根本的なところを誤解してるようだけど、コンボにせよリストにせよ1つの値しか持つことが出来ない。
プロパティに連結列ってのがあるっしょ?
それがコンボボックスの値。
あと規定値という言葉と値という言葉が混同している気がする。
これ以上説明しようとすると長くなるので省略。
669デフォルトの名無しさん:02/06/24 16:36
>>668
間違い。Columnでいくつでも持てる。

>>667
コンボAのafterupdateイベントの後に、コンボAのColumn内のその値を走査して、
見つかったらそれに対応する勘定CDをコンボBに入れてやればいいだろ。
670デフォルトの名無しさん:02/06/24 16:42
>>663
じゃーINSERT発行したれ。
671デフォルトの名無しさん:02/06/24 17:38
西暦を元号に直す関数って存在するでしょうか?
ただし、年データ、日付データはないです。
単純に
2002→平成14年
と直すだけなんですが・・・

YYYYMMDDの場合は簡単にできるんですけどね・・・
どなたかご助言お願いします。
>>671
元号って言い方がおかしい気が・・・。年データが無いとは?
それはおいといて、勝手に月日追加すればいいじゃん。
1989年とかをどうするか考えてね。
671
MsgBox Format(#1/7/89#, "ggge年")
MsgBox Format(#1/8/89#, "ggge年")
674デフォルトの名無しさん:02/06/26 16:56
レポートで、詳細部分の印刷をコントロールしたいのですが・・・
(今やりたいのは、一定数のレコード印刷したら次ページ、という制御)
コードでやるにはどのような記述がほしいでしょうか?
ヒントでもいいのでアドバイス頂けると幸いです。

675デフォルトの名無しさん:02/06/26 17:50
SQLでmdbからレコードを抽出しようとしているんですが、
これまでPostGresでは Limit 10 とやると10件のみレコードが取れたのですが、
mdbではこれが使えないようで、いったいどうやればいいんでしょうか?
ヘルプぐらい読もうぜ…。
677675:02/06/26 18:18
実はhelpが壊れてて読めないんだ。
立ち上げようとすると強制終了。
678デフォルトの名無しさん:02/06/26 20:46
id,日付 というテーブル構成で、たとえば同じidのレコードが
2つ以上あった時
例:
(id) (日付)
3 yyyy/mm/dd hh:mm:ss
3 yyyy/mm/dd hh:mm:ss
3 yyyy/mm/dd hh:mm:ss

この中の一番日付が古いものだけ消して、同じidのレコードを
2つだけにしたい場合はどうしたらいいでしょうか?
>>678
仕様書ぐらいまともに書けんのか ?

> 一番日付が古いものだけ消して
> 同じidのレコードを2つだけにしたい
どっちが優先なんだ ? (つまり、同じ id のレコードが四つあったらどう
すんだ ?)
>>674
改行コントロールのVisibleプロパティと詳細_Formatイベント。

>>677
だったらまず修復する事が先だろ?
681デフォルトの名無しさん:02/06/26 22:05
>675
Top 10
682デフォルトの名無しさん:02/06/27 11:49
レポート上で、数値項目を均等割りで表示しているんですが、0や8などの数値が、
右端で半分切れて表示してしまいます。(8ならεみたいに)
フォントサイズ変えたりしたんですが、どうがんばっても右端だけ切れてしまって困っています。
何か良い方法ないでしょうか?
683デフォルトの名無しさん:02/06/27 12:36
>682
コントロールがぎりぎりの大きさだとかじゃなかったら
右余白プロパティで調整してみたらイイ。
684682:02/06/27 13:25
>>683
レスありがとうです。
コントロール幅を0.2インチ増やして、右余白を0.2インチにしてみました(増やした分を余白にした)
しかしながら、結果は同じです・・・0.01インチぐらいはマシになった程度・・・
均等割り使うと無理なのかな(T−T)

引き続き、情報お待ちしています。

#帳票の都合上インチ単位にしてます。
>>684
文字に変換して前後にスペースを入れてから表示してみては?
686683:02/06/27 17:05
>684
うーむ、こっちではそれなりにダイナミックに右があいたが。
ひょっとして、VBAでセットしてない?twip値になるよ。

あとはプリンタドライバだな。
フォント変えろ。あとイタリック体はやめとけ。
688デフォルトの名無しさん:02/06/28 15:30
質問です。
印刷時に、特殊な紙に印刷するため、用紙サイズをユーザー指定で行いたいのですが、
それができません。
ワードには用紙サイズ指定のところで、「ユーザー定義」という個所がちゃんとあったんですけど・・

ACCESSでそれを行う場合、どうすればよいでしょうか?


ちなみに、用紙サイズは10インチ×7インチです。
689デフォルトの名無しさん:02/06/28 16:34
>688
ページ設定しる!
690デフォルトの名無しさん:02/06/28 16:39
使いたい用紙サイズより大きい用紙を選んで、余白を調整する。
691688:02/06/28 16:52
>>689
ファイル−ページ設定ですよね?
そこにもユーザー定義の設定がないんですよ・・・・

>>690
連続用紙でドットインパクトプリンタで印刷するので、余白で調整という小細工をすると
2ページ以降がズタズタに狂ってきてしまわないでしょうか?
692689:02/06/28 19:44
>691
ファイル−ページ設定−ページに「用紙サイズ」ないか?
オレのAc2kとEpsonのレーザプリンタの組み合わせならユーザ定義サイズが選択できるが。
693689:02/06/28 19:48
ドットプリンタだったのね・・・
>>691
OS、プリンタの種類による
NT系ならコントロールパネル-プリンタサーバーのプロパティ
新しい用紙を作成する
695修正:02/06/28 20:42
>NT系ならコントロールパネル -> プリンタ -> サーバーのプロパティ
696デフォルトの名無しさん:02/06/28 20:53
とりあえず、そのプリンタの機種名教えれ >688
697デフォルトの名無しさん:02/07/01 13:30
休みが入ったのでレスが遅くなりました。

プリンタの機種名は
NEC MultiImpact 700JX
です。

ただ、気になるのは、700JXを使ってる他の人のマシンだと「ユーザー定義」があったりなかったりします。
私のマシンは一応ドライバが最新です。(週末にNECからDLしてきました)


とりあえず、サーバのプロパティを見てみます。


698688:02/07/01 13:31
あ、上のカキコ、わかると思いますが、>688です
699688:02/07/02 09:10
コンパネのプリンタにサーバのプロパティがあったので、10×7インチのサイズを追加してみたんですが、
ACCESS上のページ設定には、追加したはずの10×7インチのサイズがありません(T-T)
方法が悪いのかな・・・・

引き続き情報お待ちしています・・・
700デフォルトの名無しさん:02/07/02 16:20
>>699
追加したサイズのプリンタを選べてないのでは・・・。

ページ設定→ページ→その他のプリンタ→プリンタの設定→プリンタ名で
NEC MultiImpact 700JXを選択すればいいのでは?
701688:02/07/02 17:27
>>700
普段から選んでいます^^;

どうも9x系だとできるという噂を聞いたので、
9x系でやってみることにしますが・・・



心配だ(T-T)
702デフォルトの名無しさん:02/07/02 17:53
703デフォルトの名無しさん:02/07/02 18:12
52
ネコ猫ねこ
705デフォルトの名無しさん:02/07/02 21:18
VBでApp.pathで、そのプログラムのあるディレクトリのフルパスが取得できますよね。
それをAccessVBAでやとうろしても出来ないのです。
AccessVBAでそのアクセスファイルのあるディレクトリは取得できないのでしょうか?
706デフォルトの名無しさん:02/07/03 09:50
>>705
CurrentProject.Pathでフォルダ名、
CurrentDb.NameでMDBのフルパスが取得できます。
>>701
少なくともうちの環境では追加した用紙サイズ使えてる
700JX Windows2000
708705:02/07/03 22:09
>>706
出来ました!ありがとう。
709yuki:02/07/04 01:28
AccessVBAの処理でテーブルにレコード追加するロジックをVBで作成・共通関数化
し、複数mdbよりコールし使用する。こんな処理ってできます?
できるならば、実現方法と参考URLをお教えていただきたいのですが。

よろしくお願いします。
>709
それよかプログラムのみのmdbを一つとデータのみのmdbを複数
用意して、プログラムmdbからリンクを張って使うほうが現実的じゃ
ないかぇ?
>709
出来ないわけが無い。
というか、MSのユニバーサルデータアクセスの概念分かっている?
http://www.microsoft.com/japan/msdn/data/default.asp
712yuki:02/07/04 19:32
>>710,711
ありがとうございます。

≫710
確かにその通りなんですが、VBを使用するロジックをどこかの処理で開発
しなければいけないのです。(上司命令)
VBとアクセスを併用する利点が理解できないのですが…(VBAで良いだろうと言いたい)

≫711
ありがとうございます。じっくりよんでみます。
>>711
なんでユニバーサルデータアクセスがでてくるんだ?
>713
AccessもVBも、すべてのMSプロダクトのDBアクセスは、UDAの上に成り立てっている。
用は、AccessVBAで操作しようとも、VBから操作しようとも結果同じ事が出来る。

>712
VBで処理部をつくってAccess側で呼び出すとなると、VBでコンパイルしてAccessVBAから
オブジェクト呼びするという事だろうから難易度は結構上がるね。

VCだったらDLL形式の関数が作れるから、VCでコンパイルしてAccessVBAでデクレア宣言
すれば外部関数として使える。が、VBでは純粋DLL形式のプログラムは作れないから、VB
でアウトプロセスCOMかインプロセスCOMを作って、Access側からDAOやADOを呼び出す
用に使うしかない。

VBではAccessの共通関数なんか作れないからね。せひCOMで作ろうね!
>715
純粋DLL形式

って??
716デフォルトの名無しさん:02/07/04 23:56
RecordSetを使って、片方のテーブルにあるレコードを
もう片方のテーブルにひとつずつ追加していくコードを作ろうとしています。

 Rs(0).MoveFirst
 Rs(1).MoveFirst

 Do Until Rs(0).EOF

   Rs(0).AddNew

    Rs(0)!ID = Rs(1)!ID
    Rs(0)!Name = Rs(1)!Name
    Rs(0)!NameKana = Rs(1)!NameKana
    Rs(0)!Tel = Rs(1)!Tel
     ・
     ・
     ・
    Rs(0)!Note = Rs(1)!Note

   Rs(0).Update

   Rs(0).MoveNext
   Rs(1).MoveNext

 Loop

Rs(0).AddNewとRs(0).Updateの間の
フィールドをひとつずつ指定する部分を
何とかして省略出来ないものでしょうか?
(Rs(0)とRs(1)のフィールド等は全て同じです)

どなたかご存知でしたら御教授下さい。
717デフォルトの名無しさん:02/07/05 00:04
>>716
for each
718デフォルトの名無しさん:02/07/05 00:05
Accessのデベロッパーってすごいな。
>716
やりたい事はわかるんだが・・・
単純にINSERTじゃイカン理由でもあるのか?

めちゃ遅いよ、それ。
>>719さん

一連の処理の流れ&欲しいデータとしては以下の通りです。

Table1、Table2、Table3がある。
フィールド構成は以下の通り。

 Table1(ID,Name,NameKana,Tel,Sex)
 Table2(ID,Name,NameKana,Tel,Sex)
 Table3(ID,Name,NameKana,Tel,Sex)

 (3つ全て同じフィールド構成です)

 んで、この中に入っているデータは以下の通り。

 [Table1]
 1,Mona,モナー,743,Male
 2,Giko,ギコ,774,Male
 3,Morara,モララー,7743,Male
 4,Shee,シー,74,Female
 5,Fusagiko,フサギコ,07743,Male

 [Table2]
 2,Giko,ギコ,774,Male
 4,Shee,シー,74,Female

 [Table3]
 ,,,,
 (データ無し)

 で、Table1とTable2のIDを比較して、
 2つのテーブルにおいて共通しているレコード
 (この場合だと 2,Giko,ギコ,774,Male と 4,Shee,シー,74,Female)を
 そっくりそのままTable3に追加していって、
 最終的にTable3にはTable1,Table2で共通するレコードのみが保存される、
 と言った感じにしようと思ってます。

このルーチンをRecordSetを使って組み立てるべくコードを作ってみたのですが、
RecordSetだと前述したようにフィールド1つ1つを対にしなければ
いけなかったようで…。

厨房的考えですが、

 Rs(0) = Rs(1)

ぐらいの指定でレコードを追加していけたらなー…
と思ってた次第です(;´Д`)
>720
これは、SQLを勉強して作成して下さい。
1行のSQL文一発で終わります。

>716 のような方法はデータベース素人の処理方法ですよ。
これ業務系のシステムでやったら確実に怒られます。基本的にカーソルを使用する
ような処理法は、どうにもならない場合の最終手段です。
>>721さん

アドバイスありがとうございました。
SQLだと…こんな感じでしょうか。

 INSERT INTO Table3
 SELECT Table1.* FROM Table1 INNER JOIN Table2 On Table1.ID = Table2.ID
 WHERE Table1.ID = Table2.ID
 ORDER BY Table1.ID ASC;

どうもRecordSetの方が扱い易いので
つい使ってしまっていたのですが…
これからは注意したいと思います。

夜遅くまでありがとうございました。
723純粋DLL:02/07/05 01:09
>715
純粋DLLとは、WindowsAPIのように、Declare Function で宣言して使用する事の出来る
DLLとでも言いましょうか・・・。表現できないので御免なさい。(だれか補足して!)

ようは、普通のCやVCで作った簡単なやつです。VBで作るDLLはCOMなんですよ。
>722
Accessでも、更新クエリーか何かでビジュアルにつくれるからこれを利用しましょう。
>720 のようにカーソルを使うと、極端なまでのレスポンス低下を招きます。
>>724
Accessでクエリ作成に慣れると、他dbでSQLが書けなくなる罠。
すげー便利なんだもんなぁ。
>725
安心しろ、SQL鯖にはクエリビルダがあるから(違
MSオフィス付属のMSクエリーが、他のDBサーバーにも使えるぞ!!
現在アクセス2000を使用しております
そこでクエリについてのしつもんですが、
2つクエリをつかって結果をもとめています。
ひとつめのクエリはクロス集計クエリを使用しており
2つ目は選択クエリを使用しています。
そこで一つ目のクロス集計の内容をクエリ2に反映させているわ
けですが、
クエリ2で
「1: IIf(IsNull([クエリ1のクエリ名].[1]),
   0,([クエリ1のクエリ名].[1]))」
上記構文でクエリ1の「1」というフィールドが
NULLの場合は0を配置しております。
そこでそのクエリ1の「1」というフィールドが無い場合も0を既定で配置したいのですが、
なにか良い方法はないのでしょうか?
クエリ1のフィールドは「1」から「10」まであり
クロス集計でその値をもとめています。しかしもしクロス集計で集計でフィールドがある場合はいいのですが、無い場合もあるのです。
そのときの処理をおこないたいのですが・・・・
アドバイスの方宜しくお願いします。
729デフォルトの名無しさん:02/07/05 16:15
>728
クロス集計クエリをデザインビュー開いて、右クリック、プロパティで
列見出しを設定し、フィールドが固定しる!
>>728
>クロス集計クエリをデザインビュー開いて、右クリック、プロパティで
>列見出しを設定し、フィールドが固定しる!
ありがとうございます。
早速やってみたいとおもいます。
ついでにNzも使っとけ
ああ、Nzって便利だよね。
NzってVBにあったけ?
733デフォルトの名無しさん:02/07/05 19:48
>732
ない。けっこー便利だから自前で作るしか。
734デフォルトの名無しさん:02/07/05 22:43
Accessを使えるようになるために、
データベースを学習する必要がある
Accessを学習する必要がある
Accessのマクロ言語VBAを学習する必要がある
大変やな

やっぱりAccessのデベロッパーてすごいな
>>734
我が会社のCOBOLerでも使えてますが何か?
736デフォルトの名無しさん:02/07/06 02:27
教えて!、Access2002になってプリンタの設定関連のやりかた変わった?

レポート印刷前に「プリンタの設定」ダイアログを出す方法について、
Access2000の参考書(Access VBA応用プログラミング と Access2000場面別108こうしたい!)
には

DoCmd.SelectObject acReport, "レポート", True
DoCmd.RunCommand acCmdPrint

で良い・・と書いてあったのですが、、WinXP & Access2002ではうまくいかないようです・・?
(出力先をAcrobat Writerにしていたのですが、、エラーが出て、出力されたPDFを見ると、レポートじゃなくて画面イメージが出力されている)

http://www.microsoft.com/japan/msdn/officedev/officeXP/ODC_acc10_Printers.asp
に何やらむずかしい事が書いてあるのですが・・・
こんな面倒な事をしなくてはならなくなったのですか?
知っている方いましたら教えてください。
>>735
COBOLのデベロッパーてすごいな
Microsoftってさぁ
結局、2000のヘルプがおかしいのも
しょっちゅう「直前の処理はキャンセルされました」
って出るのも直す気ないだろうねぇ。2002だと直ってるのか?
>>738
>しょっちゅう「直前の処理はキャンセルされました」
こんなの出たっけ?
740デフォルトの名無しさん:02/07/11 20:29
>738
2000のヘルプがおかしいってどんな風なの?
おかしくなったことないんだけど。
>>738
MSのヘルプは使いやすい方だと思うけどなぁ。そういう意味じゃなくて?
「直前の〜」って出たこと無いんだけど、元に戻っちゃうの?
742しろ:02/07/12 01:57
738じゃないですが
以前「直前の処理はキャンセルされました」 って出たことあります。
何をしても修復不能で、諦めて97にバージョンダウンしました。

私の場合、ボタンを押してフォームを開くだけの処理で
ボタンを押すと「直前の処理はキャンセルされました」 と言われ
フォームが開けなくなり、どうしようもありませんでした。

ヘルプは2000以上だと検索したりした場合、関係ない語句がヒットしたり、
見つからなかったり、必要な関数がヘルプに無かったりします。
97の方がヘルプの使い勝手はかなり良いです。

マイクロソフトのヘルプデスクに電話した時聞きましたが、マイクロソフト側
でもこの件についての認識はあるようです。
修正する気は無いみたいですが・・・(-_-;)
「直前の・・・」は
ttp://support.microsoft.com/default.aspx?scid=http%3a%2f%2fwww.microsoft.com%2fJAPAN%2fsupport%2fkb%2farticles%2fjp416%2f3%2f57.asp
一日の最後にこれが出て仕事がすべて吹っ飛ぶと泣けてきます

ヘルプのほうは >>527 と同じ
こういうことってできるでしょうか?上手く書けるかどうかも自信無い…
1.フォーム・リストボックスでテーブルからクエリーで選択。
2.選択したレコードをエクセルにエクスポート。
3.その際、.XLSのファイル名を、リストボックスで選んだ項目を使う。
例えば住所録の選択で、リストボックスは都道府県として、
エクスポートするときのファイル名を、
東京都.XLS とか 埼玉県.XLS にしたいのです。
ど素人で済みませんが、どなたかお知恵を貸してください。
>>744
かなり理解に苦しむんだけど、
リストボックスで条件を指定し、その結果を任意のファイル名.xlsとしてエクスポートしたいって事?
それであればクエリオブジェクトを作成とか、Where句に埋め込んだ関数で誤魔化すとかしたモノをエクスポートするだけです。
>743
こっちは問題なく出てくるが。インストールで変なことしたんじゃないのか?
>527ともども。

バージョンが分からんが2000なら、ADO210.CHMがADOのヘルプだが。
747デフォルトの名無しさん:02/07/12 17:44
>直前の〜
ってやつ、自分のマシンでは一度も出たことがないが、客先でしばらく使わせておくと、突然そんな状態になる。
環境依存したバグか?
むしろ使い方の問題。
ACCESS97でクエリについての質問なんだけど、
1 Aのテーブルに個人コードと合計点数フィールド
2 Bのテーブルに個人コードと点数フィールド
このとき、ひとつの更新クエリでBの点数を合計して、Aの合計点数を
更新しようとすると”更新可能なクエリでなければいけません”
というエラーになるんだけど、回避策はありませんか。
 現在は、合計したものを中間のテーブルに一度追加してから更新してます。
しかし、中間テーブルが増えすぎて面倒なのです。
>>750
更新可能なクエリに変える。
>>750
更新クエリが何かまず調べろ。
753デフォルトの名無しさん:02/07/13 13:31
>750
結合プロパティが適切でないか、よけいなフィールドが入ってるとかで
更新される側が一意でないと思われ・・・・。

その更新クエリをSQLビューで表示して、ここにコピペしてみたら。
フィールド名とかは適当に変えて。
754750:02/07/13 23:11
こういうやつです。

テーブルA
個人コード合計
A0010
A0020
A0030

テーブルB
個人コード点数
A001100
A00180
A00190
A002100
A00280
A00290
A003100
A00380
A0030
755750:02/07/13 23:13
上のは失敗。

テーブルA
個人コード 合計
A001 0
A002 0
A003 0

テーブルB
個人コード 点数
A001 100
A001 80
A001 90
A002 100
A002 80
A002 90
A003 100
A003 80
A003 0
756750:02/07/13 23:15
この状態で、Bの点数を合計するクエリ「Q_点数の合計」を作成。
SELECT B.個人コード, Sum(B.点数) AS 点数の合計
FROM B
GROUP BY B.個人コード;

上記のクエリを使って、テーブルAを更新 「エラークエリ」

UPDATE Q_点数の合計 INNER JOIN A ON Q_点数の合計.個人コード = A.個人コード SET A.合計 = [Q_点数の合計].[点数の合計];

こうするとエラーになってしまいます。どうしたらいいでしょうか?
757753:02/07/14 00:26
>756
申し訳ない。勘違いをしてた。1対多のとき1側のフィールドは更新できないんだ。

この場合「Q_点数の合計」で済ませよう。
SELECT A.個人コード, Nz(Sum(B.点数),0) AS 点数の合計
FROM A LEFT JOIN B ON A.個人コード = B.個人コード
GROUP BY A.個人コード;
で、どう?
>747
これだヘルプがコピーされてない SR-1にはしてあるんだけども
あ サーバインストールしてあるけどもサーバ側はSR-1になってないな
サーバインストールしたのってどうやってSR-1にするんでしょう?

>749
そのとおりだとは思うが さてどういう使い方が問題なんだろうか
759デフォルトの名無しさん:02/07/15 11:37
>>756
目的がテーブルAにBの合計を設定って事なら
DELETE * FROM A
でAをクリアした後に
INSERT INTO A(個人コード, 合計)
SELECT B.個人コード, Sum(B.点数) AS 点数合計 FROM B GROUP BY B.個人コード
てなSQLを投げる……のでは駄目?
スマートではないかも知れないけど。
760750:02/07/16 00:27
>757
目的は、Aの合計フィールドを更新することなので
ちょっとちがうっぽい。そのクエリを使って更新しようとしても
エラーになってしまします。
あと気になったのですが、”1対多のとき1側のフィールドは更新できない。”
ってことは、もしかして、集計関数使ってるクエリを元ににして更新できないってことですか?。

>759
私も、750で書いたんだけど、一度中間テーブルに追加して、それから
更新してるんですが、〜中間というテーブルが増えすぎて困ってるのです。
Aのテーブルは、ずっと溜めてくものなのでデリート出来ないです。

ところで、これはACCESS特有のエラーなのですか。
先輩がACCESSのクエリは癖があるって言ってたんですが、
SQLサーバーやオラクルなら可能?
>>760
>集計関数使ってるクエリを元ににして更新できないってことですか?。

ヘルプにそのあたりは書いてある。
エラーメッセージで検索してみたら?
762仕様書無しさん:02/07/16 07:43
ぐっすん ヽ(`Д´)ノ

String のデータと同じ名前のプロシージャを呼ぶには
どうしたらいいのでしょうか。 
763デフォルトの名無しさん:02/07/16 09:32
>762
具体的には?
764753:02/07/16 10:09
>760
ちょっと惑わしてしまったので、サービスだ。次のヘルプを読むといい。

Access97の場合
目次→クエリ→アクションクエリの作成→更新クエリ→トラブルシューティング:更新クエリで
「更新可能なクエリでなければ・・・・・・・」

Access2000の場合
目次→ヘルプ→アクセスのトラブルシューティング→トラブルシューティング:クエリ→トラブルシューティング:更新クエリで
「更新可能なクエリでなければ・・・・・・・」

対応方法が書いてあるよん。
合計フィールドを更新、なんて出来るのかと…
>>760
処理するレコードがそんなに多くなければ、
いっそVBAで回した方が早いかもね。
現在ACCESS2000とVB6.0SP5.0を使用してソフトを作成しております。
アクセスについての質問ですが、クエリでフィールド「1」「2」「3」「4」「5」
があります。このフィールドは全て、数字です。その合計を求めようと、クエリのフィールドに
「トータル: [1]+[2]+[3]+[4]+[5]」というように計算式をいれて、「トータル」
というフィールドに表示させております。その結果はきちんと計算されて合計が「トータル」
フィールドに反映されます。しかしVBで「DataEnvironment」にこのクエリを連結させて、
データレポートで印刷をかけようとしているのですが、計算結果が「0」の場合だけ、
空白になってしまいます。0以外の場合はきちんと反映されております。
クエリの結果はトータルフィールドに「0」と表示されているのですが、「DataEnvironment」→「データレポート」
というようにすれば0が空白になってしまいます。
これを回避する方法はないのでしょうか?アドバイスの方よろしくお願いします。
768デフォルトの名無しさん:02/07/17 16:33
アクセスでテーブルに+記号を表示させてりんくさせるにはどうしたらいいですか?
>>768
リレーションシップの設定をしる!
Access2000でActiveXカレンダーコントロール9.0を使っています。
このコントロールだと1日しか選択することができませんが、複数日選択することは可能でしょうか?
おそらく無理だと思うので、機能的にカレンダコントロール9.0と同じで複数日選択可能なActiveXはないものでしょうか?
2002/7/18,2002/7/19が選択されているのであれば

year:2002
Month:7
day:18,19

などの値を返してくれるとありがたいのですが
771デフォルトの名無しさん:02/07/19 15:53
チョット恥ずかしい質問なんですが、調べてもわからなかったので教えていただけますか?

Set cn = Application.CurrentProject.Connection
Set rs = CreateObject("adodb.recordset")

sql = "select max(契約番号) from 保険契約メイン"
rs.Open sql, cn, 1

それで、契約番号の最大値を引っ張ってきたいのですが
"rs"の後にどのように記述すれば値が取得できるのでしょうか?

このような場合、HELPではどのようなキーワードで検索するべきでしょうか?
条件をつけて抽出したいなら、大抵の場合はSQLで解決。
まんま「最大値」で検索すれば、ナイスな関数がサンプルコード付きで出てくるでしょう。
773ど初心者 771:02/07/19 16:28
SQLでも最大値はもちろんですが他のキーワード検索したのですが・・・

sql = "select max(契約番号) from 保険契約メイン"
rs.Open sql, cn, 1

真では問題なく動きますが、(sMaxNum as string)
"sMaxNum = rs!契約番号"とか色々試行錯誤してますがレコードセットの値が
拾えないんです。どう書けばいいんでしょうか?
Access使ってる人って「Accessで出来る範囲の事」を
把握しないまま突っ走ちゃう人多いな〜。
775ど初心者 771:02/07/19 16:59
RecordSetにデータは渡っているようなので、出来ると思うんですが・・・
どなたかご存じないでしょうか?
sql = "select max(契約番号) AS MAX_NO from 保険契約メイン"
rs![MAX_NO]

って名前を付けるとか、

rs.Fields(0).Value

ってフィールドの序数を指定するとか。
777デフォルトの名無しさん:02/07/19 19:03
>>775
DMaxを使い

DMax("契約番号","保険契約メイン")
778デフォルトの名無しさん:02/07/21 01:39
テーブル内のデータを連結して、一つの長い文字列を作成するには
どのような方法を用いるのが妥当なのでしょうか。
以下のような文字列を作成してファイルに格納するのが目的です。
AAA001 1…
AAA001 2
(データは英数文字で、データ毎に桁数が決まっている
足りない部分はスペースで埋める)

最初は、構造体に格納してその文字列を連結する方法でやろうと
思いました(大きさを定義しておけば、スペースも補完されるし)

ですが、テーブルが一つではなくテーブルごとにプログラムも別なため、
テーブル毎に構造体を定義して格納となるとなると、
あまりいい方法とは思えません。
いい方法ありましたら是非教えてください。よろしくお願いします。
779デフォルトの名無しさん:02/07/21 01:45
>>778
クエリ
780デフォルトの名無しさん:02/07/21 23:38
>>779
クエリでどうするのでしょうか…すいません

それと、データ型によってフォーマットをかける必要が
あるのですが、クエリでもできますか。
781デフォルトの名無しさん:02/07/21 23:39
>780
「エクスポート」で検索しる。
783デフォルトの名無しさん:02/07/24 18:00
マクロで外部ファイル(EXCELファイルとかテキストファイル)
を読み込むようにする方法を伝授して下さい。
784デフォルトの名無しさん:02/07/25 16:52
SQLサーバーに接続して、サーバー上のテーブルを
ローカルにコピーしたいのですがどのようにしたらいいのか
わかりません。

cn.ConnectionString = "Provider=SQLOLEDB;" _
& "Data Source=******;" _
& "User ID=*****;" _
& "Password=******"
cn.Open

'table作成のSQL
sql = "SELECT * INTO コピー FROM マスター"

'接続
'クエリ実行
com.ActiveConnection = cn
MsgBox "接続確認"

com.CommandText = sql
com.Execute
Set cn = Nothing

のようにすると、サーバー上にテーブルが作成
されてしまいます。
助けて・・・・
>784
サーバにConnectionしてるんだからサーバにテーブルが作成されるのは当然でわ。
てか、ローカルにコピーってどういう意味?
ローカルマシンのSQLServer?
ローカルマシンのAccess?
質問続きで申し訳ございません。

関数を自作するとき、DLookUp関数のcriteria値のように
ある引数の値を省略可能なように設定したいのですが、
どのような宣言を行えば良いのでしょうか?

例)

Sub AddNewRecord(Name As String, Age As Integer, AddDate As Date)

 ↑AddDateを省略可能にしたい。

>>784

コピー先の場所(ローカル)を示す部分が無いような…と言ってみるテスト(;´Д`)ノ
Optionalで宣言してくだちぃ。
788デフォルトの名無しさん:02/07/25 18:32
>>787さんどもです。

  ○ Sub AddNewRecord(Name As String, Age As Integer, Optional AddDate As Date)

で、この際と言っては何なのですがもう一点。

  × Sub AddNewRecord(Name As String,Optional AddDate As Date, Age As Integer)

Optionalを付加する引数は最後にまとめて指定しないとだめなのでしょうか?
プログラミングの都合上少し勝手の悪い部分が出てきてしまうのですが…。
789784:02/07/26 00:07
>>785
すいません、ローカルマシンのアクセスDBにSQLサーバー上の
テーブルをちょうどテーブルのインポートみたいにもってきたいんです。
>789
一番簡単なのは、ローカルのMDBからSQLServerにリンクをはっておくやり方かな。
そうすりゃ見た目上は全てMDBだから、好きに料理できる。
791784:02/07/26 12:17
>>790
VBAでどうするか検討つかなかったのでとりあえず
MDBからリンクを張っておきました

ありがとうございました
792デフォルトの名無しさん:02/07/28 00:35
D系関数をつかわずにsql使えっていうのは、
x = DSum("hoge","test")

rs.Open "SELECT Sum(hoge) AS sum_of_hoge FROM test;", CurrentProject.Connection
x = rs!sum_of_hoge
に置き換えろということでよろしいんでしょうか?
っていうかなんでD系関数は嫌われてるんですか?
D系関数も内部ではSQLに置き換えられてるのにねえ。
>>792
SQL文もしくはクエリ内でD系関数を使うとパフォーマンスが悪くなる。
795788:02/07/29 11:54
すいまそん誰か>>788を…(;´Д`)ノ
って出来ないっぽいですが。
>>795
意図してること(言っている意味)がわからないから流されてるんじゃないかと。
797しろ:02/07/29 14:41
>795
Optionalは、後ろにまとめないと駄目です。
798788:02/07/29 14:47
>>796
そう言えば少し?な文章かも。
了承(´ω`)

>>797
御教授どもです。
以後注意しま。
799デフォルトの名無しさん:02/07/30 22:55
false
DAO
ADO
Docmd

恥ずかしながら読み方を教えてください
false → ふぁーる
DAO → だお
ADO → あど
Docmd → ドキュモ
801799:02/07/30 23:23
>>800
うけたYO!!<ふぁーる
802デフォルトの名無しさん:02/07/30 23:41
Accessでテキスト編集フォームを作るには普通どうするのでしょうか。
テキストボックスを広げただけではうまくいきませんでした。
スペースがあると行末まで行かないうちに勝手に行送りされてしまいます。
Access97です
他の人が作ったものの内容確認をしているのですが、わからない所があります。
実行時に右クリックするとポップアップメニューを表示するテキストボックスがあります。
このメニューを編集したいのですが編集画面の表示のしかたがわかりません。
デザイン時にそのテキストボックスのショートカットメニューバープロパティを見ると
ポップアップ表示されるメニュー名が設定されているのですが、ここでは既に作成されたメニューの選択しかできません。
コード内をそのメニュー名で検索しても、メニュー項目を編集してるようなコードは見つかりません。
その他色々いじってみたのですがどうにも見つかりません。
どなたか教えて下さい。よろしくお願いします。
>>803
ツール - ユーザー設定 - プロパティ
[選択したツールバー]コンボボックスの中から編集するメニュー名選択
一度、種類をツールバーにしておいて編集
編集終わったら種類をポップアップに戻しとく
2002だけどだいたい一緒のはず
805803:02/07/31 09:16
>>804
できました!ありがとうございます!
806デフォルトの名無しさん:02/07/31 09:46
親フォームのレコード移動前に子フォームの内容をチェックしたいんですが、
こういう場合って、レコード移動ボタンを自作する以外に何か方法あるんでしょうか?
807デフォルトの名無しさん:02/07/31 10:55
>>806
フォームのプロパティ - イベント
[ダーティー時] を利用すればよいのでわ?
808デフォルトの名無しさん:02/07/31 11:29
Accessで作ったファイルの中身を見る
フリーのソフトってないですか?
>>808
マルチうざい
>>807
子フォームの内容を変更したときは親フォームの
ダーティーイベントは発生しないような気がするのですが、気のせいですか?
>>810
子フォームのダーティーイベントで
親フォームのダーティーイベントを呼び出せばいいだけじゃないのか?
812デフォルトの名無しさん :02/07/31 16:27
false → フェールス
DAO → ディーエーオー
ADO → エーディーオー
Docmd → ドゥーコマンド
false → フォルス
DAO → ディーエーオー
ADO → アーディーオー
Docmd → ドゥーオマンコ
>>812-813
おもろないネタは適当に切り上げてくだちい。

> Docmd → ドゥーオマンコ
 こういうのどんな顔して書き込んでんのか見てみたい。
 つぅか、オツムの出来は幼児並み?
>>814
それより、その臭い口を早く閉じてくれないか
真っ赤な顔して本人登場(w
多分打ち間違いだろう
818デフォルトの名無しさん:02/07/31 17:53
813の分析

おげれつギャグを発信する心理とは、
本人が、そのネタが思ってやっていることがあります。
どうして、面白いと思うのか。
自分がすでに「おげれつ病」となっているからです。
自分が病気の場合、その菌を他人に及ぼすことで、
自分の病気を治そうとしている深層心理があるのです。
それを隠すため、「面白い」と思うことになっているのです。
しかし、そうしたことをしても病気は治りません。
813のような症状を治すには、病院でも無理です。
では、813は、どうして病気になったのでしょうか。
こういったことはカウンセリングによって明らかになる場合もありますが、
普通のカウンセリングでは無理です。
しかし、一般的に原因は明白です。
それは、「エロ情報の過度な取得」です。
それによって、エロ情報からの世界に、
常に自分が入ってるような精神となります。
人が、感覚神経を通じて得た情報は、人の精神に影響を及ぼします。
その情報を、精神で判断し、拒否する場合と受け入れる場合があります。
813は、エロ情報を、受け入れすぎたタイプです。
その結果、精神がおげれつエロ的に洗脳され、ハタから見ると病気ですが、
本人には、自覚がありません。
では、813は、どうしてエロ情報を受け入れてしまったのでしょうか。
それは、一言でいえば、「ヴァカだから」です。
物事を知らなすぎるのです。
こういった人は、813だけではありません。
では、813のような病気を治すには、どうしたらいいのでしょうか。
それは、今まで自分が、受け入れてきたおげれつ洗脳を、解かなくてはなりません。
が、しかし、人間は主体性を持った存在ですので、
自分でおげれつ情報を受け入れたことは、自分の責任です。よって、
819デフォルトの名無しさん:02/07/31 17:58
すでにデータが書き込まれたテーブルの
あるフィールドに、連番の番号を振りたいのですが、
こういうのってsqlではできないんでしょうか?
820結論:02/07/31 17:59
813=不治の病

          完
821デフォルトの名無しさん:02/07/31 18:56
>>819
sqlだけでは出来ないでう
連番の番号順にレコードを並べさせるsqlを組んで、
それに対して順次番号を記録していくプログラムでも組むのがよいかと。
>>821
カーソル使えばsqlだけでいいんじゃないの?
>>807
ダーティーイベントが発生するのはレコード移動時じゃなくて
レコードの内容を編集したとき。
>>819
mdbならmsのサイトにやり方のってる。
public関数でpublic変数に1ずつ足してって
クエリで並べ替えてそのままフィールドに関数入れるやつ
あまりお勧めしない。
>>807
勘違いしてるな。
[ダーティー時] はレコード編集時に1度だけ発生するイベント。
これはレコードに手を加えた瞬間に発生するイベントであり、
レコード移動時に発生するイベントでは無い。

>>806
レコード移動時にイベントを発生させるなら、
[レコード移動時] や [更新前処理](更新のキャンセルが可)なんかを使おう。
レコード移動時はレコードが移動した後に発生する。
また、更新前処理は子フォームの更新を察知できない。

よって、806の言っているとおり、自分でボタンを作るしか方法はないと思われ。
OutLook風のメニューバーを使いたいのですがどのようにすればよろしいでしょうか?
>>827
自分で作る、っつかOutLook風だけじゃわからん。せめてバージョン書け。
でもメアドは藁タ

>>826
子フォームと親フォーム、別々に更新前処理を用意しとけばいいんとちゃう?
同じ処理をさせたいなら、両方で同一の Public Sub を Call する。
>>826
どんなにがんばってもメニューバーにある
レコード削除ボタンや、レコード挿入ボタン、並べ替えボタンなどは
消すことができないという罠
ひょっとしてなにか方法ある?
830デフォルトの名無しさん:02/08/03 02:08
>>829
起動時の設定では?
propertyの表示などで使われているfontを他のfontにしたいんだけど、
どうすればいいの?
何でお前等そこまで無理してAccess使ってるの?
そこにAccessの仕事があるからさ。
いやマヂで。
834デフォルトの名無しさん:02/08/06 00:31
エクセルでは仕事にならん
ソフト屋に頼む金もないし・・・
>>831
それよりクエリビルダのフォント等幅にしたいんだけど
どうすればいいの?
836831:02/08/06 08:51
>>835
それも知りたいす。
システムが使っているフォントは、この手の作業には向いてないと思う。
レポートを開く際に見出し行をセットしたいです
テキストボックスが
text_TITLE1〜text_TITLE20
まであるんですが
モジュール内で動的に制御するにはどうすればいいんでしょうか?

W_Cnt = 1 To 20
Me.text_TITLE & W_Cnt = text_タイトル(Next W_Cnt)
W_RS.MoveNext
Next W_Cnt

イメージとしてはこのようにしたいです
ご教授ください


>>837
ようわからん。

text_タイトル() って配列変数?
っつか、 text_タイトル(Next W_Cnt) の中に何故 Next が?
W_RS は何に使ってるレコードセットっすか?

貴方のイメージがさっぱり理解できません
ご教授ください
839838:02/08/07 10:42
>>837
ひょっとしたら、こういうコトか?

For W_Cnt = 1 To 20
Me("text_TITLE" & W_Cnt) = W_RS!text_タイトル
W_RS.MoveNext
Next W_Cnt
840けいこ:02/08/13 21:52
テキストボックスの定型入力で、「 0000/00/00;0;_ 」にしてるんですけど
定型じゃないのを入力した時に出る
一般ユーザに不親切なエラーメッセージ
『定型入力「 0000/00/00;0;_ 」に違反しています』(?)みたいなのを何とかしたいんですけど。
どうにかプログラマー以外にもわかるようなエラーメッセージに変える方法はないでしょうか?

とにかくアクセスが勝手に出すエラーメッセージがウザいです。
>>840
SetWarningsメソッドでエラーメッセージ抑制できるんじゃなかった?

それやっちゃった場合、定型入力のエラートラップを自前でしなきゃ
ならんわけだが・・・どうやるかは知らない・・・
>>840 つうかエラーになる入力ってどうやってんだ?
843けいこ:02/08/13 23:06
>>841
勉強してやってみますね。
ありがとうございます。

>>842
例えば「2002/40/56」見たいに
あり得ない日付を入れるとか、
「2002/_4/_6」みたいにゼロを省くとか。
(「 0000/00/00;0;_ 」の場合)
844けいこ:02/08/13 23:08
ユーザさんが使うにあたって
開発者向けのエラーメッセージでは困るわけです。
>>840
テキストボックスのプロパティ「定型入力」の下に「エラーメッセージ」ってのがあるんだが…。
>>845 貴方、鋭い!
847けいこ:02/08/14 00:59
>>845
もちろんそれも試したはずなんだけど
どうしてもプロパティでもコード発でもないエラーメッセージが優先されて出ちゃうの。
848けいこ:02/08/14 01:00
ちなみにAccessは2000を使ってます。
>>845
鋭いと思ったけど、そいつは入力規則に対するエラーメッセージのようだ
ValidationRule/入力規則 のための ValidationText/エラーメッセージ
>>840
ここにあった 05980番から
ttp://www.users.gr.jp/ml/archive/access/Access59.asp
851けいこ:02/08/14 02:22
>>850
ありがとう!
さっそくやってみます!
852けいこ:02/08/14 20:20
うまくいかなかった…。
未入力の部分がどうにもこうにも…。
うわぁVBAだよ、やってるねぇ・・・
VBA.NETでもやれそう?
854デフォルトの名無しさん:02/08/16 11:01
テーブルをEXCELにエクスポートするコードを作りたいのですが、
いまいちよく分かりません。
そのまま出力ではなく、SQLでいうWHERE句を付加して条件付けしたいのですが・・
(たとえば、コードが0001のデータのみEXCELに出力とか)

詳しいかた、ご教授願います。
>>854
QueryDefsとTransferSpreadsheetを調べてみな
Excel(xls)ファイルにデータ書き出すコードくらい書けるようになるだろう

”ロジックがわからないから教えてくれ”ってのは無しな
それくらい考える力がないんだったら諦めれ
856デフォルトの名無しさん:02/08/16 15:55
>>855
OKです。ありがとうございます。

結局、OpenFormみたいに条件設定できる項目がなく、それで
困っていただけだったので。

QueryDefsを使えばよかったのか・・・


ご協力ありがとうございました。
857デフォルトの名無しさん:02/08/18 22:39
>>843
エラー処理はBeforeUpdateイベントが使えますよ(つか基本か)
更新前処理ってやつ。

cancel=true
とすると任意のメッセージを表示して
正しい入力を促すなどの処理が出来ます。

>>856
オレはデータだけが必要なときは
CSVでエクスポートをよく使います

あとExcelでDAOなりADOなりでmdbに
接続して指定したセルに値をセットなど・・・
この場合、他のAccessを知らない人でも
毎月の資料作成などが出来て楽チンです(月指定→実行ボタンクリック→終)

話がそれてすまん。
858857:02/08/18 22:44
>cancel=true
>とすると任意のメッセージを表示して
>正しい入力を促すなどの処理が出来ます。

↑間違い

↓訂正

更新前に確認処理を行い
誤りがあれば任意のメッセージなどで
正しい入力を促すなどの処理が出来ます

cancel=trueとすると
更新をキャンセル出来ます。

859デフォルトの名無しさん:02/08/20 12:25
>>857-858
定型入力プロパティ 0000/00/00;0;_ 書式プロパティ 日付 (S)
と設定してあると、BeforeUpdate/更新前処理イベントでトラップ
する前に、システムの入力チェックが優先される。

ゆえにシステムの入力チェックを抑制して自前の入力チェック処理を
どうやって発動させればよいのか? って話なのだが?

定型入力プロパティを有効にした上での相談なので
「定型入力を止める」はNGワード。それを踏まえた上で妙案ある?
>>859
定型入力プロパティはそのまま、書式プロパティの方をやめ。
イベントの「更新前処理」で、自前で確認用のロジックを組めばよひ。

Private Sub テキスト0_BeforeUpdate(Cancel As Integer)
If Not IsDate(Me!テキスト0) Then
MsgBox "正しい日付を入力して下さい。", vbExclamation
Cancel = True
End If
End Sub
>819 亀レスごめん。連番の件だけど、いい方法思いついた

myt は連番を付けたいテーブルで uni は主キー n が付ける予定の連番
create table myt (uni text(6) not null primary key, n int);

1.連番だけのテーブルを作る
create table x (n autoincrement primary key, uni text(6));

2. x に myt の uni を挿入して連番を自動生成させる
insert into x select myt.uni from myt order by myt.uni;

3. myt の n を x の n で更新する
update myt inner join x on myt.uni = x.uni set myt.n = x.n;

ウザクテスマソ
>>860
それは>>843に示してあるパターン
1.YYYY/MM/DD 2002/08/32
2.YYYY/_M/_D 2002/_8/_1
のうち、1.には対応しているけど2.のパターンでは更新前処理イベントより
システムに先に拾われて>>840で挙げているエラーメッセージが出てくる

一見解決したように思えるけど、1.のパターンは定型入力プロパティには
違反していないのでイベントのユーザ定義の処理で拾えるのよ
本命は2.のパターン、定型入力プロパティに対する違反が発生したときに
どうやってシステムより先に検知して処理しようかってことなのだが?
863デフォルトの名無しさん:02/08/21 14:53
問題の解決にはならないのだけど、>>844 ということなら
カレンダーコントロールでも使ってエラーの出る余地の無い入力させるとか。
864デフォルトの名無しさん:02/08/21 15:11
質問さして下さい。

  TEAM_INFO
  -----------------
  2CH-AA-001-OMAEMONA
  AMEZOU-AA-001-GIKO
  2CH-AA-002-MORARA

上のようなデータを引数として渡し、

  TEAM_INFO
  -----------------
  2CH-AA-001
  AMEZOU-AA-001
  2CH-AA-002

のように最後のハイフンと単語を消去したものを
Strings型で返す関数を作ろうと思ってるんですが、
どんな風に組んだら良いのかわからんのでゴワス。

Replace関数とRight関数を駆使して
なんとかしようとは考えているのですが、
もしそれより効率の良いパターンがあればぜひ知りたいです。

宜しくお願い致します(;´Д`)_ アヒー
865デフォルトの名無しさん:02/08/21 15:43
今コモンダイアログつかってるんですが、
VBA内でCommondialog.FileNameオプションに値をセットできません。
必ずエラー番号438が出てしまいます(サポートしていないというやつ)
型が間違ってるのかなと思いCstrでキャストかけても同じです。
同じような症状発生した方はいらっしゃいますか?

ちなみにコモンダイアログのバージョンは6.0(SP3)です。

それからもう一つ。
同じくコモンダイアログつかった場合、キャンセル処理は
エラーコードを拾わないとできないんでしょうか?
(普通のMSGBOXのvbOkやvbCancelみたくifで判断したいのですが・・)

以上、よろしくお願い致します。
文字列の後端から1文字づつ調べていって、ハイフンが見つかった時点で
それより前の文字列を返す、でいいんじゃないかい?
867864:02/08/21 15:55
>>866
1文字ずつでなくても何とかなったっぽいです。

  Function PassTrimed(tgtStr As String) As String

    Dim StrLeng As Integer
    Dim StrTgtPoint As Integer

    StrLeng = Len(tgtStr)
    StrTgtPoint = InStrRev(tgtStr, "-", , vbTextCompare)

    PassTrimed = Left(tgtStr, StrTgtPoint - 1)

  End Function

これより短くは…むりですかね(´ω`)
アドバイスどもっした。
868860:02/08/21 15:57
>>862
それは「定型入力プロパティ」の記述が違ってるだけだろ。
空白を許可するなら、普通は
0000/00/00;0;_
じゃなくて、
9999/99/99;0;_
にするだろが。

ついでに「更新後処理」で
Me!テキスト0 = CDate(Me!テキスト0)
とかやらせときゃ、もう完璧。
>>868
空白を許可しないなら間違いじゃないんだよ。
それを踏まえたうえで「どうしようか?」って話なのに。
自分の都合で勝手に条件を変えるなよ

自分の考えを強引に押し通そうとするのは勝手だけどさ
抜けのあるものを完璧なんて言ってくれるな
870860:02/08/21 20:22
>>869
要は「2002/_8/_5」なんかも「2002/08/05」と入力させたいワケね。

Private Sub テキスト0_BeforeUpdate(Cancel As Integer)
  If IsNull(Me!テキスト0) Then Exit Sub

  Dim p年 As String: p年 = Left(Me!テキスト0, 4)
  Dim p月 As String: p月 = Mid(Me!テキスト0, 6, 2)
  Dim p日 As String: p日 = Right(Me!テキスト0, 2)

  If (Not IsNumeric("0" & p年 & "0")) Or (Not IsDate(p年 & "/01/01")) Then
    MsgBox "年指定が不適切です。", vbExclamation
    Cancel = True: Exit Sub
  End If
  If (Not IsNumeric("0" & p月 & "0")) Or (Not IsDate("1900/" & p月 & "/01")) Then
    MsgBox "月指定が不適切です。", vbExclamation
    Cancel = True: Exit Sub
  End If
  If (Not IsNumeric("0" & p年 & "0")) Or (Not IsDate("1900/01/" & p日)) Then
    MsgBox "日指定が不適切です。", vbExclamation
    Cancel = True: Exit Sub
  End If
End Sub
871860:02/08/21 20:45
>>870
やばいな。これだと無条件で31日が許可される。
ま、こういった感じって事で、後は適当に考えて。
ちなみに定型入力は「9999/99/99;0;_」を使います。
872860:02/08/21 20:54
閏年も考えると余計に面倒だな。

If (Not IsNumeric("0" & p年 & "0")) Or (Not IsDate(p年 & "/01/01")) Then
  MsgBox "年指定が不適切です。", vbExclamation
  Cancel = True: Exit Sub
End If
If (Not IsNumeric("0" & p月 & "0")) Or (Not IsDate(p年 & "/" & p月 & "/01")) Then
  MsgBox "月指定が不適切です。", vbExclamation
  Cancel = True: Exit Sub
End If
If (Not IsNumeric("0" & p年 & "0")) Or (Not IsDate(p年 & "/" & p月 & "/" & p日)) Then
  MsgBox "日指定が不適切です。", vbExclamation
  Cancel = True: Exit Sub
End If

こうすればいいだけか。長レスすまそ。
>>870>>872
なんか日指定のIsNumericが p年 になってる(w
現在ACCESS2000を使用しております。
そこでクエリをしているのですが、たとえば
テーブル名:「社員」
社員コード  社員名
000001 TAKADA
00000A MORI
00000Z NAKAMURA
101010 IKEDA
とあり、クエリの抽出条件で
「Like "*A"」と指定すれば
社員コード  社員名
00000A MORI
上記の一件のみ抽出するというクエリを作成しております。
そこで「"*A"」をパラメータにして「"*Z"」や「"10*"」
のようにユニークに変化させることでユーザー指定による抽出を
可能にしているのですが、そこで「Like "*A"」自体をパラメータには
できないのでしょうか?
結局は「Not Like "*A"」などといった命令をつかいたいのです。
だからパラメータで渡してあげれないかなぁーとおもい投稿致しました。
抽出条件自体をパラメータにして、そこ変数をテキスト型でパラメータ指定して、
そのクエリを実行すると、パラメータを聞いてきますよね。そこに「Not Like "*A"」や
「Like "*A"」を入力しても、結果が反映されません。
やはりそのようなことは無理なのでしょうか?
ご教授おねがいします。
パラメータを設定するときに
Like [なんか条件入れやがれ]
みたいにすればいいじゃないか
876(´ω`)864:02/08/22 13:02
クエリだと値しか取得出来なかったような気がしまうs
VBAだと分かるんですが…申し訳ない。

<変更前>

Dim ParamVal As String
ParamVal = "*A"

DoCmd.RunSQL ("SELECT TBL.* FROM 社員 AS TBL " & _
"WHERE TBL.社員コード LIKE '" & ParamVal & ";)

<変更後>

Dim ParamVal As String
ParamVal = "Like *A"

DoCmd.RunSQL ("SELECT TBL.* FROM 社員 AS TBL " & _
"WHERE TBL.社員コード '" & ParamVal & ";)

これだと

 LIKE 'A*'
 = '00000A'
 LIKE '*A' OR '*Z'

みたいな感じで値も渡せるかなーと。
877(´ω`)864:02/08/22 13:05
ちょびっと間違ってました。スンマセソ

<変更前>

Dim ParamVal As String
ParamVal = "*A"

DoCmd.RunSQL ("SELECT TBL.* FROM 社員 AS TBL WHERE TBL.社員コード LIKE '" & ParamVal & "' ;")

<変更後>

Dim ParamVal As String
ParamVal = "Like *A"

DoCmd.RunSQL ("SELECT TBL.* FROM 社員 AS TBL WHERE TBL.社員コード '" & ParamVal & "' ;")
  ▲
/・。・\   <おつかれ。)
|.NNNNN.|
| |   | |
○| | |○
  口口

  ▲
/・。・\   <おつかれ。)
|.NNNNN.|
| |   | |
○| / |○
  口口
>875
>876
ありがとうございます。
ちなみにいまは、条件指定を「Like "*" & [パラメータ]」
として、フォーム上からパラメータを「A」や「10」
などと指定しております。
ここの条件指定を「Like [パラメータ]」として、
パラメータに「*A」や「*10」「10*」といった風に様々な条件指定
をしたいのですが、結果がかえってきません。
ちなみにパラメータは「テキスト型」で指定しております。
クエリ単体でしますときちんとかえってきます。
フォーム上での指定は
「パラメータ="*A"」または「パラメータ="*10"」「パラメータ="10*"」
のように指定してやってます。やはりパラメータがテキスト型だから「*」
もテキストの条件になってしまうとおもうんですよ。だからそこの対応はどのように
すればいいのかアドバイスの方ヨロシクおねがいします。

880VBA厨房:02/08/23 13:09
VBAでコードを一行で書くのってどうしたらいいの?
ど忘れしてしまった。

(例)
If rs.RecordCount = 0 Then
  MsgBox "DBにデータがありません"
End If

こういうコードを一行で書きたい。
だれか助けて
>>880
ヘルプ読めや。
882デフォルトの名無しさん:02/08/23 14:09
If rs.BOF and rs.EOF then MsgBox "少しは頭使え"
883VBA厨房:02/08/23 14:59
":"だということがわかりました。
つかれた
>VBA厨房
20年前のASCII、I/O を読ませたい。
885ななし:02/08/23 16:10
>>880-882

可読性、保守性ともに劣悪。
1行で記述するメリットは皆無に近い。
(あえて言えば、ループ内の処理速度が気になる場合くらいだろうか)
ああもうRecordCountに-1が帰るなんて反則だろうがコンチクショウ!!
887ななし:02/08/23 16:42
>>886
ヘルプに書いてあります。
リンクテーブルの場合(以下、略)

件数を拾う場合は、SQLの集計関数(Count)を使うべし。
>887
いやね、仕様だってのはわかるんだが、そういう仕様自体が
おかしいんじゃないかと思うわけですよ。
じゃぁ、アメリカで裁判でもやってこい。
890デフォルトの名無しさん:02/08/25 00:51

2001 年 12 月に実施されました、Access Conference 2001 の模様
を Microsoft Producer for PowerPoint? 2002 で編集し、臨場感あ
ふれるコンテンツとして提供します。

http://www.microsoft.com/japan/office/access/acconf/
891デフォルトの名無しさん:02/08/25 13:17
AC95,Win98/2000,AToK14なんですが、カナ入力で漢字変換モードONのテキストボックスに
setfocusするとカナ入力にならず一度そのテキストボックスから出てまた戻るとかな入力になる
ってのはFAQですか?
892デフォルトの名無しさん:02/08/25 19:42
IISとACCESSでLAN内で使用するWEBDBを作ってるんだけど
どこかオススメの解説ホ−ムページないですか?

一応、もう動くんだけど参考にしてるとこがあったら教えてチョ。
>889
そのテがあったか!!さっそく行ってくるよーん。めざせブロコビィッチ
894デフォルトの名無しさん:02/08/26 21:11
質問があります。
(例)
Do Until rs.EOF
Debug.Print rs!依頼番号, rs!申込種別

sql = "insert into T_Master " _
& "(依頼番号, 申込種別) " _
& "values (rs![依頼番号], rs![申込種別]);"

'Debug.Print sql
com.ActiveConnection = cn
com.CommandText = sql
com.Execute

rs.MoveNext
Loop


のようなコードだと、SQL文が
insert into T_Master (依頼番号, 申込種別) values (rs![依頼番号], rs![申込種別]);
のようになってcom.executeの部分で”1つ以上の必要なパラメーターが
入力されていない”というエラーがでるんですが、
values()の中は直接フィールドに入れる値を書かないといけないんですか?
追加先のT_Masterテーブルに[住所]というフィールドがあったら

rs![県名] & rs![市町村名] のようにしてレコードセットの
データを加工して[住所]のフィールドに入れたいとか思ってたんで
すけど、できないのでしょうか?
SQL文を解析するのは誰かを考えてやれ

sql = "insert into T_Master " _
& "(依頼番号, 申込種別) " _
& "values ( '" & rs![依頼番号] "' , '" & rs![申込種別]) & "';"

見づらいけどシングルクォーテーションも忘れずに
896894:02/08/27 09:43
>>895
ありがとうございました。
シングルクォーテーション忘れてました。地獄に仏!

SQL文最後の行は
& "values('" & rs![依頼番号] & "' , '" & rs![申込種別] & "');"
に変えてみたらうまくいきました。
897FIGHT:02/08/27 10:16
現在VB6.0&ACCESS200を使用してプログラムを作成しているのですが、
質問させてください。
DataEnvironmentを使用してCOMMAND1というコマンドを追加しております。
そのCOMMAND1にはACCESSのクエリを割り付けております。
そこでそのクエリに対してパラメータを受け渡しております。
しかしLIKE演算子がわたせません。
クエリ単体で、そのパラメータを指定すれば結果がかえってきます。
例)like "*" & [PARAM]
上記の抽出条件があるクエリを単体で実行すると「PARAM」を入力させる
プロンプトがでてきて「科目」と入力すると結果は「数学科目」、「国語科目」
といったように後ろに「科目」がつく条件を抽出してくれます。
しかし、それをDataEnvironmentからCOMMAND1を介して、パラメータをわたすと(同じように「科目」)結果は0件になります。
ちなみにLIKE演算子以外はきちんとひろってきます。
例)[PARAM]
としてパラメータに「国語科目」と渡すと、結果は「国語科目」のみ抽出してくれます。
DataEnvironmentからCOMMAND1ではLIKE演算子は使用できないのでしょうか?
アドバイスの方ヨロシクお願いします。

898デフォルトの名無しさん:02/08/28 10:19
単純な質問で申し訳ありませんが教えてください。

いきなり各種ウィザード(ボタンを配置した時や、サブフォームを配置した時)が
出なくなってしまいました。
おそらく気が付かぬうちにどこかの設定を変えてしまったと思いますが・・・
今までまったく気にしなかった個所なので、どこを直せばいいかさっぱりです。
どこを直せばいいでしょうか?
>898
表示でツールボックスをクリック(表示)し
魔法の杖をクリック
900魔王ハルトン:02/08/28 11:14
>>897
パラメータで演算子なんか渡せねーっつーのに。
何か勘違いしてる。あのクエリーのハコに書けるものが
「パラメータ」で渡せるわけじゃないぞ。
901FIGHT:02/08/28 13:40
魔王ハルトン様、ご教授ありがとうございます。
そうですか、やはり無理なのですね。
また別の方法で今回の問題をクリアしたいとおもいます。
902898:02/08/28 15:35
>>899
OKです。ありがとうございました。
903poor:02/08/28 23:58
>>900
あんたVB知らないだったら
わけわかんないこと書くなよナー。

DataEnvironmentからCOMMAND1でLIKE演算子は
使えるんだからよ。
>>903
まぁまぁ、VBのことをこのスレで聞くのがそもそもの間違いだろ

ところで>>897見て「デジャブ?」と思ってしまった
質問内容が>>874-879になんとなく似てるんだよな
同一人物じゃないよねぇ〜
905デフォルトの名無しさん:02/08/29 12:37
主キーがないSQL鯖のテーブルへリンクしているリンクテーブルがあります。
リンクテーブル作成時、レコードを一意に判別するフィールドとして○×コードを選択しました。
TableDefの中身を調べたら、○×コードがIndexとして設定されていました.
この時点では、Accessからテーブルを開いてデータを編集することが出来ます。

さて、とある処理の途中でこのリンクテーブルをRefreshLinkすると、上記の設定が消えてしまい
テーブル自体が読取専用になってしまいます。
RefreshLinkの前にIndexをAppendしようとしても、「ODBCリンクテーブルにIndexを作成することは
出来ないというメッセージが出ます。」

これを回避する方法ってないでしょうか?
906905:02/08/29 12:39
SQL鯖のテーブルに主キーを設定すれば一発で解決する事は確認できています。
ただ、このリンクテーブルの主キーに関する疑問だけは解決しておきたいので、
ご存知の方教えてプリーズ
>>905 オレも困ってる
「固有レコードの識別子の選択」のダイアログに相当する
メソッドが TableDef オブジェクトには存在しないだね
自然に考えると TableDef オブジェクトでいいはずだのに
どこか違うオブジェクトの持ち物らしい。どれかはまだ判らないだよ(ゴメソ
908905:02/08/30 11:18
>905
そそ。一生懸命Tabledefの中身を調べてるんですけどそれっぽいのが無いんですよね...
909907:02/08/30 15:19
>>905 わかったです
「固有レコードの識別子の選択」で主キーが生成されているそうです
RefreshLinkメソッドで主キーは飛ぶみたいです
だので、RefreshLinkメソッドの次に↓を実行すると

CurrentDb.TableDefs("x").RefreshLink
CurrentDb.Execute "create index PK_uni on x(uni) with primary"

リンクテーブルが編集可能になります。なんだSQL文ぢゃんか?
オレもそう思ったです。TableDefオブジェクトに主キーを
作るメソッドなんざありませんからSQL文でやるそうです

余談だすが、テーブルのインポートと違い、リンクテーブルを作った時点では
primary key制約の適用を受けないみたいです。だので、一意性を
失っていようとcreate indexは成功します。その代わり
何件かがみ〜んな同じレコードに見え、編集不能になります
910905:02/08/30 18:44
おおぉなるほど。SQLで設定するのか。
盲点だった...

おかげさまで無事に解決できました。
ありがとうございます。
911デフォルトの名無しさん:02/09/01 09:48
値リストに項目を追加する方法ですが、
Access2002(XP)なら
  リスト名.AddItem ("加えたい項目")
で追加出来ますが、Access2000やAccess97では
どうやればいいんでしょうか?
912地球マーク:02/09/01 09:55
Access2000のデータ-で地球マークを普通のにしたいんだけど
方法教えてケレや
>912
インポートしたいって事か?
914地球マーク:02/09/01 12:59
>913
SQLにあるやつをODBCでインポして見てるけど、
ローカルの端末に落とさないとその先の処理ができなくてこまってます。
リンクテーブルとは何なのかって所から調べたほうがいいような...
結論から言えば、リンクではなくインポートすればよい。
あとはヘルプでな。
916デフォルトの名無しさん:02/09/02 00:43
簡単な質問かもしれませんが、教えてください。
VBAで、アクティブなフォームをデザインビューにする方法ってありますか?
(メニューバーでやるのではなく、ボタンを押して切り替えたいんですが)
917182:02/09/02 00:58

書き忘れ。ACCESSです。
918917:02/09/02 01:03
ん? スレ間違ってるな。スマソ。
919デフォルトの名無しさん:02/09/02 10:06
>>916
DoCmd.OpenForm Me.Name, acDesign
920 :02/09/02 10:11
>>916

> VBAで、アクティブなフォームをデザインビューにする方法ってありますか?

DoCmd.OpenForm Screen.ActiveForm.Name,acDesign

何のためにそんな機能を作るのか、後学のため教えてくれ。
921デフォルトの名無しさん:02/09/02 13:38
フィールド内のデータの「種類」を
カウントするクエリを作りたいのですが、どうすればいいでしょう?
たとえば、過去全ての五輪参加選手の名簿を、名前・参加年・国籍でテーブル化し
参加年でグループして、その年の参加国をカウントするような場合なのですが。
ご指南お待ちしています。
922デフォルトの名無しさん:02/09/02 13:54
>>921
COUNTとHAVINGを使います。
悪いことは言わないから、SQLの本を一冊買って勉強しなさい。
(本を買うお金が惜しいなら、WEBで検索するよろし)
923921:02/09/02 13:56
>>922
ありがとうございました。やってみます。
924デフォルトの名無しさん:02/09/02 17:51
Access暦1週間くらいです。
レポートの作成・編集をVBAから行いたいのですが
いい解説書とかHPってないですか?
>>924
まず、書店なり、WEBの検索エンジンで調べるのがスジでは?
需要が希少な分野なら、調べても見つからない、ということもあるかも
しれないが、Accessの技術文書なら、星の数ほど(ちょっと大袈裟だが)
あります。
926916:02/09/02 21:31
>>919,920
どうもありがとうございます。感謝します。
せっかく作ったDB、他人に設定イジられたくなかったのでメニューバーやアイコン
隠して自動起動するようにしようと思ったんです。
でもそしたら自分でメンテ出来なくなると思い質問した次第です。
Shiftキー押しながらの起動ではいくないのか
>926
MDEにするというのが一般的なのでわ。
929デフォルトの名無しさん:02/09/02 22:58
詳しい方々、教えて下さい。
Accessで、
VBEで文をつくるときに「ME」(オブジェクト名を短縮するやつ)
を使いたいのですが、参考書には「ME!〜」とあるのですが、実際、
「ME.〜」にしないとエラーがでてしまいます。

どのようなときに「!」とつけるのでしょうか?教えて下さい・・。

>>929
!は使わないでいいよ。百害ありて一利なしだから。
931929です:02/09/02 23:04
>>930
答えてくれてありがと〜(^^)
同じ意味と考えて大丈夫ですか?
でもなぜ「!」だとできなかったのでしょうか・・。
とにかくありがと〜ん。
事前バインディングだっけ?>!
しまった事前じゃなくて実行時
934nyu:02/09/04 01:25
超レベル低くて悪いんだけど、Formを開いたときに
適度な大きさで中央で表示させるにはどうしたらいいのかな???
935デフォルトの名無しさん :02/09/04 02:01
プロパチいじって
スレタイで"集合"と召集してるわりには人があんまり集まってこないね
>934
「適度な大きさ」っつーのがどういうものを指すのかハッキリせい
938デフォルトの名無しさん:02/09/04 21:22
アクセスで作成したプログラムを他のパソコンに移植したいのですが
どうやればよいのでしょうか?どなたか方法をおしえてください。
よろしくお願いします。
開発したのと同じバージョンのAccessを移植したいパソコンの台数分買って、mdbファイルを
コピーすればよろしい
940938:02/09/04 23:41
>>939
ありがとう
いまつっかっているのを入れても使えますか?
941デフォルトの名無しさん:02/09/05 10:59
VBAで、設定ファイルをもとにSQL文を生成し、
クエリを作るプログラムを書きました。
このクエリを、フィールド名も含めて丸ごと
新しいテーブルに保存したいのですが、
よい方法をご存知のかたはいらっしゃいますか?

環境はAccess2000です。
>941
つまり作ったクエリの結果セットを新しいテーブルに保存したいってのなら
こんなの↓でできるけど、誤解だったらゴメソ
CurrentDB.Execute "select * into newTable from クエリ"
>>940
なにを入れるの?

1.mdbファイル
それをやらずして、なんとする

2.パソコン
ゴミ箱にでも入れたれ

3.同じバージョンのAccess
通報しますた
944デフォルトの名無しさん:02/09/05 17:46
割り込み失礼。
会社で使用しているMSOfficeを2000からXPにバージョンアップしようと思っています。
が、現在VBAによりプログラムされたMDBが多数存在します。
2000=>XPにしたとして、突然それらが使えなくなるいう問題も考えられます。
(実際97=>2000のときはいくつかありました)
もし実験済みの方いましたら、どういうときに(例えばどういうオブジェクトを使用したとき、とか)
互換性の問題が発生するのか。または問題ないのか。教えてくださいまし。
もしガイシュツでしたらスマソ。
XPは2000形式を変換なしでネイティブに使えるっっしょ
>944
OSは変わるのか?
例えばWin98→Win2000 or WinXPなどの状況だったら、>590に該当するんじゃないかな。
ま、問題箇所はケース的にレアだが。
947944:02/09/06 14:17
>>945
変換なしでいけるのならリスクも少なそうですね。
ありがとうございました。

>>946
OSは現在、Win98がメインですが、いつどのように変わるかは会社の
方針次第です。なるほど、>>590の件は一応頭の片隅に置いておいた
ほうがよさそうです。ありがとうございました。
948デフォルトの名無しさん:02/09/06 16:25
三つのテーブルを結合させて表示させるクエリがあるんですが、
先ほどまではちゃんと表示していたのに、
今実行したら、いきなり「オーバーフロー」とだけ表示されて
データを表示してくれません。

気にかかることといえば、
つい今しがた、クエリを構成しているテーブルの一つにデータを大量に追加したことぐらいです。
ちなみに追加したテーブルのデータは38396件、テーブルそのものはSQLサーバにあります。
(他の二つは1万件ちょっとです)

このオーバーフローというのは、
処理データが多すぎる、っていうことなのでしょうか?
949デフォルトの名無しさん:02/09/06 20:34
すいませんが教えてください。
デザインマスターのテーブルやフォームの頭の方に
デンデン太鼓のようなものが表示され、オートナンバーに訳のわからない
数字が表示されてしまいます。あと勝手にフロッピーDが作動してしまいます。
どうするば元に戻せるのでしょうか?



>>948
メッセージを素直に受けとめればいいだろ
どんな処理してるかわからんのに他人が判断できるとでも思う?
>>949
状況がわかんねぇ。何をやったらそうなったのよ?
再現性のあるものなのか?
>949
とりあえず、おちけつ。
デンデン太鼓〜?
                        ,.─-- x
                       /:::::::::::::/,,ヽ
                      i:::::::::::::::i ii`!l
       ,.-<二二ニ=ー       l::::::::::::::l ト,゙ji
    /        \        |:::::::::::::| し/
   /            l         ヽ::::::::;;t_ノ   ♪坊や〜
   l ・      ・    .l       r~ ̄`ヽ      良い子だ 金出しな〜♪
   l   ・       に二ニ=  ,. -'     }
    i______●  ^} _,..- '"   ,-、  /
    \        ノラ '      _/::/-'"
     ` ァ-―''7"(      _,. -'' `"
      /|::|  {::::::ヽ__,,..- '"    
>949
ハードディスクをフォーマットしてから、OSから再インストールすれば元に戻りますが。
Access97とAccess2000の質問です。
値リストに項目を追加する方法を教えて下さい。
Access2002(XP)なら「リスト名.AddItem」なんですけど・・・
>955
rowsourceプロパティ
そろそろ次スレの季節なんだけど、どうします?
テンプレとか作ったりしますか?
>>957
もともと一発ネタのスレを再利用したに過ぎないしなぁ・・・
最近は内容がビジネスsoft板のAccess総合相談所とカブッテいる気が
しなくもないし・・・個人的には次スレ必要ないと思うんだけど。

立てるならビジ板のスレと差別化してほしい。初心者入門お断りみたいな
>>958
ビジ板のスレとの差別化には賛成だ。
とは言っても、ネタ振りに初心者は欠かせないからなぁ。
ム板なんだから、DAO/ADO系に特化するとか・・・。
960955:02/09/08 22:05
>>956
ありがとう!
そういや、VBはドトネトってのが出たけど、AccessVBAはどうなるの?
どうもならん
963教えて下さい。:02/09/09 02:23
初歩的な質問で申し訳ありません。
on error go to の構文を誰か教えて下さい。
これはエラーがおきたら・・・って意味だと思うけど
よくわかりません
>>963
"エラー トラップ"をキーワードにVBAのヘルプを引くべし
使い方のサンプルプロシージャと共にキチンと説明されている

あと、フォームデザイン時にツールボックスのコントロールウィザードを
有効にして、"フォームを閉じる"とかのコマンドボタンを配置してみな
生成されたプロシージャにOn Error GoToステートメントが組み込まれるでしょ?
そういうのを、よ〜く観察して理解するんだよ
965教えて下さい。:02/09/09 05:16
>>964
サンクス!!チュ!!
966デフォルトの名無しさん:02/09/09 10:29
ドロップダウンリストボックスを作る方法がわかりません
リストボックスやコンボボックスのプロパティを見ても
それらしいものはどこにもないし…
コード内で コンボ.Style = 2 と動的に変更するのはできないみたいだし…
ヘルプをひっくり返しても見当たりません
超基本的なことですが どうか教えてください
967デフォルトの名無しさん:02/09/10 09:22
レポートでデータが無くなっても罫線を一番下まで引くというのを
探していて、下記サイトに当たったのですが‥
http://support.microsoft.com/default.aspx?scid=http://www.microsoft.com/japan/support/kb/articles/JP404/0/63.asp

データが2ページ目にまたがる時、表示がおかしくなってしまいます。
具体的に言うと、18件毎に改頁させる時に30件のデータがあったとすると、
3ページ目に罫線だけのページが出てしまいます。

そもそも改頁には対応していないのでしょうか??

どなたか教えていただけませんか?
納期が迫っていて焦っています。
やってみたけど>>967のようにはならなかった
でも18件コッキリのとき空のページが出てきたんでちょっと直した

Private Sub グループフッター1_Format(Cancel As Integer, FormatCount As Integer)
  i = 0: j = DCount("*", "q住所", "営業員cd=" & Me.営業員cd)
End Sub

Private Sub 詳細_Format(Cancel As Integer, FormatCount As Integer)
  i = i + 1
  If i Mod 18 = 0 Then
    If i < j Then   '*******ここから*******
      Me.bpage.Visible = True
    ElseIf i = j Then
      viv True
    Else
      viv False
    End If   '*******ここまで******
  Else
    Me.bpage.Visible = False
    If i < j Then
      Me.NextRecord = True: viv True
    ElseIf i = j Then
      Me.NextRecord = False: viv True
    Else
      Me.NextRecord = False: viv False
    End If
  End If
End Sub

Private Sub viv(f As Boolean)
  顧客番号.Visible = f: 氏名.Visible = f: 住所.Visible = f
End Sub
質問です。
Accessでレコードをランダムにソートしたいのですが
どうやればいいのでしょう?

最初ランダム関数を使ったのですが、
確かにランダムな数値は得られるのですが、全レコード同じ値になっていまいます。
ランダムにソート?・・・?
971969:02/09/12 15:04
>>970
その名の通りランダムに並び替えるってことです。

例:
1 テスト太郎 → 3 テスト三郎
2 テスト次郎 → 1 テスト一郎
3 テスト三郎 → 4 テスト四郎
4 テスト四郎 → 5 テスト五郎
5 テスト五郎 → 2 テスト次郎
972デフォルトの名無しさん:02/09/12 16:45
テスト一浪はどっから出てきたんだ(w
テスト太郎はどこ逝ったんだ(w
973969:02/09/12 16:53
>>972
するどいつっこみですな(w
×テスト一郎
○テスト太郎
です。
ランダムな値を生成する関数を作って、
クエリの ORDER BY から呼び出せばよいのでは?
(もしかすると直にRndを呼べるかも)
>>969
もうちょっとシラミツブシに調べたら良かろうに。
基テーブル{ID, 名前} があるとして、SQLで乱数の列を付加すると仮定しよう
はじめに思いつくのはこんな感じだろ
 select ID, 名前, Rnd() AS 乱数 from 基テーブル
ところが、これで生成した乱数列の値は貴方が言うとおり一様になる
 select ID, 名前, Rnd(1) AS 乱数 from 基テーブル
のようにRnd()関数に引数を渡しても結果は同じだよね
>>975の続き
じゃ、SQLの中で直接Rnd()関数を使うかわりに自前で乱数を生成するプロシージャを
用意して、それをSQLから呼び出すようにしたらどうなるか?
乱数生成プロシージャ(仮)
 Function Random()
  Random = Rnd()
 End Funciton

 select ID, 名前, Random() AS 乱数 from 基テーブル
これの結果は、やはり一様の値になる
じゃ、どうすれば良いのかと言うとプロシージャに引数を渡すように変更する
 Function Random(x)
  Random = Rnd()
 End Funciton
実際には、渡された引数はプロシージャの中では使わないけどね。
977デフォルトの名無しさん:02/09/12 23:40
>>976の続き
次にSQLの中でプロシージャを呼ぶ時にどんな値を渡すのかだが
適当な任意の値を渡しても駄目
 select ID, 名前, Random(1) AS 乱数 from 基テーブル
これでも乱数列の値は変化しない
乱数を全て異なる値にするには基テーブルの適当な列を引数に渡してやる
 select ID, 名前, Random([ID]) AS 乱数 from 基テーブル
これで行毎に異なる乱数を持つことができる
とりあえず入り口はここまで。
どうして、そうなるのかは自分で推測してくれ
まだ、いろいろな問題が発生してくるので自力で解決してちょ
978みか:02/09/12 23:42
まちがえて違うところにスレしちゃいました!ごめんなさい・・。

Accessの質問です。
初歩的な質問で申し訳ありませんが、アドバイスください。

1つのファイルを複数の人間で使うとき、デザインビューで
色々と変更できないようにするためにMDEファイルの作成が
あると思うのですが、それ以外の方法ってなにかありますか?
ただ、フォームやレポートの変更をできないようにしたいだけです。


979デフォルトの名無しさん:02/09/13 02:24
>>977
つーか、IDとRNDって列のテンポラリテーブル作って
RNDに乱数いれてIDでリンクして、RNDでORDER BYするのが
やっつけ的には早いんじゃない?
>>979
実現する方法は一つじゃないだろうからね。
>>969の人は、どんなやり方を望んでいるのか明らかにしないから
一例を挙げてみただけなんだ。あとは本人が考えればいい。
981967:02/09/13 11:05
>>968さん
返事が遅くなり申し訳ありません。
結論から言うと、うまくいきました。
コードではなく、設定するところ(デザイン)に問題があり、
それが原因でうまく動いていなかったようです。
お世話になりました。ありがとうございました。
>978
ツール→セキュリティでユーザグループの権限とアカウントを設定。
管理者のパスワード設定もお忘れなく。
>>975
つーか、
ORDER BY Rnd(フィールド名)
だけでいい。
フィールドが正の数値でないとかNullを含む時は
Len関数等を併用すればいい。
984969:02/09/13 12:03
ランダムソートの件、おかげさまで解決しました
ORDER BY Rnd(ID)を使いました。
ありがとうございました。
>>983
ポインタは俺に対して向けなくていい
>>969の人に対してアドバイスしてやれ
>>983
レコードに数値型の項目が含まれていない場合は使えなくない?
>>986
あ、それでLen関数使うのね・・・書いてあったか・・・
ところで、もうすぐ1000ゲットですね。
989デフォルトの名無しさん:02/09/13 18:19
テーブルの最終レコードを呼び出し(レコード数は変動)フィールドの内容を更新したいの
ですがどうすれば出来るかわかるかたおりますでしょうか

osietekudasai
やっぱ、ム板にAccess相談スレモドキは似合わないなぁ・・・
ここはひとつビジ板の相談スレに統一という方向で。
>989
あのね、RDBのレコードには「先頭」とか「最後」という概念はないの。
だから、「最終レコード」が何をいみするのか胸に手を当てて考えてほしいの。
それがハッキリすれば、WHERE句とかMAX関数とか駆使すれば更新できると思うの。
>>989
探りたいテーブルでレコードセット設定してMoveLastとかじゃだめですか(;´Д`)ハァハァ
とりあえず誘導

・Accessに関する質問、悩み、雑談 etc.をしたい方は下記スレッドへ
ビジネスsoft
ACCESS総合相談所 その4
http://pc.2ch.net/test/read.cgi/bsoft/1027491281/l50
994デフォルトの名無しさん:02/09/14 10:36
ちょっと前にあったテーブルで設定した書式を
違反した場合にシステムのエラーMSGではなく
独自のエラーMSGを表示したいってやつ、出来ました。

FormのErrorイベントです。

Private Sub Form_Error(DataErr As Integer, Response As Integer)

Response = acDataErrContinue
MsgBox "(゚Д゚)ガオー"

End Sub

まぁ、ちょっとオレも使う用事があって調べてみたので
参考まで。

で、1000!
しかし何だ、これが995とは思えないほどマターリだな。
コ、ココなら初の1000ゲットも夢ではなさそうだな。
997さらしあげ:02/09/14 20:07
いまだー!10000000000げとずさぁぁぁぁぁぁ!

************ 終 了 ************
9991000:02/09/14 22:36
おめでとう。
10001000:02/09/14 22:37
chi
10011001
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。