Access VBA質問箱 IV

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

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


1921 / 9994 ←次へ | 前へ→

【11354】Re:クエリ結果件数が違う
回答  小僧  - 10/1/6(水) 17:53 -

引用なし
パスワード
   ▼pon さん:
こんにちは。

>レコード件数は、
> 117819件
> 117820件
> とかになります

うーん、残念です。


> よくわかりませんが、CPUのせいではないような気はしますが・・・・

当方もはっきりとした論拠がある訳ではありませんが、
メモリ256MB のPC で不安定だったクエリが
メモリを1Gに増設した所、安定した経験があります。


> 敷居が高いけど今回は 
> SQL Server Express Edition + ADP にしようかな・・・

元データがSQLServerにあるのでしたら
クエリ部分をViewとしてSQLServer側に保存し、
AccessからはViewを見に行く方法もありますね。

Q01仕様 はSQLServer側でViewとして保存
Q02JOBリ は自MDB側でワークテーブルとして保存
両者を結合させるのであれば
単純なテーブル同士の等価結合になる為、
Accessの負担が軽くなるかと思われます。


以下、MDBのバックアップを取ってから試してみて下さい。

Sub ワークテーブルを使用()
Dim DB As DAO.Database
Dim strSQL As String
Dim QD As DAO.QueryDef


  Set DB = CurrentDb
  
On Error Resume Next
  strSQL = "Drop Table WT01仕様"
  DB.Execute strSQL
  
  strSQL = "Drop Table WT02JOBリ"
  DB.Execute strSQL

  DB.CreateQueryDef "Q03JOB仕リ", "SELECT 1"

On Error GoTo 0

  strSQL = " SELECT LT仕様.*, [仕区C]*1000+[仕様C] AS tmp " _
      & " INTO WT01仕様 " _
      & " FROM LT仕様;"
  DB.Execute strSQL, dbFailOnError

  strSQL = " SELECT T単価.*, " _
      & " 1000+[仕様C1] AS S1, " _
      & " 2000+[仕様C2] AS S2, " _
      & " 3000+[仕様C3] AS S3, " _
      & " 4000+[仕様C4] AS S4, " _
      & " 5000+[仕様C5] AS S5, " _
      & " 6000+[仕様C6] AS S6, " _
      & " 7000+[仕様C7] AS S7 " _
      & " INTO WT02JOBリ " _
      & " FROM T単価;"
  DB.Execute strSQL, dbFailOnError

  strSQL = ""
  strSQL = strSQL & " SELECT WT02JOBリ.*, WT01仕様.名称, "
  strSQL = strSQL & "    WT01仕様_1.名称, WT01仕様_2.名称, "
  strSQL = strSQL & "    WT01仕様_3.名称, WT01仕様_4.名称, "
  strSQL = strSQL & "    WT01仕様_5.名称, WT01仕様_6.名称 "
  strSQL = strSQL & " FROM (((((((((WT02JOBリ "
  strSQL = strSQL & " LEFT JOIN LT部位 ON WT02JOBリ.部C = LT部位.部C) "
  strSQL = strSQL & " LEFT JOIN LT名 ON (WT02JOBリ.区C = LT名.区C) "
  strSQL = strSQL & "       AND (WT02JOBリ.工種3C = LT名.工種3C) "
  strSQL = strSQL & "       AND (WT02JOBリ.工種2C = LT名.工種2C) "
  strSQL = strSQL & "       AND (WT02JOBリ.工種1C = LT名.工種1C)) "
  strSQL = strSQL & " LEFT JOIN LT単位 "
  strSQL = strSQL & "      ON WT02JOBリ.単位C = LT単位.単位C) "
  strSQL = strSQL & " LEFT JOIN WT01仕様 "
  strSQL = strSQL & "      ON (WT02JOBリ.S1 = WT01仕様.tmp) "
  strSQL = strSQL & "     AND (WT02JOBリ.工種1C = WT01仕様.工種C)) "
  strSQL = strSQL & " LEFT JOIN WT01仕様 AS WT01仕様_1 "
  strSQL = strSQL & "   ON (WT02JOBリ.S2 = WT01仕様_1.tmp) "
  strSQL = strSQL & "  AND (WT02JOBリ.工種1C = WT01仕様_1.工種C)) "
  strSQL = strSQL & " LEFT JOIN WT01仕様 AS WT01仕様_2 "
  strSQL = strSQL & "   ON (WT02JOBリ.S3 = WT01仕様_2.tmp) "
  strSQL = strSQL & "  AND (WT02JOBリ.工種1C = WT01仕様_2.工種C)) "
  strSQL = strSQL & " LEFT JOIN WT01仕様 AS WT01仕様_3 "
  strSQL = strSQL & "  ON (WT02JOBリ.S4 = WT01仕様_3.tmp) "
  strSQL = strSQL & "  AND (WT02JOBリ.工種1C = WT01仕様_3.工種C)) "
  strSQL = strSQL & " LEFT JOIN WT01仕様 AS WT01仕様_4 "
  strSQL = strSQL & "   ON (WT02JOBリ.S5 = WT01仕様_4.tmp) "
  strSQL = strSQL & "  AND (WT02JOBリ.工種1C = WT01仕様_4.工種C)) "
  strSQL = strSQL & " LEFT JOIN WT01仕様 AS WT01仕様_5 "
  strSQL = strSQL & "   ON (WT02JOBリ.S6 = WT01仕様_5.tmp) "
  strSQL = strSQL & "  AND (WT02JOBリ.工種1C = WT01仕様_5.工種C)) "
  strSQL = strSQL & " LEFT JOIN WT01仕様 AS WT01仕様_6 "
  strSQL = strSQL & "   ON (WT02JOBリ.S7 = WT01仕様_6.tmp) "
  strSQL = strSQL & "  AND (WT02JOBリ.工種1C = WT01仕様_6.工種C);"


  Set QD = DB.QueryDefs("Q03JOB仕リ")
    QD.SQL = strSQL
    QD.Close
  Set QD = Nothing

  DoCmd.OpenQuery "Q03JOB仕リ"

