Ошибка в SQL-вставке в оператор - PullRequest
0 голосов
/ 15 ноября 2011
Dim cmd As New OleDbCommand("Insert into DDTable" _
& "Values NewMember.ApplicantName, NewMember.ApplicationNo, NewCustomer.ApplicationNo, NewCustomer.PlanName, NewCustomer.AccountNo, NewCustomer.InvestmentAmount, Deposit.InvestmentAmount, NewMember.ProcessingFee, NewCustomer.ProcessingFee, NewMember.IntroducerName, NewMember.IntroducerCode" _
& "SELECT NewMember.ApplicantName, NewMember.ApplicationNo, NewMember.ProcessingFee, NewMember.IntroducerName, NewMember.IntroducerCode From NewMember" _
& "Union All Select NewCustomer.ApplicationNo, NewCustomer.PlanName, NewCustomer.AccountNo, NewCustomer.InvestmentAmount, NewCustomer.ProcessingFee From NewCustomer" _
& "Union All Select Deposit.InvestmentAmount From Deposit" _
& "WHERE NewCustomer.OpeningDate =#" & dtpDates.Text & "# AND Deposit.Date =#" & dtpDates.Text & "# AND NewMember.JoiningDate =#" & dtpDates.Text & "#", con)
cmd.ExecuteNonQuery()
con.Close()

Приведенный выше код, показывающий «Ошибка в операторе вставки в», я просто не могу понять, почему!Пожалуйста помоги.Спасибо

Продолжение: Теперь у меня есть рабочий код SQL, который вставляет записи в таблицу базы данных, и код ниже ...

Dim cmd As New OleDbCommand("SELECT NewMember.ApplicantName, NewMember.ApplicationNo, NewMember.ProcessingFee, NewMember.IntroducerName, NewMember.IntroducerCode, NewMember.JoiningDate, NewCustomer.ApplicationNo, NewCustomer.PlanName, NewCustomer.AccountNo, NewCustomer.InvestmentAmount, NewCustomer.ProcessingFees, NewCustomer.OpeningDate, Deposit.Date, Deposit.InvestmentAmount Into DDTable  FROM NewMember, NewCustomer, Deposit WHERE NewMember.JoiningDate = NewCustomer.OpeningDate AND NewCustomer.OpeningDate = Deposit.Date;", con)

Но недавняя проблема заключается в том, что когдаиспользуя DateTimePicker для выбора любой даты, тогда записи не сохраняются.Любая идея, любая помощь?

Ответы [ 2 ]

3 голосов
/ 15 ноября 2011

Несколько проблем:

  1. В INSERT есть предложение VALUES и предложение SELECT. Вы можете иметь только один или другой.

  2. В предложении VALUES нет скобок вокруг требуемого списка значений.

  3. Вы не указываете список столбцов, в который следует вставлять данные, поэтому вам лучше надеяться, что количество и порядок столбцов в таблице совпадают с тем, что вы указали в VALUES или SELECT (в зависимости от того, какое решение вы выбрали). Кстати, я предполагаю, что вы перепутали предложение VALUES со списком столбцов. Список столбцов не имеет ключевого слова, которое предшествует ему, но нуждается в скобках вокруг списка столбцов.

  4. Вы используете UNION, как будто это JOIN. Если вы имеете в виду JOIN, вам следует переписать оператор SELECT. Если вы имеете в виду UNION, вам нужно создать одинаковое количество столбцов в UNIONed SELECT. (подсказка: Вы действительно имеете в виду JOIN).

  5. Вы не включаете пробел в конце каждой строки, поэтому у вас есть текст, идущий вместе таким образом, который будет непонятен для переводчика.

1 голос
/ 15 ноября 2011

Я не гуру SQL или что-то еще, но мое понимание объединения состоит в том, чтобы объединить два запроса в один набор записей. По виду вашего запроса вы пытаетесь объединить несколько таблиц вместе для записей в один запрос и вставить втаблица, в этом случае вы должны использовать INNER JOIN или, возможно, LEFT JOIN или RIGHT JOIN, в зависимости от того, могут ли ваши другие таблицы не иметь данных для записей и могут быть пустыми.

Другая проблема связана с вашей строкойCONCAT.У вас нет пробелов в конце ваших строк, поэтому они равны DDTableValues вместо DDTable Values

В любом случае это больше похоже на запрос, который вы ищете:

INSERT INTO DDTable ([NewMember.ApplicantName], [NewMember.ApplicationNo], [NewCustomer.ApplicationNo], [NewCustomer.PlanName], [NewCustomer.AccountNo], [NewCustomer.InvestmentAmount], [Deposit.InvestmentAmount], [NewMember.ProcessingFee], [NewCustomer.ProcessingFee], [NewMember.IntroducerName], [NewMember.IntroducerCode])
SELECT NewMember.ApplicantName, NewMember.ApplicationNo, NewCustomer.ApplicationNo, NewCustomer.PlanName, NewCustomer.AccountNo, NewCustomer.InvestmentAmount, Deposit.InvestmentAmount, NewMember.ProcessingFee, NewCustomer.ProcessingFee, NewMember.IntroducerName, NewMember.IntroducerCode
FROM NewMember
INNER JOIN NewCustomer ON NewMember.<identifier> = NewCustomer.<identifier>
INNER JOIN Deposit ON NewMember.<identifier> = Deposit.<identifier>
WHERE NewCustomer.OpeningDate = <date> AND Deposit.Date = <date> AND NewMember.JoiningDate = <date>

<identifier> относится к полю в таблицах, чтобы связать все записи вместе, будь то CustomerID или MemberID или что-то еще.

Примечание. Еще одна вещь, которую я только что заметил, - это ваш список VALUES, который вы используете с именем таблицы, период и имя поля;Я не знаю, действительно ли имена полей ваших таблиц на самом деле «NewMember.ApplicantName» или вы просто поместили это в свой пример, я не совсем уверен, что MSACCESS допускает точки в именах полей, и в этом случае ваш список VALUES должен выглядеть более

INSERT INTO DDTable ([ApplicantName], [ApplicationNo], [PlanName], [AccountNo], [InvestmentAmount], [ProcessingFee], [IntroducerName])

Ваш список ЗНАЧЕНИЙ также содержит много повторяющихся полей, например,

NewMember.ApplicationNo AND NewCustomer.ApplicationNo
NewMember.ProcessingFee AND NewCustomer.ProcessingFee
NewCustomer.InvestmentAmount AND Deposit.InvestmentAmount

Если так, в зависимости от того, как названы ваши поля, это может быть проблемой.это нужно решать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...