• ベストアンサー

access vbaにてテンポラリーテーブルが作りたいです。

教えてください。 フォームで年月日を入力させ ボタンを押すとテンポラリーのテーブルが出来る(そのあとでその一時テーブルを使ってselect等がしたい)ような仕組みを作りたいと思っています。 ##テーブル名 でいけるかとおもったのですが、 ##テーブル名という実際のテーブルができてしまいました。 記述は下記の通りです。 mySQL = "SELECT テーブルA.* INTO [##table] from テーブルA where 年月 = " & n1 & " " です。 ##テーブル部分を一時テーブルにしたいのですが・・・ どうしたらよいでしょうか? どうぞよろしくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • DexMachina
  • ベストアンサー率73% (1287/1744)
回答No.2

データベースウィンドウのテーブルの一覧に出さない (TableDefsコレクションに追加しない)一時テーブルは、 DAOのCreateTableDefで、Name引数を省略することで 作成できるといった話を見たことがあるような・・・ (私自身はこの方法を使ったことはありませんので、  誤解の可能性もあります(汗)) 私の場合は、ご質問の件そのままに一旦「##Table」を 実際に作ってしまって、一連の操作が終わったところで DeleteObjectメソッドを使用して「##Table」を削除、 という対処をしています。 (もっとも、最近は、ワークテーブルのようなものも  テーブルとしてそのまま保存しておいて、必要時に  レコード追加、不要化したらレコード全削除、として  組むようにしていますが:  私の場合は、以前はクエリのデザインビューで対処する  ことが多かったのですが、この場合、削除済みの一時  テーブルを参照したクエリをデザインビューで開くと、  クエリ自体が壊れる(上書き保存しなければ、一時  テーブル再生時には問題なく動きますが)ということが  あったため。  ・・・さらに最近はSQL文で対処することが多くなった  ので、どちらでもよくはなっているのですが) ※ディスクへの書き込み発生による動作遅延に関しては  目を瞑っておりますので、その点を問題視しての  ご質問でしたら趣旨が合いませんがご容赦願います。

chelny
質問者

お礼

おぉ!そうでした。そうですね! 一度作って最後に消す処理を入れれば テーブルが増えることもないですし、 それでいきたいと思います。 #db作成者と管理者が別で、管理者がシステム知識のないものなので、 テーブルが増えたりクエリが増えたりせずとにかくボタン一つで 完了するようなものが作りたかったのです。 非常に助かりました。ありがとうございました。

全文を見る
すると、全ての回答が全文表示されます。

その他の回答 (1)

  • chie65535
  • ベストアンサー率43% (8514/19356)
回答No.1

普通、そういう事をしたいなら、クエリを使います。 データベースのクエリのタブで SELECT * FROM 元のテーブル WHERE 年月=Mid([Forms]![フォーム名]![日付入力テキスト],1,6) と言うクエリを作ります。 このクエリを参照元にして mySQL="SELECT * FROM クエリ名 WHERE 商品分類=" & n2 & " ORDER BY 商品コード" などとやれば、一時テーブルなど要りません。 簡単に言えば「クエリを作れば、それが一時テーブルになる」のです。

chelny
質問者

補足

