我们有2个应该拥有匹配表的数据库。我有一个(生产中)报告,它比较这些字段并以MS-Access形式(连续表格样式)显示给用户以进行更正。
除了很难找到差异之外,这一切都很好。如何将这些字段格式化为粗体/斜体/颜色差异?
“懒狗跳过棕色 狐狸。“
“懒狗跳过了 棕色的狐狸。“
(一旦以某种方式突出显示两个类似文本字段之间的差异,就更容易了)
“这只懒狗跳过棕色的狐狸。” “懒狗跳过棕色的狐狸。”
由于我们在谈论MS Access中的表单,我没有很大的希望。但我知道我不是第一个遇到这个问题的人。建议?
我已经选择了Remou的解决方案。这不是我理想的解决方案,但它“足够好”,特别是因为我没有任何富文本选项。在构建源表的查询中,我使用space()添加尾随空格以使两个字段长度相等。然后我将此代码添加到两个字段的Click事件中(TextA和TextB与另一个字段相反):
Dim i As Integer
For i = 1 To Len(Me.TextA.Text)
If Right(Left(Me.TextA.Value, i), 1) <> _
Right(Left(Me.TextB.Value, i), 1) Then
Me.TextA.SelStart = i - 1
Me.TextA.SelLength = Len(Me.TextA.Text)
Exit For
End If
Next i
结果是,当您单击每个字段时,会选择第一个字符串末尾的“不同字母”。我能够快速地进行实验,编码和发短信,所以我选择了它。但我迟早会重新考虑这个想法,因为这个概念在几个项目中都很有用。
答案 0 :(得分:4)
支持富文本并将其内置到最后两个版本的ms-access中。因此,您可以构建如下屏幕:
上面的第3列简单地绑定到显示两列之间差异的函数。以上是使用以下第3列/函数代码运行的实际屏幕截图。
这里是代码:
bolSame = True
i1 = 1: i2 = 1
For i = 1 To Len(c2t)
c1 = Mid(c1t, i1, 1)
c2 = Mid(c2t, i2, 1)
s = c2
If c1 = c2 Then
If bolSame = False Then
bolSame = True
s = "</strong></font>" & s
End If
i1 = i1 + 1: i2 = i2 + 1
Else
If bolSame = True Then
bolSame = False
s = "<font color=red><strong>" & s
End If
i1 = i1 + 1: i2 = i2 + 1
End If
strResult = strResult & s
Next
If bolSame = False Then
strResult = strResult & "</strong></font>"
End If
MyCompare = strResult
我真的不认为这里的问题是产生一个字符串,我真正的难题是当字符串长度不同时。通过一个简单的编码练习来显示两个字符串的差异。您当然可以在病房中显示它们的不同之处,但突出显示每个差异是一个困难的编码问题。
答案 1 :(得分:0)
您可以设置selstart和sellength,这将选择文本框的一部分。存在一些危险,因为用户可能依靠钥匙并清除选择。
答案 2 :(得分:0)
您可以考虑使用富文本框控件。这将允许您更改字体,粗体,斜体等。
有一些问题。如果使用Access 2003或XP,那么你应该避免使用Rich TextBox Control 6.0 http://support.microsoft.com/kb/838010它有严重的安全问题,微软表示应该不惜一切代价避免它。
如果你使用的是2003或XP,你可以查看这个富文本控件http://www.lebans.com/richtext.htm它的旧版本但应该适用于2003和XP。我从来没有亲自使用它,所以我不确定它的效果如何。
答案 3 :(得分:0)
Access 2007引入了一个大大改进的富文本框,可以理解HTML,如果我认为做一些比@ Remou选择不同文本的建议更重要,我会深入研究。
我会更关心如何编写代码来确定两个例子之间的不同之处。在我看来,这似乎是一个更难,更难的问题。