2017-12-06 15 views
0

こんにちは、私はこのSQL文の構文エラーを取得しています、誰もが私は複数行うことができることを期待していたおかげで構文エラー結合文

String sql = "Select tblStudent.*,tblSchool.*,tblAgents.* " + 
    "FROM tblStudent LEFT JOIN tblSchool " + 
    "ON (tblStudent.schoolID = tblSchool.schoolID) " + 
    "LEFT JOIN tblAgents " + 
    "ON (tblStudent.agentID = tblAgents.agentID) " + 
    "WHERE tblStudent.StudentID='" + studentID + "'"; 

に助言

参加することができます

ただし、構文エラーが発生しています。

+0

複数の結合がある場合、アクセスでかっこが必要です。 – jarlh

+0

しかし、私はステートメントにかっこを入れました。 – maximdj

+0

OK、特に複数の列に同じデータを送信し、サーバーリソースを浪費しているために、参加しているときにすべてのフィールドを選択するのに*を使用しないでください。必要な列とその列のみを列挙する必要があります。 – HLGEM

答えて

1

複数の結合を持つ括弧は、次のことを意味します。 3つの結合がある場合、の後に2つの左かっこがあります。最後の結合に右かっこはありません。

String sql = "Select tblStudent.*,tblSchool.*,tblAgents.* " + 
"FROM (tblStudent LEFT JOIN tblSchool " + 
"ON (tblStudent.schoolID = tblSchool.schoolID)) " + 
"LEFT JOIN tblAgents " + 
"ON (tblStudent.agentID = tblAgents.agentID) " + 
"WHERE tblStudent.StudentID='" + studentID + "'"; 

アクセスSQLインジェクションは、別のthreadsでカバーされています。

私はあなたの最後のSQLは次のようになりますと信じて
0
 String sql = "Select 
     tblStudent.StudentID,tblStudent.studentFirstName,"+ 
     tblStudent.studentLastName,tblSchool.schoolName," + 
     tblAgents.agentFirstName,tblAgents.agentLastName " + 
     "FROM (tblStudent LEFT JOIN tblSchool " + 
     "ON (tblStudent.schoolID = tblSchool.schoolID)) " + 
     "LEFT JOIN tblAgents " + 
     "ON (tblStudent.agentID = tblAgents.agentID) " + 
     "WHERE [email protected]"; 
0

SELECT tblStudent.* 
    ,tblSchool.* 
    ,tblAgents.* 
FROM tblSchool 
RIGHT JOIN (
    tblAgents RIGHT JOIN tblStudent ON tblAgents.agentID = tblStudent.agentID 
    ) ON tblSchool.schoolID = tblStudent.schoolID 
WHERE tblStudent.StudentID=111; 

をので、このSQLを作成するためのVBAコードは

Dim sql As String 

sql = "SELECT tblStudent.* ,tblSchool.* ,tblAgents.* " & _ 
    "FROM tblSchool RIGHT JOIN (" & _ 
    "tblAgents RIGHT JOIN tblStudent ON tblAgents.agentID = tblStudent.agentID" & _ 
    ") ON tblSchool.schoolID = tblStudent.schoolID " & _ 
    "WHERE tblStudent.StudentID=" & studentID 

する必要がありますここで私はstudentIDが数値フィールドであることを前提とし。また、複数のテーブルからデータを選択するのに*を使用しないことをお勧めします。そうしないと、列名が予測不能になり、コメントに記載されているように、使用されない追加のリソースが必要になります。