从命令行调用数据库

本文介绍了如何从命令行界面调用数据库,特别是在Access中执行特定任务。内容涵盖了如何创建命令行调用Access的参数,包括数据库的路径、可执行文件和传递的参数。此外,还讨论了数据库打开后的自动化代码执行,如AutoExec宏和启动表单。文章还提到了使用NT Scheduler来计划任务,并提供了命令行调度程序的相关参考资料。
摘要由CSDN通过智能技术生成

简介

有时,可能有必要从命令行甚至从快捷方式打开数据库。 通常,在这种情况下,需要在此模式下运行特定的例程,但是在正常打开时,数据库应

执行相同的代码。 在本简短的教程中,我们将介绍这两种情况。

讨论完这些内容后,我们将研究计划在预定时间打开,执行一些代码和关闭特定数据库。 默认情况下,该调度程序没有与之关联的用户凭据(默认情况下,它作为

SYSTEM帐户),而本教程将不涉及更改内容,因为这是与相关分支相关的更深层次的问题。 实际上,这意味着联网的资源通常对于正常的计划进程不可用。 命令行和CMD文件

可以设置一个命令行,该命令行与单个数据库一起调用Access,并在需要时传递一个参数。 我们稍后再讨论。 这样的命令(单个)可以单独与快捷方式甚至是预定任务相关联。 但是,更复杂的指令集需要包含为数据库本身调用的代码(一种可能而又笨拙的解决方案),或者组合在一起成为一个CMD文件,而该CMD文件本身仅需要以各种标准方式进行调用(命令行) ;开始/运行;快捷方式;计划程序;来自某些VBA代码;等等)。

作为一个可以在CMD文件中完成的事情的简单示例,我包括一个我使用的东西。 我已经对现实生活中的敏感数据进行了篡改,但是格式相同。

注意 由于此处使用的网络地址(第5行)实际上是本地计算机,即使

SYSTEM帐户可以成功运行此帐户。
REM V: Drive should be available.
REM Make sure it is added if not.
REN V:\Vecta\Imports\Done Done
IF NOT ERRORLEVEL 1 GOTO Cont1
NET USE V: \\STP01NTS003\Vecta 
:Cont1
CD /D V:\Vecta
IF NOT ERRORLEVEL 1 GOTO Cont2
ECHO Unable to map correct drive.
GOTO EndCmd 
:Cont2
REM Start Access stuff here
REM The AccessPath Environment Variable must be set for this to work.
"%AccessPath%\MSAccess.Exe" V:\Vecta\Vecta.Mdb ;Auto 
CD Imports
REN Vecta*.Csv *.*
IF NOT ERRORLEVEL 1 GOTO Cont3
ECHO No files to process.
GOTO EndCmd 
:Cont3
REM WinZip CMDLine must be installed for this to work.
"C:\Program Files\WinZip\WZZip.Exe" -a+ -ex -ybc StatPlusVecta.Zip *.Csv
DEL *.Csv
START "Upload to {remote server}" /DV:\Vecta\Imports /LOW FTP.Exe -n -s:V:\Vecta\VectaWebDaily.Ftp -w:16384 {DummyFTPAddress} 
:EndCmd
REM PAUSE
ECHO ON
我不打算详细介绍此过程,因为它只是为了提供可能的效果,但是,在未博士的状态下,它可以完美地作为计划任务运行。 第16行是使用关联数据库调用Access的示例,并且还将参数传递给该数据库。 开始访问数据库

处理调用Access并传递两个数据库

数据库的参数,您需要一个基本包含4个元素的命令:
  1. Access可执行文件本身的地址。 如果它在路径环境变量中,则没有必要,但是最好不要假设。 根据我的经验,这通常不是。 可以通过查询注册表来获得该值,但是我发现为要使用此设置的每台PC设置一个环境变量都可以。 无论如何,您都需要处理此要求。
  2. 可执行文件本身的名称。 通常简单地是“ MSAccess.Exe”。
  3. 要传递的数据库的名称。
  4. 要传递给数据库的参数。 这应该跟在“;”之后 字符(这是/ cmd的快捷方式)。 在CMD示例(第16行)中,参数为“自动”。
