SQL Structured Query Language 用以操縱資料庫的指令集 資料操作語言DML:操作資料錄 如DELETE, SELECT, UPDATE …. 資料定義語言DDL:建立資料表及資料欄位 如AFTER TABLE, CREATE TABLE ….
SELECT 敘述 對資料庫進行選取查詢的動作 將查詢結果指定給Recordset物件的Recordsource屬性就可以將資料顯示出來
SELECT 語法 SELECT 欄位 FROM 資料表 例如:SELECT 書名,分類,作者 FROM 書籍
SELECT 語法 – 排序 SELECT 欄位 FROM 資料表 ORDER BY 排序方式 排序方式:ASC遞增排序,DESC遞減排序 SELECT * FROM書籍 ORDER BY 頁數 DESC SELECT * FROM書籍 ORDER BY 頁數 ASC, 分類 DESC
SELECT 語法 – 篩選不重複的紀錄 SELECT DISTINCT 欄位 FROM 資料表
SELECT 語法 – 使用別名 SELECT 欄位1 AS 別名1,欄位2 AS 別名2 FROM 資料表 例如:SELECT 作者 AS 程式設計專家 FROM 書籍 SELECT 作者 FROM 書籍 資料內容一樣,顯示的欄位名稱不同
SELECT 語法 – 限定選取筆數 SELECT TOP n FROM 資料表 SELECT TOP n Percent FROM 資料表 例如:SELECT TOP 5 * FROM 書籍 ORDER BY 售價 DESC
SELECT 語法 – 統計函數 SELECT 統計函數 AS 別名 FROM 資料表 例如:SELECT AVG(售價) AS 平均售價 FROM 書籍 COUNT:統計資料比數 SUM:總合 MIN,MAX:求最小與最大 STDEV:取標準差 VAR:取變異數
SELECT 語法 – 分組統計 SELECT 欄位FROM 資料表 GROUP BY 欄位 例如:SELECT 分類, AVG(售價) AS 平均售價 FROM 書籍 GROUP BY 分類
SELECT 語法 – 分組統計再篩選 SELECT 欄位FROM 資料表 GROUP BY 欄位 HAVING 條件 例如:SELECT 分類, AVG(售價) AS 平均售價 FROM 書籍 GROUP BY 分類 HAVING AVG(售價) > 400
SELECT 語法 – 子集合查詢 SELECT 欄位FROM 資料表 WHERE 欄位 IN 子集合 SELECT * FROM 書籍 WHERE 作者名 IN (SELECT 作者名 FROM 作者 WHERE 專長 = ‘程式設計’)
執行SELECT 敘述 使用Recordset物件的Open方法 使用Connection物件的Execute方法 使用Command物件的Execute方法
使用Recordset物件的Open方法 Rs.open 書籍, cn, adOpenStatic sql=“SELECT * FROM 書籍” Rs.open sql, cn, adOpenStatic
使用Connection物件的Execute方法 Set recordset=Connection.execute(SQL敘述,recordaffected,options) 這種recordset為唯讀,所以不能進行編修的動作 如果要指定給DATAGRID Cn.CursorLocation = adUseClient
使用Command物件的Execute方法 Set recordset=command.execute 這種recordset為唯讀,所以不能進行編修的動作 需設定command物件的Commandtext(SQL敘述)與ActiveConnection(Connection物件)屬性
動作查詢(Action Query) RecordSet內容的更新,新增,刪除等要求(Query),稱之為動作查詢(Action Query) 不可以使用RecordSet的Open方法 使用Command物件或是Connection物件的Execute方法
動作查詢(Action Query)-更新 使用Update敘述 語法: Update 資料表名稱 Set 欄位=欄位值 Ex: Update 書籍 Set 分類=“程式設計”
動作查詢(Action Query)-新增 使用Inset Into敘述 語法: Insert Into 資料表名稱(欄位1,欄位2,….) Value (值1,值2,…) Ex: Insert Into 書籍 (書名,分類,售價) Value (“Delphi”,”程式設計”,500)
動作查詢(Action Query)-刪除 使用Delete敘述 語法: Delete From 資料表名稱 Ex: Delete from 書籍
使用Connection物件來執行 動作查詢(Action Query) 語法: Connection.Execute 動作查詢,RecordsAffected,Options Recordset.Requery 執行動作查詢後會產生一新的Recordset,所以需用Recordset物件的Requery方法取得新的Recordset物件
使用Command物件來執行 動作查詢(Action Query) 須先設定Command物件的CommandText和ActionConnection屬性 語法: Command.Execute Recordset.Requery 執行動作查詢後會產生一新的Recordset,所以需用Recordset物件的Requery方法取得新的Recordset物件
連SQL Server
連SQL Server Public cn As New ADODB.Connection Public rs As New ADODB.Recordset '查詢 Public cmd As New ADODB.Command '新增/刪除/修改 Private Sub Form_Load() cn.ConnectionString = "Provider=SQLOLEDB.1;Password=1234;Persist Security Info=True;User ID=sa;Initial Catalog=Northwind;Data Source=192.168.51.43" cn.CursorLocation = adUseClient cn.Open ' 使用connection的excute方法 Set rs = cn.Execute("SELECT * FROM employees") Set DataGrid1.DataSource = rs ' 使用command的excute方法 ' mysql = "SELECT * FROM employees" ' cmd.ActiveConnection = cn ' cmd.CommandText = mysql ' Set rs = cmd.Execute ' Set DataGrid1.DataSource = rs End Sub
連SQL Server ‘ 新增(方法一使用command) Private Sub Command3_Click() mysql = "insert into employees (FirstName,LastName) values ('cc','" & Trim(Text1.Text) & "')" cmd.ActiveConnection = cn cmd.CommandText = mysql cmd.Execute rs.Requery End Sub ‘新增(方法二使用connection) Private Sub Command7_Click() cn.Execute "insert into employees (FirstName,LastName) values ('cc','" & Trim(Text1.Text) & "')" rs.Requery End Sub
連SQL Server ' 修改 Private Sub Command5_Click() mysql = "update employees set FirstName='cc',LastName='" & Trim(Text1.Text) & "' where employeeid=" & rs(0) cmd.ActiveConnection = cn cmd.CommandText = mysql cmd.Execute rs.Requery End Sub
連SQL Server '刪除 Private Sub Command4_Click() mysql = "delete from employees where employeeid =" & rs(0) cmd.ActiveConnection = cn cmd.CommandText = mysql cmd.Execute rs.Requery End Sub
連SQL Server ' 查詢 Private Sub Command6_Click() If rs.State <> adStateClosed Then rs.Close End If rs.Open "SELECT * FROM employees where lastname like '%" & Text1.Text & "%'", cn, adOpenStatic, adLockOptimistic If rs.RecordCount > 0 Then Label1.Caption = rs("lastname") Set DataGrid1.DataSource = rs Else Label1.Caption = "沒有資料" End Sub
連SQL Server Private Sub Form_Unload(Cancel As Integer) Set DataGrid1.DataSource = Nothing cn.Close Set cn = Nothing End Sub