Access VBA質問箱 IV

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

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


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

【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つの手だと考えております。
・ツリー全体表示

【11353】Re:クエリ結果件数が違う
発言  pon  - 10/1/6(水) 17:37 -

引用なし
パスワード
   追記です

>12万を超える件数でも pon さんの様な事象にあった事がありません。
バグではないですね
失礼しました
・ツリー全体表示

【11352】Re:帳票フォームでヒントテキスト
お礼  わさび  - 10/1/6(水) 16:54 -

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

やはり帳票フォームではできないんですね。
それがわかっただけで大収穫です。
今回はテキストボックスに編集ロックがかかっているため、
教えていただいた方法は実現できませんが、これは他のところで使えそうです。
ヒントテキストの代わりに、コマンドボタンを設けて別枠に表示する方法で対応します。

いろいろと教えていただき助かりました。
ありがとうございます。
・ツリー全体表示

【11351】Re:帳票フォームでヒントテキスト
回答  小僧  - 10/1/6(水) 16:38 -

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

> 帳票フォームでは、個別にヒントテキストが設定できないものなのでしょうか?
> 値と同じ内容のヒントテキストを設定しようと奮闘しておりますが、
> すべての行で同じヒントテキストが表示されてしまい、個別表示ができません。

複数レコードがある帳票フォームの場合
見た目上は複数のテキストボックスが
並んでいるように見えますが
実態のテキストボックスは一つだけです。

その為、1つのテキストボックスのヒントテキストを変えると
全レコードのテキストボックスに反映されてしまいます。

これはAccessの仕様上どうしようもない事ですので
他の方法が良さそうに思われます。


マウスカーソルが当たった時ではなく、
テキストボックスにフォーカスが当たった際に
ヒントテキストを変更するので良いのであれば

Private Sub txt_Test_GotFocus()
  Me.txt_Test.ControlTipText = Me.txt_Test.Value
End Sub

Private Sub txt_Test_LostFocus()
  Me.txt_Test.ControlTipText = ""
End Sub


なんて回避方法も考えられますが
スマートではないですよね。
・ツリー全体表示

【11350】Re:クエリ結果件数が違う
質問  pon  - 10/1/6(水) 15:56 -

引用なし
パスワード
   ▼小僧 さん:
ありがとうございます

>SQLを見る限りですが
>T単価テーブルとの左外部結合を行っているだけなので
>結果は必ずT単価テーブルのレコード数と一致しなければいけないですよね。
ですね

ご指摘を受けて下記確認してみました

仕様1-7をはずしたクエリでは
SELECT T単価.*
FROM ((T単価
  LEFT JOIN LT部位
    ON T単価.部C = LT部位.部C)
  LEFT JOIN LT単位
    ON T単価.単位C = LT単位.単位C)
  LEFT JOIN LT名
    ON T単価.区C = LT名.区C
    AND T単価.工種1C=LT名.工種1C
    AND T単価.工種2C=LT名.工種2C
    AND T単価.工種3C=LT名.工種3C;
必ず117820件となります


>クエリの中でクエリを呼び出している箇所があるので
>そちらを纏めてみたら結果はどうなりますでしょうか。
ん〜
そんなことが出来るのですか

そのまま試してみましたが
FROM 句の構文エラーです。

>>アクセス一応使えるつもりです
なんて書いてしまいましたが、SQLもたまに見るぐらいで低レベルです

SQLビューで仕様を1づつ追加して試してみました
(ご提示頂いたSQLと同じですが・・・・)


仕様を1つ左外部結合してみました
SELECT T単価.*
FROM (((T単価
  LEFT JOIN LT部位
    ON T単価.部C = LT部位.部C)
  LEFT JOIN LT単位
    ON T単価.単位C = LT単位.単位C)
  LEFT JOIN LT名
    ON T単価.区C = LT名.区C
    AND T単価.工種1C=LT名.工種1C
    AND T単価.工種2C=LT名.工種2C
    AND T単価.工種3C=LT名.工種3C)
  LEFT JOIN LT仕様
    ON T単価.工種1C=LT仕様.工種C
    AND T単価.仕様C1+1000=LT仕様.仕区C*1000+LT仕様.仕様C;
動作できましたが
レコード件数は、
117819件
117820件
とかになります

