簡體   English   中英

通過從另一個表中提取數據來插入表

[英]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文本框和下拉控件中的值插入數據庫中以下字段:

  1. EventTitle(到Events.EventTitle)
  2. EventDescription(到Events.EventDescription)
  3. EventDate(到Events.EventDate)
  4. EventCategory(到Events.EventCategory)

數字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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM