0

我从事一些项目,前端最近转移到 vb.net,后端保持访问.accdb格式。

使用 Access 前端,我能够设置一些数据宏来捕获进行更改的人的用户名并将它们记录在审计表中,看起来使用 .net 前端会有点困难。

有没有办法将这些信息从前端传递到数据库?或者有没有一种方法可以让后端查看存储在那里的函数(目前似乎不起作用)

这是我在后面的代码

Private Declare Function apiGetUserName Lib "advapi32.dll" Alias _
"GetUserNameA" (ByVal lpBuffer As String, nSize As Long) As Long

Public Function GetUserName() As String
' Returns the network login name
Dim lngLen As Long, lngX As Long
Dim strUserName As String
    strUserName = String$(254, 0)
    lngLen = 255
    lngX = apiGetUserName(strUserName, lngLen)
    If lngX <> 0 Then
        GetUserName = Left$(strUserName, lngLen - 1)
    Else
        GetUserName = ""
    End If
End Function

我有一个公共函数在前端做同样的事情,也称为getusername()

4

1 回答 1

0

我的朋友,我们在这里讨论的是在MS Access的封闭环境中工作之间的主要区别,不仅仅是作为数据库,还有应用程序。由于内部的所有内容Access都是其自身的,因此您可以访问所有内部结构。现在你离开那个模型,你的设计应该相应地改变。在这里,我们称之为客户端-服务器环境,客户端除了连接字符串外知之甚少,服务器对客户端一无所知。

这不是如何从代码中检索用户名或其他一些信息的问题。您的目标是设计一个支持审计的系统。您已经有审计表 - 这很好。

根据您的安全模型,您可以使用机器用户的用户名或应用程序用户的用户名。但是你有它 - 在 VB 中这很容易。

在不知道您的Audit结构的情况下,我可以告诉它通常的完成方式,当数据发生变化时,您使用创建Sql 事务Ado.Net,并在此事务下插入审计数据,然后对真实数据执行 CRUD。然后你承诺。这样,您要么成功,要么失败——未经审计就不会修改数据。

现在,另一个步骤是添加到您的表中(如果您还没有)4 个字段:

CreatedBy、CretedDate、ModifiedBy、ModifiedDate。

每条记录都准备好显示谁在使用您的系统以及何时使用。

这就是您的 Access Db 获取用户的方式:

  1. 通过包含用户列和数据的 sql"insert into ... values('" & user & "', ...."
  2. 通过包含用户名的单独审计调用
  3. 通过存储过程,其中 1 个参数可以专用于传递用户信息
于 2015-07-15T00:36:11.873 回答