仕様を2つ左外部結合してみました
SELECT T単価.*
FROM ((((T単価
  LEFT JOIN LT部位
    ON T単価.部C = LT部位.部C)
  LEFT JOIN LT単位
    ON T単価.単位C = LT単位.単位C)
  LEFT JOIN LT名
    ON T単価.区C = LT名.区C
    AND T単価.工種1C=LT名.工種1C
    AND T単価.工種2C=LT名.工種2C
    AND T単価.工種3C=LT名.工種3C)
  LEFT JOIN LT仕様 AS T1
    ON T単価.仕様C1+1000=T1.仕区C*1000+T1.仕様C
    AND T単価.工種1C=T1.工種C)
  LEFT JOIN LT仕様 AS T2
    ON T単価.仕様C2+2000=T2.仕区C*1000+T2.仕様C
    AND T単価.工種1C=T2.工種C;
動作できました
レコード件数はやはり
117819件
117820件
とかになります

>そんなことが出来るのですか
ただ、デザインビューにすると
デザイン ビューで、連結式 T単価.仕様C1+1000=T1.仕区C*1000+T1.仕様C を表示できません。
と怒られてしまいましたが
クエリを使ったクエリよりもこちらのすっきりしてよさげな気がします
1歩前進できました ご教授ありがとうございました


117819件
117820件
ですが
よくわかりませんが、CPUのせいではないような気はしますが・・・・
ちなみに
Intel(R) Core(TM)2 Duo CPU 
E4400 @ 2.00GHz
1.99 GHz、0.99 GB RAM
で、クエリ表示後最終レコードに移行すると7秒ぐらいかかります


ふと、クエリ結果件数が毎度異なるなんて 
バグぽっい動きみたいな気もしなくは無いですが、どうなんでしょう・・・・
場合によっては
敷居が高いけど今回は SQL Server Express Edition + ADP にしようかな・・・


とりとめのない書き込みになってしまいましたが
アドバイスありましたらよろしくお願いいたします
・ツリー全体表示

【11349】ExcelからAccessを起動する方法
質問  へらぶな  - 10/1/6(水) 15:14 -

引用なし
パスワード
   皆様はじめまして、へらぶなと申します。
初めての投稿になります。よろしくお願いいたします。

1.やりたいこと
ExcelからAccessを起動したい。
Access起動時には、Excelから渡された引数を元に
Access起動時に起動する初期フォームを切り替えたい。

そのとき、
 a) 目的のAccessが起動していないときは、Shell関数を
   用いて、コマンドライン引数を用いて起動する。
   このコマンドライン引数を元に表示するフォームを切り替える。
 b) 目的のAccessが起動しているときは、
   OLEオートメーションを使用して、
   オブジェクトにセットする。
   この場合、フォームの起動はDoCmdを用いる。

2.わからないこと
 a)目的のAccessが起動しているかを確認する方法。
 b)起動していることが分かったとして、OLEオートメーションの
  オブジェクトにどうやってセットするのか?

3.調べたこと
 a)FindWindow APIを用いれば、ウィンドウ名さえわかれば
  起動しているかどうか判断できる。
 b)Accessの場合、Shell関数を実行した分だけプロセスが
  立ち上がる(2重、3重起動が可能である)
 c)2重起動を防止しつつ、かつ目的のフォームを起動するには、
  OLEオートメーションが最適なのではないか?

4.制限事項
 a)Access側の2重起動はしたくない。
 b)Accessを閉じて開いて、ではなく表示するフォームだけ切り替えたい。
 c)FindWindowでAccessのウィンドウ名を拾うとき、
  開いているフォームによってウィンドウ名が異なる。
  よって、FindWindowでは不適切。

以上になります。
有志の皆様、どうかご協力のほどよろしくお願いいたします。
・ツリー全体表示

【11348】帳票フォームでヒントテキスト
質問  わさび  - 10/1/6(水) 13:13 -

引用なし
パスワード
   帳票フォームのテキストボックスで、幅が狭くて文字列が表示しきれないため、
値と同じ内容のヒントテキストを設定しようと奮闘しておりますが、
すべての行で同じヒントテキストが表示されてしまい、個別表示ができません。
帳票フォームでは、個別にヒントテキストが設定できないものなのでしょうか?

