2017-07-13 20 views
0

MS Accessで3つの異なるINSERT INTOクエリがあります。クエリは、データベース内のODBCリンクテーブルをクエリしています。手動でAccessから実行した場合、すべて正常に動作します。すべて1分以内で、16,000〜3,000件のレコードが返されます。VBA呼び出しからアクセス操作クエリが失敗しましたが、手動で正常に実行されます

Access VBAモジュールからクエリを実行しようとすると、2つのクエリがうまく動作しますが、そのうちの1つでは、executeステートメントは実行を終了しません。タイムアウトやエラーは発生しません。コードを壊すと、この特定のクエリのために常にCurrentDb.Execute strQRY行にハングアップします。

後で別のクエリとUNION-edされるため、多くのnullフィールドがあります。私は、タイムアウトのプロパティを変更しようとし、実行ステートメントを別の方法で呼び出すが、何も役立ちません。クエリは手動で実行すると10秒後に実行されます。 VBAとSQLは以下に掲示されます:

VBA - 実行方法。 INSERTクエリを最初にすべてのレコードをクリアしてから実行します。

DoCmd.RunSQL "DELETE * FROM " & strTBL 
CurrentDb.Execute strQRY 

SQLを - すべてのストアドクエリで呼び出さ:

INSERT INTO src_subqry_PDF_Text_Notes 
SELECT * 
FROM (

    SELECT 

     LOGICLIB_MFTXL300.CMPNO, 
     Null As VNDNO, 
     Null As VNAME, 
     Null as NeedXRef, 

     Null As BUYER, 
     Null As BMNAM, 
     LOGICLIB_MFTXL300.[PONO#] As PURCH, 
     LOGICLIB_INPOL300.[LINE#] As [LINEN], 
     LOGICLIB_MFTXL300.[PROD#] As PRDNO, 
     Null As SDESC, 
     Null As DESCP, 

     Null As PODDT, 
     Null As OREDT, 
     Null As PORDT, 
     Null As RQ3DT, 

     Null As ECOST, 
     Null As LNCST, 
     Null As ACOST, 
     Null as NeedOpenCost, 
     Null As PCRCD, 

     Null As QUANO, 
     Null As QUANR, 
     Null as NeedQtyOpenBase, 
     Null As UTMES, 

     Null As P3QOR, 
     Null As P3QRC, 
     Null as NeedQtyOpenPURCH, 
     Null As ORDUM, 

     Null as NeedOrderType, 
     'Z' As LNTYP, 
     Null As LSTAT, 
     Null As PSTAT, 
     Null As POTYP, 
     Null As P1PAP, 
     Null As PAPV1, 
     Null As PAPV2, 
     Null As PAPV3, 
     Null As PAPV4, 
     Null As PA1DT, 
     Null As PA2DT, 
     Null As PA3DT, 
     Null As PA4DT, 

     Null As POCST, 
     Null As POFOB, 
     Null As SHIPV, 
     Null As CARIR, 
     Null As FGTRM, 
     Null As PPHOA, 
     Null As REQNO,     

     Null As VADD1, 
     Null As VADD2, 
     Null As VADDX, 
     Null As VACSZ, 
     Null As VPHOA, 
     Null As VAPGL, 
     Null As VMED1, 
     Null As VTXB1, 

     Null As CNAME, 
     Null As ADDR1, 
     Null As ADDR2, 
     Null As ADDRX, 
     Null As CACSZ, 

     [TXSQ#], 
     TXTDT 

    FROM 
     LOGICLIB_MFTXL300 
     LEFT JOIN LOGICLIB_INPOL300 ON (LOGICLIB_INPOL300.PURCH = LOGICLIB_MFTXL300.[PONO#] AND LOGICLIB_INPOL300.PRDNO = LOGICLIB_MFTXL300.[PROD#]) 

    WHERE 
     PURCH IN (SELECT DISTINCT PURCH FROM LOGICLIB_INPOL100 WHERE(PSTAT <> 'Y')) 

    ) 

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

+0

strQRYを構成するコードを投稿する質問を編集します。 – June7

+0

strQRYは、投稿されたSQLを含むAccessクエリの名前です – FatherKino

+0

クエリオブジェクトstrQRYの名前を付けましたか?あまり説明的ではありません。 DoCmd.OpenQueryを試して、どの警告がトリガーされたかを確認できます。 – June7

答えて

0

この最後の夜になった。私はこれが似たような問題を抱えている人に役立つことを願っています

元のWHEREステートメントのSELECT DISTINCT句が原因だと思います。 VBAで実行したときにクエリが失敗した理由はまだ分かりませんが、WHERE節ではなくJOIN節にロジックを追加するように変更しました。

INSERT INTO src_subqry_PDF_Text_Notes (PURCH, CMPNO, LINEN, PRDNO, LNTYP, [TXSQ#], TXTDT) 
    SELECT 
     LOGICLIB_INPOL100.PURCH, 
     LOGICLIB_MFTXL300.CMPNO, 
     LOGICLIB_INPOL300.[LINE#], 
     LOGICLIB_MFTXL300.[PROD#], 
     'Z' AS LNTYP, 
     LOGICLIB_MFTXL300.[TXSQ#], 
     LOGICLIB_MFTXL300.TXTDT 
    FROM 
     ((LOGICLIB_INPOL100 
     LEFT JOIN LOGICLIB_INPOL300 ON (LOGICLIB_INPOL100.PURCH = LOGICLIB_INPOL300.PURCH AND LOGICLIB_INPOL100.CMPNO = LOGICLIB_INPOL300.CMPNO)) 
     LEFT JOIN LOGICLIB_MFTXL300 ON (LOGICLIB_INPOL300.PURCH = LOGICLIB_MFTXL300.[PONO#] AND LOGICLIB_INPOL300.PRDNO = LOGICLIB_MFTXL300.[PROD#] AND LOGICLIB_INPOL300.CMPNO = LOGICLIB_MFTXL300.CMPNO)) 
    WHERE 
     LOGICLIB_INPOL100.PSTAT <> 'Y' AND LOGICLIB_MFTXL300.[TXSQ#] > 1 

オンラインで読みやすくするため、SQLを明示的なフィールドに簡略化してくれてありがとう6月7日。

0

7つのフィールドを明示的に参照し、すべてのNullフィールドにデータを入力して削除することをお勧めします。 SELECT * FROM

INSERT INTO src_subqry_PDF_Text_Notes (CMPNO, PURCH, LINEN, PRDNO, LNTYP, [TXSQ#], TXTDT) 
    SELECT 
     LOGICLIB_MFTXL300.CMPNO, 
     LOGICLIB_MFTXL300.[PONO#], 
     LOGICLIB_INPOL300.[LINE#], 
     LOGICLIB_MFTXL300.[PROD#], 
     'Z' AS LNTYP, 
     [TXSQ#], 
     TXTDT 
    FROM 
     LOGICLIB_MFTXL300 
     LEFT JOIN LOGICLIB_INPOL300 ON (LOGICLIB_INPOL300.PURCH = LOGICLIB_MFTXL300.[PONO#] AND LOGICLIB_INPOL300.PRDNO = LOGICLIB_MFTXL300.[PROD#]) 
    WHERE 
     PURCH IN (SELECT DISTINCT PURCH FROM LOGICLIB_INPOL100 WHERE PSTAT <> 'Y') 

は句読点/特殊文字を使用しないように助言する必要はありません名に(唯一の例外を強調)。 PONONumまたはPONO_NUMが良いでしょう。すべての大文字も、読みにくいので好まれません。

+0

SQLを明示的なフィールドに単純化した後で、コードは実行行に依然としてハングしています。 – FatherKino

関連する問題