accesssqlvba
① access 删除记录vba代码
删除/插入 (delete/insert) 利用的是CurrentDb.Execute(stsql)。
代码如下:
[plain] view plain
'拼写删除指定PR Number的SQL文
stSql = "DELETE FROM [000_BASTS] WHERE [PR NR] = '" & pr_nr & "'"
'执行SQL文
CurrentDb.Execute (stSql)
② access2013 VBA中怎样运行sql语句
sql在vba里的运用比较专业需要认真的学习研究一下,给你详细一点的资料和一个实例
你自己学着模拟练习一下
一、简单的查询
1、建立查询
数据选项卡—现有连接—浏览更多或者按快捷键Alt+D+D+D
选择要查询的Excel文件和文件中的的工作表,就可以将相应工作表的数据取过来。表现形式可以是表,也可以是数据透视表等。
2、SQL查询语句
如果是挑选部分列数据,就需要用SQL语句(取所有数据也可以用SQL语句)。
建立查询时,选择工作表后不要点击“确定”按钮,而是先点击“属性”按钮,弹出窗口中选择“定义”选项卡,在命令文本框中输入SQL查询语句(原来的工作表名称,表示所有数据,可以认为是取所有数据的SQL的一种特殊写法):
Select字段列表from[工作表名$]
--其中字段列表就是需要选择的字段,数据源用工作表名称加“$“再用中括号括起来,例如:
selectprov_name,city_name,xs_mc,xs_codefrom[Sheet1$]
select*from[Sheet1$]--取所有数据
偶然发现,字段名不能用no,估计是保留字,如需要,用中括号括起来,例如:
select[no],prov_name,city_name,xs_mc,xs_codefrom[Sheet1$]
字段名中含有特殊字符的也要用中括号括起来,如/?空格等
Excel查询没有伪表概念,对于表达式的计算直接用select既可,例如
Select23+45--返回68
Selectdate()--返回当前日期
3、修改查询语句
方法:点击右键—弹出菜单—表格—编辑查询
通过修改SQL语句可以变更所取的数据,也可以将建立查询时的简单SQL语句改成复杂的SQL语句。
字段名更换:如果想换个字段名,用“as新字段名”既可,例如:
selectprov_nameas省,city_nameas城市,xs_mcas县市,xs_codeas编码from[Sheet1$]
非正常表格:数据区域(含字段名)不在第一行
需要在工作表名称后面指定数据范围,例如:
selectprov_name,city_name,xs_mc,xs_codefrom[Sheet1$B2:G2000]
或者,将数据块定义为一个名称,假设定义为mydata,SQL语句如下:
selectprov_name,city_name,xs_mc,xs_codefrommydata
注意:使用名称时没有$符号,也没有方括号了。
数据更新:数据源发生变化,需要更新数据,方法:点击右键—弹出菜单—刷新
意外:如果打开Excel文件后弹出不是选择工作表的窗口而是一个“数据连接属性”窗口,可以关闭这个窗口,然后将Excel应用极小化再极大化方式消除,或者在弹出选择文件的窗口时,退回上一级文件夹,删除那个Queries文件夹,就行了。
二、复杂的查询
1、多表联合
相同结构的多个表合并到一起,用union连接SQL语句,例如:
Select*from[财务部$]unionallSelect*from[市场部$]
Union是去重复的,即相同的记录保留一个(类似distinct),Unionall则是直接相加两个结果,不去重复。
增加一个部门字段可以将查询结果中的区分开来,以便知道数据来自哪个表。Union的三个一致,即:字段的数量、类型和顺序。例如:
Select“财务部”as部门,*from[财务部$]unionallSelect“市场部”as部门,*from[市场部$]
多表联合查询
Select*from[部门$]bm,[员工$]ygwherebm.部门编码=yg.部门编码跨工作簿查询果数据不仅来自不同的工作表,还来自不同的文件,一样可以用union联合,例如:
Select“分公司1”as公司,“财务部”as部门,*from[F:SQL之Excel应用分公司1.xlsx].[财务部$]unionall
Select“分公司1”as公司,“市场部”as部门,*from[F:SQL之Excel应用分公司1.xlsx].[市场部$]unionall
Select“分公司2”as公司,“财务部”as部门,*from[F:SQL之Excel应用分公司2.xlsx].[财务部$]unionall
Select“分公司2”as公司,“市场部”as部门,*from[F:SQL之Excel应用分公司2.xlsx].[市场部$]
因为SQL中已经指定了文件名和表名,所以建立连接时连接谁并不重要,这种情况下,建立连接的时候就连接自己,然后再改写SQL语句。
SubUsingSQL()
DimSqlAsString
DimjAsInteger
DimrAsInteger
DimCnnAsADODB.Connection
DimrsAsADODB.Recordset
WithSheet1
.Cells.Clear
SetCnn=NewADODB.Connection
WithCnn
.Provider="Microsoft.ACE.OLEDB.12.0"
.ConnectionString="ExtendedProperties=Excel12.0;"_
&"DataSource="&ThisWorkbook.Path&"数据.xlsx"
.Open
EndWith
Setrs=NewADODB.Recordset
Sql="Select*From[Sheet1$]"
rs.OpenSql,Cnn,adOpenKeyset,adLockOptimistic
Forj=0Tors.Fields.Count-1
.Cells(1,j+1)=rs.Fields(j).Name
Next
r=.Cells(.Rows.Count,1).End(xlUp).Row
.Range("A"&r+1).CopyFromRecordsetrs
EndWith
rs.Close
Cnn.Close
Setrs=Nothing
SetCnn=Nothing
EndSub
③ 如何用vba代码将access数据库连接求代码
在VBA中编写代码以连接Access数据库并将Excel表格中的数据写入数据库,可以通过以下步骤实现。本示例中,程序会读取Excel中的数据,并将它们插入到Access数据库中的特定表中。
首先,定义变量并初始化数据路径。代码如下:
Sub FYMXDL()
Dim XQID As Integer
Dim JZID As Integer
Dim FYID As Integer
Dim FBXZ As String
Dim DW As String
Dim SARR(1 To 31) As Double
Dim rst As New ADODB.Recordset
mYpath = ThisWorkbook.Path & "\jzfydata.accdb"
Set cONn = CreateObject("ADODB.Connection")
cONn.ConnectionString = "Provider=Microsoft.Ace.OleDB.12.0;Data Source=" & mYpath
cONn.ConnectionString = cONn.ConnectionString & ";Jet OLEDB:Database "
cONn.Open
XQID = Cells(3, 2).Value
JZID = Cells(3, 5).Value
接下来,执行删除操作,清空特定小区和建筑的费用明细:
Const kshh = 7
hh = kshh
Do While Cells(hh, 3).Value > 0
FYID = Cells(hh, 3).Value
FBXZ = Cells(hh, 11).Text
For i = 1 To 31
SARR(i) = Round(Cells(hh, 13 + i - 1).Value, 2)
Next i
Sql = "delete from fymxb where 小区ID=" & XQID & " AND 建筑ID = " & JZID
cONn.Execute Sql
最后,插入数据到数据库:
Sql = "INSERT INTO fymxb(小区ID,建筑ID,费用ID,分包性质,工作量,单价合计_中标,人工费_中标, 主材费_中标, 辅材费_中标, 机械费_中标, 管理费_中标, 利润_中标,规费_中标,税金_中标,合价_中标,单价合计_标准成本,人工费_标准成本,主材费_标准成本,辅材费_标准成本,机械费_标准成本,管理费_标准成本,利润_标准成本,规费_标准成本,税金_标准成本,合价_标准成本,单价合计_实际成本,人工费_实际成本,主材费_实际成本,辅材费_实际成本,机械费_实际成本,管理费_实际成本,利润_实际成本,规费_实际成本,税金_实际成本,合价_实际成本) VALUES (" & XQID & ", " & JZID & ", " & FYID & ", '" & FBXZ & "'"
For i = 1 To 31
Sql = Sql & "," & SARR(i)
Next i
Sql = Sql & " )"
cONn.Execute Sql
hh = hh + 1
Loop
End Sub
通过以上代码,可以轻松地将Excel表格中的数据写入到Access数据库中,从而实现数据的管理和维护。
④ Access VBA中如何使用 SQL 语句。
提问里是一段打开ADO记录集对象的代码,并不完整且含有错误。下面提供一个完整一点的代码供参考:
PrivateSubCommand111_Click()
DimsqlAsString
'声明ADO记录集对象
DimrsAsADODB.Recordset
Setrs=NewADODB.Recordset'实例化记录集对象
'拼写SQL语句并赋值到变量
sql="SELECTDGZY.usenameFROMDGZYWHERE(((DGZY.usename)Like'张三'));"
'打开记录集
rs.Opensql,CurrentProject.Connection,adOpenKeyset,adLockOptimistic
'利用记录集对象进行所需的有关操作,代码略
EndSub
⑤ ACCESS 如何用VBA语言向数据库中填加数据
在ACCESS数据库中,使用VBA(Visual Basic for Applications)语言向数据库中添加数据,是一个较为便捷的操作。以下是具体步骤与方法。
首先,打开ACCESS数据库,确保已连接VBA环境。
其次,使用`sql`语句创建一个插入操作。其格式为`"INSERT INTO 表名(字段1,字段2) VALUES('字段1内容','字段2内容')"`。这里,`表名`代表你要插入数据的表名,`字段1,字段2`代表表中你想要插入数据的字段名,`'字段1内容','字段2内容'`代表你想要插入的数据内容。例如,如果你想要在`Customers`表中插入一个客户数据,其`CustomerName`字段为`John Doe`,`Address`字段为`123 Main St`,则`sql`语句应为`"INSERT INTO Customers(CustomerName,Address) VALUES('John Doe','123 Main St')"`。
接着,使用VBA代码来执行`sql`语句。代码示例如下:
vba
Dim sql As String
sql = "INSERT INTO Customers(CustomerName,Address) VALUES('John Doe','123 Main St')"
DoCmd.RunSQL sql
这段代码中,`sql`变量存储了`sql`语句,然后通过`DoCmd.RunSQL`方法执行插入操作。执行后,新的数据会被添加到`Customers`表中。
如果需要在插入数据前先进行数据验证或者在插入数据后执行额外操作,你可以在`sql`语句中添加适当的逻辑代码。例如,确保`CustomerName`字段不为空或包含特殊字符,或者在成功插入数据后更新其他相关表的信息。
最后,使用`rst.addnew`方法向当前记录集(RecordSet)添加新行,`rst.update`方法更新数据库。这些操作通常在使用`Data宏`或`Query宏`时执行。具体示例代码如下:
vba
Dim rst As DAO.Recordset
Set rst = CurrentDb.OpenRecordset("Customers")
rst.AddNew
rst!CustomerName = "John Doe"
rst!Address = "123 Main St"
rst.Update
在这段代码中,`rst`是一个指向`Customers`表的`Recordset`对象。`AddNew`方法用于在记录集的末尾添加一行新记录,然后使用对应的字段名和值更新数据。最后,`Update`方法用于将新记录保存到数据库中。
通过上述步骤,你就能在ACCESS数据库中使用VBA语言向数据库中添加数据,实现数据的高效管理与操作。