---------------------
【失敗例1】

Sub Test1()

  Dim myCtl As Control
  
  With Forms!F01_Test
    For Each myCtl In .Section(acDetail).Controls
      With myCtl
        If .ControlType = acTextBox Then .ControlTipText = Nz(.Value, "")
      End With
    Next myCtl
  End With

End Sub

---------------------
【失敗例2】

Function Test2(myTest)

  Forms!F01_Test.txt_Test.ControlTipText = Nz(myTest, "")
  Test2 = myTest

End Function

コントロールソース : =Test2([Nm_Test])

---------------------

どうか、ご指南のほどお願い致します。
・ツリー全体表示

【11347】Re:VBSでCSVに条件をつけて書き込むと...
回答  VBA初心者  - 10/1/6(水) 10:52 -

引用なし
パスワード
   ご教授ありがとうございます。
>あと、フィールド間にタブを挿入してますね。

 If strLine <> "" Then strLine = strLine & Chr(9)
       strLine = strLine & strVALUE
 Next

上記の記述でフィールド毎にタブを挿入する意味を持つのでしょうか。
以上、ご教授をお願いします。


▼hatena さん:
>>書き込むときにレコードのフィールドを削除して書き込むでいるみたい
>>ですがその他、タブ区切りをするみたいな記述が書かれているようですが、
>>よくわかりません。
>
>フィールドは削除してません。
>コメントにあるとおり、改行コードは削除してます。
>あと、フィールド間にタブを挿入してますね。
・ツリー全体表示

【11346】Re:VBSでCSVに条件をつけて書き込むと...
回答  hatena  - 10/1/5(火) 22:05 -

引用なし
パスワード
   >書き込むときにレコードのフィールドを削除して書き込むでいるみたい
>ですがその他、タブ区切りをするみたいな記述が書かれているようですが、
>よくわかりません。

フィールドは削除してません。
コメントにあるとおり、改行コードは削除してます。
あと、フィールド間にタブを挿入してますね。
・ツリー全体表示

【11345】Re:クエリ結果件数が違う
回答  小僧  - 10/1/5(火) 17:45 -

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

>ADPのクエリ結果のレコード件数が117,820件

SQLを見る限りですが
T単価テーブルとの左外部結合を行っているだけなので
結果は必ずT単価テーブルのレコード数と一致しなければいけないですよね。

こういったレコード件数の多いMDBのテストとして
郵政公社が提供している郵便番号データを使う事があるのですが
12万を超える件数でも pon さんの様な事象にあった事がありません。
(仕事柄、スペックの高いマシンを使っていますが…)


根本的な解決ではないのですが気になる点として、
クエリの中でクエリを呼び出している箇所があるので
そちらを纏めてみたら結果はどうなりますでしょうか。


SELECT T単価.*
,T1.名称
,T2.名称
,T3.名称
,T4.名称
,T5.名称
,T6.名称
,T7.名称
FROM ((((((((((T単価
LEFT JOIN LT部位
    ON T単価.部C = LT部位.部C)
   LEFT JOIN LT単位
    ON T単価.単位C = LT単位.単位C)
   LEFT JOIN LT名
    ON T単価.区C = LT名.区C
      AND T単価.工種1C = LT名.工種1C
      AND T単価.工種2C = LT名.工種2C
      AND T単価.工種3C = LT名.工種3C)
   LEFT JOIN LT仕様 AS T1
      ON [T単価].[仕様C1] + 1000 = [T1].[仕区C]*1000+[T1].[仕様C]
     AND [T単価].[工種1C] = [T1].[工種C])
   LEFT JOIN LT仕様 AS T2
      ON [T単価].[仕様C2] + 2000 = [T2].[仕区C]*1000+[T2].[仕様C]
     AND [T単価].[工種1C] = [T2].[工種C])
   LEFT JOIN LT仕様 AS T3
      ON [T単価].[仕様C2] + 2000 = [T3].[仕区C]*1000+[T3].[仕様C]
     AND [T単価].[工種1C] = [T3].[工種C])
   LEFT JOIN LT仕様 AS T4
      ON [T単価].[仕様C2] + 2000 = [T4].[仕区C]*1000+[T4].[仕様C]
     AND [T単価].[工種1C] = [T4].[工種C])
   LEFT JOIN LT仕様 AS T5
      ON [T単価].[仕様C2] + 2000 = [T5].[仕区C]*1000+[T5].[仕様C]
     AND [T単価].[工種1C] = [T5].[工種C])
   LEFT JOIN LT仕様 AS T6
      ON [T単価].[仕様C2] + 2000 = [T6].[仕区C]*1000+[T6].[仕様C]
     AND [T単価].[工種1C] = [T6].[工種C])
   LEFT JOIN LT仕様 AS T7
      ON [T単価].[仕様C2] + 2000 = [T7].[仕区C]*1000+[T7].[仕様C]
     AND [T単価].[工種1C] = [T7].[工種C])


