Access VBA質問箱 IV

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

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


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

【10907】Re:エクセルからアクセスへAddNewで
質問  ON  - 09/1/6(火) 15:38 -

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

【59481】ローカルPCからのデータ取得
ht tp://www.vbalab.net/vbaqa/c-board.cgi?cmd=ntr;tree=59481;id=excel
での希望は、データの自動取得で
これについては

下記の方法で
各ローカルPCでATコマンドで毎週月曜12:00に上記のコードを自動実行
すればいいのではと思っていますが
これを100台のPCで自動書き込みされるとMDBが壊れるような気がします

場合によっては
Atコマンド登録の際、起動時間を数分ずつずらせて設定すればいいような気もしますが・・・


レベル低いです
アドバイス頂けるとうれしいです

よろしくお願いいたします
・ツリー全体表示

【10906】Re:一つのフォーム上にある複数の薬品コ...
発言  neptune  - 09/1/5(月) 22:41 -

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

沢山の説明をしてくれてますので、私もなんとか出来るアドバイスは
差し上げたいのですが、いかんせん想像力に欠けておりまして困っております。

普段はこちらから尋ねたりしないんですが、
・どこに表示させていますか?・・・恐らくフォームとは思いますが??
・何のコントロールを使ってますか?

>さっそくレスありがとうございます。
>超初心者の為、要領を得ずお手数をお掛け致します。再度質問をし直させて
>頂きます。何卒、ご教授下さい。
>
>9つのフィールドがあります。
本当に9つだけですか???

>薬品コード1フィールドに何かコードを入力したら薬品マスタから拾ってきて
>薬品名1フィールドと薬価1フィールドに表示
>薬品コード2フィールドに何かコードを入力したら薬品マスタから拾ってきて
>薬品名2フィールドと薬価2フィールドに表示
>薬品コード3フィールドに何かコードを入力したら薬品マスタから拾ってきて
>薬品名3フィールドと薬価3フィールドに表示
>という処理を行いたいのですが、現在の状況としては
どこにどういう風にして入力するのですか?

>薬品名2フィールド、薬価2フィールドなどのプロパティに設定として薬品コード2
>フィールドに入力されたコードを参照して薬品マスタから拾ってきなさいという
>ような指示をしないとダメなんだと思われますが、方法が分りません。
今はどこにどのようなことを書いて、又は設定しているのですか?
・コントロールを使っているなら連結してますか?
・クエリは使ってますか?


やろうと思えば、どのような方法でも有り得ると思いますので。。。。。

・・・・ちなみに全部手取り足取りというわけには出来ませんのであらかじめ
お断りしておきます。
・ツリー全体表示

【10905】Re:DATAの集約方法について
回答  かわせ  - 09/1/5(月) 19:24 -

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

ずばり、回答できないのですが、次にどのように
されたいかがわからないですが、 TABLE-Bが必要かどうか、
再度検討されてはいかがでしょう。
つまり、次にされたいことは、TABLE-A の情報から
取り出せないでしょうか? テーブルはむやみに増やさないほうが
後々、より簡素に扱えるのいいと思います。
アドバイスになってないかもしれませんが、すいません。

>TABLE-A の DATA を TABLE-B のように
>集約した形に作り替えたいのですが、
>どのようにしたら良いか分かりません。
>方法をご教示ください。
>
>
>TABLE-A
>-------------------------------    
>CODE    RANK    POINT    
>-------------------------------    
>A    1    20        
>A    2    30        
>A    3    40        
>B    1    50        
>B    3    60        
>
>
>TABLE-B
>-------------------------------                    
>    RANK1    RANK2    RANK3    
>CODE    POINT    POINT    POINT    
>-------------------------------    
>A    20    30    40    
>B    50        60
・ツリー全体表示

