我想知道,是否可以在VBA中创建类方法.通过类方法,我的意思是可以在没有类的对象的情况下调用的方法.'static'关键字在C++和Java中实现了这一技巧.
在下面的示例中,我尝试创建一个静态工厂方法.
例:
'Classmodule Person'
Option Explicit
Private m_name As String
Public Property Let name(name As String)
m_name = name
End Property
Public Function sayHello() As String
Debug.Print "Hi, I am " & m_name & "!"
End Function
'---How to make the following method static?---'
Public Function Create(name As String) As Person
Dim p As New Person
p.m_name = name
Set Create = p
End Function
'Using Person'
Dim p As New Person
p.name = "Bob"
p.sayHello 'Works as expected' …
Run Code Online (Sandbox Code Playgroud) 使用同一数据库中的代码,表单和数据,我想知道为Microsoft Access应用程序设计一套测试的最佳实践是什么(比如Access 2007).
测试表单的主要问题之一是,只有少数控件具有hwnd
句柄,而其他控件只能获得一个焦点,这使得自动化非常不透明,因为您无法获取表单上的控件列表.
有经验可以分享吗?
MS Access管理原始SQL查询的能力有限:编辑器非常糟糕,没有语法突出显示,它将原始SQL重新格式化为长字符串,并且您无法插入注释.
调试复杂的SQL查询也是一件痛苦的事情:要么必须将它拆分成许多较小的查询,这些查询在架构发生变化时变得难以管理,或者你最终会遇到一个调试和更新的噩梦.
如何在MS Access中管理复杂的SQL查询以及如何调试它们?
编辑
目前,我主要只是使用Notepad ++进行语法着色,使用SQL Pretty Printer来重新格式化来自Access的原始SQL.
使用外部存储库很有用,但保持始终存在使两个版本不同步的风险,您仍然必须在Access中尝试查询之前删除注释...
对此效率的任何想法?...
CommentText.ToCharArray().Where(c => c >= 'A' && c <= 'Z').Count()
Run Code Online (Sandbox Code Playgroud) 几年前我进入了Perl,并且总是发现它是一种有趣且富有表现力的语言.
我发现Perl中的编程使我的工作效率很高,这得益于其低开销和CPAN常见问题的大量现成解决方案.
如果你是Perl的新手,是什么让你进入它?
我按照这里的说明为Access应用程序创建自定义功能区.但没有一个按钮工作!我一直收到一条错误,指出Access无法找到函数或宏,即使它是公共的并且在标准模块中.
最终我发现如果我使用以下语法它会工作:
onAction="=fncMyFunction('string argument', 1234)"
fncMyFunction
接收手动输入的参数,但不接收功能区对象.
在另一个项目的Word中,我创建了一个自定义功能区,方法是将文档作为.ZIP文件打开,在适当的位置添加XML,并添加对它的引用. 这部小说的某处有相关指示.
在Word中,我能够通过以下语法使所有内容按照我预期的方式工作:
onAction="fncMyFunction"
在Word中,fncMyFunction
单击按钮时会将一个功能区对象传递给它.
这是什么交易?为什么语法不同?并且这种或那种"错误吗?"
Microsoft刚刚发布了Code Contracts,这是一个与Visual Studio集成的工具,允许您为.Net代码定义合同并获得运行时和编译时间检查.
目前它是一个附加组件,但它将成为.Net 4.0中基类库的一部分
这是你看到自己使用的东西吗?
我想知道这是否意味着Spec#的死亡?
更新
我对Spec#的死是什么意思,我们现在有2个不同的项目来编写合同:
Spec#是C#的演变,它引入了新的关键字和行为; 另一方面,微软刚刚发布的是一个可以与任何.Net语言一起使用的库.
由于后者看起来会成为事实上的标准,我想知道它在哪里留下规格#
这似乎是一个常见的问题,但是大多数解决方案都是指连接多个SQL命令,我相信无法使用ADO/VBA(我很高兴在这方面显示错误).
我当前插入我的新记录,然后运行一个选择查询使用(我希望)足够的字段,以保证只返回新插入的记录.我的数据库很少被一个人一次访问(查询之间发生另一次插入的风险可以忽略不计),并且由于表的结构,识别新记录通常很容易.
我现在正在尝试更新一个没有多少唯一性范围的表,而不是人工主键.这意味着存在新记录可能不是唯一的风险,并且我不愿意添加字段以强制唯一性.
在这种情况下,将记录插入Access表然后从Excel查询新主键的最佳方法是什么?
谢谢你的回复.我试图开始@@IDENTITY
工作,但这总是使用下面的代码返回0.
Private Sub getIdentityTest()
Dim myRecordset As New ADODB.Recordset
Dim SQL As String, SQL2 As String
SQL = "INSERT INTO tblTasks (discipline,task,owner,unit,minutes) VALUES (""testDisc3-3"",""testTask"",""testOwner"",""testUnit"",1);"
SQL2 = "SELECT @@identity AS NewID FROM tblTasks;"
If databaseConnection Is Nothing Then
createDBConnection
End If
With databaseConnection
.Open dbConnectionString
.Execute (SQL)
.Close
End With
myRecordset.Open SQL2, dbConnectionString, adOpenStatic, adLockReadOnly
Debug.Print myRecordset.Fields("NewID")
myRecordset.Close
Set myRecordset = Nothing
End Sub
Run Code Online (Sandbox Code Playgroud)
有什么突出的责任吗?
但是,考虑到Renaud(下图)提供的警告,使用@@IDENTITY
任何其他方法的风险几乎与使用其他任何方法一样多,因此我SELECT MAX
现在暂时使用.为了将来参考,虽然我有兴趣看看我上面的尝试有什么问题.
如果我只想匹配fileName
,即
在使用正则表达式C://Directory/FileName.cs
之前,以某种方式忽略了所有内容FileName.cs
.
我该怎么做?
我需要这个用于我正在处理的编译UI ...不能使用编程语言,因为它只接受正则表达式.
有任何想法吗?
我正在使用多个DLL的Windows应用程序(EXE).开发在VCExpress 2005(VC 8.0)中,仅使用C语言.
其中一些DLL是插件/加载项/扩展,它们LoadLibrary
根据EXE读取的配置文件动态加载.
重要的是:应用程序必须是可移植的(能够在没有安装的情况下从USB闪存驱动器或类似驱动器运行),并且插件DLL可能与应用程序EXE不在同一文件夹中(遗留原因).
使用MSVC6,这很简单:编译,链接,分发EXE和DLL.
使用MSVC8,C运行时库(MSVCRT)不再随操作系统一起分发,因此无法依赖它安装.为了满足可移植性要求,我需要使用私有程序集.所有EXE和DLL都已嵌入其清单.
我的问题:通过加载的插件DLL LoadLibrary()
找不到EXE文件夹中的私有程序集,因此尝试加载它们会失败,除非Microsoft.VC80.CRT
程序集安装在winSxS中.
问题:如果清单从插件DLL中删除,一切正常.
我的问题:
在问题的情况下,Windows似乎不遵循程序集搜索序列或动态链接库搜索顺序.具体来说,它是在加载DLL的路径中查找私有程序集,而不是从中加载应用程序(EXE).
我试图通过将程序集放在DLL附近,并更改当前目录(以排除与工作目录案例相关)来验证这一点,并获得预期的行为.任何人都可以确认这是LoadLibrary
与SxS一起使用时的正常行为吗?
我是否正确地假设没有清单,DLL会回退到非SxS加载顺序,它在EXE的文件夹中找到msvcr80.dll
(而不是程序集清单Microsoft.VC80.CRT.manifest
)?
如果我对(1)和(2)是正确的,那么只要从DLL中排除清单我会失去什么?改写,为什么我不应该通过排除清单来解决我的问题?