>何かアドバイス有りましたらよろしくお願い致します

既に出来上がってしまっている
データベースに対しては難しいのですが

>> 名称 仕様C1 仕様C2 仕様C3
>> AAA   100   200   300   

のようなデータの持ち方でなく、

>> 名称 仕様 データ
>> AAA  C1   100
>> AAA  C2   200
>> AAA  C3   300

の様に正規化をすると色々改善されるかもしれませんね。
・ツリー全体表示

【11344】VBSでCSVに条件をつけて書き込むとき
質問  VBA初心者  - 10/1/5(火) 17:39 -

引用なし
パスワード
   こんにちは。
 参考にしているVBSで処理の意味がわからないものが
あり、ご教授を願いたくご連絡致しました。


        strLine = ""
        For i = 0 To ABCRS.Fields.Count - 1
            
            '-- 改行コードは削除する
            strVALUE = Trim(QawRS.Fields(i))
            strVALUE = Replace(strVALUE, VbCr, "")
            strVALUE = Replace(strVALUE, VbLf, "")
            
        If strLine <> "" Then strLine = strLine & Chr(9)
            
            strLine = strLine & strVALUE
        Next

書き込むときにレコードのフィールドを削除して書き込むでいるみたい
ですがその他、タブ区切りをするみたいな記述が書かれているようですが、
よくわかりません。

どうかご教授をお願い致します。
・ツリー全体表示

【11343】クエリ結果件数が違う
質問  pon  - 10/1/5(火) 14:32 -

引用なし
パスワード
   こんにちは
よろしくお願い致します

XP、2003


アクセス一応使えるつもりです
ADPまだ良くわかりません
SQLサーバー ADPからのぞけるぐらいです

下記わかりにくいと思いますがよろしくお願い致します

ADPの操作は怖いのでMDBで試そうと
MDBにTBLをインポート
ADPのクエリは、外部DB参照のSQLがあってうまく動作しなかったので
手動でMDBに作成しました

ADPのクエリ結果のレコード件数が117,820件
MDBでのクエリ結果が初回117,818件でした
なぜだかわからなかったので
もう一度ADP、MDBのクエリをデザインで見比べてみましたが
構造に違いはありませんでした
で試しに、もう一度MDBのクエリを実行すると
レコード件数が117,819件でした
??と思って、何度も再実行してみましたが
117,819件で、117,818件は見間違えかと思いました

上記は昨日です
で、今日、

参照している各TBLのレコード件数や
クエリから参照しているクエリのレコード件数を
確認してみましたが
不具合の発生するクエリ以外は全て同じレコード件数でした

その後そのクエリをもう一度試すとレコード件数は117,820件!!

昨日の結果はなんっだんだろう、が取合えず良かった

再度試すと 117,818件
??
再度試すと 117,819件
再度試すと 117,819件
再度試すと 117,819件

で、別のマシンBで試してみましたが
こちらは、117,819件でした


マシンC vista、2007で試してみました
初回 117,818件
2回目 117,820件
3回目 117,820件となりました
ちなみにADPは毎度 117,820件となります

そこで、マシンBで
リンクTBLをインポートし自MDB内で試してみましたが
レコード件数は 117,819件でした

その後
マシンBにて元のMDBで試行して見ましたが
1度  117,820件がありましたが
他は 117,819件でした

最後に上記MDBの最適化を実行して見ましたが
その結果は
一回目117,819件でした
二回目117,820件でした
三回目117,819件でした