【10904】モジュールはこれです。 (付け忘れまし...
発言  かわせ  - 09/1/5(月) 17:01 -

引用なし
パスワード
   SQL1 = "SELECT DISTINCTROW RBINV2.SNBR, Sum(RBINV2.SHPQTY) AS INVSHPQTY FROM RBINV2, LASTNO WHERE (((RBINV2.INVN) = [LASTNO].[lastinvn])) GROUP BY RBINV2.SNBR;"

Set RS1 = DB.OpenRecordset(SQL1)
Do Until RS1.EOF

SQL2 = "update RBINV2 set RBINV2.SHPQTYINV= " & RS1!INVSHPQTY & " WHERE RBINV2.SNBR=" & RS1!SNBR & ";"

  DB.Execute SQL2
  RS1.MoveNext
  Loop
・ツリー全体表示

【10903】where句に追加
質問  かわせ  - 09/1/5(月) 16:55 -

引用なし
パスワード
   初めて投稿しますよろしくお願いします。判ってるような判ってないようなレベルです。参考書から、まねしたり、しながら作ってますので、ご容赦ください。
また、長文で申し訳ありません。

テーブル LASTNO 

カラム  LASTINVN 
実データ  5111
------------------
テーブル RBINV2

カラム  INVN
     SNBR
     SHPQTY
     INVSHPQTY

今、テーブル RBINV2 に下記データがあります。 
INVN  SNBR  INVSHPQTY
5111  23456  100
5111   23456  50
5020  23456   200
これを、モジュール実行後、
5111  23456   150 <100+50>
5111  23456   150  <100+50>
5020  23456  200 <これは変化せず>
のように、したいのですが、下記のようにすべて変更されてしまいます。
5111  23456   150
5111   23456  150
5020  23456   150

下記のモジュール SQL2 のWHERE句に [RBINV2].[INVN] = [LASTNO].[LASTINVN]
を加えて、INVN=5111 の合計を出して、 INVN=5111 だけのINVSHPQTYを
変更しなければならないと思うのですが、WHERE句にいろいろ、記述を入れて見るのですが、エラーになります。  限定するには、WHERE句にどのように追加記述すればいいでしょうか?

よろしくお願いします。
・ツリー全体表示

【10902】DATAの集約方法について
質問  pinetree  - 09/1/5(月) 16:09 -

引用なし
パスワード
   TABLE-A の DATA を TABLE-B のように
集約した形に作り替えたいのですが、
どのようにしたら良いか分かりません。
方法をご教示ください。


TABLE-A
-------------------------------    
CODE    RANK    POINT    
-------------------------------    
A    1    20        
A    2    30        
A    3    40        
B    1    50        
B    3    60        


TABLE-B
-------------------------------                    
    RANK1    RANK2    RANK3    
CODE    POINT    POINT    POINT    
-------------------------------    
A    20    30    40    
B    50        60
・ツリー全体表示

【10901】置換をマクロでやりたい
質問  hiro  - 09/1/2(金) 17:06 -

引用なし
パスワード
   Access2003で編集−置換で
データを修正するのは分かるのですが
修正するデータが60通りほどあるので
まとめてマクロで出来ないでしょうか?

修正する列は一列ですが
修正するデータが
T010→T001
T020→T002



0001→A001
のように変更するデータが60通りあります。
・ツリー全体表示

【10900】エクセルからアクセスへAddNewで
質問  ON  - 08/12/31(水) 11:08 -

引用なし
パスワード
   よろしくお願いいたします

ファイルサーバー上のMDBに
各ローカルPCからエクセルマクロを実行し
アクセスにレコード書き込みを実行しています
数台のPCからの同時書き込み?(せいのでマクロ実行)
では不具合はありませんでした

以前どこかでmdbへの同時接続、同時使用?の制限があるような
記述を見たことがあったのですが
・同時に開いて使用するのが5人?
・同一レコードへの書き込みはロックがかかる
 (同時にTBLを開いて同一レコードを操作した場合になるは体験済み)
とかよく理解できていません

実際には下記のコードでレコード追加しているのですが
多分一瞬のことで同時に実行されることは少ないと考えていますが
よくわかりません

下記Qの他、適正なコード等アドバイスありましたらよろしくお願いいたします

・同時書き込みが生じた場合
Q1)アクセス側で発生する書き込み不可のメッセージ等は、ローカルPCに出るのでしょうか
Q2)エクセルマクロは途中で停止するのでしょうか
Q3)エクセルのメッセージで再実行とか出るのでしょうか

同時書き込みのテスト方法わかりませんでした
テストコードご教授頂けるとうれしいです

最悪、アクセス側の書き込みレコードを見れば、未書き込みPCは把握できるので
再度、実行してもらえばいいのではと考えています


エクセル側マクロ
参照設定 Microsoft DAO 3.6 Object Library

Public Sub Add2DT(C_ROW As Long) 'C_ROW As Long

  Dim Wsp As Workspace
  Dim Db As Database
  Dim Rst As Recordset
  Dim intCount As Integer
  
  Dim C As Integer
  
  Const strDBName As String = "\\hoge\fuga\KIKI_ROG.mdb"
  
  Set Wsp = Workspaces(0)
  Set Db = Wsp.OpenDatabase(strDBName)
  Set Rst = Db.OpenRecordset("T03_KIKI_LOG", dbOpenTable)
  
  'For intCount = 1 To ActiveSheet.UsedRange.SpecialCells(xlCellTypeLastCell).Row
  'For intCount = 1 To ActiveSheet.Cells.SpecialCells(xlLastCell).Row
  
  Rst.AddNew
  
    For C = 0 To 22
  
      Rst(C) = Cells(C_ROW, C + 1).Value
    
    Next
    
      Rst(23) = Now()
  
  Rst.Update
  
  'Next intCount
  
  Rst.Close
  Set Rst = Nothing
  
  Db.Close
  Set Db = Nothing
  
  Wsp.Close
  Set Wsp = Nothing


