1

日付プロンプトを使用してパス スルー クエリを作成し、それをローカル テーブルに読み込む (テーブルを作成する) にはどうすればよいですか?

これをアクセスで実行したいのですが、サーバーに送られる前に、クエリで日付を条件として入力するように求め、結果が返されたらローカルテーブルに保存して、さらに処理して他のテーブルに結合したいローカル テーブルと分析。

VBAでこれを行う方法があることを知っています。以下はサンプル コードですが、これを MS Access のローカル テーブルに格納できる部分が見当たりません。

/* SAMPLE CODE...not mine*/ 
Dim db As DAO.Database 
Dim qdExtData As QueryDef 
Dim strSQL As String 
Set db = CurrentDb 
strSQL = "SELECT * FROM TBL WHERE FIELD1 = " & 
[Forms]![Form1]![Combo6] 
Set qdExtData = db.CreateQueryDef("QRY_PASS_THROUGH") 
qdExtData.Connect = "ODBC;DSN=???;UID=???;PWD=???;DBQ=???;" 
qdExtData.SQL = strSQL 
qdExtData.Close 
db.Close 
Set db = Nothing 
/* SAMPLE CODE...not mine*/ 

背景情報: パス スルー クエリを使用している理由は、Peoplesoft クエリから大量の SQL をコピーしたためです。これには、Jet エンジンでは処理できない CASE ステートメントやその他の SQL コンポーネントが含まれていますが、送信先の Oracle サーバーには送信されます。できる。

4

2 に答える 2

1

やってみませんか

Dim db As DAO.Database 
Dim qdExtData As QueryDef 
Dim strSQL As String 

Set db = CurrentDb 

strSQL = "SELECT * FROM TBL WHERE FIELD1 = " & 
[Forms]![Form1]![Combo6] 

Set qdExtData = db.CreateQueryDef("QRY_PASS_THROUGH") 
qdExtData.Connect = "ODBC;DSN=???;UID=???;PWD=???;DBQ=???;" 
qdExtData.SQL = strSQL 
qdExtData.Close 

'Now use the Pass Thru query above as the data source for the Make table query below 
strSQL = "Select QRY_PASS_THROUGH.* INTO tblPassThruResults FROM QRY_PASS_THROUGH" 
db.Execute strSQL 

db.Close 
Set db = Nothing 

ただし、これは1回だけ機能し、上記のコードは新しいクエリとテーブルを作成するため、前のクエリとテーブルの削除に対処する必要があります。

より良い解決策は、開発中にPassThruQueryとテーブルの両方を作成し、コードを実行するときにそれらをリセットすることです。

Dim db As DAO.Database 
Dim qdExtData As QueryDef 
Dim strSQL As String 

Set db = CurrentDb 

strSQL = "SELECT * FROM TBL WHERE FIELD1 = " & 
[Forms]![Form1]![Combo6] 

'Reset the SQL statment for the query 
Set qdExtData = db.QueryDefs("QRY_PASS_THROUGH") 
qdExtData.SQL = strSQL 
'Empty the table 
strSQL = "DELETE * FROM tblPassThruResults"
db.Execute strSQL 

'Now use the Pass Thru query above to reload the table 
strSQL = "INSERT INTO tblPassThruResults Select QRY_PASS_THROUGH.* FROM QRY_PASS_THROUGH" 
db.Execute strSQL 

db.Close 
Set db = Nothing 
Watch out for your date string in the query. You may need to add delimiters. Top
于 2012-06-11T22:31:17.160 に答える
1

もう 1 つの方法は、SQL を PeopleSoft システムのビューにラップして、Access コードを簡素化することです。

PeopleSoft は、PeopleSoft コンポーネントを介して COM API を生成することもできます。これにより、開発が簡素化され、PeopleSoft のアップグレード (通常は 1 ~ 2 年) が発生した場合に、外部アプリケーションも保護されます。PeopleSoft の生の SQL はますます複雑になっています。別のアプローチは、コンポーネント インターフェイスを介してシステムと対話することです。

この Oracle マニュアルの p79 に例があります: http://docs.oracle.com/cd/E28461_01/psft/acrobat/pt852tcpi-b0212.pdf

于 2012-06-23T21:58:20.053 に答える