不具合クエリは
クエリ    Q03JOB仕リ
です

何かアドバイス有りましたらよろしくお願い致します


構造は
JOB.mdb        
リンクTBL    LTタイプ    9
リンクTBL    LT仕様    228
リンクTBL    LT単位    142
リンクTBL    LT部位    145
リンクTBL    LT名    153
自TBL    T単価    117820
クエリ    Q01仕様    228
クエリ    Q02JOBリ    117820
クエリ    Q03JOB仕リ    117819
        
マスタ.mdb        
自TBL    LTタイプ    9
自TBL    LT仕様    228
自TBL    LT単位    142
自TBL    LT部位    145
自TBL    LT名    153

クエリ    Q01仕様
SELECT LT仕様.*, [仕区C]*1000+[仕様C] AS tmp
FROM LT仕様;

クエリ    Q02JOBリ
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
FROM T単価;

クエリ    Q03JOB仕リ
SELECT Q02JOBリ.*,
Q01仕様.名称, Q01仕様_1.名称, Q01仕様_2.名称, Q01仕様_3.名称,
Q01仕様_4.名称, Q01仕様_5.名称, Q01仕様_6.名称
FROM (((((((((Q02JOBリ LEFT JOIN LT部位
ON Q02JOBリ.部C = LT部位.部C) LEFT JOIN LT名
ON (Q02JOBリ.区C = LT名.区C) AND (Q02JOBリ.工種3C = LT名.工種3C)
AND (Q02JOBリ.工種2C = LT名.工種2C) AND (Q02JOBリ.工種1C = LT名.工種1C))
LEFT JOIN LT単位 ON Q02JOBリ.単位C = LT単位.単位C)
LEFT JOIN Q01仕様 ON (Q02JOBリ.S1 = Q01仕様.tmp)
AND (Q02JOBリ.工種1C = Q01仕様.工種C)) LEFT JOIN Q01仕様 AS Q01仕様_1
ON (Q02JOBリ.S2 = Q01仕様_1.tmp) AND (Q02JOBリ.工種1C = Q01仕様_1.工種C))
LEFT JOIN Q01仕様 AS Q01仕様_2 ON (Q02JOBリ.S3 = Q01仕様_2.tmp)
AND (Q02JOBリ.工種1C = Q01仕様_2.工種C)) LEFT JOIN Q01仕様 AS Q01仕様_3
ON (Q02JOBリ.S4 = Q01仕様_3.tmp) AND (Q02JOBリ.工種1C = Q01仕様_3.工種C))
LEFT JOIN Q01仕様 AS Q01仕様_4 ON (Q02JOBリ.S5 = Q01仕様_4.tmp)
AND (Q02JOBリ.工種1C = Q01仕様_4.工種C)) LEFT JOIN Q01仕様 AS Q01仕様_5
ON (Q02JOBリ.S6 = Q01仕様_5.tmp) AND (Q02JOBリ.工種1C = Q01仕様_5.工種C))
LEFT JOIN Q01仕様 AS Q01仕様_6 ON (Q02JOBリ.S7 = Q01仕様_6.tmp)
AND (Q02JOBリ.工種1C = Q01仕様_6.工種C);
・ツリー全体表示

【11342】Re:エクセルからアクセスに取り込み
発言  小僧  - 10/1/5(火) 11:25 -

引用なし
パスワード
   ▼SS さん、みなさま:
こんにちは。

上のかみちゃんさんのご回答にもありますが

> 自動で行なうことは、可能ですが、そのためには、
> しっかりと要件を固める必要があります。

ここが肝心ですよね。

・Excel起動
・Excelマクロ実行
・Excel終了
・Access起動
・AccessVBAの実行(←ここが知りたい)

という流れで宜しいでしょうか。

それとも
A) ExcelVBAのみで
  Accessのテーブルにデータ登録を行いたい

B) AccessVBAのみでデータの並び替えから
 テーブルへのデータ登録までを行いたい

のどちらかなのでしょうか。


ExcelデータをAccessのテーブルに取り込むには
TransferSpreadsheet メソッドを使用する方法がありますが、
既存のテーブルに取り込む際には
Excelの1行目とAccessのフィールド名を合わせないといけません。

