我写的语句有什么错,为什么不能运行?
vba吧
全部回复
仅看楼主
level 1
sau357aD 楼主
Option Compare Database
Sub a()
Set 路径 = CurrentDb.OpenRecordset("字根路径", 2)
路径.Edit
Set 图 = 路径!图示.Value
For oi = 1 To 路径.RecordCount
If 路径![no-] Mod 1000 <> 0 Then
图.AddNew
图.Fields("FileData").LoadFromFile "D:\时时乱码\AssetsOf醚芪\" & 路径![地址]
路径.Update
路径.Close
End If
路径.MoveNext
Next
End Sub
在图.AddNew 报对象无效。3420
求解!
2024年08月26日 06点08分 1
level 7
你这代码确认没错?
2024年08月26日 07点08分 2
level 7
在您提供的 VBA 代码中,有几个问题和潜在的错误点,特别是在处理记录集(Recordset)和嵌入式对象(如图片或文件)的更新上。下面我将逐一指出问题并给出修改建议:
记录集类型错误:
使用 CurrentDb.OpenRecordset("字根路径", 2) 打开记录集时,第二个参数 2 指的是 dbOpenDynaset,这是一个可以更新的记录集类型。但是,这个记录集本身并不直接包含可以像 图示.Value 这样直接引用的对象字段。通常,这样的对象字段(如图片或OLE对象)需要通过特定的方式处理。
对象字段的引用:
在 Access 数据库中,如果你有一个字段是 OLE 对象(如图片),你不能直接通过 !图示.Value 这样的方式访问和修改它。你需要使用 Recordset 的 Fields 集合,并且可能需要使用特定的方法(如 AppendChunk 对于大对象)来更新这些字段。
逻辑错误:
你的代码试图在每次迭代中打开、更新和关闭记录集,这在实际应用中是不正确的。你应该在循环外部打开和关闭记录集。
错误处理:
代码中没有错误处理,这可能导致运行时错误不易于调试。
下面是一个修改后的示例,假设你的目标是将图片文件加载到数据库中的某个 OLE
对象字段 ' 注意:直接加载文件到 OLE 字段可能不是直接支持的,这里仅展示逻辑
' 在实际中,可能需要使用其他方法,如通过临时表单或第三方库
' 这里只是模拟更新
' 实际中可能需要使用 或其方法
注意:
上面的代码示例中,我注释掉了直接加载文件到 OLE 字段的部分,因为 Access VBA 不直接支持这种操作。通常,这需要使用表单上的绑定控件来完成,或者通过第三方库。
如果 FileData 是一个大对象字段,并且你确实需要更新它,你可能需要考虑使用 AppendChunk 方法来逐步加载数据。
确保你的数据库连接和权限设置允许进行这些操作。
路径和文件名应确保正确无误,并且 Access 有足够的权限访问这些文件。
2024年08月26日 23点08分 3
你这是用AI解答的吧,你自己能看明白吗?
2024年08月27日 02点08分
我也是初学者。 遇到代码问题(简单的),用AI,基本上都能给你解答个八九不离十。 大部分还都能跑成。 非常节省学习时间。 我用AI,只是想说明,有这么一个强大的工具为什么不用呢。 你贴吧问,一是别人不一定看得到。 二是,真正的程序猿可能不玩贴吧。。。 反而是我这种半吊子玩贴吧玩的多。。。
2024年08月27日 04点08分
还有,因为我是初学者,我承认这部分我看不懂。
2024年08月27日 04点08分
@水面上的小草 我不是说用AI有什么问题,但如果你自己都没看明白,只把AI的答案当做正确的解答放出来是不负责任的,因为AI的答案也可能 是错误的
2024年08月27日 05点08分
level 1
sau357aD 楼主
路径.Edit要放在for循环里,图的对象定义放在它下面,不要忘了更新,图和路径都得更新,先更新图,再更新路径
2024年08月28日 23点08分 4
level 7
虽然 我对ACCESS的VBA不是很熟,但Set 图 = 路径!图示.Value这个应该是不对的,你把这个图SET成一个VALUE,怎么ADDNEW?
2024年08月29日 01点08分 5
level 1
sau357aD 楼主
我已经成功了。
2024年08月29日 04点08分 6
1