做一个关于机房状态监控的系统。
需要保存一个月内的所有房间状态供查询。
我没有做过数据库,请问应该怎么做起??
我只知道有现成的数据表格,在VB里面绑定后可以显示数据库里面各段的值。
现在需要在程序运行过程中把各状态写如数据库,供查询。请各位赐教!
最好从数据库基础点的说具体一点。
分不够再加。
谢谢

解决方案 »

  1.   

    还是先看看sql server的基础吧,这样说根本无从说起啊!
      

  2.   

    sql server和access数据库有什么不同吗?
      

  3.   

    听你的意思,要具体到什么程度呐  :)呵呵,这么急找本实例看看吧,看DAO或ADO都可以,很快的~~马上会不过,看你的系统还要一点网络编程吧
    这里跟你讲详细万一沟通有问题怎么办,呵呵,记得多少给点分
      

  4.   

    用ACCESS就行,用ADO连比较简单
      

  5.   

    Visual Basic 数据库应用程序有三个部分,如图7所示。 
      用户程序是程序员开发的,也是我们即将用VB来编写的部分。数据库引擎是数据库驱动程序,使用它程序员可以用统一的格式访问各种数据库,不管这个数据库是本地的 Visual Basic 数据库,还是所支持的其它任何格式的数据库格式,所使用的数据访问对象和编程技术都是相同的。数据库则是我们上面完成的部分。从这个结构可以看出用户与正在访问的特定数据库无关。那我们在用VB编写数据库程序时,就需要使程序能够访问指定的数据库。 
      如果是简单的数据库应用,可以使用 Data 控件来执行大部分数据访问操作,而根本不用编写代码。与 Data 控件相捆绑的控件自动显示来自当前记录的一个或多个字段的数据。 DATA数据控件 
    属性 
    CONNECT属性 指定打开的数据库类型,并且包括参数,如用户和口令等。 
    例如: 
    打开Access数据库(缺省) 
    CONNECT=“ACCESS” 
    打开ODBC数据库 
    CONNECT=“ODBC;DATABASE=??;UID=??;PWD=??;DSN=??” 
    DATABASENAME属性 确定数据控件访问哪一个数据库。 
    对于多表数据库它为具体的数据库文件名,例如:ACCESS数据库 
    DATABASENAME=“D:\...\DEMO.MDB" 
      对于单表数据库它为具体的数据库文件所在的目录,而具体文件名放在RECORDSOURCE属性中,例如:访问FOXPRO数据库文件D:\FOX\DEMO.DBF 
    DATABASENAME=“D:\FOX” 
    RECORDSOURCE=“DEMO”不带文件扩展名 
    RECORDSOURCE属性 
      确定数据控件的记录集,即:所要访问的数据内容。它可以是一个表名、存储查询名或SQL语句。例如:访问Register表所有数据 : 
    RECORDSOURCE=“Register”访问RC表中1973年以前出生的数据: 
    RECORDSOURCE=“SELECT *FROM Register WHERE [BIRTHDAY]<#1/1/1973#" 
    注意:当我们在运行时修改了该属性后,需要调用REFRESH方法刷新记录集。 方法 
    REFRESH方法 当我们在运行时修改了Record- 
    Source属性后,需要调用该方法刷新记录集。 
    UPDATERECORD方法 将绑定在数据控件上的控件的数据写入数据库中。即:当我们修改了数据后调用该方法确定修改。 
    CANCELUPDATE方法 将数据库中的数据重新读到绑定在数据控件上的控件中。即:当我们修改了数据后调用该方法放弃修改。 
      

  6.   

    在DATA控件的CONNECT属性中,选中“ACCESS”项,在DatabaseName属性中,输入“C:\TEMP\登记.mdb”,在RecordSource属性中,选中“Register”,这样就完成了数据库与DATA控件的连接,也就是完成了与应用程序的连接。   数据库中各个字段又是怎样和文本框连接起来的呢?在VB中,我们可以将普通控件绑定在数据控件上,来完成自动地显示、更新记录集的数据。常用的可绑定的控件有:Label,Text,checkBox,Image等。通过设置这些控件的DataSource和DataField属性来完成绑定。 DataSource 属性 表示绑定到哪一个数据控件上,程序中我们可能使用多个数据控件。 
    DataField 属性 表示绑定到记录集的哪一个记录上。 
      现在我们需要把Text1与表“登记”中的姓名字段连接起来。完成DATA控件的连接之后,在Text1控件的DataSource属性中,选中“Data1”,在DataField属性中,选中“姓名”值。用同样的方法,将各个文本框分别绑定到对应的字段上,就完成了文本框的捆绑。 
      下面我们编写两个按钮命令,完成其相应的操作了。喂!别着急,还有一个重要的对象没讲呢! 
      当应用程序启动时,Data 控件被自动地初始化。如果 Connect、DatabaseName、Options、RecordSource、Exclusive、ReadOnly 和 RecordsetType 属性是合法的, Microsoft Jet 数据库引擎就会试图创建一个新的基于这些属性的 Recordset 记录集对象。Recordset 对象可以表示表中的记录或者作为查询结果的记录,使用 Recordset 对象可以在记录一级上对数据库中的数据进行处理。这在数据库编程中是一个十分重要的,也是比较复杂的对象。     
      Recordset 对象有三种类型:表、动态集、快照,它们之间存在明显的区别。 
      表类型的 Recordset 对象是指当前数据库中的表在创建表类型的记录集时,数据库引擎打开的表。后续的数据操作都是直接对表进行的。只能对单个的表打开表类型的记录集,而不能对联接或者联合查询打开表类型的记录集。与其它类型的 Recordset 对象相比,表类型的搜索与排序速度最快。 
      动态集类型的 Recordset 对象可以是本地的表,也可以是返回的行查询结果。它实际上是对一个或者几个表中的记录的一系列引用。可用动态集从多个表中提取和更新数据,其中包括链接的其它数据库中的表。动态集类型具有一种与众不同的特点:不同数据库的可更新联接。利用这种特性,可以对不同类型的数据库中的表进行可更新的联接查询。动态集和它的基本表可以互相更新。如果动态集中的记录发生改变,同样的变化也将在基本表中反映出来。在打开动态集的时候,如果其他的用户修改了基本表,那么动态集中也将反映出被修改过的记录。动态集类型是最灵活的Recordset 类型,也是功能最强的。不过,它的搜索速度与其它操作的速度不及表类型的 Recordset。 
      快照类型的 Recordset 对象包含的数据是固定的,它反映了在产生快照的一瞬间数据库的状态。从 Microsoft Jet 数据源得到的快照是不可更新的,从开放数据库互连 (ODBC) 数据源得到的某些快照是可以更新的,这取决于数据库系统本身的能力。与动态集类型和表类型的 Recordset 对象相比,快照的处理开销较少。因此,它执行查询和返回数据的速度更快,特别是在使用 ODBC 数据源时。快照类型保存了表中所有记录的完整复本,因此,如 果记录的个数很多,快照的性能将比动态集慢得多。为了确定快照与动态集哪一个更快,可以先以动态集方式打开记录集,然后再以快照方式打开它。 
      具体使用什么记录集,取决于需要完成的任务:是要更改数据呢,还是简单地查看数据。例如,如果必须对数据进行排序或者使用索引,可以使用表。因为表类型的 Recordset 对象是做了索引的,它定位数据的速度是最快的。如果希望能够对查询选定的一系列记录进行更新,可以使用动态集。如果在特殊的情况下不能使用表类型的记录集,或者只须对记录进行扫描,那么使用快照类型可能会快一些。 
      一般来说,尽可能地使用表类型的 Recordset 对象,它的性能通常总是最好的。 
      为选择特定的 Recordset 类型,把 Data 控件的RecordsetType属性设成: 
      

  7.   

    RecordSet记录集属性 
    BOF属性 当记录集记录指针指向第一条记录时返回True 
    EOF属性 当记录集记录指针指向最后一条记录时返回True 
    AbsloutePosition属性 返回当前记录集记录指针,第一条记录为0,是只读属性 
    Book属性 String类型,返回或设置当前记录集记录指针的书签,是可读写属性。每一条记录都有自己唯一的书签,它与记录在记录集中的顺序无关。将Book属性存放到变量中,后面可以通过将该变量赋值给Book属性,并返回到这个记录。 
    注意:程序中使用BookMark属性重定位记录指针,而不能使用Abslouteposition 
    NoMatch属性 当我们使用Find方法查询时如果未找到则返回True。常与BookMark属性同时使用。 
    例如:查找[NAME]字段中第一个姓李的人 Dim S As String 
    With XXXX.RecordSet 
    S = .BookMark 
    .FindFirst "[NAME] Like '李*'" 
    if .NoMatch then 
    MsgBox "数据未找到“ 
    .BookMark = S 
    End if 
    End With 记录集方法 
    AddNew方法 向记录集增加一条新记录 
    Delete方法 从记录集中将当前记录删除。在删除后常使用MoveNext方法移动指针。 
    例如: With XXXX.RecordSet 
    .Delete 
    .MoveNext 
    if .EOF then .MoveLast 
    End With MoveXXXX方法 
    MoveFirst 将记录集指针移动到第一条记录上 
    MoveLast 将记录集指针移动到最后一条记录上 
    MovePrevious 将记录集指针移动到前一条记录上 
    MoveNext 将记录集指针移动到下一条记录上 
    FindXXXX方法 
    FindFirst在记录集中查询符合条件的第一条记录 
    FindLast 在记录集中查询符合条件的最后一条记录 
    FindPrevious 在记录集中查询符合条件的前一条记录 
    FindNext 在记录集中查询符合条件的下一条记录 
      好了,有了这么充分的知识了,编写两个按钮命令简直是小菜一碟,先来试一下,添一个“增加”命令按钮吧。 Private Sub Command1_Click() 
    Data1.Recordset.AddNew 
    End Sub   哇!怎么这么简单,再看一下“删除”命令按钮 Private Sub Command2_Click() 
    Data1.Recordset.Delete 
    Data1.Recordset.AddNew 
    End Sub   就这样行了吗?运行程序吧,OK!一切正常,迫不及待地输入一条记录,点击“增加”按钮,怎么?出问题了!因为你只有在进行了AddNew方法后才可以输入数据,好吧,在窗口的初始化时就增加一条新记录吧。 Private Sub Form_Initialize() 
    Data1.Recordset.AddNew 
    End Sub 
      输入完了数据,我们打算退出程序,很自然的我们执行关闭窗口操作,就顺利地结束了输入工作。真的很顺利吗?打开数据库,看看数据库中的数据,我们发现刚才输入的最后一条记录没有存入数据库中。这个很好解释,每当我们调用AddNew方法时,它就将输入的记录存入数据库中,而当我们关闭窗口时,刚输入的记录并没有保存到数据库中,那么在关闭窗口之前对DATA控件进行一次刷新就可以将数据存入数据库中了。 Private Sub Form_QueryUnload(Cancel As Inte              ger, UnloadMode As Integer) 
    Data1.Refresh 
    End Sub   到了这里,我们似乎可以稍稍轻松了一点,这个窗口的功能差不多完成了。但是我不得不给你提出一个忠告:在数据库系统中,应尽量将错误在应用级上处理。这句话看起来似乎有点抽象,实际上用在这个程序中就简单多了。在表Register中,我们将出生日期定义为Date/Time类型,如果在程序运行时,在该字段对应的文本框中输入的不是Date/Time格式,在向数据库提交数据时会出现什么情况呢?数据库会向用户报告错误信息。然而这样对应用程序并不好,这样的错误应该由用户程序处理,而不是交给数据库去处理,所以在数据提交之前就应该检查该字段的输入是否合法。 Private Sub Text3_LostFocus() 
    If IsDate(Text3.Text) Or Text3.Text = "" Then          '检查是否输入合法数据 
    Exit Sub 
    End If 
    MsgBox ("输入错误,请输入你出生的年月日!") 
    ,将选取不合法的数据,以便重新输入,并使控制焦点不动 
    Text3.SetFocus 
    Text3.SelStart = 0 
    Text3.SelLength = Len(Text3.Text) 
    End Sub 
      

  8.   

    谢谢whiledo(小玉) ( ) 
    我看过这种基本的数据库绑定并显示,只是对于如何创建数据库及整个的过程我不是很清楚。
      

  9.   

    还记得我们在前面说过Visual Basic 提供了两种与 Jet 数据库引擎接口的方法吗?Data 控件和数据访问对象。我们已经见识了DATA控件,确实给人意想不到的方便,但Data 控件只给出有限的访问现存数据库的功能。而 DAO 模型则可以全面控制数据库的完整编程接口。这两种方法事实上并不是互斥的,实际上,它们常同时使用。 
      DAO 模型是设计关系数据库系统结构的对象类集合。它们提供了完成管理这样一个系统所需的全部操作属性和方法,包括创建数据库,定义表、字段和索引,建立表间的关系,定位和查询数据库等工具。DAO结构的主要对象如图10所示。 
      Visual Basic 中的数据库编程就是创建DAO(数据访问对象)。这些对象对应于被访问物理数据库的不同部分,如 Database、TableDef、Field 和 Index 对象,用这些对象的属性和方法来实现对数据库的操作,能够在 Visual Basic 窗体中使用绑定和非绑定控件来显示操作结果并接收用户输入。这样就简化了代码,它赋予程序员很大的灵活性。因为可以使用同样的对象、属性和方法来处理各种不同的数据库格式。同时,如果从一种数据库格式变到另一种格式(例如,将本地的 Microsoft Access 数据库转换为网络上的 SQL Server 数据库),只需变动少量的代码就可以适应这种改变。甚至可以创建这样的应用程序,在单一的查询或报表中连接来自多个不同数据库的表。 
      我们先介绍DAO对象,从上图中我们可以看到,DAO对象中最关键的是DBEngine对象,所有的数据库操作都要通过它来完成。 DBEngine对象 
    DBEngine对象相当于jet数据库引擎,不需要创建该对象。 
    CreateWorkspace方法:创建一个工作区对象 
    例如 : 
    Dim ws As Workspace 
    Set ws = DbEngine.CreateWorkspace                 (SpName,UserID,password",SpType) 
    其中 
    SpName 工作区名称String 
    UserID 用户名 String 
    Password 口令String 
    SpType 工作区类型 = dbUsejet jet工作区 
    = dbUseODBCODBC工作区 Workspace对象 
      Workspace对象为用户定义一个会话,通过与之关联的用户名和口令建立一个安全级别。当不需要安全级别时可使用缺省的工作区DBEngine.Workspace。 
    方法: 
    OpenDatebase    打开一个数据库 
    Close    关闭当前工作区 
    BeginTrans    启动一个事务 
    CommitTrans    提交当前事务 
    RollBack    回滚当前事务 
    例如我们需要打开一个数据库。 
    我们调用Workspace的OpenDatabase方法打开一个数据库。 
    例如: 
    Dim db As DataBase 
    Set db=OpenDatabase(dbname,exc,readonly,source) 
    其中: 
    dbname    数据库文件名(对于单表数据库为路径) 
    exc = TRUE 表示打开数据库后,该数据库不能被其它应用程序访问。 
        FALSE 表示共享地打开数据库 
    Readonly=TRUE 表示打开数据库后,只能对数据库进行读操作 
    =FALSE 表示打开数据库后,可对数据库进行读写操作 
    source数据源名,用于指定打开地数据库类型。 创建记录集 
      我们使用DataBase对象的OpenRecordSet方法打开一个记录集。 
    例如: 
    Dim rs As RecordSet 
    Set rs=db.OpenRecordSet(source,type) 
    其中: 
    source 指定记录集的内容,它可以是一个表名,查询名或SQL语句 
    type 创建记录集的类型 
    =dbOpenTable表型记录集 
    =dbOpenDynaset动态型记录集 
    =dbOpenSnapshot快照型记录集 访问ODBC数据库 
      Visual Basic 通过 DAO 和 Jet 引擎可以识别三类数据库:Visual Basic 数据库,外部数据库,ODBC 数据库。在开发大中型数据库系统中一般都采用ODBC 数据库,如 Microsoft SQL Server等。DAO(数据访问对象)的 ODBCDirect 模式允许直接访问 ODBC 数据。另外,远程数据对象 (RDO) 库和远程数据控件 (RDC)也 允许直接访问 ODBC 数据。 
    要访问ODBC数据库需要两步,首先需要在WINDOWS 95 或WINDOWS NT的控制面板中设置ODBC数据源名(DSN)。然后在OpenDatabase方法的Source参数中使用该数据源名。 
    例如:访问Microsoft SQL Server 
    Source="ODBC;DSN=MyDSN;UID=sa;PWD=xx;DataBase=pubs" 
    在程序中使用DAO 
      DAO的强大功能确实让人兴奋,只是较之DATA控件要复杂得多。在复杂的数据库处理中,这两种方法常常同时使用。要使用DAO,必须选中VB的“工程”菜单下的“部件……”项,在控件标签中选中"Microsoft DAO 3.5 Object Library"之后就可以在程序中定义DAO变量了。在这篇文章中我们所举的数据库例子比较简单,有兴趣的朋友不妨采用数据访问对象(DAO)来实现这个程序。 
      

  10.   

    呵呵,不客气,这个不是我写的我声明,但是你看着个就基本差不多了,另外的靠MSDN 吧就搞得定~
    顺序基本也是这样的
      

  11.   

    以前应接触过dbase或fox吧?学校里的必修课呀,从哪里至少知道家数据库的最基本东西。office里面必是有Access吗,而且例子也很多,先学一下它吧。建库是最根本的一步,提前一定要分析好数据,建一个结构合理、效率较高的库只能靠你自己慢慢摸索了。编程嘛,就必须知道对数据库的各种操作如何实现,这就必须对SQL熟练掌握,这个是打仗的枪啊。
    先把Access搞明白了,到时候SQL SERVER再学就不在话下。
    提一点思路,对了,这方面的书、资料书店及网上很多的。