ジメジメする梅雨のお悩み、一挙解決! >>

アクセス97です。

テーブル作成クエリで
他のmdbに
テーブルを作成してるのですが
他のmdbのフルパスが固定でなく可変です。

テーブル作成クエリの
他のデータベース名を
VBAで変更出来るでしょうか?

もしくは
VBAでテーブル作成クエリを
作成出来るでしょうか?

このQ&Aに関連する最新のQ&A

A 回答 (2件)

良い情報のURLがありました。



into の次がExport先テーブルですね。

参考URL:http://www2.moug.net/cgi-bin/technic.cgi?acvba+T …
    • good
    • 0
この回答へのお礼

これなら出来そうですね。

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

お礼日時:2005/04/02 05:20

> 他のmdbのフルパスが固定でなく可変です。


可変とはいえ、何らかの方法で指定されてますね?

VBA記述になろうかと思いますが以下で実現できると思います。
(確認を行ってません)

1.自身(MDB)にテーブルを作成する。
2.上記テーブルを、目的のMDBにエクスポートする。

この回答への補足

2.上記テーブルを、目的のMDBにエクスポートする。

これをVBAで出来れば解決なんですが
エクスポートってVBAで出来るんですかね?

補足日時:2005/04/02 00:32
    • good
    • 0

このQ&Aに関連する人気のQ&A

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています

関連するカテゴリからQ&Aを探す

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

QAccessのRefresh・Requery・Repaintの違い

Requeryはもう一度ソースレコード(テーブル)を読み込むようです。このとき、テーブルの先頭レコードに移動してしまいます。
Refreshは最新のレコード(テーブル)を再表示するような気がします。レコードの移動は起こらない気がします。
Repaintは、VBAでキャプションなどを変更したとき使っています。
でも、よくわかっていません。
どんなときにどんなメソッドを使えばいいのでしょうか?
詳しい方、よろしくお願いいたします。

Aベストアンサー

たびたびすみません。
調べてたらこんなのがでてきました。
http://www.nurs.or.jp/~ppoy/access/access/acF007.html

参考URL:http://www.nurs.or.jp/~ppoy/access/access/acF007.html

Qクエリのデータをテーブルに入れたい

アクセス2000での話なんですけど、
クエリではじき出したデータをテーブルに保存したいんですけど、具体的にはどうすればよいのでしょう?
当方、超・超・超初心者なので詳しくお願いします。
わがままで、すみません。

Aベストアンサー

>クエリではじき出した

ということは、その「選択クエリー」(まぁ、普通のクエリーですね)をご自分で作られたわけですよね。
とすると話は簡単で、
その「選択クエリー」をデザインモードで開いて、そのときの画面上方のメニューに[クエリ]がありますから、そこから
(1)既存のテーブルに追加保存したい場合は「追加」を
(2)新規にテーブルを作って保存したい場合は「テーブル作成」を選択します。

各々、選択したときに保存対象とするテーブル名を訊いてきますので(1)なら既存のテーブル名、(2)なら新規に作成したいテーブル名を入力します。

こうすることで「選択クエリー」は「追加クエリー」または「テーブル作成クエリー」に変換されます。

大まかにはこういうことなんですが、その他の詳しいことはイルカ君に訊いてみてください。キーワードは「アクション クエリ」です。

QAccessのマクロでモジュールを実行させたい。

Access2002を勉強中の初心者です。

AccessでDB1という名前のデータベースを作成し、その中で、モジュール1というモジュールを作成しました。これを実行するマクロを作成したく、次のようにマクロを作成しました。
マクロのデザイン画面でアクションに「プロージャの実行」を選択、プロージャ名入力覧の右側の...のボタンを押して式ビルダ画面を表示、ここの「関数」フォルダを開いてDB1を選択、表示されたモジュール1を貼り付けてOK。
しかし、このマクロを実行すると、次のエラーとなります。「DB1 指定されたDB1が見つけることができない関数名が含まれています」

根本的に方法が間違っているのでしょうか?
アドバイスをよろしくお願いします。

Aベストアンサー

#1です。

ちょっと時間ができたので、Accessのヘルプで、
 "RunCode/プロシージャの実行" アクション
についてのトピックを見てみました。

結論から言うと、基本的な考え方が間違っているみたいです^^;。

「プロシージャの実行」アクションでは、「Function」プロシージャを指定するようです。
Subプロシージャではエラーになります。


