2011-11-15 236 views
0
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插入語句錯誤

續: 現在我將記錄插入我的數據庫表和代碼是下文一個工作的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到選擇任何日期然後記錄沒有得到保存。任何想法,任何幫助?

+0

您是否嘗試將該代碼放入sql測試設備?如果我完全理解,那是相當差的sql。 –

+0

連續線不會添加空格。因此查詢擴展爲「Insert into DDTableValues」... – chip

+0

您應該將您的新問題作爲單獨問題發佈。 –

回答

3

幾個問題:

  1. 您同時擁有VALUES子句中插入一個SELECT子句。你只能有一個或另一個。

  2. VALUES子句沒有圍繞值列表的parens,這是必需的。

  3. 您不指定插入數據的列的列表,因此您最好希望表中列的數量和順序與您在VALUES或SELECT中指定的任何內容(無論您決定哪個)相匹配。順便說一下,我猜測你已經將VALUES子句與列列表混淆了。列列表中沒有關鍵字,但在列表列表中需要parens。

  4. 您正在使用UNION,就像它是JOIN一樣。如果你的意思是JOIN,你應該重寫SELECT語句。如果您指的是UNION,則需要在UNIONed SELECT中生成相同數量的列。 (提示:你的意思是加入)。

  5. 在每行的末尾沒有包含空格,因此文本以一種對解釋器無法理解的方式運行。

1

我沒有SQL大師或什麼,但我的工會的理解是加入兩個查詢彙集成一個單一的記錄,您的查詢的長相你嘗試加入多個表一起記錄到一個查詢並插入表中,在這種情況下,您應該使用INNER JOIN或可能的LEFT JOINRIGHT 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列表;我不知道你的表格字段名是否實際上是「新成員」。ApplicantName」或者,如果你只是把在你的榜樣,我不能完全肯定MSACCESS允許字段名段,在這種情況下,你的價值觀清單應該看起來更像

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 

如果是這樣,這取決於你的域的命名,可能是一個需要解決的問題。

+0

對於使用MS Access的人來說,MySQL guru不太可能有任何幫助,因爲方言有很大不同。 –

+0

採取的觀點,我的意思是一般的SQL大師。我已經涉足了兩個領域,所以我知道兩者中的一些小差異和功能。只有我作爲註冊會員的第二天,所以我必須記住看看問題中的標籤以查看他們提及的語言/程序。 –