1、基本上所有的数据库都有对应的写法(有些数据库是要装连接驱动才能连),比如"Provider=MicrosoftJetOLEDB40(用来连接access)或者provider =MSDASQL,而且每种数据库也可能会有多种连接方法(Provider意即数据库引擎),常见的有下面这些
Provider 代码 Provider
ADSDSOObject Active Directory Services
MicrosoftJetOLEDB40 Microsoft Jet databases
MSDAIPPDSO1 Microsoft Internet Publishing
MSDAORA Oracle databases
MSDAOSP Simple text files
MSDASQL Microsoft OLE DB provider for ODBC
MSDataShape Microsoft Data Shape
MSPersist Locally saved files
SQLOLEDB Microsoft SQL Server
2、参见>
第一步:连接数据库,下面是参考代码
Set conn = CreateObject("ADODBConnection")
connConnectionString = "Provider=MicrosoftAceOleDB120;Data Source=" & mypath
connConnectionString = connConnectionString & ";Jet OLEDB:Database Password=1"
connOpen
第二步:插入数据,参考代码如下:
Sql = "insert into skmxb (内部管理号,收款日期,金额"
Sql = Sql & ") values ('" & nbglH & "', #" & Format(myD, "yyyy/mm/dd") & "#,"
Sql = Sql & jE
Sql = Sql & ")"
connExecute Sql
办法应该是有的。但这样做好像没有多大意义啊。我的思路是:如果是不想别人在一定的时间后用代码,可以在代码前设置个时间判断语句,把开始使用时间记录在某单元格(一定是不影响表格编辑,又不容易被删除),并想办法隐藏(例如设置字体颜色),然后每次使用都先读取这个单元格数据,就可以知道使用了多少天了。其后就可以用个IF语句设置该不该运行或者删除数据。至于代码自毁,有必要吗?别人可以自先就COPY。设置代码权限就可以了吧? 编写代码要时间,如果要代码,给点奖励啊。
Sub DoSql()
这个过程名叫DoSql,运行不需要任何参数
Dim cnn As Object
定义cnn 它是是一个对象
Dim rst As Object
Dim Mypath As String, Str_cnn As String, Sqlstr As String
定义了一堆字符串
Dim i As Long
定义i是长整数
Set cnn = CreateObject("adodbConnection")
简而言之创建了ADOdb连接,你可以理解为启用了一个和不同类型数据库交互的中间组件
ADOdb,就像一根吸管,各种数据库就像是奇形怪状的杯子,正常的杯子从上面的开口取水,如果是瓶颈拧成麻花的杯子可能直接就倒不出来,要特殊的倒法。取数据就像取水,ADOdb做的事情是,只要把吸管放好,就可以取水,而不必掌握不同杯子特殊的倒水方法。
Mypath = ThisWorkbookFullName
这里是给字符串Mypath赋值,让他等于vba代码所在文件的完整路径,比如这段代码放在了C盘根目录下的123xlsm里,运行之后Mypath="C:\123xlsm"
If ApplicationVersion < 12 Then
Str_cnn = "Provider=MicrosoftJetOLEDB40;Extended Properties=Excel 80;Data Source=" & Mypath
Str_cnn = provider
Else
Str_cnn = "Provider=MicrosoftACEOLEDB120;Extended Properties=Excel 120;Data Source = " & Mypath
End If
这里是在判断excel版本,不同的excel版本使用ADO的时候引擎版本不一样,所以分开设置。
如果低于office12(其实就是2007)引擎使用OLEDB40,数据源就是Mypath
给字符串Str_cnn赋值,其实就是指明了Provider和DataSource参数
Provider其实就是ADO使用的引擎
DataSource就是数据源
如果高于office12(高于office2007)
引擎使用OLEDB120,数据源还是Mypath
Str_cnn = provider我也没看懂为什么这么写。
是不是sub 前面有const provider
cnnOpen Str_cnn
连接数据库
Sqlstr = "SELECT FROM [ListInAdvance$]" '//请在此处写入你的SQL代码
Set rst = cnnExecute(Sqlstr)
执行了你的sql语句
设置rst为查询到的结果对象
CellsClearContents
清除sheet里所有内容,保留格式
For i = 0 To rstFieldsCount - 1
Cells(1, 1) = rstFields(i)Name
Next
遍历结果集,在A1单元格填上域(Field)名,但是其实只保留最后一个。(结果集)
Range("a2")CopyFromRecordset rst '
在以A2为左上角定点的区域里放上查询得出的结果集。
cnnClose
关闭ADOdb连接
Set cnn = Nothing
释放cnn对象内存
End Sub
定义变量的时候,应该是 <数据类型> <变量名>的方式。数据类型除了系统类型外,你可以定义用户类型。
“用户定义类型未定义”,就是说你在使用自己的数据类型之前应该先定义;或者是你以前用的是别的编程语言,误以为VBA系统变量类型也是这么写的。
'下列ACCESS窗体按钮单击事件过程(VBA代码)实现在当前目录下创建一个新MDB数据库,
'并在该数据库内新建一张学生表同时插入一条学生信息。
'有关代码需要引用ADO数据访问对象及其扩展ADOX类库
'引用方法:
'打开VBE窗口
'引用ADO—— 菜单"工具"-> "引用 "-->勾选 Microsoft ActiveX Data Objects 21 Library 或更高版本,点击确定按钮
'引用ADOX—— 菜单"工具"-> "引用 "--> 勾选 Microsoft ADO Ext27 for DDL ado Security 或更高版本,点击确定按钮
Private Sub Command0_Click()
Dim MyMDB As New ADOXCatalog '声明并示例化一个ADOXCatalog对象
Dim cn As New ADODBConnection '声明并示例化一个ADO连接对象
Dim cnStr As String '声明一个连接字符串变量
'在当前目录下创建一个名为“NewAccessDB”的ACCESS数据库
MyMDBCreate ("Provider=MicrosoftJetOLEDB40;Data Source=" & CurrentProjectPath & "\NewAccessDBmdb" & ";")
'设置连接上述代码新创建的数据库之连接字符串
cnStr = "Provider=MicrosoftJetOLEDB40;Data Source=" & CurrentProjectPath & "\NewAccessDBmdb" & ";"
'打开与该数据库的连接
cnOpen cnStr
'新建一张学生表
cnExecute "create table students(sname text(30),sex text(1),birth date)"
'向学生表插入一条数据
cnExecute "insert into students values('张三','男',#1998-02-03#)"
'关闭连接
cnClose
'提示 *** 作成功
MsgBox "新数据库已成功创建,并在其中建立了一张学生表同时并插入一条学生信息"
End Sub
sub click()
textbox3text=textbox1text+textbox2text
label1text="+"
end sub
以上加法运算代码,是其他运算都类似的,如有问题,欢迎提问~
sub 清除()
textbox1text=""
textbox2text=""
textbox3text=""
end sub
sub 退出()
unload me
end sub
以上就是关于求教VBA连接SQL数据库的详细方法及解释。全部的内容,包括:求教VBA连接SQL数据库的详细方法及解释。、VBA代码高手请进、EXCELvba写入ACCESS数据库表等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)