つまりご質問の件では、
「Subプロシージャを呼び出すFnctionプロシージャ」をまず書かなけれえばならない。
そして、マクロのアクションでは、あらためてこのFunctionプロシージャを指定しなければいけません。

QAccessのテーブルデータを一気にVBAで追加したい・・

Accessのテーブルデータを一気にVBAで追加したい・・

Accessに一時商品登録データというテーブルがあり、
問題なければ商品登録データにデータを流し込みたいと思っています

テーブルのデータ構造は全く同じです

VBAで一時商品登録のテーブルから一件ずつデータを読み取って
商品登録データに追加することは出来るのですが
一気にデータを追加する方法があれば教えていただけないでしょうか?

よろしくお願いいたいます

Aベストアンサー

本当にいろいろな方法があります。

一番簡単なのは、
あらかじめ「追加クエリ」を作成しておき

 Docmd.OpenQuery "追加クエリ名"

あるいは DAO で

 Set dbs = CurrentDB
 dbs.Excute "追加クエリ名"

追加クエリを使用しない場合は
追加クエリの SQL文 に相当するSQL を 実行。

 strSQL="INSERT INTO 商品登録データ SELECT 一時商品登録データ.* FROM 一時商品登録データ"

 Docmd.RunSQL strSQL

あるいは DAO で

 Set dbs = CurrentDB
 dbs.Excute strSQL

とか。

直書き、間違いがあったら御免。

QAccessで別テーブルの値をフォームに表示したい

初めてのAccessで分からない事があり質問させてください。

<会社テーブル>
会社ID
会社名
住所

<社員テーブル>
会社ID
社員名
ソート番号

*1社に対し複数の社員レコードが存在

以上のようなテーブルがあるとします

現在「会社テーブル」を表形式で一覧表示しています
会社ID,会社名、住所とフィールドが並んでいるのですが、その後ろに「社員テーブル」のソート番号が一番若い社員名を表示したいと考えています(現状は番号関係なく表示させる方法すら分かりません)

色々いじくりまわしたのですが、初めてAccessをさわる事もあってよくわかりません

リレーション等でひっぱってくる事ができるのでしょうか?

どなたか教えて頂けませんでしょうか

何卒よろしくお願い致します

PS.Access2013で作成中です

Aベストアンサー

単純にテーブル[会社]のみでフォームを作成し、社員表示用テキストボックスを追加。そして、そのプロパティを表示し

コントロールソース=DBLookup("SELECT 社員名 FROM 社員 WHERE 会社ID=" & [会社ID] & " ORDER BY ソート番号")

これは、以下の標準モジュールに登録したユーザ関数 DBLookup()を使っています。これで、クエリを用意しなくても目的を達成できます。

さて、かかるユーザ関数を標準ライブラリに登録したくない場合、

1、"社員ソートクエリ"を作成します。

SELECT 社員.会社ID, 社員.社員名
FROM 社員
ORDER BY 社員.ソート番号;

2、コントロールソースに次のように書きます。

=DLookUp("社員名","社員ソートクエリ","会社ID=" & [会社ID])

http://office.microsoft.com/ja-jp/access-help/HA001228825.aspx

DLookup()については、マイクロソフトの解説を参照されてください。

【DLookup()の限界を破るにはVBAで同じ関数を作るしかない】

マイクロソフトの解説を読めば判りますが、ORDER BY 節を指定する引数が用意されていません。ですから、どうしても、"社員ソートクエリ"を作成するという手間が必要となります。そこで、SQL文を引数とするDBLookup()をVBAで書けば、その手間を省けるという算段になります。この辺りは、好みと趣味の問題。どっちでも良いと思います。そういうお断りをした上で DBLookup()を紹介しておきます。なお、ADOは、つぎのように参照設定しないと利用できません。

http://www.happy2-island.com/access/gogo03/capter00307.shtml

Public Function DBLookup(ByVal strQuerySQL As String, _
             Optional ByVal ReturnValue = Null) As Variant
On Error GoTo Err_DBLookup
  Dim DataValue
  Dim rst     As ADODB.Recordset

  Set rst = New ADODB.Recordset
  With rst
    .Open strQuerySQL, _
       CurrentProject.Connection, _
       adOpenStatic, _
       adLockReadOnly
    If Not .BOF Then
      .MoveFirst
      DataValue = .Fields(0)
    End If
  End With
