2017-10-23 9 views
0

以下のクエリを実行すると、クエリ式に構文エラーが発生します。 この正確なコードは、sqlclientを使用していて、SQL Server .mdfファイルから読み取ったときに機能しました。しかし、今、私はMS Accessの.mdbファイルから読み込んだし、それは私に不足しているオペレータのこのエラーを与えている見つからない演算子sql oledb vb.net

Dim Adapter As New OleDbDataAdapter 
Dim Data As New DataTable 
Dim SQL As String 
Dim con As New OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=|DataDirectory|\Shantara Production IT.mdb") 
Dim cmd As New OleDbCommand() 
grdvbatchprodn.Visible = True 
SQL = "SELECT [KN - ProductionOrderDetails].BatchNo, 
       [GN - EntityMaster].EntityName, 
       [FG - End Product Codes].ProductCode, 
       SUM([KN - ProductionOrderDetails].ProductionQty) AS [Batch Total Panels], 
       [KN -Special Instructions Master].SpecialInstructionDetail, 
       [KN - ProductionOrderHeader].KnittBatchComplete 
     FROM [KN - ProductionOrderDetails] INNER JOIN [KN - KnittingOrder]  
      ON [KN - ProductionOrderDetails].KnittingOrderID = [KN - KnittingOrder].KnittingOrderID 
     INNER JOIN [GN - EntityMaster] 
      ON [GN - EntityMaster].EntityID = [KN - KnittingOrder].EntityID 
     INNER JOIN [KN -Special Instructions Master] 
      ON [KN -Special Instructions Master].SpecialInstructionID = [KN - KnittingOrder].SpecialInstructionID 
     INNER JOIN [KN - ProductionOrderHeader] 
      ON [KN - ProductionOrderHeader].BatchNo = [KN - ProductionOrderDetails].BatchNo 
     INNER JOIN [FG - End Product Codes] 
      ON [FG - End Product Codes].ProductID = [KN - ProductionOrderHeader].ProductID 
     INNER JOIN [KN - KnittingDetailsHeader] 
      ON [KN - KnittingDetailsHeader].BatchNo = [KN - ProductionOrderDetails].BatchNo 
     WHERE [KN - ProductionOrderHeader].KnittBatchComplete = 0 
     GROUP BY [KN - ProductionOrderDetails].BatchNo, [GN - EntityMaster].EntityName, [FG - End Product Codes].ProductCode, [KN -Special Instructions Master].SpecialInstructionDetail, [KN - ProductionOrderHeader].KnittBatchComplete 
     ORDER BY [KN - ProductionOrderDetails].BatchNo, [GN - EntityMaster].EntityName;" 
     con.Open() 
     cmd.Connection = con 
     cmd.CommandText = SQL 

     Adapter.SelectCommand = cmd 
     Adapter.Fill(Data) 

     grdvbatchprodn.DataSource = Data 
     grdvbatchprodn.DataBind() 
End Sub 

エラーは次のとおりです。

System.Data.OleDb.OleDbException発生したHRESULT = 0x80040E14
メッセージ=構文エラークエリ式における(欠落演算子)「[KN - ProductionOrderDetails] .KnittingOrderID = [KN - KnittingOrder] .KnittingOrderID内部結合[GN - EntityMaster] ON [GN - EntityMaster] .EntityID = [ KN - KnittingOrder] .EntityID INNER JOIN [KN - 特別命令マスター] ON [KN -Speci '。
ソース= Microsoft AccessデータベースエンジンのStackTrace:

ただ、かなり扱いとなったテキストのこの壁をフォーマットし、エイリアスを使用してのわずかなビットを付加するアドバンス

+1

私は眼球を取り出してポップアップしたいと思っています。エイリアスの使い方を学んで、その厄介なことを繰り返す必要はありません。 –

+0

ステップバイステップでクエリから部品を削除します。問題が解消されると、問題の行が見つかりました。 – jarlh

+0

@SeanLange最初にAlliasesを使用しましたが、問題はmsアクセスではサポートされていないため、このようにしなければなりませんでした – Deepak

答えて

0

でいただきありがとうございます。私はあなたが空白や他の予約文字を持っていないようにそれらのテーブル名を変更することができますかを把握しようとします。これはAccessでうまくいくはずです。

SELECT pod.BatchNo, 
    em.EntityName, 
    epcProductCode, 
    SUM(pod.ProductionQty) AS [Batch Total Panels], 
    sim.SpecialInstructionDetail, 
    poh.KnittBatchComplete 
FROM [KN - ProductionOrderDetails] as pod 
INNER JOIN [KN - KnittingOrder] as ko ON pod.KnittingOrderID = ko.KnittingOrderID 
INNER JOIN [GN - EntityMaster] as em ON em.EntityID = ko.EntityID 
INNER JOIN [KN -Special Instructions Master] as sim ON sim.SpecialInstructionID = ko.SpecialInstructionID 
INNER JOIN [KN - ProductionOrderHeader] as poh ON poh.BatchNo = pod.BatchNo 
INNER JOIN [FG - End Product Codes] as epc ON epcProductID = poh.ProductID 
INNER JOIN [KN - KnittingDetailsHeader] kdh ON kdhBatchNo = pod.BatchNo 
WHERE poh.KnittBatchComplete = 0 
GROUP BY pod.BatchNo 
    , em.EntityName 
    , epcProductCode 
    , sim.SpecialInstructionDetail 
    , poh.KnittBatchComplete 
ORDER BY pod.BatchNo 
    , em.EntityName; 
+0

アクセスでは、各結合節をカッコで囲む必要があるため、エイリアスを使用するかどうかに関係なく追加する必要があります。私がマークした複写を見てください。 –

+0

@DStanley ok。私はAccessでクエリを書いていません...まあ....本当に長い時間です。むしろ、括弧で囲まれた結合節を囲む奇妙な要件ですが、私は引き続きAccessを使用しません。 –

+0

@SeanLange彼の権利、それは今動作する – Deepak