Access VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


274 / 500 ページ ←次へ | 前へ→

【7753】Re:テーブルの削除
お礼  ヤマ  - 06/4/24(月) 12:00 -

引用なし
パスワード
   小僧さん

 ありがとう御座いました。
 上手く出来ました。
 
・ツリー全体表示

【7752】ありがとうございます。
お礼  ymym  - 06/4/24(月) 0:00 -

引用なし
パスワード
   当方のかなりアバウトな質問にも
わかりやすく、きめ細かなご説明をありがとうございました。

正直、こんなに丁寧に教えていただけるなんて考えておらず、
とても勉強になりました。

これからもよろしくお願いいたします。
・ツリー全体表示

【7751】Re:DoCmd と ADO の関係 ???
回答  小僧  - 06/4/23(日) 22:15 -

引用なし
パスワード
   ▼ymym さん:
こんばんは。

>ネットワークで使うことを前提としてアクセスを学習しています。

他のサイトではありますが、
先ほど似たような回答をしていますので
下記リンクを参考になさって下さい。
(質問はちょっと違いますが、当方の回答部分をご覧になってください)

http://www.accessclub.jp/bbs2/wforum2.cgi?mode=allread&no=25061&page=0


>その際、ADOとDocmdはどういう関係になるのか、
>よくわかっていません。

全く別物…と考えて頂いて結構だと思います。

Docmd オブジェクトは
フォームやテーブルの作成、印刷やAccessの終了など、
Accessの機能を使う際に使われます。

ADO は Access と Accessの中にあるデータベースのコアな部分
(Microsoft Jet)との間を取り持つライブラリです。
自MDBだけでなく、他MDBやAccess以外のデータベースに接続する際に使われます。

前回提示させて頂いた例は SQL という言語を使っていますが
この SQL を実行するに当たって、

・DocmdオブジェクトのRunSQLメソッド
・ADOのConnectionオブジェクトのExecuteメソッド

の両方で実行する事が可能です。

両者の違いは多々ありますが、
SQLを発行する際により細かい設定をしたい場合は
Executeメソッドを使う方が良いかと思われます。
・ツリー全体表示

【7750】DoCmd と ADO の関係 ???
お礼  ymym  - 06/4/23(日) 11:13 -

引用なし
パスワード
   小僧さん、早速のお答えありがとうございました。

こちらの希望するとおりのテーブルが作成できました。
ありがとうございます。 

ところで、質問があるのですが・・・。
よろしいでしょうか?

私はつい最近VBAを学習し始めたのですが、
ネットワークで使うことを前提としてアクセスを学習しています。

その際、ADOとDocmdはどういう関係になるのか、
よくわかっていません。

データを読み込んだり、DBを作成するさいに
ADOで接続?をし、読み込んだ後の操作全般は
Docmdを使えば良いと考えてもいいのでしょうか?

(使用しているPCが1台だけで、ネットワーク上での
動作確認ができない状況です)
・ツリー全体表示

【7749】Re:連結フォームのフィルターの結果をデー...
回答  小僧  - 06/4/22(土) 23:32 -

引用なし
パスワード
   ▼ymym さん:
こんばんは。

>WHERE句の取り方を教えていただけますか?

提示されている情報が少ないので必ずしもうまく行くとは限りませんが、
フォームのレコードソースがテーブル名(クエリ名)であれば
フォームヘッダにでもコマンドボタン「cmd出力」を配置して
コードを実行させて見てください。

Private Sub cmd出力_Click()
Const TName = "T_Temp"
Dim strSQL As String

  If DCount("*", "MsysObjects", "Name = '" & TName & "'") > 0 Then
    DoCmd.DeleteObject acTable, TName
  End If

  strSQL = "SELECT * " _
     & " INTO " & TName _
     & " FROM " & Me.RecordSource _
     & " WHERE " & Me.Filter

  DoCmd.RunSQL strSQL

End Sub


>その結果をデータとして出力したい

どこに出力したい(画面?印刷?Excel等他のアプリケーション?)にもよりますが、
殆どの場合はテーブルを作らなくてもクエリで解決できると思いますよ。
・ツリー全体表示