Exit_DBLookup:
On Error Resume Next
  rst.Close
  Set rst = Nothing
  DBLookup = IIf(Len(DataValue & ""), DataValue, ReturnValue)
  Exit Function
Err_DBLookup:
  MsgBox "SELECT 文の実行時にエラーが発生しました。(DBLookup)" & Chr$(13) & Chr$(13) & _
      "・Err.Description=" & Err.Description & Chr$(13) & _
      "・SQL Text=" & strQuerySQL, _
      vbExclamation, " 関数エラーメッセージ"
  Resume Exit_DBLookup
End Function

単純にテーブル[会社]のみでフォームを作成し、社員表示用テキストボックスを追加。そして、そのプロパティを表示し

コントロールソース=DBLookup("SELECT 社員名 FROM 社員 WHERE 会社ID=" & [会社ID] & " ORDER BY ソート番号")

これは、以下の標準モジュールに登録したユーザ関数 DBLookup()を使っています。これで、クエリを用意しなくても目的を達成できます。

さて、かかるユーザ関数を標準ライブラリに登録したくない場合、

1、"社員ソートクエリ"を作成します。

SELECT 社員.会社ID, 社員.社員名
FR...続きを読む

Qaccessで選択クエリで得た全レコードをテーブルに取り込む方法

選択クエリを実行して得たレコードを全てテーブルに移したいのですが、簡単な方法を教えて下さい。最初からクエリをテーブル作成クエリにする方法以外にありますか?出来ればテーブル(フィールドはもちろんクエリで得たレコードと同じ)はすでに作成済みでそのテーブルに上書きしたいのですが・・・
よろしくお願いいたします!

Aベストアンサー

横レス失礼します。

> フォームを使ってパラメータをわたし、クエリを実行

フォーム上のテキストボックスなどに絞り込み条件を入力し、そこで一旦データを確認した上で
テーブルに追加したい、ということでよろしいでしょうか。

そうであれば、フォームのレコードソース用のクエリ(→選択クエリ)と、テーブル更新用のクエリ
(→削除クエリ+追加クエリ)とをそれぞれ作ってしまう、という手もあると思います。


例えば、
 ・コピー元となるテーブルをテーブル1(フィールド=ID、名前)
 ・コピー先となるテーブルをテーブル2(フィールド=名前)
 ・絞り込み条件と結果を表示するフォーム=フォーム1
 ・絞り込み条件を入力するテキストボックス=テキスト1
 ・フォーム1のレコードソースとなるクエリ=クエリ1
 ・テーブル2の全レコードを削除するクエリ=クエリ2
 ・フォームで絞り込んだレコードをテーブル2に追加するクエリ=クエリ3
とすると、それぞれのクエリは、以下の通りになります:

クエリ1(重複データをそのまま表示):
Select テーブル1.ID,テーブル1.名前 From テーブル1
Where テーブル1.名前 Like "*" & Forms!フォーム1!テキスト1 & "*"

クエリ2:
Delete テーブル2.* From テーブル2;

クエリ3(名前のみを追加、重複する名前は1つにまとめる):
Insert Into テーブル2 ( 名前 )
Select Distinct クエリ1.名前 From クエリ1;


以上です。
(新規クエリをデザインビューで開いたら、テーブルは何も追加せず、メニューで「表示(V)→
 SQLビュー(Q)」を選択して、上記SQL文を貼り付け、保存してください)


なお、テキスト1を編集したら、必ずフォーム1のレコードの表示を更新する形にしておかないと、
フォームの表示とクエリ3で実際にテーブル2に追加されるデータとが合わなくなったりする
ことも考えられますので、注意してください。
(テキスト1の更新後イベントでフォームの表示を更新しているなら、問題ありません)

横レス失礼します。

> フォームを使ってパラメータをわたし、クエリを実行

フォーム上のテキストボックスなどに絞り込み条件を入力し、そこで一旦データを確認した上で
テーブルに追加したい、ということでよろしいでしょうか。

そうであれば、フォームのレコードソース用のクエリ(→選択クエリ)と、テーブル更新用のクエリ
(→削除クエリ+追加クエリ)とをそれぞれ作ってしまう、という手もあると思います。


例えば、
 ・コピー元となるテーブルをテーブル1(フィールド=ID、名前)
 ・コピー先と...続きを読む

Qアクセスで#エラーを表示させない方法は?

