问一:
用DAO建库
Public Function CreatMDB(Optional ByVal catalog As String, Optional ByVal name As String) As Boolean
    Dim dbDataBase As Database
    Dim sNewDBPathAndName As String
    Dim i As Integer
    Dim path As String
    
    path = App.path & "\" & catalog
    
    If Not IsFolderExists(path) Then     '无目录则建目录
      MkDir path
    End If
    
    If IsFileExists(path & "\" & name & ".mdb") Then
      MsgBox path & "\" & name & ".mdb" & "文件已存在!", vbInformation, "提示"  '有同名文件则提示"文件已存在!", 不创建文件
      Exit Function
    End If
    
    sNewDBPathAndName = path & "\" & name & ".mdb"
    Set dbDataBase = CreateDatabase(sNewDBPathAndName, dbLangGeneral, dbEncrypt)
    Set dbDataBase = Nothing
    CreatMDB = True
End Function
成功在指定目录下建好一个MDB文件了用DAO在此数据库中建表Public Function CreatTable(Optional ByVal dbCatlog As String, Optional ByVal dbName As String, Optional ByVal tName As String) As Boolean'****************************************用DAO创建表***********************************
  Dim path As String
  Dim dbDataBase As Database
  Dim tdExample As TableDef
  
  Dim fld_pDT As Field
  Dim fld_pName As Field
  Dim fld_pDisc As Field
  Dim fld_pAddr As Field
  Dim fld_pValue As Field  path = App.path & "\" & dbCatlog & "\"  On Error Resume Next
  Set dbDataBase = DAO.OpenDatabase(path & dbName & ".mdb", True, False)
  Set tdExample = dbDataBase.CreateTableDef(tName)
    
    Set fld_pDT = tdExample.CreateField("日期时间", dbTime)
    Set fld_pName = tdExample.CreateField("参数名", dbText)
    Set fld_pDisc = tdExample.CreateField("参数描述", dbText)
    Set fld_pAddr = tdExample.CreateField("参数地址", dbText)
    Set fld_pValue = tdExample.CreateField("参数值", dbSingle)    tdExample.Fields.Append fld_pName
    tdExample.Fields.Append fld_pDisc
    tdExample.Fields.Append fld_pAddr
    tdExample.Fields.Append fld_pValue    dbDataBase.TableDefs.Append tdExample    Set fld_pName = Nothing
    Set fld_pDisc = Nothing
    Set fld_pAddr = Nothing
    Set fld_pValue = Nothing
    Set tdExample = Nothing
    Set dbDataBase = Nothing
End Function建表不成功,不提示任何错误.请问此函数错在什么地方啦?
用SQL语句建表是成功的.代码如下strconn = "provider=microsoft.jet.oledb.4.0;data source=" & path & dbName & ".mdb"
Dim objconn As ADODB.Connection
Set objconn = New ADODB.Connection
objconn.Open strconn
strsql = "create table " & tName & _
         "(日期时间 datetime default now(), " & _
         "参数名 varchar(50) not null, " & _
         "参数描述 varchar(50)not null, " & _
         "参数地址 varchar(50)not null," & _
         "参数值 float ," & _
         "primary key (日期时间))"
objconn.Execute (strsql)
objconn.Close
Set objconn = Nothing问二:
VB用代码操作数据库有好几种方式,ADO,DAO,SQL等,哪种方法最优越?
问三:
因本人初涉这方面,有时候用下DAO,有时候又用下ADO,当代码调试不出来,又会用ADODC控件,有时候觉得SQL语句比较简单时又会去用它.这样感觉没有一种好的习惯或者说是统一性.对于知识结构有感觉有些乱了有没有一种方式能胜任所有数据库操作,而且比较优越或者说当前比较流行的?
(因为在网上又有些人说SQL不可以创建ACCESS这种文件型的数据库的表,只能创建SQL SERVER这种服务型的数据库的表)但我确实找到创建的例子了呀~经验的前辈们给我一个完整的答案吧,我想有一套自己对于数据库操作的统一的习惯,万分感谢:)

