過去ログ

                                Page     433
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
   通常モードに戻る  ┃  INDEX  ┃  ≪前へ  │  次へ≫   
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
 ▼ADOXで…  toku 03/9/5(金) 20:55
   ┣Re:ADOXで…  YU-TANG 03/9/10(水) 11:49
   ┃  ┗Re:ADOXで…  toku 03/9/10(水) 19:58
   ┗ADOX  toku 03/9/11(木) 17:30
      ┗Re:ADOX  YU-TANG 03/9/11(木) 21:26
         ┗感動しました  toku 03/9/16(火) 15:48
            ┗Re:感動しました  YU-TANG 03/9/16(火) 22:22
               ┗解決編  YU-TANG 03/11/17(月) 23:05

 ───────────────────────────────────────
 ■題名 : ADOXで…
 ■名前 : toku
 ■日付 : 03/9/5(金) 20:55
 -------------------------------------------------------------------------
   ADOXでクエリを作成するとデータベースに表示されないそうなのですが何とかして表示させる方法ってないものでしょうか?
こんな感じでVBAを書いてあります。



Private Sub クエリ作成_click()
  Dim cl As New ADOX.Catalog
  Dim cm As New ADODB.Command
  Dim rs As New ADODB.Recordset
      
  cl.ActiveConnection = CurrentProject.Connection
  
  cm.CommandText = "select tb_A.*, tb_B.* " _
     & "from テーブルA, テーブルB;"
  cl.Views.Append "クエリテーブルAB", cm
  rs.Open "クエリテーブルAB", CurrentProject.Connection
End If

 ───────────────────────────────────────  ■題名 : Re:ADOXで…  ■名前 : YU-TANG  ■日付 : 03/9/10(水) 11:49  ■Web : http://www.f3.dion.ne.jp/~element/msaccess/  -------------------------------------------------------------------------
   > ADOXでクエリを作成するとデータベースに表示されないそうなのですが
> 何とかして表示させる方法ってないものでしょうか?

View を作成してもデータベース ウィンドウのクエリ タブに表示されない
ということですね。

私見ですが、おそらく不可能だと思います。
Access のクエリは、ADOX 上の分類では(というか ANSI SQL92 的には)
テーブルに当たります。
Type プロパティが "VIEW" という値の特殊なテーブルです。
したがって、View を作成してデータベースウィンドウにクエリとして
表示させたいというのは、おそらくストアドプロシージャを作成して
データベースウィンドウにマクロとして表示させたい、ということと
同程度に困難ではないかと想像します。

私は ADO に詳しくないので、何か抜け道が有って私がそれを知らない
だけかもしれませんが、私だったらそれを探すより、素直に DAO で
クエリを作成してしまうと思います。

 ───────────────────────────────────────  ■題名 : Re:ADOXで…  ■名前 : toku  ■日付 : 03/9/10(水) 19:58  -------------------------------------------------------------------------
   YU-TANG さん>
