




免费预览已结束,剩余8页可下载查看
下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
SQL语言基本教程(一)% D& B4 ?( U+ w, V2 o, H, & I数据库查询语言(SQL)是使用于关系数据库的标准语言,被很多类型的数据库所支持。本文将以VB加DAO为例,来介绍. q- o+ z, g+ F( c7 T. f9 F! X基本的SQL语法以及使用。本章将介绍的是SQL语言中的基本查询语句,并带有范例。* h. o6 Y f( ! c要更好的阅读本文,读者需要对数据库的基本结构以及术语有一个基本的了解,而且最好能有一定的VB数据库编程经验。2 S5 q9 ) r! J: i除非特别说明,本文将使用的数据库是VB中附带的BIBLIO.MDB数据库。! f% s/ d+ I6 . S- w) a一、SELECT.FROM.WHERE语句 c 3 5 S: z& z语句的语法如下:& M4 r4 I. n+ h* P/ zSELECT all | * | distinct column1, column2 K) Q0 e4 g# o8 sFROM table1, table24 c3 S* A; R1 W0 c8 M; X5 XWHERE condition1 | expression1 AND condition2 | rxpression23 4 S9 $ x4 C在上面的语法中,外的语句是必须的,而内的是可选的,对于以 | 分割的操作符,则表明语法中必须从| 分割的( _3 J1 Q: S8 r9 操作符中选择一个。下面的语法描述同上。! t) ( D+ Y, I0 P在SELECT.FROM.WHERE语句中其中SELECT指定需要检索的字段,FROM指定要查询的表,WHERE指定选择纪录的条件,; I F6 s* h另外还可以包含ORDER BY语句来制定排序纪录。语法如下:1 W1 y6 N. V2 A- w! w5 RORDER BY column1 | Integer ASC | DESC. Xk _: pD r2 t6 其中column1制定排序的字段,也可以使用Integer指定的字段索引来排序,ASC为升序、DESC为降序。! t# L U* j1 F7 R3 b- F9 _8 j/ A范例一:找到Titles表中所有出版日期在1990年以后以及包含文字Beginner的书名, D1 K( k1 J+ M4 Q( 建立一个新工程,加入DAO定义库(点击菜单中的 Project | References项,在列表中选择Microsoft DAO 3.51 Object Library7 w& t6 * P6 C9 j(也可以是更高版本的3.60,如果安装了的话),然后在Form中加入一个ListBox控件。在Form1的代码窗口中加入以下代码:5 y, V! . O+ p% ePrivate Sub Form_Load()8 u* a! q+ W X0 p. h1 8 VDim rsTemp As Recordset# l5 P: G/ X7 ( hDim dbTemp As Database: q/ B7 8 g* fDim astr As String$ _, x1 _7 S% t! X: 7 n: h8 N( # Z0 q! r, y. c$ g; qSet dbTemp = DBEngine(0).OpenDatabase(e:program filesmicrosoft visual studiovb98biblio.mdb, _% H; |3 m, i( vdbOpenSnapshot)- F& P- v1 ; o/ h) a. m$ z: n& T! kastr = SELECT Title FROM Titles WHERE Year Published 1990 & _, 3 A* C, e_ , CAND Title LIKE ;*Beginner*; ORDER BY Title DESC4 n9 a3 V( t4 e: E: Set rsTemp = dbTemp.OpenRecordset(astr)# C8 / 2 ( n6 / CIf rsTemp.RecordCount 0 Then. H* t# K+ ?) d8 f0 g% KQ3 IrsTemp.MoveFirst0 S$ M o/ Dz( 8 DDo Until rsTemp.EOF0 I7 I5 F1 W( c7 o4 l- J/ m! , RList1.AddItem rsTemp!Title! r! K- q+ h k- 5 p8 mrsTemp.MoveNext9 H- G3 4 Y; q8 T3 m# ( RLoop1 h4 T |8 E$ E % u, yEnd If |% J# V5 h: fj/ k6 vEnd Sub0 s# H$ j2 g% z, J9 Q运行程序,List1中就会列出所有出版日期在1990年以后以及包含文字Beginner的书的书名并将书名按照降序进行排列。% f; ? x) L& z6 Y在上面的SELECT语句的WHERE中,我们使用了操作符号 来比较大小以及使用LIKE进行匹配。在WHERE语句中,可以使Z, h0 O% Z # Z0 d用的操作符有以下几类:/ 2 U+ g9 m+ Z8 L # i; B1、比较操作符$ w# j5 8 F- q7 a6 M( W3 l( t% d包含 =、=、 19980-10-01Y2 q: ; Q9 ( S3 y而在使用通配符和LIKE操作符时,需要使用引号而不是号,例如 WHERE BirthDay LIKE 1990-01-*。引号告诉数据库引6 l9 a2 K7 A) j+ J& E. $ r擎将日期当字符串处理,而号告诉数据库引擎将日期当数字处理。对于WHERE语句所要使用的逻辑操作符,在下面的文章中还! W3 E) Z& c1 f要提到。A9 H! |/ I. y: I5 h范例二:如何在数据表中加入统计等功能6 d5 E1 E* M 7 KSQL当中提供了一定数量的统计以及计算功能,其中统计函数主要有如下一些:& h8 : x, TH; C2 ?9 F4 l! v9 : COUNT 计算字段中的纪录数; 7 t) K) L1 Q3 9 ?- v, lSUM 计算字段中的所有值的和4 k; y7 M3 D) y. V: ( OMAX 获得字段中所有值中的最大值8 K) ( p6 5 F8 c4 SLMIN 获得字段中所有值中的最小值/ B4 E5 p% y# h* |* z2 & aAVG 计算字段中所有值的平均值0 C3 T& o+ rE7 Z/ h计算符有 +、-、*、/ 4种。这些计算、统计函数的使用方法如下:0 n v) I|2 bfunctionname fieldname AS outfieldname- Q0 v5 |6 V3 R* m0 M/ Z其中functionname定义函数名、fieldname 定义要操作的字段、outfieldname定义保存输出结果字段名称,下面是范例, f& R s! D# E6 S q6 q程序,首先建立一个数据库,将数据库保存为 c:db4.mdb。然后在数据库中加入一个名称为db1的表,表的结构如下:* q+ ) F3 o2 U字段名称 产品编号 成本出厂价销售数量; |- $ j& L# B8 B6 jA00020¥89.95¥95.00900/ Z4 Y3 1 m( wA00056¥54.00¥89.0024000 ?, J/ L/ C# R# M& c- l) q- lA00021¥2,300.00 ¥2,896.00 600# * 2 3 |6 gK/ V2 xA10916¥120.00 ¥209.00 1200; k+ 7 u& d8 o1 s/ eA00987¥907.00 ¥1,090.00 10000 N( p* D0 o% D6 1 m) D其中产品编号为文本类型、成本和出厂价字段为货币类型、销售数量为长整形数据。保存表,在VB工程中加入DAO定义 A0 l5 F/ Y- k/ _2 库,在Form1中加入一个ListBox控件,在Form1代码窗口中加入以下代码:# F! O2 w3 c: xPrivate Sub Form_Load()* C4 O+ B6 v y fDim rsTemp As Recordset+ _9 H8 R0 T( UDim dbTemp As Database; d M G V. Dim astr As String5 o+ q, v$ K: T7 G- ?0 / K% N, G; e+ Z# 0 HSet dbTemp = DBEngine(0).OpenDatabase(c:db4.mdb, dbOpenSnapshot)- m% W2 c r! astr = SELECT db1.产品编号, (db1.出厂价 - db1.成本)/db1.成本) AS dRate, & _# c h2 c1 n- B/ (db1.出厂价 * db1.销售数量)AS eTotal FROM db1 ORDER BY db1.产品编号* n- m* * H3 / ?, x( ISet rsTemp = dbTemp.OpenRecordset(astr)% H v% 4 i7 V j3 W2 QIf rsTemp.RecordCount 0 Then2 ) : i8 P4 . B7 |rsTemp.MoveFirst9 K X7 U0 BDo Until rsTemp.EOF# w1 r5 A4 n! h3 O6 oList1.AddItem rsTemp!产品编号 & & rsTemp!dRate & _3 : z4 e) J1 Yp! P% I! m$ S & rsTemp!eTotal G8 tv8 Z, T, w J9 LrsTemp.MoveNext- z% R$ E4 A$ t9 Z( i1 p$ 4 cLoop& D0 Y1 J( n, I. tEnd If$ z( f5 J5 M) l$ ) q+ CEnd Sub; h* W* v7 ? u在上面的程序段中,通过计算字符操作表中以有字段,然后再将结果输出到输出字段中保存。- g |6 L, u4 |, Z! f二、JOIN.ON.语句$ v! G2 |( v9 ) JOIN.ON. 语句是SQL查询中用于连接多个表的语句,该语句的语法为:+ h7 S1 C% e) l9 a, e7 O FROM table1 INNER|OUTER|LEFT|RIGHT JOIN table2 ON table1.field1 compopr table2.field2! |) S9 O) 1 R3 v6 U# w1 o2 Q: l其中tabel1指定要查询的表,tabel2指定连接到tabel1的表,field1, field2指定连接字段名称,7 d. r. p4 B1 bcompopr指定关系比较符,它可以是大于、小于、等于、不等于等。0 z( Y; l+ z3 I- m; e范例三: 列出所有书籍以及它的作者$ S% | o$ z$ t. + i; N3 e在BIBLIO中,书籍的名称位于Titles表的Title字段中,而书籍的作者位于Authors表的Autoor字段中,而这两个表之间没 - W5 g/ m0 s6 O/ Z有相关联的字段,我们这时需要联合数据库中的Title Author表,利用该表的Au_ID字段同Authors表中的Au_ID字段的关联以及+ N% T: b) W1 TISBN字段同Titles表中的ISBN字段的关联,范例如下: W( T# B ?9 $ N. D7 vPrivate Sub Form_Load()4 V1 3 s/ z. K) ODim rsTemp As Recordset. u$ I- $ s E; F; m1 H# XDim dbTemp As Database8 4 . N3 C/ Dim astr As String. k, N3 Z& 2 e% O. q$ j! _1 a. M0 e$ 7 O2 m+ qSet dbTemp = DBEngine(0).OpenDatabase(e:program filesmicrosoft visual studiovb98biblio.mdb, dbOpenSnapshot); 4 X9 c; P& pastr = SELECT Authors.Author, Titles.Title FROM & _9 I/ p+ mj; G# 7 (Title Author INNER JOIN Titles ON Title Author.ISBN = Titles.ISBN) & _7 G. t1 A1 - y. H9 W% INNER JOIN Authors ON Title Author.Au_ID = Authors.Au_ID & _& n! ?+ b- x0 a) p2 D* UWHERE Titles.Title LIKE ;*Beginner*;, u3 e; E1 ?5 K$ JSet rsTemp = dbTemp.OpenRecordset(astr)0 d# d1 |5 d rIf rsTemp.RecordCount 0 Then/ M& VC& t# G( L5 H3 N3 TrsTemp.MoveFirst! l; ! I) E1 v1 N& / U8 wDo Until rsTemp.EOF3 g. d+ H) b. y1 S; UList1.AddItem rsTemp!Title & & rsTemp!Author0 KM; V0 n6 i$ v9 ?( c& 8 WrsTemp.MoveNext9 OM2 s; J2 HP L+ V, VLoop$ j4 Y0 B7 Y& s7 g* 4 E- BEnd If3 U9 Q3 q7 a, n2 W. p7 C9 WEnd Sub: b1 f8 U/ * P在上面的范例中,我们使用两个INNER JION联合将Authors表中的Au_ID字段 和Titles表中的ISBN字段连接到Title Author. | H- p0 Q* o6 k7 C表中,然后在Title Author表中查找Title字段中包含字符串“Beginner”的纪录并将Title字段和Author字段输出。1 i5 u0 T1 4 dJSQL查询语言基本教程(2) E3 w& u5 U2 N0 w三、GROUP BY.语句- F9 T0 M$ g/ L1 s+ l! oGROUP BY. 语句实现纪录分组功能,它通常需要和上面我们提到过的统计函数 SUM、COUNT 等联合使用,它的语法为:. b+ i+ 5 . F( B; CSELECT column1, column2 + T7 p3 % S( iFROM table1,table2 # w/ O: Z) c6 M4 G B2 u1 WHERE conditions , U+ j7 E8 # ?4 A) K, s1 fGROUP BY column1, column2o; e* b2 _7 n9 c5 W4 ORDER BY column1, column25 A1 W1 K1 E) Z5 nO9 j* I范例四:计算学生成绩及总成绩2 w6 r. , # D8 Q% f) 4 m9 U1 l我们依然使用上一章使用的数据库 c:db4.mdb,在其中加入一个名字为 db2 的表,表的结构以及数据如下: u1 X. g8 t) c字段名 学生 科目 成绩# n7 H) d* s( F. k张严 语文 86.5/ f+ L9 v7 A/ o李永 语文 933 W3 H9 c* B# r9 Z* b. c4 j( Y8 王为 语文 914 rh7 I. c/ ?# z3 _张严 数学 96.5, U/ j P: / |0 0 g2 ( Q1 g0 李永 数学 90; Q) O & y+ , S( 6 u* N: T王为 数学 87: : F- : L6 x$ m- m7 ar张严 英语 80.5 , w. S! 2 U% D6 i G( _李永 英语 947 M( C! E% i6 n王为 英语 98$ Y# ( j K- t+ h建立新工程,加入DAO定义库。在Form1中加入一个ListBox控件,然后在Form_load中加入以下代码:) k% & r4 k! 1 |Private Sub Form_Load()# n9 f- ?5 F6 s0 y9 K- yDim rsTemp As Recordset; E& u7 A# W8 R8 M F* |; v: iDim dbTemp As Database- |( R4 q7 U/ c6 FDim astr As String& 0 P2 Pr) , qZ/ x0 r% u: 2 Q) P0 w) F3 g2 FSet dbTemp = DBEngine(0).OpenDatabase(c:db4.mdb, dbOpenSnapshot) R; A. W J- y& ?+ sastr = SELECT SUM(db2.成绩)AS rTotal, FORMAT(AVG(db2.成绩),;.;) AS rAVG, & _& h8 ?% j( m8 H2 J! c (db2.学生) AS Student FROM db2 GROUP BY db2.学生2 i, X8 _- z1 ? 7 |6 S, Z+ a1 CSet rsTemp = dbTemp.OpenRecordset(astr). h/ U7 M0 B0 x5 V7 y! f5 WIf rsTemp.RecordCount 0 Then5 1 c( - a. x7 X1 X6 D$ W: P7 _5 grsTemp.MoveFirst# k; B& d ! t6 _Do Until rsTemp.EOF! i3 V. Q8 1 h3 P* MList1.AddItem rsTemp!Student & Chr(5) & rsTemp!rTotal & _* f# X N$ O6 H8 I/ f & rsTemp!rAVG8 p- M; V, C! u# ?rsTemp.MoveNext7 ! G0 b) x8 3 C% aLoop2 F% G/ f% e k0 3 EEnd If/ e4 6 R h1 Y. UEnd Sub1 s7 b) l T4 h+ L( n在上面的代码中,我们利用GROUP BY将纪录根据学生姓名分组,再建立了两个统计字段rTotal和rAvg并分别利用1 A; b; c4 p- m统计函数SUM和AVG分别统计各个分组的总成绩以及平均成绩。要注意的是,在SELECT语句中出现的字段,如果没有包含! 6 p. m; U/ z- 1 A在统计函数内的话,都要包含在GROUP BY子句中。1 s5 _, : ?( l/ C, V _5 w7 J另外在上面的SQL查询中我们还使用了FORMAT子句,这是SQL中的转换和格式化语句中的一个,该语句的语法同VB中. T3 L- W0 h8 . z2 B的Format语句是一样的,相似的语句还有FIX语句。需要注意的一点是,虽然在Microsoft JET Engine 中的SQL语法和 - u4 V: / v- _5 J1 e2 O% u7 tANSI决大部分是一样的,但是有一些还是保留了“微软特色”,特别是象这一类的转换和格式化语句,例如FORMAT就是7 5 x* y0 F- c; Z f4 W. U?ANSI中没有的。而象其它数据库,诸如oracle也有各自的SQL语法扩展。在使用不同数据库进行SQL查询时要注意这一点。. Z6 T8 Z4 DZ- |5 u0 6 |在GROUP BY 语句中还可以连接使用HAVING子句。该语句同GROUP BY的关系就如同WHERE子句同SELECT的关系类似,4 v1 E2 A, c0 g+ l7 y# V7 _6 r1 OWHERE子语句为SELECT所选择的列设置条件,而HAVING子语句是给由GROUP BY创建的组设置条件。例如如果将上面的范例0 o$ o6 ( Y% e4 i9 v- a$ 中的astr改变为如下的字符串:4 J% g( P7 e/ , Iastr = SELECT SUM(db2.成绩)AS rTotal, FORMAT(AVG(db2.成绩),;.;) & _Q+ K d+ B4 n5 r/ tAS rAVG, (db2.学生) AS Student FROM db2 GROUP BY db2.学生 & _6 M2 W+ ; r1 v3 G HAVING (AVG(db2.成绩)=908 # _! * F+ f2 R2 b- M y2 a2 t则在List中就将只会列出平均成绩大于90分的学生的成绩和名字。( t8 A; & g, y7 S范例五:获得分数高于总平均分数的学生及科目 * U8 K: B4 g- 我们仍然使用上面建立的db2表。建立新工程,加入DAO定义库。在Form1中加入一个ListBox控件和一个Label控件w9 V4 Z! q5 u- j: 然后在Form_load中加入以下代码: s8 $ 9 Z3 _1 Y6 PPrivate Sub Form_Load()0 : L8 g+ C8 u& I( C; gDim rsTemp As Recordset& * N4 k I& A% ?0 , sDim dbTemp As Database& b4 F4 K6 G; z4 ZDim astr As String8 ! x$ H! ( % E6 m- j- o! R& z4 G) O2 k) N! GSet dbTemp = DBEngine(0).OpenDatabase(c:db4.mdb, dbOpenSnapshot)# N- 7 M y% w) L6 0 U0 / D8 q) j$ b) w# o, B$ wastr = SELECT FORMAT(AVG(db2.成绩),;.;) AS tAVG FROM db29 A3 M1 z$ d7 n/ 7 L# ! TSet rsTemp = dbTemp.OpenRecordset(astr)* O( x1 b! d& $ Label1.Caption = 总平均成绩: & rsTemp!tAVG/ T$ t8 0 4 j: rrsTemp.Close4 f+ B$ y9 i4 W& aSet rsTemp = Nothing, J$ F; z. t7 l, F/ E4 c3 J9 o) r9 7 K$ n) A6 A9 _2 l7 l B# ?astr = SELECT db2.成绩, db2.学生,db2.科目 FROM db2 WHERE db2.成绩 & _ O3 % _. m( N% t- c(SELECT AVG(db2.成绩) FROM db2) GROUP BY db2.学生,db2.成绩,db2.科目 & _9 Y# J* f E4 Z% 7 J3 N( ORDER BY db2.学生0 0 h. j2 p: GSet rsTemp = dbTemp.OpenRecordset(astr)5 i: W4 v4 l$ E U fIf rsTemp.RecordCount 0 Then3 b$ B3 / L( h- W4 T t2 t7 |, |rsTemp.MoveFirst g( I) E/ p( H; A, x, : Do Until rsTemp.EOF3 P6 b: m P2 p3 SList1.AddItem rsTemp!学生 & & rsTemp!科目 & & rsTemp!成绩8 N5 A- V2 T* W9 brsTemp.MoveNext! v# v2 U9 P3 ( k4 _0 n# S6 l+ WyLoop N. q % Q2 f0 x6 Q6 dEnd If$ T% j j% H7 ! k8 p0 ?End Sub% Z3 f% S, i: ) R% I6 l( N! g运行程序,在Lable1中列出总平均分数。在List1中列出了学生姓名、获得高于平均分数的科目以及科目成绩。8 Hs! O6 h( z b在上面的查询中,我们使用了一个嵌套查询,首先在子查询中获得所有科目总的平均分数,然后在查询中查询成绩字段5 : D& F5 p+ e3 U$ q& S: p值大于平均分数的纪录。6 G: m& _8 g/ T& f, Z0 I四、TRANSFORM.PIVOT. 语句3 Y, I2 U/ l% A+ B |+ v c; a这是Microsoft JET Engine 3.5以上版本所特有的SQL查询语句,该语句的特点是可以建立一个交叉表格式的查询,$ E( K( D( z: N I一个交叉表同电子表相类似。该语句可以将表中的某些数据作为行,某些数据作为列建立交叉表。该语句的语法如下:8 W k4 t* B7 Z# h, P qTRANSFORM condition select opreation PIVOT column3 y* R8 x c1 2 d% _其中condition是在交叉表中要显示的数据,select opreation 是一个SELECT.FROM. 查询,该查询形成交叉表的, B8 I) _8 k1 N0 C! w$ W* f. |航信息,PIVOT recordset中column为表中的一个字段,PIVOT子句使用该字段形成交叉表的列。: C) X. v0 M2 c范例六:建立学生成绩表$ b; k* O1 B) r% r1 K+ 我们还是使用上面已经建立的db4.mdb中的db2表。首先建立一个新的工程,然后在Form1中加入一个DataGrid控件,然后Y5 c# c( T! p* 6 ?9 j- Z向工程中加入一个DataEnvironment,在Connection1上点击鼠标右键,在菜单中选择 properties. ,在属性窗口的 提供者6 F- f# y% J7 9 Z* f8 j/ l2 b页面中选择 Microsoft JET 4.0 OLE DB Provider ,在 连接 页面的数据库名称输入框中输入 c:db4.mdb ,然后点击 测试5 p3 ! w8 H1 f连接 按钮,如果正常,点击确定退出。再在Connection1上点击鼠标右键,在菜单中选择 Add command 建立一个名为Command11 R4 x5 . C* T/ n1 n& o; I& z的命令,点击Command1右键菜单,选择 Properties. 项,然后在Command1属性窗口的General页面中选择 SQL Statement,- H# X# V7 9 0 ( h在SQL查询语句输入框中输入下面的查询:0 iC, , k4 y! V1 qTransform SUM(db2.成绩)AS iRes SELECT db2.学生 FROM db2 GROUP BY db2.学生 Pivot db2.科目: ?% a( P. t$ R0 V K/ E, w9 Q注意文本框回自动换行,不要输入回车。然后点击确定按钮。# Z, a$ I+ Z! E1 e& M. O回到Form1,将DataGrid1的DataSource设置为DataEnvironment1,将DataMember设置为Command1,然后运行程序,可以看8 F1 f6 w( E/ W8 & D$ N; |到在DataGrid1中以表的形式列出了学生成绩,以学生为行,以成绩为列。运行后得到的表格效果如下: |4 l8 Y ?v6 ?$ 9 b+ s学生 数学 英语 语文0 Z9 j/ U5 t l5 B李永 90 94 93 & F/ W0 F0 B- I5 j6 C王为 87 98 91, h: K j; 3 WV( G张严 96.5 80.5 86.5& + a* 1 F! j W4 w再回到DataEnvironment界面,双击Command1就可以看到查询建立的数据列,在上面的查询共建立了4个数据列,其中三个; i3 x# p; k1 E分别是科目分类,列中的数据为科目成绩,第一列为学生的名字,列中的数据为学生的名字。! S/ |$ m1 G3 P j* h上面的查询中还使用了SUM子语句,这时因为对于GROUP BY来说,没有包含在统计函数内的列都要包含在GROUP BY中,如果) z$ M, ) v3 % nZ将字段db2.成绩包含在 GROUP BY 子语句中,就会使最终结果出现9行而不是3行。由于每个学生的每科成绩只有一个,所以可以: H- * f5 o* n+ N d/ N* # ( F使用SUM函数将字段db2.成绩排除在GROUP BY外面。 K/ z; C% n1 C3 e在下一章内,将向大家介绍SQL语言中的数据库结构定义部分以及数据操纵部分。2 c* T6 |# N0 q7 SQL查询语言基本教程(3)0 w, R v1 t/ v1 R0 o四、CREATE TABLE 语句+ k3 O* F! T7 R2 r1 F x9 b RCREATE TABLE 语句的语法为:+ G. F& F. Q8 ( z0 Y# L Y: ah- 9 r5 z, O2 l1 yCREATE TABLE table (field1 type (size) NOT NULL index1 * Z u0 J; r$ u1 X, field2 type (size) NOT NULL index2 , . * B! S8 R3 e7 X, Z( r U3 q, CONSTRAINT multifieldindex , .)0 a; p8 M0 o, T2 q) htable; l( m! b% l1 I8 7 P) S# L新建立的表的名称( E+ _6 v, Y2 f5 I2 P8 e5 field1 type (size) NOT NULL index1* L h. l% E7 field1为字段名称,Type为字段数据类型,size 为字段宽度,下面表详细& q# a. n9 H: U描述了Type 的取值以及描述% v5 S$ D# s$ F- 8 R. ATypeJet数据类型 描述R) B( y) z9 T+ R7 O8 nBITYes/No逻辑类型 3 s$ P8 U: n( h) w8 MBYTENumberic-Byte字节数字( 2 T4 G$ n/ I% I: z- p cCOUNTERCounter 自动编号 J$ U N) d T: IsCURRENCY Currency货币数字$ X7 E4 / f) ODATETIME Date/Time 日期、时间, |+ s, n( . mm4 T- Y# J) C# DOUBLENumberic-Double双精度浮点数字( + m& T% v2 , TLONGNumberic-Long长整数2 P9 _- e8 z; 9 F7 |TLONGBINARY Ole ObjectOLE object类型& q! ?9 L h0 e4 T0 d5 s( JLONGTEXT Memo 备注类型/ L) r1 Q2 n; A. n7 T2 ySHORTNumberic-Integer 整数$ t+ W* S8 J# 7 jSINGLENumberic-Single单精度浮点数字. o. K7 P6 A! xyTEXTText 文本1 R) 4 , C# W5 G& Z! W% T6 , MNOT NULL4 J; H0 / i/ X$ w# e% L& + c该字段下的值不能为空6 5 l5 u6 n0 E- 7 index1 - r& N0 M1 H0 aI7 EG定义字段约束J: j* s* X* S# O范例七:建立学生数据表# O. Q) ?) w% m0 w! f我们还是使用前面提到的db4.mdb文件,建立一个新的工程,加入DAO定义库,然后在Form1的Load事件中加入以下代码:! B* |1 ( S+ x6 c0 ) . Y. qPrivate Sub Form_Load()! o: r% * yg2 Y; |, wDim astr As String/ V?) t7 H2 v0 yDim dbAdd As Database% Z f$ i; W9 X& h7 E( * O) a* # C& z; V2 i) Y4 f0 yScreen.MousePointer = vbHourglass+ W) _6 u n8 F* - v* vSet dbAdd = DBEngine.Workspaces(0).OpenDatabase(c:db4.mdb)3 C) w: h zastr = CREATE TABLE tbl_students & _3 D+ i& I c3 T% ( x g(stdID COUNTER PRIMARY KEY, & _! A4 t hP0 _4 D# X. n- OstdName TEXT(12) NOT NULL, & _/ G6 |9 u5 K1 V _6 - j# T7 y; stdAge SHORT, & _7 M. U7 t( ?- I; q a$ hstdBir DATETIME, & _+ s ? z8 y4 o w: WstdSex BIT)+ L; u! w( 8 o1 DDebug.Print astr1 * m3 Q, m7 T2 J. SdbAdd.Execute astr+ C7 g/ X9 j+ q5 S0 n: L8 ) j+ : P3 vScreen.MousePointer = vbDefault7 c, C0 I& I) o: F L! 0 VMsgBox 数据库建立成功.6 t/ X# ( p# 9 JdbAdd.Close: v5 w7 T3 R6 I! v2 R# mSet dbAdd = Nothing N. h) n7 _( m2 m4 iEnd Sub6 H& J8 y1 U0 CO* - n运行程序,这时会弹出数据库建立成功的消息框,使用Access打开db4.mdb,可以看到表tbl_students已经加入到数据库; r, u& 9 j9 ) t( n中了。在上面的范例中,我们加入一个名称为tbl_students的表并加入5个字段:stdID:学号,自动编号类型,并作为主键;2 U7 P3 3 C% Z. s9 C% O0 Yst
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年医学影像放射技术操作规范检测答案及解析
- 2025年重症医学多器官功能衰竭综合治疗挑战答案及解析
- 2025年急诊创伤科急诊抢救关键步骤考核模拟卷答案及解析
- 2025河南新乡学院诚聘高层次人才100人模拟试卷及参考答案详解一套
- 2025年骨科脊柱手术并发症处理考核答案及解析
- 2025贵州省妇幼保健院第十三届贵州人才博览会引才考前自测高频考点模拟试题及答案详解(夺冠)
- 2025年康复医学康复患者生活知识教育与康复指导技能考核答案及解析
- 2025年放射科影像诊断解读测验答案及解析
- 2025年胸外科肺癌患者放化疗联合治疗效果评估试卷答案及解析
- 2025年呼吸内科呼吸功能检测模拟测试卷答案及解析
- 2025云南红河红家众服经营管理有限公司社会招聘工作人员8人笔试模拟试题及答案解析
- 2025关于信息技术外包合同
- 行政法知识竞赛题及答案
- 河北省金太阳2025-2026学年高三上学期9月联考语文试卷
- 组织工程瓣膜修复研究-洞察及研究
- 自主可控人工智能智能决策系统研究报告
- 2.1《整十、整百数乘一位数的口算和估算》(课件) -2025-2026学年三年级数学上册 苏教版
- 2025年四川基层法律服务工作者执业核准考试综合试题及答案一
- 招商银行ai面试试题及答案
- Z20+名校联盟(浙江省名校新高考研究联盟)2026届高三第一次联考化学及答案
- 中国艾滋病诊疗指南(2024版)
评论
0/150
提交评论