首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >从Access前端执行SQL数据库备份

从Access前端执行SQL数据库备份
EN

Stack Overflow用户
提问于 2017-01-06 13:19:19
回答 1查看 1K关注 0票数 0

我已经创建了一个脚本来备份SQL中的特定数据库。我已经对它进行了测试,在SQL中执行时,它运行得很好。

我希望能够使用Access前端执行此脚本,使最终用户能够在需要时运行备份。

查询似乎在超时,我在执行查询时尝试了多种不同的方法。

这是我执行备份的脚本。

代码语言:javascript
运行
复制
CREATE PROCEDURE [dbo].[ASP_XXBackUp]
(@name VARCHAR(50), -- database name  
 @RETURNVALUE CHAR(1) = NULL OUTPUT)
AS
BEGIN 

DECLARE @path VARCHAR(256) -- path for backup files  
DECLARE @fileName VARCHAR(256) -- filename for backup  
DECLARE @fileDate VARCHAR(20) -- used for file name

-- specify database backup directory
SET @path = 'E:\SQL-Backup\ManualBackup\'  

-- specify filename format
SELECT @fileDate = CONVERT(VARCHAR(20),GETDATE(),112) +
         REPLACE(CONVERT(VARCHAR(8), GETDATE(), 108),':','')

-- specify filename
SET @fileName = @path + @name + '_' + @fileDate + '.BAK'

--Execute BackUp Sequence
BACKUP DATABASE @name TO  DISK = @fileName 

--Check that we managed to create a successful backup
SELECT TOP 1 @RETURNVALUE = dbo.fc_FileExists(@fileName);

-- Check if succeeded to find.
IF @@ROWCOUNT = 1
    SELECT @RETURNVALUE 
ELSE
    SELECT @RETURNVALUE = 0 --we have failed

END

有没有办法让我能够在访问前端执行这个任务?

方法在访问中尝试执行:

方法1 Dim blnReturnValue作为布尔Dim cmd作为ADODB.Command

代码语言:javascript
运行
复制
blnReturnValue = False 'Assume failure
Set cmd = New ADODB.Command
With cmd
    .ActiveConnection = gcnn
    .CommandText = "ASP_XXBackUp"
    .CommandType = adCmdStoredProc
    .Parameters.Append .CreateParameter("@name", adVarChar, adParamInput, 50, gDatabase)
    .Parameters.Append .CreateParameter("@RETURNVALUE", adChar, adParamInputOutput, 1)
    .Execute

    blnReturnValue = .Parameters("@RETURNVALUE")
    Set cmd = Nothing
End With

If blnReturnValue = False Then
    Me.ChkBackUp = False
    MsgBox "ERROR!: Backup Failed!" & vbCrLf & "Please contact your administrator!"
Else
    Me.ChkBackUp = True
    MsgBox "SUCCESS!: Databased Backed Up!"
End If

方法2

代码语言:javascript
运行
复制
gcnn.Execute "EXEC ASP_XXBackUp '" & gDatabase & "'"

方法3

代码语言:javascript
运行
复制
'Run proc to create journals for Year end
strSQL = "EXEC ASP_XXBackUp '" & gDatabase & "'"

Call ChangeQueryDef("qryPassThrough_SQL2", strSQL)
Call SQLPassThrough(strQDFName:="qryPassThrough_SQL2", strSQL:=strSQL, strConnect:=gODBCConn)

blnReturnValue = DCount("*", "qryPassThrough_SQL2")

这是我得到的错误消息:

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-01-06 19:06:45

最简单的代码和方法是在Access中创建一个传递查询。这样,您就不会在代码中处理连接、刺痛等问题。

这样做的VBA代码将是:

代码语言:javascript
运行
复制
With CurrentDb.QueryDefs("qryPassR")
  .SQL = "MyCoolStoredProc"
  .Execute
End With

请注意,上面的代码执行该存储过程是多么简单。

当然,您在属性表中为这个传递查询设置的时间将被使用。因此,您可以编辑属性表,或者在代码中简单地设置ODBC超时。

上面的“一个”查询qryPassR在您的VBA代码中经常被使用在无数个地方。因此,您可以按照上面所述为任何事物设置.SQL。

请记住,您应该为传递设置属性表中的“返回记录”。但是,由于我们有“所有捕获”查询,所以只需根据需要设置返回记录(因此对于不返回记录的存储过程和true命令,然后设置值= false,对于SQL SELECT或任何返回数据的其他命令都是true)。

因此,例如,您可能希望执行一些不从存储过程返回值(记录)的代码,因此您的代码将更像这样:

代码语言:javascript
运行
复制
With CurrentDb.QueryDefs("qryPassR")
  .SQL = "MyCoolStoredProc"
  .ReturnsRecords = False
  .Execute
End With

但是,在您的示例中,您希望返回记录,并希望将ODBC超时时间增加到5分钟,因此您可以使用以下内容:

代码语言:javascript
运行
复制
Dim retValue      As Integer

With CurrentDb.QueryDefs("qryPassR")
  .SQL = "EXEC ASP_XXBackUp '" & gDatabase & "'"
  .ReturnsRecords = True
  .ODBCTimeout = 300   ' 300 seconds = 5 minutes
  retValue = .OpenRecordset()(0)
End With

Debug.Print "ret value = " & retValue

注意,在上面,“exec”是可选的(就像在中输入它一样)。所以我们可以:

代码语言:javascript
运行
复制
  .SQL = "ASP_XXBackUp '" & gDatabase & "'"

因此,一旦您创建了一个传递查询,那么您就可以使用它作为传递服务器端执行then或任何SQL所需的每个位置。注意,在上面我们使用了OpenRecordSet,所以我们必须设置ReturnsRecords = True。如果您没有返回记录,那么您希望使用.Execute代替.OpenRecordSet

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41506641

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档