如果未传递第四个元素(参数),则数据库应正常打开以与用户进行完全交互。

可以在以下位置找到有关调用Access的有用参考。

如何在Microsoft Access中使用命令行开关设计数据库以处理参数

数据库打开后有两种方法可以自动运行代码:

  1. AutoExec宏。 我个人不会建议在成熟的软件中使用宏,无论它们在Access 2007中如何强加给您。
  2. 在“ 工具/启动”表单中,可以选择一个表单以自动打开数据库来运行。 所选的表单应包含一个OnOpen事件过程。 这在打开表单时自动运行,因此在打开数据库时也会自动运行。

在下面的示例代码中,我检查了

Command ()函数查看传递的参数,并执行特定的代码(如果结果是预定义的值“ Auto”)。

在第4行上,我调用了一个正常打开数据库时也要使用的过程,因此传递了参数(varOpenArgs)来告诉该过程我们正在其中运行

自动模式。 第5行和第6行确保忽略表格的正常处理(显示在屏幕上并等待操作员输入),并且数据库应在处理完成后关闭。 该特定的数据库与调度程序一起使用,并且由于没有可用的干预,任何操作员干预的操作都会失败。
Private Sub Form_Open(Cancel As Integer)
    'Some standard stuff
    If Command = "Auto" Then
        Call clsTo.ShowForm(strTo:="frmUpdate", varOpenArgs:="Auto")
        Cancel = True
        Call Application.Quit(Option:=acQuitSaveNone)
    End If
End Sub
排程

尽管还有其他方法可用,但我将在这里继续使用基本的NT Scheduler,它已用于许多Windows NT版本(Inc 3.0、3.5、4.0、2000,XP,Vista等)。 有关命令行调度程序(AT)的有用参考资料,请参见:

如何使用AT命令安排任务

我的命令行如下。 我将在下面解释所使用的元素:

AT 2:30 /INTERACTIVE /EVERY:M,T,W,Th,F,S "D:\Vecta\VectaWebDaily.Cmd"
  1. AT.EXE是命令调度程序本身。
  2. 2:30指定任务应在运行当天的那个早晨运行。
  3. / INTERACTIVE允许控制台上的任何(可能是失眠的)操作员查看任务并与之交互。 尽管出于测试目的(如果可能出错则可能进行调试),依赖交互是非常方便的选择。
  4. / EVERY:M,T,W,Th,F,S表示一周中的每个指定日期。 上面的参考列出了每天的代码。
  5. 执行的任务应始终用引号引起来。 可用的命令不限于CMD。 很好,这里可以使用任何可执行命令。
进一步评论

在典型设置中,使用CMD文件来调用

数据库进程,它也可以用于对数据库进程输出或更新的任何文件进行进一步处理。

为了配合本教程,我提出了一个非常小的示例(随附)。

尽管它很小,但确实包含了所有提到的元素。

OpenAuto.Cmd
@ECHO OFF
REM The database is opened from this CMD file.
REM Before running, the Environment Variable AccessPath should be set.
REM Without this the process will abort.
REM EG SET AccessPath=C:\Program Files\Microsoft Office\OFFICE11
REM The access database (OpenAuto.Mdb) should be in the default db folder.
REM To use a different folder than Access's default, specify it explicitly. 
IF "%AccessPath%" == "" GOTO ERR_NAP
"%AccessPath%\MSAccess.Exe" OpenAuto.Mdb ;Auto
ECHO This should have run and terminated automatically.
GOTO END 
:ERR_NAP
ECHO AccessPath not set! 
:END
ECHO Hit any key to continue.
PAUSE
ECHO ON
Form_Open()
Option Compare Database
Option Explicit 
Private Sub Form_Open(Cancel As Integer)
    If Command() = "Auto" Then
        Call MsgBox("The database is opened automatically, " & _
                    "and will close as soon as you click on OK", _
                    vbOKOnly, _
                    "AutoMessage")
        Cancel = True
        Call Application.Quit(acQuitSaveNone)
    End If
End Sub
附加的文件
文件类型:zip OpenAuto.Zip (10.0 KB,365视图)

From: https://bytes.com/topic/access/insights/873647-invoking-database-command-line

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值