End Sub

クエリ部分をワークテーブルに保存する様にし、
Q03JOB仕リ を書き換えております。
これで件数が安定する様でしたら
計算させながらの結合の所に問題がありそうですね。

(SELECT 〜 INTO 句でテーブルを作っている為に
 Index が外れておりますので
 結果表示が遅い場合にはワークテーブルに Index を設定して下さい)


> ふと、クエリ結果件数が毎度異なるなんて 
> バグぽっい動きみたいな気もしなくは無いですが、どうなんでしょう・・・・

Accessの弱点として、データベースエンジンである
Jet Database Engine の安定性が良くない事があげられます。

テーブル同士を素直に繋ぐSQLであれば
それほど問題が起きる事はないのですが
不等価結合 (T_1.Field1 <> T_2.Field1) や
複雑なサブクエリを用いると
固まってしまったり、Accessそのものが落ちてしまったりと
不安定な動きをする事が多々あります。

今回は

>デザイン ビューで、連結式
> T単価.仕様C1+1000=T1.仕区C*1000+T1.仕様C を表示できません。

の様に、フィールドを計算させながら結合している箇所が
問題になってそうですね。

もちろん、より安定したツールを手に入れる為に
お金や時間を掛けるのは正しい方法だと思いますが
Accessへの負担を減らし安定させるのも
1つの手だと考えております。

1,544 hits

【11343】クエリ結果件数が違う pon 10/1/5(火) 14:32 質問[未読]
【11345】Re:クエリ結果件数が違う 小僧 10/1/5(火) 17:45 回答[未読]
【11350】Re:クエリ結果件数が違う pon 10/1/6(水) 15:56 質問[未読]
【11353】Re:クエリ結果件数が違う pon 10/1/6(水) 17:37 発言[未読]
【11354】Re:クエリ結果件数が違う 小僧 10/1/6(水) 17:53 回答[未読]
【11378】Re:クエリ結果件数が違う pon 10/1/13(水) 17:40 質問[未読]
【11380】Re:クエリ結果件数が違う 小僧 10/1/13(水) 18:02 回答[未読]
【11407】Re:クエリ結果件数が違う pon 10/1/21(木) 17:30 お礼[未読]

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