我在Microsoft Access/JET中有一个表,其中有一个自动设置的字段,该字段以增量方式设置,用作表的主键.我需要知道主键的值对于下一个插入的记录是什么,但我需要知道插入记录之前的值.使用SELECT MAX([ID]) + 1 FROM [TableName];将不起作用,因为记录通常从表的末尾删除.(插入新记录只是为了找出值也不是一种选择.)
我知道这可以通过使用SHOW TABLE STATUS命令在MySQL中轻松完成.是否有任何东西可以让我使用ADO,DAO,VB6或任何其他可用工具为Access/JET做同样的事情?
我知道我在想这个,但我想检查单个记录中的单个值/字段.例如,我想知道主键为33的记录中"closedDate"字段的值是否为null.
我想的是:
dim db as DAO.Database
dim rs as DAO.Recordset
set db = CurrentDb
set rs = db.OpenRecordset("record_holdData")
If not isNull(rs.Fields("closedDate")) then
'do nothing
Else
'add a close date
End If
Run Code Online (Sandbox Code Playgroud)
但我不认为这是对的.它没有指定记录号.在应用程序中,表单通过绑定到相关记录来打开,但我不认为CurrentDb考虑到这一点而是引用整个表.
所以我的问题是,如何以这种方式打开记录集并仅在该特定记录中引用该字段?
我正在尝试使用Final中的值更新表Original.我是SQL的新手,但我已经花了两个小时试图改变各种样本以满足我的需求.我正在使用Access 2007.
UPDATE
Original o
SET
o.[Assest Description] = (
SELECT f.[Assest Description] FROM Original o, Final f
WHERE o.[Assest No] = f.[Assest No])
WHERE o.[Assest No] = Final.[Asset No]
Run Code Online (Sandbox Code Playgroud) 我有一个包含一些按钮的表单,当用户单击按钮时,表单应该关闭(卸载).我使用了以下方法,但都生成了错误:
docmd.close me
unload me
Run Code Online (Sandbox Code Playgroud)
在VBA中关闭或卸载表单的最佳方法是什么(从表单中的代码)
在下面的代码中,我想将ADODB记录集'rs3'连接到表'tblValueChain10',并根据ADODB记录集'rs3'中提取的值更新3个不同的列.目前,更新查询未返回任何内容.
Dim st_Sql3 As String
Dim rs3 As ADODB.Recordset
Set rs3 = New ADODB.Recordset
Dim Max3 As Integer
rs3.Open "SELECT tblRisk05Holding.IDMacroProcesso01, tblRisk05Holding.Level01Risk, Max(tblRisk05Holding.ManualityStatus) AS MaxDiManualityStatus, Max(tblRisk05Holding.RiskProbabilityStatus) AS MaxDiRiskProbabilityStatus, Max(tblRisk05Holding.RiskExposureStatus) AS MaxDiRiskExposureStatus FROM tblRisk05Holding GROUP BY tblRisk05Holding.IDMacroProcesso01, tblRisk05Holding.Level01Risk", CurrentProject.Connection
st_Sql3 = "UPDATE tblValueChain10 INNER JOIN rs3 ON (tblValueChain10.IDMacroProcesso01 = tblRisk05Holding.IDMacroProcesso01) SET L1RiskManuality = " & rs3.Fields(2) & ", L1RiskProbability = " & rs3.Fields(3) & ", L1RiskGravity = " & rs3.Fields(4) & ""
Application.DoCmd.RunSQL (st_Sql2)
rs3.Close
Set rs3 = Nothing
Run Code Online (Sandbox Code Playgroud) databasename = "qryDataExport"
Dim grpfield As String
grpfield = "Group"
Dim keys As DAO.Recordset
groupcmd = "SELECT [" & databasename & "].[" & grpfield & "] FROM [" & databasename & "] GROUP BY [" & databasename & "].[" & grpfield & "]"
Set keys = CurrentDb.OpenRecordset(groupcmd, dbOpenSnapshot)
Run Code Online (Sandbox Code Playgroud)
以上产生“错误 3061:参数太少。预期为 13。” 运行时。到目前为止,我的阅读已经严重暗示这可能是字段标题不正确的拼写问题或由定义 groupcmd 的行中的不正确引用引起的问题。
我为 databasename 尝试了以下格式:
CurrentDb.Queries.qryDataExport
CurrentDb!Queries!qryDataExport
Run Code Online (Sandbox Code Playgroud)
而以上"qryDataExport"。后两个不提供错误消息,而第一个不编译。我已经确认在主表和 qryDataExport 中都有一个名为 Group 的列。
正在使用的模块来自这个 Google 代码页。
(编辑:截至此时的完整编辑模块:http : //pastebin.com/TJip86ED)
从我所看到的情况来看,我认为这是数据库名称定义中一个非常明显的格式错误,但是我没有足够的 VBA 经验来发现它,而且我的想法已经用完了。任何建议将不胜感激。
EDIT2: …
在Access 2016中,我希望显示" 文件打开"对话框,允许用户选择要导入的CSV文件.但是,与线路相关的错误正在产生Dim FD as Office.FileDialog-
编译错误:未定义用户定义的类型
以下代码已从MSDN上发布的示例中复制(并稍微编辑).此示例被列为与Office 2013及更高版本相关,但代码中的第一个注释(与变量类型Office.FileDialog相关)似乎对此进行了谴责 -
需要引用Microsoft Office 11.0对象库.
当然,对于Office 2013,您需要引用MS Office 15对象库,然后引用相应的版本库以用于未来版本,例如2016?
但无论如何,在Access 2016中都没有引用Microsoft Office 11.0对象库.但是,它包含对Microsoft Access 16.0对象库的引用.
如何显示" 文件打开"对话框?
Function SelectFile(Optional ByVal title As String = "Please select a file", _
Optional ByVal allowMultiSelect As Boolean = False) As Variant
Dim FD As Office.FileDialog
Dim file As Variant
Set FD = Application.FileDialog(msoFileDialogFilePicker)
With FD
.title = "Please select a file" ' Add the …Run Code Online (Sandbox Code Playgroud) 我有一个VBA函数,它应该将Dictionary作为参数:
Function ShowDict(Dict1 As Dictionary)
For Each x In Dict1
MsgBox (Dict1.Item(x))
Next
End Function
Run Code Online (Sandbox Code Playgroud)
我试图通过以下方式调用它:
Dim Dict As Dictionary
Set Dict = Dictionary
Dict.Add "Owner", "John"
Dict.Add "Employee", "Sam"
ShowDict (Dict)
Run Code Online (Sandbox Code Playgroud)
在定义词典之前,我确实从References中选择了Microsoft Scripting References.但是,当我尝试使用'Dict'作为参数调用函数时,我得到一个编译错误,声明' Argument not optional '.谁能帮我?
我已经对Access数据库做了一些事情,现在当我双击一个表(所有Access Objects | Tables)时,它会弹出"输入参数值"对话框.它要求的参数是TableName.ColumnName形式,而ColumnName确实是TableName中的一列,但TableName不是我打开的表.因为它是我正在打开的表,而不是查询或报告等,我不知道是什么导致了这个或怎么做.如果我只是热,那么好像打开桌子好了,但是如果可以的话我想修理它.
我正在尝试使用DAO.QueryDef和AppendMicrosoft Access中的本地查询来更新SQL Server数据库。我正在更新的某些字段包含很长的字符串(从字符0到700字符的任何地方)。
当字符串长度在从0到255字符的范围内时,我毫无疑问将其传递到查询中并更新相应的表。但是,当它们超过255字符数时,我会收到以下运行时错误:
我一直在使用随机字符串生成器网站来创建和测试不同长度的字符串。我还检查了我的数据库中的列数据类型,它们都NVARCHAR(MAX)在需要的地方。Microsoft Access显示与数据类型相同的各个列Long text。
请参阅以下代码片段:
Dim dbs As DAO.Database
Dim qdf As DAO.QueryDef
Set dbs = CurrentDb
If Not IsNull(cmbboxFileNameLogic) Then
Set qdf = dbs.QueryDefs("qryUpdateFile")
qdf.Parameters("FileName").Value = txtboxUpdateConversionName.Value
qdf.Parameters("ZipFileName").Value = txtboxZipFileNameLogic.Value
qdf.Parameters("OutputFormat").Value = txtboxOutputFormat.Value
qdf.Parameters("Delimeter").Value = txtboxDelimeter.Value
qdf.Parameters("DestinationLocation").Value = txtboxDestinationLocation.Value
qdf.Parameters("DeliveryMechinism").Value = txtboxDeliveryMechinism.Value
qdf.Parameters("Note").Value = txtboxOutputFileInfoNotes.Value
qdf.Parameters("Criteria").Value = txtboxOutputFileInfoCriteria.Value
qdf.Parameters("CustomListKey").Value = txtboxCustomListKey.Value
qdf.Parameters("ExcludeCustomListKey").Value = txtboxExcludeCustomListKey.Value
qdf.Parameters("NewspaperFlag").Value = …Run Code Online (Sandbox Code Playgroud) ms-access ×10
access-vba ×6
vba ×5
sql ×2
dao ×1
dictionary ×1
office-2016 ×1
recordset ×1
vb6 ×1