よろずやさんのご回答にある様に
Excelファイルをそのまま取り込み
AccessVBA等を使って
既存テーブルへの取り込みを行うか、

Excelファイルの1行目をAccessテーブルの項目名に書き換えてから
一気に取り込むかが一般的だと思います。
(流れとしては
 Excelファイルのコピー
 コピーしたファイルの1行目書き換え
 コピーしたファイルからAccessへ取り込み
 コピーしたファイルの削除)
・ツリー全体表示

【11341】メモ型フィールドの文字制限
質問  榎戸 E-MAIL  - 10/1/2(土) 8:45 -

引用なし
パスワード
   ACCESSデータベースのメモ型フィールドの文字数制限について
VB6から、MDBメモ型フィールドにINSERT/UPDATEすると、1000バイトしか登録できません。
ACCESSのバージョンは、97です。
MDBを開いて、手で、メモ型フィールドを更新すると、1000バイト以上、登録できます。
10,000バイトほどのデータを登録したいのですが、どこを確認すればいいのでしょうか。
よろしくお願いします。
・ツリー全体表示

【11340】Re:エクセルからアクセスに取り込み
質問  SS  - 10/1/1(金) 18:41 -

引用なし
パスワード
   お世話になります。
ご指摘については以後気をつけたいと思います。
>Excelファイルには、タイトル行はないのですか?
1行目がタイトル行になります。(意味が違いますか?)

>Excelの項目名は常に固定されているのでしょうか?
常に固定となりますが、項目名、数値の空欄のところもあります。(未検査の所は空欄となります)
または空欄の項目名、数値を詰めた形でも結構です。
下記にて解決すみです。
http://park7.wakwak.com/cgi-bin/sbox/~efc21/exqalounge.cgi?print+200912/09120093.txt


>ちなみに以下と何か関係がありますか?
質問方法がルール違反でした。すみませんでした。

  A        B   C    D   E    F    G   H  I・
1ファイル日付    ID   GOT  GPT  ALP  LDH  GTP    ALB・・・
2 2009/12/14  01        12  112  110  34     3.5  ・・
3 2009/12/14  02   15   23   45  145  45  
4 2009/12/14  03   25   15   44  120          ・・ 
・ 

上記のような項目の固定されたエクセルファイルがあります。(C1にはGOT、H1には必ずTPが入りますが、検査されていないと項目、数値とも空欄です。)
(または、検査されていない空欄を詰めた形でも結構です)

これをアクセステーブル(既存)に
採取日    氏名 患者番号 TP Alb got gpt LDH・・・・
2009/10/1       01   6.0 2.5  45  56  110・・・・


の後に追加したいのですが。
氏名は空欄のままです。エクセルとアクセスの項目名の並びは違います。大文字、小文字の違いもあります。(GOT=got、GPT=gpt等)
アクセスの方は項目名など変更したくありません。

以上ですが、宜しくお願いします。
・ツリー全体表示

【11339】Re:エクセルからアクセスに取り込み
発言  かみちゃん E-MAIL  - 09/12/31(木) 22:53 -

引用なし
パスワード
   こんにちは。かみちゃん です。

>下記のようなエクセルファイルがあります。
>
>   A    B    C    D  E  F  G ・・・・
> ファイル日付  番号  氏名  GOT GPT ALP LDH ・・・
>1 20091209   12   ○○  12  23  100 23 ・・・

Excelファイルには、タイトル行はないのですか?

>これに追加取り込みしたいです。エクセルとアクセスの項目の並びが違います。

Excelの項目名は常に固定されているのでしょうか?
固定されているならば、Accessへの取り込みは、比較的簡単かと思います。

>アクセステーブルの項目をエクセルに合わせてコピペしか思いつかないのですが
>テーブルにコピペってできるんですか?。何か良い方法は?
>希望は、自動に行いたいです。

自動で行なうことは、可能ですが、そのためには、しっかりと要件を固める必要があります。

ちなみに以下と何か関係がありますか?
http://park7.wakwak.com/~efc21/cgi-bin/exqalounge.cgi?print+200912/09120093.txt
・ツリー全体表示

【11338】Re:エクセルからアクセスに取り込み
発言  よろずや  - 09/12/31(木) 21:26 -