アクセス2000を使用しています。フォームにテキストボックスを貼り付けて、計算式を入れています。計算できない数値になると、#エラーと表示されます。目障りなので、#エラー という表示を消したいのですが、どうしたらよろしいでしょうか?宜しくお願い申し上げ候。

Aベストアンサー

はじめは「IIF関数とIsError関数を使用して」と考えたものの、IIF関数は引数がエラーになった時点で
エラーが返されてしまう(=元の木阿弥)ので、どうしたものかと思ったのですが・・・
とりあえず、「見た感じ、何も表示されていないように見える」ということで、『条件付書式』での対応と
いうのはいかがでしょうか。

1)当該フォームをデザインビューで開く
2)当該テキストボックスを選択
3)メニューで「書式(O)→条件付き書式(D)」を選択
4)『条件付き書式設定』ダイアログが開くので、『条件1(1)』枠の左端にあるコンボボックスで「式」を選択
5)上記コンボボックスの隣が1つのテキストボックスになるので、そこに以下のような式を入力
 IsError([テキスト0])
 ※上記の式は当該テキストボックスの名前が「テキスト0」の場合です。
6)上記テキストボックスの下、右から2番目に「A」と表示された、文字色を指定するボタンがあるので、
 その左の小さな「▼」をクリックし、当該テキストボックスの背景と同じ色(既定では白のはず)を選択
7)『OK』ボタンをクリックしてダイアログを閉じる

・・・以上です。
これで、『テキスト0』の計算式がエラーになった場合は、文字色が背景と同じ色になるので、「#エラー」と
いう表示はされていないように見える、という状態にすることができると思います。

はじめは「IIF関数とIsError関数を使用して」と考えたものの、IIF関数は引数がエラーになった時点で
エラーが返されてしまう(=元の木阿弥)ので、どうしたものかと思ったのですが・・・
とりあえず、「見た感じ、何も表示されていないように見える」ということで、『条件付書式』での対応と
いうのはいかがでしょうか。

1)当該フォームをデザインビューで開く
2)当該テキストボックスを選択
3)メニューで「書式(O)→条件付き書式(D)」を選択
4)『条件付き書式設定』ダイアログが開くので、『条件1(1)』枠の...続きを読む

QACCESSで空白のデーターをクエリで判定/識別する方法を教えてくださ

ACCESSで空白のデーターをクエリで判定/識別する方法を教えてください。
EXCELでは空白を""で判定/識別表していますがACCESSではどうなるのでしょうか。

下の例はフィールドに試験番号があればその番号を、空白なら”欠席”と表示しようとしています。
IIf(([試験番号]="空白の場合何を入れる?"),[試験番号],"欠席")

Aベストアンサー

もうひとつの書き方は
式1: IIf([試験番号] Is Not Null,[試験番号],"欠席")
第2、第3引数の、質問の順序にあわせるとこうなる。

QACCESS IIF関数 複数条件の設定について

 選択クエリにおいて、あるフィールド「 X」 のレコード数値が
 
  0<[X]<=50   であれば A 
  50<[X]<=100  であれば B 
  100<[X]<=150  であれば C

 と表記させるフィールド「Y」を追加したいと考えています。
 この場合、Yのフィールド設定で指定する数式についてご教授願います。

 一応、
  IIf(0<[X]<=50,"A","") Or IIf(50<[X]<=100,"B","") Or IIf(100<[X]<=150,"C","")

  としましたが、実行すると、Yの列がすべて「-1」と表記されてしまいます。

 何卒よろしくお願いいたします。

Aベストアンサー

a)IIF関数で対応する場合:
 IIF関数の第2引数または第3引数に、IIF関数を入れ子とする必要があります。

式: IIF([X]<=0, "", IIF([X]<=50, "A", IIF([X]<=100, "B", IIF([X]<=150, "C", ""))))


b)別の組込関数を使用する場合:
 IIF関数は二択ですので入れ子にする必要がありますが、Accessのクエリで
 使用できる、似た機能の関数に、Switch関数というものもあります。
 これであれば、入れ子にする必要がなくなります。
 (詳しくは、Accessのヘルプを参照下さい)

式: Switch([X]<=0, "", [X]<=50, "A", [X]<=100, "B", [X]<=150, "C", True, "")


