ACCESS SQL - INSERT INTO 及 UPDATE語法

我們已經學到了如何把資料由表格中取出。
但是這些資料是如果進入這些表格的呢?通過 (INSERT INTO) 和 (UPDATE) 便可以做到。
 
INSERT INTO語法:-
基本上,我們有兩種作法可以將資料輸入表格中:
1. 一次輸入一筆,
2. 一次輸入好幾筆。
 
一次輸入一筆資料的語法如下:
INSERT INTO "表格名" ("欄位1", "欄位2", ...)
VALUES ("值1", "值2", ...)

假設我們有一個架構如下的表格:
Store_Information 表格
Column Name Data Type
store_name char(50)
Sales float
Date datetime
我們要加以下這一筆資料進去這個表格:在 January 10, 1999,Los Angeles 店有 $900 的營業額。我們就打入以下的 SQL 語句:
INSERT INTO Store_Information (store_name, Sales, Date)
VALUES ('Los Angeles', 900, 'Jan-10-1999')

 
一次輸入多筆的資料:
跟上面的例子不同的是,現在我們要用 SELECT 指令來指明要輸入表格的資料。如果您想說,這是不是說資料是從另一個表格來的,那您就想對了。一次輸入多筆的資料的語法是:
INSERT INTO "表格1" ("欄位1", "欄位2", ...)
SELECT "欄位3", "欄位4", ...
FROM "表格2"

以上的語法是最基本的。這整句 SQL 也可以含有 WHEREGROUP BY、及 HAVING 等子句,以及表格連接及別名等等。
舉例來說,若我們想要將 1998 年的營業額資料放入 Store_Information 表格,而我們知道資料的來源是可以由 Sales_Information 表格取得的話,那我們就可以鍵入以下的 SQL:
INSERT INTO Store_Information (store_name, Sales, Date)
SELECT store_name, Sales, Date
FROM Sales_Information
WHERE Year(Date) = 1998

在這裡,我用了 SQL Server 中的函數來由日期中找出年。不同的資料庫會有不同的語法。舉個例來說,在 Oracle 上,您將會使用 WHERE to_char(date,'yyyy')=1998。

UPDATE語法:-
我們有時候可能會需要修改表格中的資料。在這個時候,我們就需要用到 UPDATE 指令。這個指令的語法是:
UPDATE "表格名"
SET "欄位1" = [新值]
WHERE {條件}

最容易瞭解這個語法的方式是透過一個例子。假設我們有以下的表格:
Store_Information 表格
store_name Sales Date
Los Angeles $1500 Jan-05-1999
San Diego $250 Jan-07-1999
Los Angeles $300 Jan-08-1999
Boston $700 Jan-08-1999
我們發現說 Los Angeles 在 01/08/1999 的營業額實際上是 $500,而不是表格中所儲存的 $300,因此我們用以下的 SQL 來修改那一筆資料:
UPDATE Store_Information
SET Sales = 500
WHERE store_name = "Los Angeles"
AND Date = "Jan-08-1999"

現在表格的內容變成:
Store_Information 表格
store_name Sales Date
Los Angeles $1500 Jan-05-1999
San Diego $250 Jan-07-1999
Los Angeles $500 Jan-08-1999
Boston $700 Jan-08-1999
在這個例子中,只有一筆資料符合 WHERE 子句中的條件。如果有多筆資料符合條件的話,每一筆符合條件的資料都會被修改的。
我們也可以同時修改好幾個欄位。這語法如下:
UPDATE "表格"
SET "欄位1" = [值1], "欄位2" = [值2]
WHERE {條件}

 

ACCESS表單放大縮小指令

DoCmd.Restore 回復原本大小
DoCmd.Maximize 最大化
DoCmd.Minimize 最小化
DoCmd.MoveSize [right][, down][, width][, height] 自訂大小
以上是用在VBA程式碼中,(可以放在form 的 on open事件裡)
也有相對應的巨集可用.(去掉docmd,就是它們的原本的巨集名稱)
這些方法只能改自身表單,不能改 非[程式碼模組所屬表單] 的其他表單.

利用DLOOKUP()函數在ACCESS表單中做查詢

我想要做一個可以在執行表單時,在表單裡面做輸入我要的值然後查詢並直接從資料表中找到資料。
--------------------------------------------------------------------------------------------------------------------------------------
EX:
資料表----客戶資料

識別碼:35
姓名:某某某
連絡電話:****-****
出生年月日:54/5/6

表單----客戶資料

識別碼:
姓名:
連絡電話:
出生年月日:

在表單中建立查詢>然後我要輸入出生年月日和姓氏就可以跳出以上資料。


答案:
Private Sub 姓名_AfterUpdate()
If IsNull(DLookup([姓名], "客戶資料", "姓名='" & Me![姓名] & "'")) Then
     MsgBox "找不到你輸入的資料"
     Exit Sub
End If
Me![識別碼] = DLookup([識別碼], "客戶資料", "姓名='" & Me![姓名] & "'")
Me![姓名] = DLookup([姓名], "客戶資料", "姓名='" & Me![姓名] & "'")
Me![連絡電話] = DLookup([連絡電話], "客戶資料", "姓名='" & Me![姓名] & "'")
Me![出生年月日] = DLookup([出生年月日], "客戶資料", "姓名='" & Me![姓名] & "'")
End Sub

注意,表單上的那4個資料項最好不要和資料庫連接, 要 非結合 狀態,這樣比較不會出其他問題.
因為上面已經用最簡單的方法去做,不想搞大. 單純只有用到 DLookup()函數 來處理.
還有, DLookup()只能給你 1 個資料,多出來的不處理.

ACCESS資料表中輸入重覆資料便會出提示窗口並停止輸入

問:-
在 Access 有一 Custom 的資料表,內有CCard 欄位(設定: 數字,非自動號碼,不可重履).
以下是Afterupdate 的設定:
Private Sub addNewCCard_AfterUpdate()
  If DLookup("CCard", "Custom", CCard = Me![addNewCCard]) Then
    
     MsgBox ("This C Card used")
    
  End If
 
End Sub 

但是如果我在Custom資料表CCard中輸入已存在的號碼,郤沒有如設定般出現 MsgBox 內容,
而且還可以繼續跳到下一欄位繼續輸入,請問哪裡出現問題?

答:-
改一下變數條件位置如下所示:
If DLookup("CCard", "Custom", "[CCard]=" & Me![addNewCCard] & "") Then