[英]INSERT INTO table by pulling data from another table
我已經從其他人那里繼承了這個項目,因此需要清理它以滿足新的要求-他們是這樣設計的。
我的Access數據庫中有2個表(我在大括號中包括了字段的數據類型):
事件:
EventID {自動編號} | EventTitle {短文本} | EventDescription {長文本} | EventDate {日期/時間} | EventCategory {使用Categories / CategoryTitle的行來源進行查找}
分類:
CategoryID {自動編號} | CategoryTitle {短文本} | CategoryImage {短文本} | CategoryColor {短文本}
“類別”表包含有關特定類別的所有“主”信息,例如名稱,圖標(例如對勾,叉號等)。
我有一個查詢 (在Access內部),將這兩個表中的數據與以下字段按順序拉到一起:
EventID | EventTitle | 事件描述 EventDate | 分類標題| CategoryImage
查詢的SQL是:
SELECT Events.EventID, Events.EventTitle, Events.EventDescription,
Events.EventDate, Categories.CategoryTitle, Categories.CategoryImage,
Categories.CategoryColor FROM Events INNER JOIN Categories ON
Events.EventCategory = Categories.CategoryID ORDER BY
Events.EventDate;
網站的其他區域依靠查詢來檢索信息。
在Visual Studio中,我試圖將asp文本框和下拉控件中的值插入數據庫中以下字段:
數字4存在問題,因為它當前是對“主”事件表的訪問查找,該表保存了有關實際類別的信息。 據推測,從來沒有打算將數據以這種方式插入表中。 設置事件類別的唯一可能方法是使用Access數據庫內部的下拉組合框選擇事件。
最后,這是我正在編寫的要插入數據庫的子例程:
Protected Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
Dim conn As New OleDb.OleDbConnection(ConfigurationManager.ConnectionStrings("BookMeetConnString").ConnectionString)
conn.Open()
Dim cmd As New OleDbCommand("INSERT INTO Events (EventTitle, EventDescription, EventDate, EventCategory) VALUES (@f1,@f2,@f3,@f4)",
conn)
cmd.Parameters.AddWithValue("@f1", tb_eventtitle.Text)
cmd.Parameters.AddWithValue("@f2", tb_eventdescription.Text)
cmd.Parameters.AddWithValue("@f3", DateTime.ParseExact(tb_eventdate.Text, "dd/MM/yyyy",
CultureInfo.InvariantCulture))
cmd.Parameters.AddWithValue("@f4", dd_eventcategory.SelectedValue)
cmd.ExecuteNonQuery()
conn.Close()
End Sub
網站上其他地方還有其他ASP.NET數據綁定控件,這些控件依賴於“類別”表的內容保持不變,因此,如何使用上面列出的字段( 特別是 EventCategory)插入“事件”表中)?
編輯:
這是我完成的字幕:
Protected Sub Button1_Click(sender As Object, e As EventArgs) Handles
Button1.Click
Dim conn As New OleDb.OleDbConnection(ConfigurationManager.ConnectionStrings("BookMeetConnString").ConnectionString)
conn.Open()
Dim cmd As New OleDbCommand("INSERT INTO Events (EventTitle, EventDescription, EventDate, EventCategory) VALUES (@f1,@f2,@f3,@f4)",
conn)
cmd.Parameters.AddWithValue("@f1", tb_eventtitle.Text)
cmd.Parameters.AddWithValue("@f2", tb_eventdescription.Text)
cmd.Parameters.AddWithValue("@f3", DateTime.ParseExact(tb_eventdate.Text, "dd/MM/yyyy",
CultureInfo.InvariantCulture))
cmd.Parameters.AddWithValue("@f4", dd_eventcategory.SelectedIndex + 1)
cmd.ExecuteNonQuery()
conn.Close()
End Sub
查找字段可能在欺騙。 假設您有[類別]表
CategoryID CategoryTitle
1 Pub Crawl
2 Booze Up
3 Big Drunk
當您在數據表視圖中打開[事件]表時,它看起來像這樣
EventID EventTitle EventCategory
1 Thursday Pub Crawl
如果您想添加一個新的“星期五”活動,您會認為它類似於
INSERT INTO Events (EventTitle, EventCategory) VALUES ("Friday", "Big Drunk")
但是失敗,因為“由於類型轉換失敗,Microsoft Access將1字段設置為Null。”。 相反,您必須做
INSERT INTO Events (EventTitle, EventCategory) VALUES ("Friday", 3)
其中3
是數字 CategoryID,而不是您在數據表視圖中看到的數字 。
因此,您需要做的是確保從組合框(不是CategoryTitle)中檢索(數字)CategoryID,並將其插入到Events表中。
順便說一句,這就是為什么經驗豐富的Access開發人員避免查找字段的原因:他們隱藏數據庫的實際工作並導致混亂,沮喪,是的,驅使某些用戶喝酒。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.