2013-04-10 146 views
1

我從別人繼承了這一項目,並需要清理,以滿足新的要求,另一個表中提取數據 - 他們已經設計了它,像這樣..INSERT INTO表由

我在訪問2個表數據庫(我已經包括在大括號中的字段的數據類型):

活動:

事件ID {自動編號} | EventTitle {短文本} | EventDescription {長文本} | EventDate {Date/Time} | EventCategory {查找與類別的排源/ CategoryTitle}

分類:

類別ID {自動編號} | CategoryTitle {短文本} | CategoryImage {短文本} | CategoryColor {Short Text}

'Categories'表包含關於特定類別的所有'Master'信息,例如名稱,圖標(例如刻度線,十字等)。

而且我有一個查詢(訪問內部)這兩個表中的數據拉在一起,下面的字段順序:

事件ID | EventTitle | EventDescription | EventDate | CategoryTitle | 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 databinded上依賴於的「類別」的內容,網站的其他控制表格保持不變,所以我怎麼能插入'事件'表與我上面列出的字段(特別是 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 
+0

'EventCategory'查找字段是否允許多個選擇? – 2013-04-10 19:18:09

+0

@Gord Thompson:不,只有單一選擇,即「公開」,「私人」或「僅限羣組」 – adaam 2013-04-10 19:20:35

+0

@dasblinkenlight:對不起,這是一個錯誤,我會重新發布我的工作代碼(我只是玩弄選擇多個表,但意識到我的問題的解決方案將需要比簡單地執行選擇查詢更多的工作) – adaam 2013-04-10 19:24:40

回答

2

查閱字段可以欺騙。假設你有你的[類別表

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數字類別ID,而不是你在數據表視圖看到。

因此,您需要做的是確保您從組合框(不是CategoryTitle)中檢索(數字)CategoryID並將其插入到Events表中。

順便說一句,這就是爲什麼更豐富的接入開發商避免查找字段:他們隱藏了數據庫的實際運作和導致混亂,沮喪,是的,迫使一些用戶喝....;)

+0

哈哈非常感謝你!我無法理解查詢領域的事情,尤其是在將它與VB中的SQL查詢結合使用時。我有它的工作。 (我已經在上面發佈了工作代碼) – adaam 2013-04-10 19:36:21