End Sub


関連Q
【59481】ローカルPCからのデータ取得
://www.vbalab.net/vbaqa/c-board.cgi?cmd=one;no=59481;id=excel
・ツリー全体表示

【10899】Re:一つのフォーム上にある複数の薬品コ...
質問  みかん  - 08/12/30(火) 23:39 -

引用なし
パスワード
   さっそくレスありがとうございます。
超初心者の為、要領を得ずお手数をお掛け致します。再度質問をし直させて
頂きます。何卒、ご教授下さい。

薬品マスタ、薬品使用テーブルとあり、薬品使用フォームには
薬品コード1フィールド、薬品名1フィールド、薬価1フィールド
薬品コード2フィールド、薬品名2フィールド、薬価2フィールド
薬品コード3フィールド、薬品名3フィールド、薬価3フィールド
9つのフィールドがあります。

薬品コード1フィールドに何かコードを入力したら薬品マスタから拾ってきて
薬品名1フィールドと薬価1フィールドに表示
薬品コード2フィールドに何かコードを入力したら薬品マスタから拾ってきて
薬品名2フィールドと薬価2フィールドに表示
薬品コード3フィールドに何かコードを入力したら薬品マスタから拾ってきて
薬品名3フィールドと薬価3フィールドに表示

という処理を行いたいのですが、現在の状況としては

薬品コード1フィールドに何かコードを入力したら薬品マスタから拾ってきて
薬品名1フィールドと薬価1フィールドに表示
ここまでは出来ていますが、これに加えて(誤処理として)

薬品名2フィールド、薬価2フィールド、薬品名3フィールド、薬価3フィールド
に薬品コード1フィールドに入力したコードの内容が表示されてしまっています。

本来であれば、薬品コード1フィールドと薬品コード2フィールドには何も入力
していないので、当然に薬品名2フィールド、薬価2フィールド、薬品名3フィールド、薬価3フィールドは、空白のままのはずなのですが。

薬品名2フィールド、薬価2フィールドなどのプロパティに設定として薬品コード2
フィールドに入力されたコードを参照して薬品マスタから拾ってきなさいという
ような指示をしないとダメなんだと思われますが、方法が分りません。
つたない説明で度々お手数ですが、引き続きご教授をお願い致します。
・ツリー全体表示

【10898】Re:一つのフォーム上にある複数の薬品コ...
発言  neptune  - 08/12/30(火) 16:40 -

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

なんか、書けることがあったら書いてあげたいのですが、
>薬品マスタ、薬品使用テーブルとあり、薬品使用フォームには
>
>薬品コード1、薬品名1、薬価1
>薬品コード2、薬品名2、薬価2
>薬品コード3、薬品名3、薬価3
薬品使用テーブルの薬品コードフィールドのデータに従って、
薬品名と、薬価を抽出するんですよね?
それとも、本当に9つのフィールドを持っているのか?

最低限、
どういう風なコントロールを使って、どういう風データの取り方、連結、非連結
等の情報を書かなければ有効なアドバイスはもらいにくいのでは。
・ツリー全体表示

【10897】一つのフォーム上にある複数の薬品コード...
質問  みかん  - 08/12/29(月) 10:02 -

引用なし
パスワード
   お世話になります。かなり初歩的な事で悩んでおります。
ご教授をお願い致します。

薬品マスタ、薬品使用テーブルとあり、薬品使用フォームには

薬品コード1、薬品名1、薬価1
薬品コード2、薬品名2、薬価2
薬品コード3、薬品名3、薬価3

というフィールドがあります。
薬品マスタと薬品使用テーブルはリレーションシップが結んであり
薬品コード1を入力すると、薬品名1と薬価1が表示されますが、
薬品コード2を入力していないのに、薬品名2と薬価2及び薬品名3、薬価3が
勝手に表示されてしまいます。(いずれも薬品コード1の内容)
おそらく薬品名2や薬価2などのフィールドに何か設定するのだと思いますが
方法がわかりません。
どなたかご教授下さい。宜しくお願い致します。
・ツリー全体表示

【10896】Re:ADOでCSVの取り込み時のフィルタで&q...
発言  ON  - 08/12/26(金) 13:19 -

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

