小编Ren*_*uis的帖子

VBA中的类(静态)方法

我想知道,是否可以在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)

static vba

42
推荐指数
4
解决办法
6万
查看次数

测试MS Access应用程序的最佳方法?

使用同一数据库中的代码,表单和数据,我想知道为Microsoft Access应用程序设计一套测试的最佳实践是什么(比如Access 2007).

测试表单的主要问题之一是,只有少数控件具有hwnd句柄,而其他控件只能获得一个焦点,这使得自动化非常不透明,因为您无法获取表单上的控件列表.

有经验可以分享吗?

database ms-access vba unit-testing

41
推荐指数
5
解决办法
2万
查看次数

在MS Access中管理和调试SQL查询

MS Access管理原始SQL查询的能力有限:编辑器非常糟糕,没有语法突出显示,它将原始SQL重新格式化为长字符串,并且您无法插入注释.

调试复杂的SQL查询也是一件痛苦的事情:要么必须将它拆分成许多较小的查询,这些查询在架构发生变化时变得难以管理,或者你最终会遇到一个调试和更新的噩梦.

如何在MS Access中管理复杂的SQL查询以及如何调试它们?

编辑
目前,我主要只是使用Notepad ++进行语法着色,使用SQL Pretty Printer来重新格式化来自Access的原始SQL.
使用外部存储库很有用,但保持始终存在使两个版本不同步的风险,您仍然必须在Access中尝试查询之前删除注释...

sql debugging ms-access

17
推荐指数
3
解决办法
2万
查看次数

计算c#中大写字符数的最快方法

对此效率的任何想法?...

CommentText.ToCharArray().Where(c => c >= 'A' && c <= 'Z').Count()
Run Code Online (Sandbox Code Playgroud)

c# linq

14
推荐指数
2
解决办法
1万
查看次数

你是否正在接受Perl以及是什么让你进入它?

几年前我进入了Perl,并且总是发现它是一种有趣且富有表现力的语言.

我发现Perl中的编程使我的工作效率很高,这得益于其低开销和CPAN常见问题的大量现成解决方案.

如果你是Perl的新手,是什么让你进入它?

perl

12
推荐指数
7
解决办法
842
查看次数

自定义功能区onAction语法问题

我按照这里的说明为Access应用程序创建自定义功能区.但没有一个按钮工作!我一直收到一条错误,指出Access无法找到函数或宏,即使它是公共的并且在标准模块中.

最终我发现如果我使用以下语法它会工作:

onAction="=fncMyFunction('string argument', 1234)"

fncMyFunction 接收手动输入的参数,但不接收功能区对象.

在另一个项目的Word中,我创建了一个自定义功能区,方法是将文档作为.ZIP文件打开,在适当的位置添加XML,并添加对它的引用. 这部小说的某处有相关指示.

在Word中,我能够通过以下语法使所有内容按照我预期的方式工作:

onAction="fncMyFunction"

在Word中,fncMyFunction单击按钮时会将一个功能区对象传递给它.

这是什么交易?为什么语法不同?并且这种或那种"错误吗?"

ms-access vba ribbon ms-word ms-office

10
推荐指数
1
解决办法
1万
查看次数

代码合同,你会使用它们吗?

Microsoft刚刚发布了Code Contracts,这是一个与Visual Studio集成的工具,允许您为.Net代码定义合同并获得运行时编译时间检查.

观看第9频道视频,了解其使用方式.

目前它是一个附加组件,但它将成为.Net 4.0中基类库的一部分

这是你看到自己使用的东西吗?

我想知道这是否意味着Spec#的死亡?

更新

我对Spec#的死是什么意思,我们现在有2个不同的项目来编写合同:
Spec#是C#的演变,它引入了新的关键字和行为; 另一方面,微软刚刚发布的是一个可以与任何.Net语言一起使用的库.
由于后者看起来会成为事实上的标准,我想知道它在哪里留下规格#

.net design-by-contract

9
推荐指数
1
解决办法
464
查看次数

如何使用Excel VBA获取新插入记录的ID?

这似乎是一个常见的问题,但是大多数解决方案都是指连接多个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现在暂时使用.为了将来参考,虽然我有兴趣看看我上面的尝试有什么问题.

sql excel ms-access vba jet

8
推荐指数
2
解决办法
4万
查看次数

使用Regex提取fileName

如果我只想匹配fileName,即

在使用正则表达式C://Directory/FileName.cs之前,以某种方式忽略了所有内容FileName.cs.

我该怎么做?

我需要这个用于我正在处理的编译UI ...不能使用编程语言,因为它只接受正则表达式.

有任何想法吗?

regex

8
推荐指数
3
解决办法
3万
查看次数

LoadLibrary()无法加载带有清单和私有程序集的DLL

我正在使用多个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中删除,一切正常.

我的问题:

  1. 在问题的情况下,Windows似乎不遵循程序集搜索序列动态链接库搜索顺序.具体来说,它是在加载DLL的路径中查找私有程序集,而不是从中加载应用程序(EXE).
    我试图通过将程序集放在DLL附近,并更改当前目录(以排除与工作目录案例相关)来验证这一点,并获得预期的行为.任何人都可以确认这是LoadLibrary与SxS一起使用时的正常行为吗?

  2. 我是否正确地假设没有清单,DLL会回退到非SxS加载顺序,它在EXE的文件夹中找到msvcr80.dll(而不是程序集清单Microsoft.VC80.CRT.manifest)?

  3. 如果我对(1)和(2)是正确的,那么只要从DLL中排除清单我会失去什么?改写,为什么我不应该通过排除清单来解决我的问题?

dll manifest msvcrt loadlibrary

8
推荐指数
2
解决办法
5753
查看次数