引用なし
パスワード
   >これに追加取り込みしたいです。エクセルとアクセスの項目の並びが違います。
>行の氏名の並びも違います。
エクセルファイルの形のまま取り込んで、
その結果を追加するのが分かりやすいかと。

>希望は、自動に行いたいです。
もちろん自動化可能ですよ。
・ツリー全体表示

【11337】Re:印刷プレビュー時のシャッターバーに...
お礼  VBA初心者  - 09/12/31(木) 14:44 -

引用なし
パスワード
   ▼小僧 さん
 こんにちわ。
VBA初心者です。
 「印刷プレビュー時の・・・」件、
DoCmd.SelectObject acForm, stDocName, Falseと記述したら
解決できました。

 有難うございました。

>お手数おかけしています。
> VBA初心者です。
>>SelectObject メソッドのヘルプを確認されておりますでしょうか?
> 確認しておりませんでした。確認後、
> オブジェクトの選択" アクションを実行するコマンドのようなもの
> と書かれていたので、
> DoCmd.SelectObject acForm, stDocName, Falseとしてチャレンジ
> してみます。
>  現在ACCESSが使用できる環境がないので後日チャレンジさせて
> もらいます。
>
>ご教授ありがとうございました。
>
>
>>▼VBA初心者 さん:
>>こんにちは。
>>
>>>>>  DoCmd.SelectObject acForm, stDocName, True
>>>>こちらの操作は必要なのでしょうか。
>>
>>> 他のサンプルソースから参考にしたので正直あまり
>>> 意味がわかっていません。
>>
>>SelectObject メソッドのヘルプを確認されておりますでしょうか?
>>
>>
>>構文
>>式.SelectObject(ObjectType, ObjectName, InNavigationPane)
>>
>>InNavigationPane:
>>データベース ウィンドウでオブジェクトを選択するには、True を使います。
・ツリー全体表示

【11336】エクセルからアクセスに取り込み
質問  SS  - 09/12/31(木) 10:23 -

引用なし
パスワード
   下記のようなエクセルファイルがあります。

   A    B    C    D  E  F  G ・・・・
 ファイル日付  番号  氏名  GOT GPT ALP LDH ・・・
1 20091209   12   ○○  12  23  100 23 ・・・
2 20091210   14   ○×  14  13  90 13 ・・・
3 20091210   19   ○△  19  20  120 53 ・・・
・  ・    ・
・  ・    ・

番号は個人別で重複していません。

上記のファイルをアクセステーブルの
採血日   氏名  番号  TP   ZTT  GOT  LDH  ALP・・・
2008/4/4  ○○   12   6.7  211  45  34  54・・・
2009/10/10 ○△   19   5.5  112  12  23  34・・・
 ・     ・
 ・     ・

これに追加取り込みしたいです。エクセルとアクセスの項目の並びが違います。
行の氏名の並びも違います。

アクセステーブルの項目をエクセルに合わせてコピペしか思いつかないのですが
テーブルにコピペってできるんですか?。何か良い方法は?
希望は、自動に行いたいです。
・ツリー全体表示

【11335】Re:印刷プレビュー時のシャッターバーに...
お礼  VBA初心者  - 09/12/30(水) 19:07 -

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

お手数おかけしています。
 VBA初心者です。
>SelectObject メソッドのヘルプを確認されておりますでしょうか?
 確認しておりませんでした。確認後、
 オブジェクトの選択" アクションを実行するコマンドのようなもの
 と書かれていたので、
 DoCmd.SelectObject acForm, stDocName, Falseとしてチャレンジ
 してみます。
  現在ACCESSが使用できる環境がないので後日チャレンジさせて
 もらいます。

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


>▼VBA初心者 さん:
>こんにちは。
>
>>>>  DoCmd.SelectObject acForm, stDocName, True
>>>こちらの操作は必要なのでしょうか。
>
>> 他のサンプルソースから参考にしたので正直あまり
>> 意味がわかっていません。
>
>SelectObject メソッドのヘルプを確認されておりますでしょうか?
>
>
>構文
>式.SelectObject(ObjectType, ObjectName, InNavigationPane)
>
>InNavigationPane:
>データベース ウィンドウでオブジェクトを選択するには、True を使います。
・ツリー全体表示

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