当前位置:首页 » 编程语言 » vbasql定期备份
扩展阅读
webinf下怎么引入js 2023-08-31 21:54:13
堡垒机怎么打开web 2023-08-31 21:54:11

vbasql定期备份

发布时间: 2022-10-25 01:55:00

A. VBA+备份文件

Sub SaveWorkbookBackup()
Dim awb As Workbook, BackupFileName As String, i As Integer, OK As Boolean
If TypeName(ActiveWorkbook) = "Nothing" Then Exit Sub
Set awb = ActiveWorkbook
If awb.Path = "" Then
Application.Dialogs(xlDialogSaveAs).Show
Else
BackupFileName = awb.FullName
i = 0
While InStr(i + 1, BackupFileName, ".") > 0
i = InStr(i + 1, BackupFileName, ".")
Wend
If i > 0 Then BackupFileName = Left(BackupFileName, i - 1)
BackupFileName = BackupFileName & ".bak"
OK = False
On Error GoTo NotAbleToSave
With awb
Application.StatusBar = "Saving this workbook..."
.Save
Application.StatusBar = "Saving this workbook backup..."
.SaveCopyAs BackupFileName
OK = True
End With
End If
NotAbleToSave:
Set awb = Nothing
Application.StatusBar = False
If Not OK Then
MsgBox "Backup Copy Not Saved!", vbExclamation, ThisWorkbook.Name
End If
End Sub

如果想运行或保存VBA(宏)于另存的文件,请自选要保存的文件的种类。

B. VBA把excel备份至SQL或者实现数据交换 提示下标越界 重金悬赏大神解决

根据您的数据表的格式及数据库管理的性能,您要想实现多处随意动态更新,我觉得是有难度的!
1、你的表格首先没有标定的唯一行(也就是数据库表中的键值),因此不管是哪个操作者任意更新一行或增加(删除)一行(或修改一行中某元的内容)形成新的数据表格后,在数据库中是很难界定的(这一点不知道您是否理解!)。如果没有唯一(键值)来约束的话,只能按顺序的方式来从数据库中下载内容到Excel或者将现在的Excel数据更新到数据库中。也就是说:Excel文件的当前操作者最好是一个,因为多个操作者不能实现数据同步的,数据库只能保留最后的更新者的数据。除非你把Excel表中的某一列标示为整个表格中的唯一一行(也就是数据库表中键值)

2、根据以上分析的结果,只好在 Excel 中使用两项功能,“下载”和“上传
“下载”就是每次在操作之前,先把数据库中的内容更新到 Excel文件的Sheet 中。
如:
Dim i As Integer
Dim n As Integer

Dim mySheet As Worksheet

Dim conStr As String
Dim mySQL As String

Dim conn As New ADODB.Connection
Dim sn As New ADODB.Recordset

Set meSheet = Sheet2 '用一个新的Sheet表单

conStr = "Provider=SQLOLEDB.1;Persist Security Info=True;User ID=sa; Password=xxx; Data Source =电脑名(或IP地址);Initial Catalog=数据库名;"

conn.Open conStr

mySQL = "SELECT * FROM 表名称"
sn.Open mySQL, conn, adOpenStatic, adLockReadOnly
‘可以把字段名称做为 Excel表的第一行,也可以不要下面的循环
If Not sn.BOF And Not sn.EOF Then
For i = 0 To sn.Fields.Count - 1
meSheet.Cells(1, i + 1) = sn.Fields(i).Name
Next i
End If
'从第二行开始写数据
n = 2
Do While Not sn.EOF
For i = 0 To sn.Fields.Count - 1
meSheet.Cells(n, i + 1) = sn(i)
Next i

n = n + 1
sn.MoveNext
Loop
'数据已经从数据库下载到当前的Sheet完成

当你把数据修改完后可以把整个数据表更新到数据库,实现"上传"功能
如:
Dim i As Long
Dim meSheet As Worksheet
Dim conStr As String
Dim mySQL As String

Dim conn As New ADODB.Connection
Dim sn As New ADODB.Recordset