リンク先見てみました

SQLServerはほとんど ?? です
パススルークエリで利用することがあるくらいです

そのうち、勉強しようとは思っているのですが・・・
なかなか手出しすることが出来ないままです

GOて何? みたいな感じですが、少しづつ勉強したいと思います

引き続きQがあると思いますが
次回は年明けになってしまいます


来年もどうぞ宜しくお願いします。
では、よいお年を。
・ツリー全体表示

【10895】Re:ADOでCSVの取り込み時のフィルタで&q...
回答  neptune  - 08/12/25(木) 16:55 -

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

>で、既存」のテーブルに追記は
>F1のようにフィールド名を記載で出来るのですが
>*では受け付けてくれませんでした
>
>やはり、全フィールド記載しなくてはいけないのでしょうか
*ってサブクエリの方ですよね。それが間違いないです。
無駄と言われれば無駄ですけどね。

うまい解説がありましたので、それを見て下さい。

以下資料です。
SQLServer(T_SQL)のものですが、ADOのSQLはSQLServerと同じSQL-92に
準拠しているのでSQLServerと同じと思います
ht tp://msdn.microsoft.com/ja-jp/library/ms189872(SQL.90).aspx

サブクエリの選択リストは、INSERT ステートメントの列リストに一致している
必要があります。列リストを指定しない場合は、選択リストは、追加される
テーブルまたはビュー内の列に一致している必要があります。
・ツリー全体表示

【10894】Re:ADOでCSVの取り込み時のフィルタで&q...
発言  ON  - 08/12/25(木) 12:51 -

引用なし
パスワード
   ▼neptune さん:
こんにちは いつもありがとうございます
 
>エラーの原因ですが、この辺りにあるような気がします。
>CSVに求めるデータ型を設定したい時は「schema.ini」ファイルなるものを使います。
>詳しくは「schema.ini ADO」をキーワードにググって見て下さい。

schema.ini
を設定することで不具合は、解消しました

