繁体   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