Set meSheet = Sheet2

conStr = "Provider=SQLOLEDB.1;Persist Security Info=True;User ID=sa; Password=xxx; Data Source =电脑名(或IP地址);Initial Catalog=数据库名;"
conn.Open conStr
'需要将原来数据库中的数据删除掉
conn.Execute "DELETE FROM 表名"
mySQL = "SELECT * FROM 表名"
sn.Open mySQL, conn, adOpenDynamic, adLockOptimistic
'循环增加数据(也可以用SQL语句(INSERT INTO)逐行增加)
For i = 2 To 65535(最大行数,不一定到65535,因为后面也许是空值)
sn.AddNew
sn(0) = meSheet.Cells(i, 1)
sn(1) = meSheet.Cells(i, 2)
...多少根据列数来定
sn(7) = meSheet.Cells(i, 7)
sn.Update
Next i

更新完成.

C. 关于excel中利用vba将数据保存到SQL的问题

INSERT INTO TT(iYear,iMonth,Dept,Amount,Account,FA) SELECT iYear,iMonth,Dept,Amount,Account,FA" & _
" FROM OPENDATASOURCE('Microsoft.Jet.OLEDB.4.0','DataSource=""" & strTempSourcePath & "\Source\"& strTempSourceName & _
""";User ID=ADMIN;Password=;Extended properties=Excel5.0')...[" & strSheetName(iMonth) & "$]

D. EXCEL如何使用VBA实现把工作表数据备份至SQL数据库

数据没有唯一性做不到,无法从库中定位你修改的记录,如果再有其他列可以辅助确定每一行能与其他区分开是可以的。

E. VBA如何复制或备份已打开的access文件

试试下面的代码:

SubRefresh_Data()
DimConnAsNewADODB.Connection
DimstrConnAsString
DimstrSQLAsString
DimrsAsNewADODB.Recordset
DimMax_rowAsInteger

Stpath=ThisWorkbook.Path&Application.PathSeparator&"test.accdb"'设定access文件路径
Conn.Provider="Microsoft.ACE.OLEDB.12.0"
strConn="DataSource="&Stpath
strSQL="select*fromreport_summary"
'打开数据库
Conn.Open(strConn)
rs.OpenstrSQL,Conn,1,1
Application.ScreenUpdating=False
Application.DisplayAlerts=False
Ifrs.BOF=FalseThen
Sheets("Database").Range("A2:AY50000").ClearContents
Sheets("Database").Range("A2").CopyFromRecordsetrs
Else
Sheets("Database").Range("A2:AY10")="0"
EndIf

rs.Close
Setrs=Nothing
Conn.Close
endsub

F. VBA把excel备份至SQL或者实现数据交换 提示下标越界 重金悬赏大神解决

根据您的数据表的格式及数据库管理的性能,您要想实现多处随意动态更新,我觉得是有难度的!
1、你的表格首先没有标定的唯一行(也就是数据库表中的键值),因此不管是哪个操作者任意更新一行或增加(删除)一行(或修改一行中某元的内容)形成新的数据表格后,在数据库中是很难界定的(这一点不知道您是否理解!)。如果没有唯一(键值)来约束的话,只能按顺序的方式来从数据库中下载内容到Excel或者将现在的Excel数据更新到数据库中。也就是说:Excel文件的当前操作者最好是一个,因为多个操作者不能实现数据同步的,数据库只能保留最后的更新者的数据。除非你把Excel表中的某一列标示为整个表格中的唯一一行(也就是数据库表中键值)
2、根据以上分析的结果,只好在
Excel
中使用两项功能,“下载”和“上传”
“下载”就是每次在操作之前,先把数据库中的内容更新到
Excel文件的Sheet
中。
如:
Dim
i
As
Integer
Dim
n
As
Integer
Dim
mySheet
As
Worksheet
Dim
conStr
As
String
Dim
mySQL
As
String
Dim
conn
As
New
ADODB.Connection
Dim
sn
As
New
ADODB.Recordset
Set
meSheet
=
Sheet2
'用一个新的Sheet表单
conStr
=
"Provider=SQLOLEDB.1;Persist
Security
Info=True;User
ID=sa;
Password=xxx;
Data
Source
=电脑名(或IP地址);Initial
Catalog=数据库名;"
conn.Open
conStr
mySQL
=
"SELECT
*
FROM
表名称"
sn.Open
mySQL,
conn,
adOpenStatic,
adLockReadOnly
‘可以把字段名称做为
Excel表的第一行,也可以不要下面的循环
If
Not
sn.BOF
And
Not
sn.EOF
Then
For
i
=
0
To
sn.Fields.Count
-
1
meSheet.Cells(1,
i
+
1)
=
sn.Fields(i).Name
Next
i
End
If
'从第二行开始写数据
n
=
2
Do
While
Not
sn.EOF
For
i
=
0
To
sn.Fields.Count
-
1
meSheet.Cells(n,
i
+
1)
=
sn(i)
Next
i
n
=
n
+
1
sn.MoveNext
Loop
'数据已经从数据库下载到当前的Sheet完成
当你把数据修改完后可以把整个数据表更新到数据库,实现"上传"功能
如:
Dim
i
As
Long
Dim
meSheet
As
Worksheet
Dim
conStr
As
String
Dim
mySQL
As
String
Dim
conn
As
New
ADODB.Connection
Dim
sn
As
New
ADODB.Recordset
Set
meSheet
=
Sheet2
conStr
=
"Provider=SQLOLEDB.1;Persist
Security
Info=True;User
ID=sa;
Password=xxx;
Data
Source
=电脑名(或IP地址);Initial
Catalog=数据库名;"
conn.Open
conStr
'需要将原来数据库中的数据删除掉
conn.Execute
"DELETE
FROM
表名"
mySQL
=
"SELECT
*
FROM
表名"
sn.Open
mySQL,
conn,
adOpenDynamic,
adLockOptimistic
'循环增加数据(也可以用SQL语句(INSERT
INTO)逐行增加)
For
i
=
2
To
65535(最大行数,不一定到65535,因为后面也许是空值)
sn.AddNew
sn(0)
=
meSheet.Cells(i,
1)
sn(1)
=
meSheet.Cells(i,
2)
...多少根据列数来定
sn(7)
=
meSheet.Cells(i,
7)
sn.Update
Next
i
更新完成.

G. 用VBA代码实现在EXCEL自动备份

你的事件用得不正确,你不是要在关闭工作簿时才选择是否备份吗,下面是按你的要求写的代码,供你参考:(在代码是尽量不用On Error Resume Next,否则代码有问题都查不出来)

PrivateSubWorkbook_BeforeClose(CancelAsBoolean)
DimPa$,Str1$
Pa="E:我的备份"
IfDir(Pa,vbDirectory)=""ThenMkDirPa:SetAttrPa,2'创建文件夹并隐藏
Str1=ThisWorkbook.Name
ThisWorkbook.Save'先保存自身文件
Application.DisplayAlerts=False'覆盖备份文件时不提示
IfMsgBox("是否备份?",vbYesNo)=vbYesThen_
ThisWorkbook.SaveAsPa&Left(Str1,InStr(Str1,".")-1)&"备份"&Format(Date,"yyyy-mm-dd")&".xlsm"
Application.DisplayAlerts=True
EndSub

H. VBA如何让EXCEL保存文件时自动生成备份文件,并且可以选择备份路径,另外可否设置备份文件为只读

这个可以弹出路径选择对话框并且将备份设为只读的。
Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
Dim flag As Boolean
dim fm as string
flag = False
Do While Not flag
fm = Application.GetSaveAsFilename(fileFilter:="Excel files (*.xls),*.xls,All files (*.*),*.*")
If fm <> False Then
Application.EnableEvents = False
ActiveWorkbook.SaveCopyAs fm
Application.EnableEvents = True
flag = True

End If
Loop
SetAttr pathname:=fm, Attributes:=vbReadOnly
End Sub