>[filename#csv]の形式
>で書きましたが。。。そうでなくともいけるんですね。
は、どちらでも問題なく動きました
ありがとうございました

追加のQで申し訳ないのですが

Dim cn As ADODB.Connection
Dim strSQL As String
Set cn = CurrentProject.Connection

strSQL = "insert into Tmp01_imprt(F01)" & _
" select F01 from " & _
" [TEXT;Database=" & CurrentProject.Path & "\;HDR=YES].[hoge.csv];"

cn.Execute strSQL

で、既存」のテーブルに追記は
F1のようにフィールド名を記載で出来るのですが
*では受け付けてくれませんでした

やはり、全フィールド記載しなくてはいけないのでしょうか

よろしくお願いいたします
・ツリー全体表示

【10893】Re:ADOでCSVの取り込み時のフィルタで&q...
回答  neptune  - 08/12/24(水) 22:17 -

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

             
>  cnn.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;" _
>              & "Data Source=" & csvPath & _
>              "Extended Properties=""Text;FMT=Delimited;HDR=yes;"""
コピペの間違いと思いますが、行継続文字が変ですね。
             
>  'rst.Open "select * from" & csvFilename & " where [F0str] = '001', cnn, adOpenForwardOnly, adLockOptimistic"
>    '↑実行時エラー '3709':この操作を実行するために接続を使用できません。このコンテキストで閉じているかあるいは無効です。 
私は昔、csvFilename は
[filename#csv]の形式
"[20081219152808DL_AssetData#csv]"
で書きましたが。。。そうでなくともいけるんですね。

エラーの原因ですが、この辺りにあるような気がします。
CSVに求めるデータ型を設定したい時は「schema.ini」ファイルなるものを使います。
詳しくは「schema.ini ADO」をキーワードにググって見て下さい。
・ツリー全体表示

【10892】Re:ADOでCSVの取り込み時のフィルタで&q...
質問  ON  - 08/12/24(水) 20:20 -

引用なし
パスワード
   少し変えてみましたが、エラーです

Public Sub Get_Csv1()


  Dim csvPath As String
  Dim csvFilename As String
  
  csvPath = CurrentProject.Path & "\;"
  csvFilename = "20081219152808DL_AssetData.csv"

  Dim cnn As ADODB.Connection
  Dim rst As ADODB.Recordset
  
  Set cnn = New ADODB.Connection              
              
  cnn.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;" _
              & "Data Source=" & csvPath & _
              "Extended Properties=""Text;FMT=Delimited;HDR=yes;"""
              
  cnn.Open
  
  Set rst = New ADODB.Recordset
        
  rst.Open "select * from " & csvFilename, cnn, adOpenForwardOnly, adLockOptimistic
    '↑動きます
  
  'rst.Open "select * from" & csvFilename & " where [F0str] = '001', cnn, adOpenForwardOnly, adLockOptimistic"
    '↑実行時エラー '3709':この操作を実行するために接続を使用できません。このコンテキストで閉じているかあるいは無効です。 
          
  
  While rst.EOF = False
    Debug.Print rst(0).Value & "," & rst(1).Value & "," & rst(2).Value
    rst.MoveNext
  Wend
  
  rst.Close
  Set rst = Nothing
  
  cnn.Close
  Set cnn = Nothing

End Sub
・ツリー全体表示

【10891】ADOでCSVの取り込み時のフィルタで"...
質問  ON  - 08/12/24(水) 17:56 -

引用なし
パスワード
   よろしくお願い致します

Public Sub Get_Csv()


  Dim dbCon As ADODB.Connection
  Dim dbRes As ADODB.Recordset
  Dim COL As Long
  Dim strSQL As String
  Dim MyRow As Long
  
  Dim tg_rec As Variant
  Dim I As Long
  Dim J As Long
  
    
  Set dbCon = New ADODB.Connection

  With dbCon
    .Provider = "Microsoft.Jet.OLEDB.4.0"
    '.Properties("Extended Properties") = "Text"
    .Properties("Extended Properties") = "Text;FMT=Delimited;HDR=yes;"
    .Open CurrentProject.Path & "\"
  End With

  strSQL = "SELECT * FROM hoge.csv"

  Set dbRes = New ADODB.Recordset

  'dbRes.Open strSQL, dbCon, adOpenDynamic, adLockOptimistic, adCmdText
  dbRes.Open strSQL, dbCon, adOpenKeyset, adLockOptimistic, adCmdText

  dbRes.Filter = "[F0str] = '001'" ←ココ


実行時エラー '-2147352571 (80020005)':
種類が一致しません。

どう記述すればいいでしょうか

アドバイスよろしくお願い致します
・ツリー全体表示

【10890】Re:ファイル検索について
回答  neptune  - 08/12/23(火) 22:49 -

引用なし
パスワード
   ▼ひで さん:

自信は無いのですが、AddItemメソッドはどうもOfficeXP以降から
実装されたようです。
当方は2000ですが、やはり同じエラーが出ました。昔、使ったような気が
したんですが、勘違いだったようです。

Helpでリストボックスの値集合ソースプロパティを調べて下さい。
そこにデータの表示のさせ方が書かれています。
後は基本的な文字列操作の問題です。

全部は書くポリシーではありませんので、そこは悪しからず。
・ツリー全体表示

【10889】Re:ファイル検索について
発言  ひで  - 08/12/23(火) 18:06 -

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

ご教示頂いたコードをエクセルでやってみた所うまくいきました。

ACCESSで試してみましたが、

コンパイルエラー
メソッドまたはデータメンバーが見つかりません。とエラーが出ます。

Me.ListBox1.AddItem .FoundFiles(i)の.AddItem のところでエラーになります。

申し訳御座いませんが、対処方法をご教示いただけると助かります。

よろしくお願い致します。
・ツリー全体表示

【10888】Re:ファイル検索について
回答  neptune  - 08/12/23(火) 16:09 -

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

すぐにテストできるようなソースをUPしてくれると手間が省けます。
せっかくDir関数を紹介してくれているのに何の役にも立ってないですね。

速度的にはDir関数がかなり速いはずです。
Excelで作成しましたが、同じだったと思います。研究してみて下さい。
以下は一例です。

Private Sub CommandButton1_Click()
Dim n As String
Dim fs As Object
Dim i As Long

  Set fs = Application.FileSearch
  With fs
'  '  .LookIn = "C:\My Documents"
    .LookIn = "E:\Data\Office\Excel"
    .Filename = "*.xls"
    If .Execute > 0 Then
      Debug.Print .FoundFiles.Count & " 個のファイルが見つかりました。"
      For i = 1 To .FoundFiles.Count
        Me.ListBox1.AddItem .FoundFiles(i)
      Next i
    Else
      MsgBox "ファイルは見つかりませんでした。"
    End If
  End With

End Sub

↑と比べて下さい。
Private Sub CommandButton2_Click()
Dim sFind As String
Dim sPath As String

  sPath = "E:\Data\Office\Excel\*.xls"
  sFind = Dir(sPath)
  
  Do Until sFind = ""
    Me.ListBox1.AddItem sFind
    sFind = Dir()
  Loop
End Sub
・ツリー全体表示

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