我正在开发一个需要编辑Access数据库中某些对象的程序.它还运行一个子程序(长篇故事),试图访问底层的JET数据库,而Access仍然通过ODBC 打开它.
问题是,一旦我开始使用VBA编辑Form对象 - 例如,使用Application.LoadFromText - Access将数据库更改为独占模式.独家模式本身很好,我知道它为什么需要它.但我之后需要能够切换回"共享"模式,以便我可以运行我的子程序.
我观察到,如果您使用UI在设计模式下打开表单,Access会将数据库切换到Exclusive.(您可以通过尝试从另一台计算机打开它来确认这一点.)但是当您关闭表单设计器时,Access会立即将其切换回共享模式,这是我希望的.
有没有办法使用VBA/COM调用自己来回切换?
我知道我可以调用Application.CloseCurrentDatabase(),然后调用OpenCurrentDatabase(),但这会关闭所有窗口并扰乱UI,因此它并不理想.
我正在编写一个需要输入的函数,我的数据验证看起来很尴尬.如果InputFld不是"A","B"或"C",则表示错误:
If InputFld <>"A" and InputFld<>"B" and InputFld<>"C" then goto ErrorHandler
这对我来说太丑了.有更优雅的解决方案吗?我想写一些类似的东西:
If InputFld not in ("A","B","C") then goto ErrorHandler
看到?这种方式更容易阅读和维护.但我不知道该怎么做.
只想知道如何对显示日期格式为mm/dd/yyyy的数据的文本列进行排序.
这就是我想要做的事情,如果我朝错误的方向前进,我会道歉.我正在尝试遍历存储在表t_Directory中的文件路径,如果文件扩展名为"xlsx",则打开Excel文件并使用Excel工作表的FileID和工作表计数以及工作表名称更新另一个名为t_SheetInfo的表.如果有更有效的方法,有人会花点时间检查我到目前为止所得到的东西,或者引导我朝着正确的方向前进吗?我不是百分百肯定我知道自己在做什么.一如既往,提前感谢您的帮助!!
Dim db As DAO.Database
Dim xlApp As Excel.Application
Dim xlWB As Excel.Workbook
Dim xlWS As Excel.Worksheet
Private Sub CycleThroughWorkSheets()
Dim rs As DAO.Recordset
Dim rs2 As DAO.Recordset
Dim sSQL1 As String
Dim sSQL2 As String
Dim sSQL3 As String
Dim rsFilePath As String
Dim rsWSName As String
Set db = CurrentDB
sSQL1 = "SELECT t_Directory.FileID, t_Directory.FilePath FROM t_Directory " & _
"WHERE (((t_Directory.FileExtension)=""'xlsx'""))"
Set rs = db.OpenRecordset("sSQL1", dbOpenDynaset)
With rs
rs.MoveFirst
Do While Not rs.EOF
rsFilePath = rs.Fields("[FilePath]")
OpenWorkBook …Run Code Online (Sandbox Code Playgroud) 我是比较新的访问,我有里有桌子AuthorName,BookTitle和CoAuthor. AuthorName并且BookTitle是一个复合键.
目前查询提取的信息如下:
AuthorName---------BookTitle------CoAuthor
Steven King--------Dark Half------Peter Straub
Steven King--------Dark Half------John Doe
James Patterson----Another Time
Jeff Hanson--------Tales of Time---Joe Smith
Run Code Online (Sandbox Code Playgroud)
如果可能,我希望它(动态)读取
AuthorName---------BookTitle---------CoAuthor1--------CoAuthor2
Steven King----------Dark Half--------Peter Straub-----Joe Doe
James Patterson----Another Time
Jeff Hanson----------Tales of Time----Joe Smith
Run Code Online (Sandbox Code Playgroud)
因此,如果稍后添加了另一位作者,则会出现CoAuthor的第三列.
这可能与VBA或SQL有关吗?
我有两个领域(体检日期和出生日期).我计算了年龄((体检日期 - 出生日期)/365.25).我想要做的是在单独的领域中计算年龄和月份的年龄.我不确定是否可以使用代码生成器或某种方式完成.
我在MS Access窗体对象中有以下代码.
Private Sub UpdatePMText(sLang As String)
'Used to pass both Mandate and Language Info to called Sub that will execute the queries
Dim iMandate As Integer
'Check if there is text in the box.
If Me.Controls("txtInput_PM_" & sLang & "_DRAFT") = Null Or Me.Controls("txtInput_PM_" & sLang & "_DRAFT") = "" Then
MsgBox ("There is no text in the " & sLang & " DRAFT Field." & vbNewLine & "The operation will not be executed.")
Exit Sub
End If
iMandate …Run Code Online (Sandbox Code Playgroud) 我正在尝试比较访问数据库中的4个日期字段,并将最新值和adatum之间的日期差异设置为parkdauer.它适用于同一月份日期的任何行.
strSQL = "UPDATE Steuerungsboard
SET parkdauer = DateDiff('d', [kspausgang], [adatum])
WHERE FORMAT(kspausgang, 'dd/MM/yyyy') >= FORMAT( iausgang, 'dd/MM/yyyy')
And FORMAT( kspausgang, 'dd/MM/yyyy') >= FORMAT( aausgang, 'dd/MM/yyyy')
And FORMAT( kspausgang, 'dd/MM/yyyy') >= FORMAT( gausgang, 'dd/MM/yyyy');"
CurrentDb.Execute strSQL, FailonError
Run Code Online (Sandbox Code Playgroud)
谢谢你的帮助!
这可能有点麻烦。我有一个MS Access前端,它位于我们的SQL Server后端,并使用VBA和SQL存储过程的组合来处理数据。
我的一些VBA过程通过将字符串缝合在一起然后将它们发送到要执行的服务器来动态地制作SQL查询。我的问题是,这个过程是否可以反向进行?例如,我在VBA中设置了一个方法,该方法从服务器中的表中提取字符串,然后执行它。
为了澄清,我知道如何使用存储过程来处理后端的逻辑。我的目标是找到一种从SQL表/存储过程中提取原始VBA,然后在Access中运行它的方法。
我正在寻找一个函数或子函数(在模块中),我可以调用它来删除名称中包含"tbl"的所有表.我发现几段代码无法正常工作.
澄清我的问题:
我在Access工作.在我的项目中,我使用VBA生成一些表.我事先不知道这些表的名称是什么.我知道我想要删除的表("DROP")在其名称中有"tbl".
我正在寻找的代码是这样的:
DoCmd.runSQL (DROP ALL TABLE LIKE '%tbl%')
Run Code Online (Sandbox Code Playgroud)
我知道这段代码不起作用,但它应该对我想要实现的内容有所了解
access-vba ×10
ms-access ×7
vba ×6
sql ×2
automation ×1
dao ×1
database ×1
sorting ×1
sql-server ×1