解决方案 »

  1.   

    补充点,调试了好久,发现有DAO建表函数中,对于字段类型那个常数是错的.但我试好好几种表示法了,比如DateTime,varchr,number^^^^等,总会提示变量未定义
    microsoft DAO 3.x object library我都引用了,是不是还有啥没引用上,还是类型表达错了?
    期盼指点
      

  2.   

    1.    Set fld_pDT = tdExample.CreateField("日期时间", dbTime)
    改为
        Set fld_pDT = tdExample.CreateField("日期时间", dbDate)
    2. 问二: VB用代码操作数据库有好几种方式,ADO,DAO,SQL等,哪种方法最优越? 
       肯定是用ADO方式了,这种比较流行,当然处理问题要视情况而定,并不绝对
      

  3.   

    先用ACCESS建立一个mdb数据库的模板文件,程序首次运行时将模板文件复制到指定目录下即可
      

  4.   

    调试完成前,别加 On Error Resume Next 之类的语句
    这样,出错不会有提示
      

  5.   

    何不花点时间好好研究一下visdata呢?
    关于dao所有功能这都能找到.
      

  6.   

    DAO是早期的访问技术,现在不推荐使用,VB中使用ADO是目前最好的选择(个别特殊情况除外),SQL和这两者不属于同类技术,它是结构化查询语言,应用方向有很大差别,SQL SERVER数据库支持T-SQL,而Access数据库支持JET SQL,两种SQL标准虽然有差别,但毕竟都是SQL,相似相同之处还是很多的,所以创建表的语句都是支持的(字段类型会因数据库的差异而有所不同)。至于ADODC控件,它只是一个控件,是一种技术应用的具体表现形式,看类型名称你也应该会想到它是基于ADO技术的。我创建access文件习惯用adox来进行,以下是简单的示例,注意需要引用adox'创建mdb
    Dim cat As New ADOX.Catalog
    cat.Create "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=c:\new.mdb"'创建表
    Dim conn1 As ADODB.Connection
    Dim SQLCreate As StringSet conn1 = cat.ActiveConnection
    SQLCreate = "create table..."
    conn1.Execute(SQLCreate, 1, adCmdText)
    conn1.close
      

  7.   

    我有一个例子,不知对你有用否
    http://download.csdn.net/source/1483924
      

  8.   


    这些受教了,果然出现错误提示是"不识别的数据库^^^^^"
    可是我晕,我是用DAO创建的库,为什么在里面建表它就不识别?
      

  9.   


    不同意楼上某些人的说法。DAO 有独特的功能,建库、压缩都好用。对于本地 Access 数据库来说,是很好的选择。技术只有“适用”,没有“最好”。一般来说,ADO 不适于数据库管理(包括创建、压缩)。这些工作,在 ADO 领域需要借助于 ADOX。我不知道楼上是怎么用“最好选择”建库的。可能是我孤陋寡闻了。
      

  10.   

    这些受教了,果然出现错误提示是"不识别的数据库^^^^^" 
    可是我晕,我是用DAO创建的库,为什么在里面建表它就不识别?======================================================把你的引用改为 3.6 版本。
      

  11.   

    用六楼"金甲武士"的代码,是可以用的.谢谢指教七楼"阿根廷巫师"的资源中代码是可以用的这回我就觉得有点乱了.代码有N多种,我应该如何去总结归纳?
    其实对于ADO,或者DAO我都想掌握他们的区别,及两者的应用.我现在用ADO方式实现了功能了
    问题就是DAO我建成功,表建表不行^^^^^^有没有人能发一下,ADO应用更为详细的例子代码?比如从建库,建表,操作表,操作字段等~~
                   DAO的的相应完整点的代码
    我想能作一下比较,应该就可以总结了~~~~~如果分不够可以加分:)
      

  12.   

    这些受教了,果然出现错误提示是"不识别的数据库^^^^^" 
    可是我晕,我是用DAO创建的库,为什么在里面建表它就不识别? ====================================================== 把你的引用改为 3.6 版本。
    *************************************************
    其实3.6和3.5我都试过了,都不行.出错提示"类型不匹配"调试到下面代码红色部分就停了'****************************************用DAO创建表***********************************
      Dim path As String
      Dim dbDataBase As Database
      Dim tdExample As TableDef  Dim fld_pDT As Field
      Dim fld_pName As Field
      Dim fld_pDisc As Field
      Dim fld_pAddr As Field
      Dim fld_pValue As Field  path = App.path & "\" & dbCatlog & "\"'  On Error Resume Next
      Set dbDataBase = OpenDatabase(path & dbName & ".mdb", True, False)
      Set tdExample = dbDataBase.CreateTableDef(tName)    Set fld_pDT = tdExample.CreateField("日期时间", dbDate)
        Set fld_pName = tdExample.CreateField("参数名", dbText)
        Set fld_pDisc = tdExample.CreateField("参数描述", dbText)
        Set fld_pAddr = tdExample.CreateField("参数地址", dbText)
        Set fld_pValue = tdExample.CreateField("参数值", dbSingle)    tdExample.Fields.Append fld_pName
        tdExample.Fields.Append fld_pDisc
        tdExample.Fields.Append fld_pAddr
        tdExample.Fields.Append fld_pValue    dbDataBase.TableDefs.Append tdExample    Set fld_pName = Nothing
        Set fld_pDisc = Nothing
        Set fld_pAddr = Nothing
        Set fld_pValue = Nothing
        Set tdExample = Nothing
        Set dbDataBase = Nothing奇怪,怎么回事呢.of123能再帮看看不?