ありがとうございます。 なるほどです。 ですが、一時テーブルがないと、今度はその後で 活用することが出来ないのかと思ったのですが・・。 つまり、コードビルダのコード内で、まずテンポラリーテーブルを作り、そのテーブルをinにしてopenquery等で様々な加工データに仕分けしたかったのです。 素人の考えなので、やはり発想の転換をしないと無理なのでしょうか?

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • 同じテーブルでのUNION

    テーブルtableである列aのデータが1,2,3,4,5,6,7,8,9と 入っていたとします。 このテーブルを1,2,5,3,4,6,7,8,9という順番で SELECTしたい場合はどのようにすればよろしいでしょうか? select a from table where a IN (1,2) union select a from table where a = 5 union select a from table where a NOT IN (1,2,5) としてみたのですが1,2,3,4,5,6,7,8,9と表示されてしまいます。 宜しくお願いいたします。

  • 3.23.59でのテンポラリテーブルの削除、補完機能について

    お世話になります。 server version: 3.23.59-nightly-20050301 上記バージョンのMySQL使ってシェルのコマンドプロンプトから mysql>CREATE TEMPORARY TABLE `test` (`name` VARCHAR( 255 ) NOT NULL); とテンポラリテーブルを作って mysql>DROP TEMPORARY TABLE test; そのテーブルを削除しようとすると ERROR 1064: syntax error near 'TEMPORARY TABLE test' at line 1 とエラーがでます。 これは仕様なのでしょうか? しかたがないのでいったん接続を閉じてテンポラリテーブルを消してますが server version: 4.0.18 で同じことを行うと正常に削除できます。 また、 server version: 3.23.59-nightly-20050301 だとselectと入力しようとして mysql>sele(タブキー) とやると補完されますが server version: 4.0.18以上だと だと補完されません。(フィールド名は補完できました) なにか設定などが必要なのでしょうか? よろしくお願いします。

  • テーブル名が可変の動的SQLをファンクションにしたい

    Oracle9iのWindowsXP環境です。 以下のようなPL/SQLを作成しましたが、同じようなselect文の繰り返しなので整理したいのと、レスポンスが悪いのでファンクションにしたいのですが、テーブル名が可変のため上手くいきません。「Table&1」は置換変数で、batファイルからパラメータが渡り、「Table200812」のように変更されます。 【***.bat】 set /p phara sqlplus -s ***/***@*** ***.sql %phara% 【***.sql】 省略 begin select aaa into a1 from Table&1 where code = 'AAAAA'; ・・ select aaa into a2 from Table&1 where code = 'BBBBB'; ・・ select aaa into a3 from Table&1 where code = 'CCCCC'; ・・ 省略 end; / 以下、試しに作成しようとしたファンクションですが、やはり予想どおりですが「表がありません」とコンパイルエラーになります。 create function Func_test(code IN varchar2, Table1 IN varchar2) return number is ret number; begin select aaa into ret from Table1 where code = 'code'; return ret; end; / ※コール側は、「a1 = Func_Test('AAAAA', Table&1);」 そもそもこれが実現できたとしてレスポンスが上がるものなのでしょうか?どちらにせよコードを整理する意味でもファンクションにはしたいのですが。。 宜しくお願い致します。

  • JDBCでテンポラリテーブルを扱う

    JDBCを使って、テンポラリテーブル(DBはMySQL)を作成したのですが、CREATE文を発行したクラス内では、INSERT,SELECTできるのですが、別クラス(別画面から別業務クラス)で、テンポラリテーブルにアクセスしようとすると、 テーブル名 doesn't exist というエラーが出てアクセスできません。 どこに原因があると考えられるでしょうか?

    • ベストアンサー
    • Java
  • Access VBA 日付で抽出できない?

    次の質問にお答えいただけませんか。 フォームで抽出条件を入力しテーブルから抽出をするとき Dim db As DAO.Database Dim rs As DAO.Recordset Dim mySQL As String Set db = CurrentDb() mySQL = "SELECT * FROM T_明細 " _ & "WHERE 顧客ID = " & CStr(Me!txtKey) & ";" Set rs = db.OpenRecordset(mySQL, dbOpenDynaset) 上記のような記述をしました。 テーブル名:T_明細   フィールド:顧客ID  日付 金額  フォームの抽出条件入力テキストボックス:txtKey このとき顧客IDでの抽出は問題なく出来ましたが "WHERE 顧客ID = を "WHERE 日付 = に変更して日付で抽出をしたいのですがうまくいきません。 テーブルの日付フィールドは 書式をgee-mm-dd 定型入力を>L99\-99\-99;0;# で書き込みました。 フォームのtxtKeyテキストボックスのプロパティも書式をgee-mm-dd 定型入力を>L99\-99\-99;0;#に設定してあります。 このようなときは mySQL = "SELECT * FROM T_明細 " _ & "WHERE 日付 = " & CStr(Me!txtKey) & ";" の、記述を何か変更しないといけないような気もしますが 対処の方法を教えていただけませんか。

  • MySQL4で2つのテーブルを結び付ける方法

    MySQL4で2つのテーブルを結び付ける方法は 以下のどちらが正しいのでしょうか? (while文中でSQLを発行せずに、をSQL文1発で出す場合) um_ukがどちらのテーブルにも共通なモノとして、 ■1 SELECT * FROM a_table A,b_table B WHERE A.um_uk = $um_uk AND B.um_uk=$um_uk; ■2 SELECT * FROM a_table.A,b_table.B WHERE A.um_uk = $um_uk AND B.um_uk=$um_uk; また、どちらも間違っている場合正解をご教授下さい。

    • ベストアンサー
    • MySQL
  • 2つのテーブルの結合に関してです

    お世話になります PHP5,MySql5.0.33にて開発を行っています 2つのテーブルの結合部分で困っています TABLE1 ---------------------------------- ID DATE1 DATE2  COUNT ---------------------------------- 1  2/27  2/20  10 2  2/27  2/20  10 ---------------------------------- TABLE2 ---------------------------------- ID DATE1 DATE2 COUNT ---------------------------------- 1  2/21  2/26  5 2  2/21  2/27  5 ---------------------------------- 上記2つのテーブル(TABLE1/TABLE2)から TABLE1のDATE1=2/27より過去の行とTABLE2のDATE2=2/27より過去の行を 取得したいのですが上手くいかず…(下SQLで記述しています) SELECT DISTINCT TABLE1.* FROM TABLE1,TABLE2 WHERE TABLE1.ID=TABLE2.ID AND TABLE1.ID=1 AND (TABLE1.DATE1<='2009/2/27' OR TABLE2.DATE2<='2009/2/27') (結合のそもそもの理解が間違っているかも知れませんが…;) 宜しくお願いします

    • ベストアンサー
    • MySQL
  • joinの場合のテーブル名の別名の使用方法

    select * from table1 a,table2 b where a.field1=b.field1; とできますが select * from table1 as a left join table2 as b on a.field1=b.field1; とできません。 joinの場合にテーブル名の別名を使う方法を教えてください

  • ACCESSのモジュールでのUNION

    ACCESS超初心者です。 モジュールでテーブルAとBテーブルBを結合しテーブルCを作成したいのですが、 DoCmd.RunSQL " SELECT * FROM TABLE_A UNION SELECT * FROM TABLE_B INTO TABLE_C; " でRunSQL実行時のエラー(2342)となってしまいます。 きっと基本的なことだと思うのですが・・・ どうぞお教えください。

  • create temporary tableについて

    MYSQL5.0を利用して、PHPから以下の作業をしています。 create temporary table tempで作成された一時的なテーブル(temp)は削除しなくても問題ないのでしょうか? もし削除する必要がある場合は、drop temp で大丈夫でしょうか?

    • ベストアンサー
    • MySQL
このQ&Aのポイント
  • Win11のブラザー(mfc-7340)でFax送信ができないトラブルが発生しています。正常に作動するのはWin8です。
  • お使いの環境はWin11でUSBケーブルで接続されており、電話回線は光ファイバーです。
  • ブラザー(mfc-7340)のFax送信に関する問題で、Win11での作動ができない状況です。Win8では正常に動いています。USBケーブルでの接続と、光ファイバーを使用していることが関連している可能性があります。
回答を見る

専門家に質問してみよう