なお、数学あるいは一般生活では確かに「0<[X]<=50」という表記をしますが、
Accessの関数などではこれだと正しい結果が得られません。
正しく認識させるためには、等号・不等号を挟んだ式は、「左辺」と「右辺」の
2つの要素からなる形にする必要があります。
(「0<[X]<=50」は「[X]>0 And [X]>=50」と分割してやる、と)

但し、今回のご質問のような『連続した範囲』であれば、前(左)で既出となる
式の要素で「[X]<=0」が「真(=-1)」とならなかった時点で、「[X]>0」が保証
されますので、上記のように、「[X]>0」を省略して「[X]<=50」だけを条件として
指定すればOk、ということになります。
(「0<[X]<=50」の次が「80<[X]<120」などのように、「50~80」が欠けた
 場合は、省略ができない、と)


【参考】
「0<[X]<=50」は、このままだと「0 < ([X]<=50)」という式と解釈されます。
この場合、「[X]<=50」は、「真(=-1)」か「偽(=0)」か「Null」のいずれかに
なります。
何にせよ、「0<[X]<=50」全体として「正(=-1)」となることがないため、
ご質問の式では、IIF関数は常に第3引数に指定された値「""」を返す
ことになります。

この結果、式全体としては「"" Or "" Or ""」という形となり、「0かNull」
以外なので、「真(=-1)」という値が返された、ということです。

なお、Nullについては、以前、他の方の質問につけた回答も、併せて参考までに:
http://oshiete.goo.ne.jp/qa/4850675.html

a)IIF関数で対応する場合:
 IIF関数の第2引数または第3引数に、IIF関数を入れ子とする必要があります。

式: IIF([X]<=0, "", IIF([X]<=50, "A", IIF([X]<=100, "B", IIF([X]<=150, "C", ""))))


b)別の組込関数を使用する場合:
 IIF関数は二択ですので入れ子にする必要がありますが、Accessのクエリで
 使用できる、似た機能の関数に、Switch関数というものもあります。
 これであれば、入れ子にする必要がなくなります。
 (詳しくは、Accessのヘルプを参照下さい)

式: Switch([X]<=0, "", [X]<=50, "A"...続きを読む

QACCESS フォームで入力した日付をクエリで読み

ACCESS フォームで入力した日付をクエリで読み替えたい

ACCESS フォームで入力した日付をクエリで使用しているテーブルの書式に変換したい

フォーム テキスト名:日付にyyyymmdd で入力します

クエリ テキスト名:日付はパラメータとして使用しています
クエリ内で使用しているテーブルの日付書式は 日付:yyyy/mm/ddです

パラメータは 「日付始」と「日付終」の2箇所のテキストに入力されたデータを使用しています。以下がパラメータです。

Between [Forms]![フォーム]![日付始] and [Forms]![フォーム]![日付終]

フォームのテキストボックスにyyyymmddと入力してもクエリでエラーが出ることない パラメータを日付に設定したいのですがどうしたらよいでしょうか?

ちなみに、以下の式を入れたらエラーです。

Between CDate(Format([Forms]![フォーム]![日付始],"yyyy/mm/dd")) and CDate(Format([Forms]![フォーム]![日付始],"yyyy/mm/dd")) と入力しましたところ、、、、「式が複雑すぎるか、、、」のエラーメッセージが出てしまいました。
どなたか助けてください。お願い致します。

ACCESS フォームで入力した日付をクエリで読み替えたい

ACCESS フォームで入力した日付をクエリで使用しているテーブルの書式に変換したい

フォーム テキスト名:日付にyyyymmdd で入力します

クエリ テキスト名:日付はパラメータとして使用しています
クエリ内で使用しているテーブルの日付書式は 日付:yyyy/mm/ddです

パラメータは 「日付始」と「日付終」の2箇所のテキストに入力されたデータを使用しています。以下がパラメータです。

Between [Forms]![フォーム]![日付始] and [...続きを読む

Aベストアンサー

> Between [Forms]![フォーム]![日付始] and [Forms]![フォーム]![日付終]
これで合ってると思います。

> クエリ内で使用しているテーブルの日付書式は 日付:yyyy/mm/ddです
フォームの値が正しく日付として認識できてますか?
YYYYMMDDのつもりで8桁の入力なら、ダメですよ。
YYYYMMDDのつもりの8桁の入力なら、betweenを設定する日付の列をformat文で
yyyymmddに編集してテキスト同士として比較するとか。


このQ&Aを見た人がよく見るQ&A

人気Q&Aランキング

おすすめ情報