なんだか難しい説明でしたが…(^^;
不可能ということで了解しました。

ありがとうございました。m(_ _)m

 ───────────────────────────────────────  ■題名 : ADOX  ■名前 : toku  ■日付 : 03/9/11(木) 17:30  -------------------------------------------------------------------------
   なんとなく悩んでいたらこんな感じで表示できてしまいました。
なんだか意味無いことをやってるような…。
無理やりなとこもあるし。
ずばっとご意見もらえたらうれしい限りであります。


'ADOXでクエリを作ってテーブルにしてさっきのADOXで
'作成したクエリを削除しました。

'テーブル k_m.名前
'テーブル c.電話番号
'テーブル k_m.電話番号
'クエリ  Q_C


Private Sub クエリ作成_click()
  Dim QCtestCL As New ADOX.Catalog     
  Dim QCtestCM As New ADODB.Command
  Dim QCtestRS As New ADODB.Recordset
  Dim QCtestCT As ADODB.Connection
  Dim V_name As String
  
  On Error GoTo err1

'作成するテーブルをチェックする
  DoCmd.OpenTable "C_kai"
  DoCmd.Close acTable, "C_kai", acSaveNo
  MsgBox "作成しようとしているテーブル名がかぶってます。"
Exit Sub

err1:
  On Error GoTo err2
  
  QCtestCL.ActiveConnection = CurrentProject.Connection
  QCtestCM.CommandText = "select c.*, k_m.名前 " & _
    "from clamp inner join k_m on c.電話番号 = k_m.電話番号;"
  QCtestCL.Views.Append "Q_C", QCtestCM
  
'SQLステートメントの結果でテーブル作成
'クエリQ_Cをクエリして そのクエリをテーブルC_kaiとして作成

  Set QCtestCT = Application.CurrentProject.Connection
  Set QCtestCM = New ADODB.Command
  QCtestCM.ActiveConnection = QCtestCT
  QCtestCM.CommandText = " SELECT * INTO C_kai FROM Q_C;"
  Set QCtestRS = New ADODB.Recordset
  Set QCtestRS = QCtestCM.Execute

  QCtestCL.ActiveConnection = CurrentProject.Connection
  QCtestCL.Views.Delete "Q_C"

Exit Sub

err2:
  MsgBox (Error)

End Sub

 ───────────────────────────────────────  ■題名 : Re:ADOX  ■名前 : YU-TANG  ■日付 : 03/9/11(木) 21:26  ■Web : http://www.f3.dion.ne.jp/~element/msaccess/  -------------------------------------------------------------------------
   あれ......
私はてっきり ADOX でクエリ オブジェクトを作成したいというのが
ご質問の趣旨かと思っていたのですが、ぜんぜん違ったみたいですね。

単に ADO で Select Into を実行したいだけということでしたら、
下記でもいいんでしょうか。

Private Sub クエリ作成_Click()
On Error Resume Next
  Const ERR_TABLE_ALREADY_EXISTS = &H80040e14
  CurrentProject.Connection.Execute _
    "SELECT * INTO C_kai FROM (SELECT c.*, k_m.名前 " & _
    "FROM clamp INNER JOIN k_m ON c.電話番号 = k_m.電話番号);"
  If (Err.Number = ERR_TABLE_ALREADY_EXISTS) Then
    MsgBox "作成しようとしているテーブル名がかぶってます。"
  Else
    MsgBox Err.Description
  End If
End Sub

 ───────────────────────────────────────  ■題名 : 感動しました  ■名前 : toku  ■日付 : 03/9/16(火) 15:48  -------------------------------------------------------------------------
   結構悩んでふとした瞬間にできたー!と思ったものがこんなにあっさり解決してしまうなんて…。
ありがとうございます!

でもこれの
Dim なんとか connection の ADO の宣言とかはいらなくてもいいもんですか?

 ───────────────────────────────────────  ■題名 : Re:感動しました  ■名前 : YU-TANG  ■日付 : 03/9/16(火) 22:22  ■Web : http://www.f3.dion.ne.jp/~element/msaccess/  -------------------------------------------------------------------------
   > でもこれの
> Dim なんとか connection の ADO の宣言とかはいらなくてもいいもんですか?

いいです。
CurrentProject.Connection が宣言済みの Connection オブジェクトに
相当します。
何度も使いまわすなら、変数に Set した方がいいですが、1 回きりの
Execute なら構わない...と思うんですが、どうなんでしょ?>諸氏

余談ですが、View がクエリタブに表示されない理由は、以前の私のレス
とは無関係かもしれません。
興味が有ったので、その後いろいろ調べてみたのですが、今のところ
明確な根拠が示されている文書は見ていません。
Access のクエリが ADOX.Tables にも出てくるのは事実ですが、それと
データベースウィンドウに表示されないこととの関連性は、ちょっと
根拠薄弱かも、です。

試しに SaveAsText メソッドで View とクエリを書き出して比較して
みたのですが、内容に大きく差が有ります。
現状ではクエリとして表示するために必要な情報が欠落しているので
表示できない可能性もありますし、MSysObjects テーブルを見ると
Type もぜんぜん違います。案外この辺が原因なのかもしれません。
現時点では私も???です。

 ───────────────────────────────────────  ■題名 : 解決編  ■名前 : YU-TANG  ■日付 : 03/11/17(月) 23:05  ■Web : http://www.f3.dion.ne.jp/~element/msaccess/  -------------------------------------------------------------------------
   自己レスです。

> 余談ですが、View がクエリタブに表示されない理由は、以前の私の
> レスとは無関係かもしれません。
> 興味が有ったので、その後いろいろ調べてみたのですが、今のところ
> 明確な根拠が示されている文書は見ていません。

ようやく見つけました。

Creating and Modifying Stored Queries in Microsoft Access Databases with ADOX
http://www.msdn.microsoft.com/library/default.asp?url=/library/en-us/dnacc2k/html/acintsql.asp

これによると Jet 4.0 は Jet SQL と ANSI SQL-92 標準の 2 つの
モードをサポートしていて、ADOX は後者によるクエリを作成しますが、
Access のユーザーインターフェイスは前者によるオブジェクトしか
表示できないので、ADOX で作成したクエリはデータベース ウィンドウ
に表示されない、ということになるようです。
ユーザーに見せたかったら DAO.CreateQueryDef メソッドを使うように、
とのお達しでした。

以上、後始末レスでした。

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━    通常モードに戻る  ┃  INDEX  ┃  ≪前へ  │  次へ≫    ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━                                 Page 433