有无可能通过Access的二次开发做一个词典的制作和查询的综合方案

要用WebView2,要用到ActiveX Wraper,有成品的,但你要花点钱了,并且是很烦杂的JavaScript,这些应当不是Access的强项。

1 个赞

纯支持一下吧, 桌面开发不懂.

1 个赞

难怪很多人对MS的东西敬而远之,看来就先算了。多谢指点!

.NET 中的 HtmlDocument ClassHtmlElement Class 和 python的bs4差不多,好像也挺方便的,应该可以直接在 Access 里面做 Web Scraping

1 个赞


Barrons (Access) v.4.2 (2022.10.24).zip (475.3 KB)

注意:如从头修改,需在VB编辑器中添加引用RegExp模块

image
Database Tools > Visual Basic > Tools > References > Microsoft VBScript Regular Expressions 5.5

1 个赞

这个帖子让我想到了powerbi

AliIMX有什么作用?

是自动勾的,我也奇怪,电脑上装的其它一些风马牛不相干的软件在Access的ActiveX控件和这个Reference列表里都能找到,要的反而没有象 System.Text.RegularExpressions,只找到这个有点奇怪的regex

明白,这块功能还没有实现是吗?

1 个赞

看到这个富文本编辑器里面居然还有个功能还挺丰富的工具条我也有点吃惊,略微摆弄了下发现的确还可以,就是这个不知道能否常驻在编辑框的上沿,有点象印象笔记了

暂时把这个富文本功能先放下了,因为这里主要想弄一个能识别html语法的html源码编辑器,一开始想从外面移植一个JS版放在WebBrowser控件里,翻了两个(<>W3Schools Tryit Editor<><>Online HTML Editor<>)发现有点复杂力有未逮,所以就弄了现在这个非常简陋的版本,一般用用还行,用多了应该会有bug,老兄或其它坛友时间精力允许的话或许能一举搞定

由于这个富文本编辑器是用于html源码编辑,我倒是想 disable 它的格式编辑功能,拷贝粘贴也仅仅以无格式文本运作,这样就像在一般的IDE中一样,否则一旦误触格式会出错,不知有无可能?

@jiangws 请教老兄一个问题。VBA 编辑器普遍难用,没有snippet,很多方法属性都不能自动跳出来,以前别的地方写的一些VB的函数拿进去也用不了,就像又学门新的语言,效率太低。

我看见 Visual Studio 里面有一个 Tools > Connect to Database > Choose Data Source > Microsoft Access Database File,是不是可以在 Access 先做好数据文件,然后直接写 VB 来存取那个文件中的数据,这样做和用VBA的效果一样但是IDE更好,不受VBA的限制,这样理解有错吗?或者干脆一步到位直接用 VB + SQL Server还不受2G的限制,而且也都是免费的,不知道可行否?谢谢!

1)你要用early binding才方便对你不熟悉的库进行编写;
Use early binding and late binding in Automation - Office | Microsoft Learn
2)总体上说VBA的可重用性不错的,如果你没有用很多API的话;
3)把Access只是作为数据库的用法也很多的,用SQL Server的话,普及性就少点了。

1 个赞

谢谢!这个 early binding 我要好好研究一下。不过这个VBA的IDE实在难用,象我这种碰上有需求才过去打一杆子的,常常一个 for 的格式都写不对,很大程度上依赖一堆 snippet 和 autocompletion,所以那个IDE实在难搞。我想专业的开发者应该不会用那个 VBA 的IDE吧

效率上要提高,比如Save这个Event,你这样写:
Dim currTable As String
currTable = “barrons”

Dim currKey As String
currKey = ctrlList.Value

Dim myEntry As Recordset

Set myEntry = CurrentDb.OpenRecordset(currTable)

Do Until myEntry.EOF = True
    If myEntry.Fields(0) = currKey Then
    
        myEntry.Edit
        myEntry.Fields(1) = PlainText(ctrlEditor.Value)
        myEntry.Update
        
        Exit Do
    End If
    myEntry.MoveNext
Loop

其实取得RecordSet时,用Query把条件带上,一下子就搞定了。
(或者直接用Update SQL,不用RecordSet)

1 个赞

网上搜的自己再小改了下,不专业是肯定的,的确要找时间把它好好学学 :grinning:

随手帮你改了下,你多测试下。
好了后,Private Sub sub_UpdateByKey(ByVal currTable As String, ByVal currKey As String) 也修改下。

Private Sub ctrlSave_Click()

'    Dim currTable As String
'    currTable = "barrons"
'
'    Dim currKey As String
'    currKey = ctrlList.Value
    DoCmd.SetWarnings (False)
    strReturn = Replace(PlainText(ctrlEditor.Value), "'", "''")
    DoCmd.RunSQL ("update barrons set def = '" & strReturn & "' where Word = '" & ctrlList.Value & "'")
    DoCmd.SetWarnings (True)
'    Dim myEntry As Recordset
'    Set myEntry = CurrentDb.OpenRecordset(currTable)
'
'    Do Until myEntry.EOF = True
'        If myEntry.Fields(0) = currKey Then
'
'            myEntry.Edit
'            myEntry.Fields(1) = PlainText(ctrlEditor.Value)
'            myEntry.Update
'
'            Exit Do
'        End If
'        myEntry.MoveNext
'    Loop
    
    ctrlSave.Enabled = False
    ctrlCancel.Enabled = False

End Sub
2 个赞

这个好像是 SQL 命令行,回头研究下试试。谢谢!
——————
这个 ctrlSave_Click() 把你写的直接拷进去就行了,没问题。

试着摆弄了下 Private Sub sub_UpdateByKey() ,网上搜到说可用 DLookup查询记录值,下面的写法可用

myHTML = DLookup("Def", currTable, "Word = '" & currKey & "'")

Barrons (Access)(2022.10.25).zip (474.7 KB)

2 个赞

这还不小白?

既然经专家认证,那应该就算。烦请老兄透露下专精的领域,方便日后请教 :handshake:

@jiangws 麻烦再请教下,在 VB.NET 中是否可以方便地操作 SQLite 数据库?

我倒不是烦 Access,只是写 VBA 的这个环境实在是受不了,象我这种不熟的人效率太低,以前就不喜欢,进到 VS 里就感觉轻松多了。

我看你老兄上面修改数据库记录用的也是SQL命令,如果这样的话那似乎就无所谓用不用 Access 了,象上面这个活儿直接把数据导入成 SQLite格式,然后 >VB.NET< 用做好像工作量是一样的。查了下有一个工具 Microsoft.Data.Sqlite overview,不知道你有没有这方面的经验?会不会有什么新问题?谢谢!

(多亏 @西北风 坛友的督促赶紧扫了下盲,也希望多多指教!)