【7748】Re:同時アクセス人数
お礼  ひろのしま  - 06/4/22(土) 20:34 -

引用なし
パスワード
   ▼YU-TANG さん:
>こんばんは、YU-TANG です。
>
>誤解があるようなので、そこだけ。
>
>>デスクトップ上:〜フォーム.mdb(フォームである)。
>>サーバー上:〜データ.mdb(上記フォームからリンクされています)。
>>という構造になっている状態で、下記イトでは、Access2000だと5人以上になると極度に落ちるということです。
>>(http://www.accessclub.jp/bbs2/0034/beginter10834.html
>
>違います。
>その例は、バックエンドが MSDE だから、MSDE 側の制限で 5 接続を超えると
>パフォーマンスが落ちるとされている、ということです。Access とは何の
>関係も有りませんし、もちろん MDB 同士の擬似 C/S 構成にはまったく
>当てはまりません。
>
>しかも、MSDE の 5 接続制限は、M$ が大げさに吹聴して作ったタダの神話
>です(SQL Server への乗り換えを促すためと勘繰りたくなりますが)。
>私は、実際にテストして 5 接続を超えたとたんにパフォーマンスが落ちたと
>いう報告は、一度も見たことがありません(逆の報告、つまり 5 接続を超え
>てもほとんどパフォーマンスが落ちなかったという報告は読んだことがあり
>ます)。
>
>自分で検証するまで、何でも真に受けないように。
上記の把握ミスについて、失礼しました。

・フォーム起動時に読み込むレコードソースの件数を100件に制限する。
=>現在1000件ほどであるが、後々10万件に増える予定のため、フォーム起動時の負荷を軽減する。それに伴い、フォーム上での検索の方法も修正する。
一つの方法として上記を現在考慮中です。

現在の私の作業は、仕様書どおりに作るものでなく、1週間に1度程仕様追加依頼がある状態です。ですので、現在のプログラムで何人まで可能であるかという懸賞、でなくて検証(駄洒落)は意味がないような状態です。
場合によってはSQL Serverへのリンクテーブルでの作業の方が良いかもしれません。

ちなみに、下記のようなサイトもあります。
http://www.naboki.net/access/achell/achell_02.html
・ツリー全体表示

【7747】連結フォームのフィルターの結果をデータ...
質問  ymym  - 06/4/22(土) 11:18 -

引用なし
パスワード
   お返事ありがとうございました。

>フィルタが掛けられる、という事ですので恐らく連結フォームだと思うのですが、
>その場合はフィルタの条件を SQL の Where句 としてテーブルから読み出す事が可能です。
>

ご指摘のとおり、連結フォームのデータでフィルターをかけ、その結果をデータとして出力したいので、一時的にテーブルを作って保存すれば・・・と考えています。

お答えのWHERE句の取り方を教えていただけますか?

よろしくお願いします。
・ツリー全体表示

【7746】Re:フォーム上でのフィルターの結果を使い...
回答  小僧  - 06/4/22(土) 1:43 -

引用なし
パスワード
   ▼ymym さん:
こんばんは。

>フォーム上のデータをフィルターで絞込み、
>結果をテーブルとして保存したいのですが、可能でしょうか?

ちょっと質問が漠然としていて、
はっきりした回答が付けにくいと思われます。

もし ymymさんのフォームが非連結フォームであるのでしたら
フィルタを掛ける、というのにも工夫が必要になりますし
データをテーブルに保存するにしても VBA の知識が必要となります。

フィルタが掛けられる、という事ですので恐らく連結フォームだと思うのですが、
その場合はフィルタの条件を SQL の Where句 としてテーブルから読み出す事が可能です。

Accessに限らずデータベースにおいては上記のように常に取り出せる
データの場合は、わざわざテーブルを作らないのが一般的ですね。
(もちろんテーブルを作成する事も可能ですが…。)
・ツリー全体表示

【7745】Re:テーブルの削除
回答  小僧  - 06/4/22(土) 1:33 -

引用なし
パスワード
   ▼ヤマ さん、たん さん:
こんばんは。

>>無理やりやろうとするなら、MSys関係の隠しテーブルを参照し、
>>ワイルドカードで抽出条件を指定し、該当したテーブル名を個々に
>>呼び出して、DeleteObjectするというルーチンを組めば
>>可能と思われます。

「テーブル」で始まる Table を列挙する例です。

Sub ワイルドカードを使用したテーブル名の抽出1()
'要参照設定 Microsoft DAO x.x Object Library
Dim strSQL As String
Dim rs As DAO.Recordset
  strSQL = "SELECT Name From MSysObjects " _
      & "Where Name Like 'テーブル*' AND Type = 1"

  Set rs = CurrentDb.OpenRecordset(strSQL, dbOpenSnapshot)
    
    Do Until rs.EOF
      Debug.Print rs![Name]
      rs.MoveNext
    Loop
  rs.Close
  Set rs = Nothing
End Sub


Tabledef オブジェクトを使う方法もあります。


Sub ワイルドカードを使用したテーブル名の抽出2()
'要参照設定 Microsoft DAO x.x Object Library
Dim TName As String
Dim db As DAO.Database
Dim i As Long

  Set db = CurrentDb
  
  For i = db.TableDefs.Count - 1 To 0 Step -1
    If db.TableDefs(i).Name Like "テーブル*" Then
      Debug.Print db.TableDefs(i).Name
    End If
  Next

  Set db = Nothing
End Sub


あとはヤマさんの環境に応じてコード改変してみて下さい。
・ツリー全体表示

【7744】Re:同時アクセス人数
発言  YU-TANG WEB  - 06/4/21(金) 22:12 -

引用なし
パスワード
   こんばんは、YU-TANG です。

誤解があるようなので、そこだけ。

>デスクトップ上:〜フォーム.mdb(フォームである)。
>サーバー上:〜データ.mdb(上記フォームからリンクされています)。
>という構造になっている状態で、下記イトでは、Access2000だと5人以上になると極度に落ちるということです。
>(http://www.accessclub.jp/bbs2/0034/beginter10834.html

違います。
その例は、バックエンドが MSDE だから、MSDE 側の制限で 5 接続を超えると
パフォーマンスが落ちるとされている、ということです。Access とは何の
関係も有りませんし、もちろん MDB 同士の擬似 C/S 構成にはまったく
当てはまりません。

しかも、MSDE の 5 接続制限は、M$ が大げさに吹聴して作ったタダの神話
です(SQL Server への乗り換えを促すためと勘繰りたくなりますが)。
私は、実際にテストして 5 接続を超えたとたんにパフォーマンスが落ちたと
いう報告は、一度も見たことがありません(逆の報告、つまり 5 接続を超え
てもほとんどパフォーマンスが落ちなかったという報告は読んだことがあり
ます)。

自分で検証するまで、何でも真に受けないように。
・ツリー全体表示

【7743】Re:同時アクセス人数
発言  たぬき  - 06/4/21(金) 20:57 -

引用なし
パスワード
   ▼ひろのしま さん:

テーブルはリンクしないで情報を必要なときだけ接続
して取得するのはどうでしょう。
・ツリー全体表示

【7742】フォーム上でのフィルターの結果を使いたい
質問  ymym  - 06/4/21(金) 18:14 -

引用なし
パスワード
   こんにちは。VBA超初心者です。

フォーム上のデータをフィルターで絞込み、結果をテーブルとして保存したいのですが、可能でしょうか?
・ツリー全体表示

【7741】Re:テーブルの削除
お礼  ヤマ  - 06/4/21(金) 17:15 -

引用なし
パスワード
   ▼たん さん:
>>テーブルはオブジェクトなので、ワイルドカードで処理出来ません。
>
>無理やりやろうとするなら、MSys関係の隠しテーブルを参照し、
>ワイルドカードで抽出条件を指定し、該当したテーブル名を個々に
>呼び出して、DeleteObjectするというルーチンを組めば
>可能と思われます。

早速のご回答、有難う御座います。
教えて頂いた方法は難易度が高そうなので、小生には出来そうにありません。
別の方法で一時保存を考えます。ありがとう御座いました。
・ツリー全体表示

【7740】Re:テーブルの削除
回答  たん  - 06/4/21(金) 16:32 -

引用なし
パスワード
   >テーブルはオブジェクトなので、ワイルドカードで処理出来ません。

無理やりやろうとするなら、MSys関係の隠しテーブルを参照し、
ワイルドカードで抽出条件を指定し、該当したテーブル名を個々に
呼び出して、DeleteObjectするというルーチンを組めば
可能と思われます。
・ツリー全体表示

【7739】Re:テーブルの削除
回答  たん  - 06/4/21(金) 16:00 -

引用なし
パスワード
   >一時保存したテーブルをワイルドカードで削除する方法をご教授下さい。
>DeleteOjectでは個別のテーブルしか削除できません。

テーブルはオブジェクトなので、ワイルドカードで処理出来ません。
・ツリー全体表示

【7738】テーブルの削除
質問  ヤマ  - 06/4/21(金) 14:22 -

引用なし
パスワード
   一時保存したテーブルをワイルドカードで削除する方法をご教授下さい。
DeleteOjectでは個別のテーブルしか削除できません。
使用ACCESSは2000です。よろしくお願いします。
・ツリー全体表示

【7737】Re:同時アクセス人数
質問  ひろのしま  - 06/4/21(金) 13:32 -

引用なし
パスワード
   ▼小僧 さん:
>▼ひろのしま さん:
>こんにちは。
>
>>〜Data.mdb上に同時アクセスできる人数は一体何人までなのでしょうか。
>
>MS Office Onlineより
>http://office.microsoft.com/ja-jp/assistance/HP051868081041.aspx
>
>>データベースを同時に使用できるユーザーの数 255
>
>
>こちらの事でしょうか。
>さすがに試した事はないので未検証です…。


Accessの仕様制限では論理上255人ですが、
デスクトップ上:〜フォーム.mdb(フォームである)。
サーバー上:〜データ.mdb(上記フォームからリンクされています)。
という構造になっている状態で、下記イトでは、Access2000だと5人以上になると極度に落ちるということです。
http://www.accessclub.jp/bbs2/0034/beginter10834.html
現在10人で使用している環境なのですが、最適化とバックアップ以外による方法で、データが壊れたりフォームが起動しなくなったり等の回避策をAccessの設定で行うことは出来るのでしょうか。
よきアドバイスをお願いします。
・ツリー全体表示

【7735】Re:同時アクセス人数
発言  小僧  - 06/4/21(金) 13:02 -

引用なし
パスワード
   ▼ひろのしま さん:
こんにちは。

>〜Data.mdb上に同時アクセスできる人数は一体何人までなのでしょうか。

MS Office Onlineより
http://office.microsoft.com/ja-jp/assistance/HP051868081041.aspx

>データベースを同時に使用できるユーザーの数 255


こちらの事でしょうか。
さすがに試した事はないので未検証です…。
・ツリー全体表示

【7734】Re:レポート空白行の上詰めについて
お礼  ユミちゃん  - 06/4/21(金) 12:33 -

引用なし
パスワード
   hatena さん:
早速ご回答をいただき有難うございました。
ご指示のとおり
印刷時縮小」を「はい」
詳細セクションの「印刷時縮小」も「はい」
で希望する結果となりました。
本当に有難うございました。
・ツリー全体表示

【7733】Re:型変換エラー
お礼  minbo  - 06/4/21(金) 11:52 -

引用なし
パスワード
   ▼たぬき さん:   
>▼minbo さん:そうですね。失礼しました。
   自分で解決します。足りないなにかがわかりましたので
   ありがとうございました

>
>>たすけてくださーい。
>>急に追加クエリでエラーが生じて身動きがとれません。
>>
>>まったく同じテーブル(コピペ)、但し一つだけフィールド名が
>>変わるので(データはそのまま移行)、追加クエリをしたところ
>>型変換エラーと言われまったく追加されず??????
>>
>>どしたら、なにがわるいのでしょう
>>因みにいまだに2000です
>
>それだけ言われてもフィールドの設定や追加したデータも
>なにも分かりません。
>
>またここは基本的にAccess 「VBA」質問箱ですし・・・
・ツリー全体表示

274 / 500 ページ ←次へ | 前へ→
ページ:  ┃  記事番号:
1084646
(SS)C-BOARD v3.8 is Free