當前位置:首頁 » 數據倉庫 » vba打開access資料庫
擴展閱讀
sql查詢開銷什麼意思 2023-01-29 03:37:16
疊瓦硬碟存儲電影 2023-01-29 03:34:48

vba打開access資料庫

發布時間: 2022-11-26 20:14:05

A. vba如何調用Access的查詢,並顯示查詢結果

當然可以,用DAO,可以在VB添加DAO組件。
然後,定義參數

'Database Connection
Dim cn As Workspace
Dim db As Database
Dim Rs As Recordset
Dim YOURPWD$, strsql$, sContent$

'設置資料庫
Set cn = DBEngine.Workspaces(0)
Set db = cn.OpenDatabase(sDbPath, False, False, ";pwd=" & YOURPWD)

'打開資料庫
strSQL = "Select * From YourTable"
Set Rs = db.OpenRecordset(strSQL, , dbReadOnly)

'取出一個不為NULL的字元串欄位值
sContent = trim$(Rs!Item1)

--------------------------------------------------------------
'使用前提在VB中加入VB組件

Dim xlsApp As Object, xlsBook As Object, xlsSheet As Object

Dim Row&, Col&

On Error GoTo ExcelInport_Err

'創建應用Excel程序

Set xlsApp = CreateObject("Excel.Application")

'Excel WorkBook 的添加

Set xlsBook = xlsApp.Workbooks.Add

』取得活動的Excel Sheet

Set xlsSheet = xlsBook.ActiveSheet

'Excel Sheet的標題

xlsSheet.Name = "Your Sheet Name"

'Excel Sheet 內容的填充

With xlsSheet

Row = 1
'行

Col = 1
'列

.Cells(Row, Col).Value = "Your Fill Content"

End With

『Excel

xlsApp.Visible = True

Set xlsSheet = Nothing

Set xlsBook = Nothing

Set xlsApp = Nothing

Exit Sub

ExcelInport_Err:

'關閉時沒有消息框

xlsApp.DisplayAlerts = False

xlsApp.Quit

Set xlsApp = Nothing

B. ACCESS里打開某資料庫後如何用VBA引用表、記錄及欄位值


Access
2003
中,您可以使用
Visual
Basic
編輯器查看當前選擇的
VBA
引用。為此,請按照下列步驟操作:
啟動
Access
2003。
打開一個
Access
資料庫。

ALT+F11
打開
Visual
Basic
編輯器。

Visual
Basic
編輯器窗口中,單擊「工具」菜單上的「引用」。在「引用」對話框中,您可以看到所選的引用。注意
當選擇了一個引用後,您還可以查看有關使用該引用必須載入的文件的信息。相關文件可能是類型庫、對象庫或控制項庫。每個引用的相關文件會根據「引用」對話框中顯示的信息進行載入。但是,如果找不到相應的文件,Access
2003
將在計算機上的其他位置搜索它。對於所選的每個
VBA
引用,Access
2003
都會執行以下任務:
Access
驗證是否已載入了引用的文件。
如果當前未載入引用的文件,Access
將驗證
RefLibPaths
注冊表項是否存在。
如果
RefLibPaths
注冊表項存在,Access
將搜索與引用具有相同名稱的命名值。如果有匹配的命名值,則
Access
將從命名值中提及的路徑載入引用。注意
您可以將
RefLibPaths
注冊表項手動添加到注冊表中,然後可以添加
RefLibPaths
注冊表項下任何外接程序或任何庫的名稱和位置。為此,請按照下列步驟操作。
單擊「開始」,然後單擊「運行」。
在「打開」框中,鍵入
regedit,然後單擊「確定」。
在「注冊表編輯器」窗口中,找到以下注冊表項:HKEY_LOCAL_MACHINE\Software\Microsoft\Office\11.0\Access
右鍵單擊「Access」注冊表項,指向「新建」,然後單擊「項」。
將新創建的項命名為
RefLibPaths。
單擊「RefLibPaths」。
右鍵單擊右窗格中的任意位置,然後單擊「字串值」。
使用與
VBA
引用相同的名稱命名新創建的字元串值。
右鍵單擊您在第
8
步中創建的字元串值,然後單擊「修改」。
在「編輯字元串」對話框中,鍵入必須載入的文件的位置以與
VBA
中的引用對應。注冊表值名稱必須是文件名加擴展名。位置(數值數據)必須是路徑加文件名。例如,如果設置對
Northwind
示例資料庫的引用,則可以添加以下值:
數值名稱:Northwind.mdb
數值數據:C:\Program
Files\Microsoft
Office\Office11\Samples\Northwind.mdb
重復第
7
步到第
10
步,將適當的外接程序或庫的名稱和位置作為字元串值添加。
在「文件」菜單上,單擊「退出」。如果
RefLibPaths
注冊表項不存在或未包含正確的引用,則
Access
使用「SearchPath」API
搜索引用的文件。將執行以下搜索:
搜索范圍說明
應用程序目錄
Msaccess.exe
的位置。
當前目錄在「文件」菜單上單擊「打開」時所看到的目錄。
系統目錄
Windows
文件夾或
WINNT
文件夾中的
System
文件夾和
System32
文件夾。
WinDir
操作系統文件在其中運行的文件夾。這通常是
Windows
文件夾或
WINNT
文件夾。
PATH
環境變數此系統變數包含系統可直接訪問的一組文件夾。Microsoft
Windows
NT
4.0:在控制面板中,雙擊「系統」,然後單擊「環境」選項卡。PATH
變數顯示在「系統變數」列表中。Microsoft
Windows
2000

Microsoft
Windows
Server
2003:在控制面板中,雙擊「系統」,單擊「高級」選項卡,然後單擊「環境變數」。PATH
顯示在「系統變數」列表中。
文件目錄包含
.mdb
文件、.mde
文件、.adp
文件或
.ade
文件的文件夾和任何子文件夾。注意
如果您要引用的文件位於上表中提到的任何目錄中,則
Access
不需要
RefLibPaths
注冊表項。如果
Access
2003
無法找到相關引用,當您編譯項目或嘗試運行某個過程時,將收到以下錯誤信息:
Your
Microsoft
Office
Access
database
or
project
contains
a
missing
or
broken
reference
to
the
file
file
name.*
To
ensure
that
your
database
or
project
works
properly,
you
must
fix
this
reference.
注意
在資料庫已打開的情況下,對於每個無法找到的引用,您都會收到一次前面提及的錯誤信息。例如,如果您打開了
MyDatabase.mdb
並且
MyDatabase.mdb
丟失了對
Microsoft
Calendar
控制項和
Microsoft
DAO
庫的引用,則您會收到兩條錯誤信息,丟失的每個引用對應一條錯誤信息。如果您未修復這些引用,那麼當您關閉資料庫然後再重新打開時,您將再次收到這些錯誤信息。如果您修復了這些引用並保存了資料庫,則下次打開該資料庫時就不會收到這些錯誤信息了。BrokenReference
屬性Access

Application
對象具有一個
BrokenReference
屬性,該屬性可以告訴您是否有任何引用出現了錯誤。若要檢查
BrokenReference
屬性,請按照下列步驟操作:
啟動
Access
2003。
打開一個
Access
資料庫。

ALT+F11
打開
Visual
Basic
編輯器。

CTRL+G
組合鍵打開「立即」窗口。
在「立即」窗口中,鍵入以下命令,然後按
Enter
鍵:?Application.BrokenReference請注意,如果存在丟失的引用,Application
對象的
BrokenReference
屬性將返回「True」。否則,BrokenReference
屬性將返回「False」。

C. VBA 連接Access資料庫查詢

你數據對不上是少數據嗎?你的語句中用了like,但沒有通配符,試試修改
sqls = "SELECT * FROM NDYX where FIELD(0) like'*" & a & "*'" '定義SQL查詢命令字元串"

D. EXCEL VBA 打開Access資料庫文件

一、導入方法:
Sub 把Excel數據插入資料庫中()
Dim conn As ADODB.Connection
Dim WN As String
Dim TableName As String
Dim sSql As String
Dim tStr As String
'資料庫名,請自行修改,路徑與當前工作簿在同一目錄
WN = "進銷存表.mdb"
'資料庫的表名與當前工作表名一致
TableName = ActiveSheet.Name

Set conn = New ADODB.Connection
conn.ConnectionString = "Provider=Microsoft.Jet.Oledb.4.0;" & _
"Extended Properties=Excel 8.0;" & _
"Data Source=" & ThisWorkbook.Path & "\" & ActiveWorkbook.Name
conn.Open
If conn.State = adStateOpen Then
sSql = "Insert Into [;DataBase=" & ActiveWorkbook.Path & "\" & WN & "]." & TableName & " Select * From [" & ActiveSheet.Name & "$]"
conn.Execute sSql
MsgBox "成功把數據插入到「" & TableName & "」中!", , "http://excelba.com"
conn.Close
End If
Set conn = Nothing
End Sub

二、EXCEL的使用技巧:
(1) 分數的輸入
如果直接輸入「1/5」,系統會將其變為「1月5日」,解決辦法是:先輸入「0」,然後輸入空格,再輸入分數「1/5」。
(2) 序列「001」的輸入
如果直接輸入「001」,系統會自動判斷001為數據1,解決辦法是:首先輸入「'」(西文單引號),然後輸入「001」。
(3) 日期的輸入
如果要輸入「4月5日」,直接輸入「4/5」,再敲回車就行了。如果要輸入當前日期,按一下「Ctrl+;」鍵。
(4) 填充條紋
如果想在工作簿中加入漂亮的橫條紋,可以利用對齊方式中的填充功能。先在一單元格內填入「*」或「~」等符號,然後單擊此單元格,向右拖動滑鼠,選中橫向若干單元格,單擊「格式」菜單,選中「單元格」命令,在彈出的「單元格格式」菜單中,選擇「對齊」選項卡,在水平對齊下拉列表中選擇「填充」,單擊「確定」按鈕。
(5) 多張工作表中輸入相同的內容
幾個工作表中同一位置填入同一數據時,可以選中一張工作表,然後按住Ctrl鍵,再單擊窗口左下角的Sheet1、Sheet2......來直接選擇需要輸入相同內容的多個工作表,接著在其中的任意一個工作表中輸入這些相同的數據,此時這些數據會自動出現在選中的其它工作表之中。輸入完畢之後,再次按下鍵盤上的Ctrl鍵,然後使用滑鼠左鍵單擊所選擇的多個工作表,解除這些工作表的聯系,否則在一張表單中輸入的數據會接著出現在選中的其它工作表內。
(6) 不連續單元格填充同一數據
選中一個單元格,按住Ctrl鍵,用滑鼠單擊其他單元格,就將這些單元格全部都選中了。在編輯區中輸入數據,然後按住Ctrl鍵,同時敲一下回車,在所有選中的單元格中都出現了這一數據。
(7) 在單元格中顯示公式
如果工作表中的數據多數是由公式生成的,想要快速知道每個單元格中的公式形式,以便編輯修改,可以這樣做:用滑鼠左鍵單擊「工具」菜單,選取「選項」命令,出現「選項」對話框,單擊「視圖」選項卡,接著設置「窗口選項」欄下的「公式」項有效,單擊「確定」按鈕(如圖2)。這時每個單元格中的分工就顯示出來了。如果想恢復公式計算結果的顯示,就再設置「窗口選項」欄下的「公式」項失效即可。
(8) 利用Ctrl+*選取文本
如果一個工作表中有很多數據表格時,可以通過選定表格中某個單元格,然後按下Ctrl+*鍵可選定整個表格。Ctrl+*選定的區域為:根據選定單元格向四周輻射所涉及到的有數據單元格的最大區域。這樣我們可以方便准確地選取數據表格,並能有效避免使用拖動滑鼠方法選取較大單元格區域時屏幕的亂滾現象。
(9) 快速清除單元格的內容
如果要刪除內容的單元格中的內容和它的格式和批註,就不能簡單地應用選定該單元格,然後按Delete鍵的方法了。要徹底清除單元格,可用以下方法:選定想要清除的單元格或單元格範圍;單擊「編輯」菜單中「清除」項中的「全部」命令,這些單元格就恢復了本來面目。

E. 用VBA如何獲取access資料庫中欄位的數據類型

1、打開相應的access資料庫。

2、在左邊的對象欄里單擊模塊,觀察右邊的窗口,如果裡面有模塊,可以雙擊打開。如果沒有新建一個模塊,然後雙擊打開。

3、粘貼以下代碼並運行、觀察立即窗口。

PrivateSubaaaa()
DimTableNameAsString,FieldNameAsString,iAsInteger
TableName="tb1"'表名tb1
FieldName="編號"'欄位名編號

SelectCaseCurrentDb.TableDefs(TableName)(FieldName).Type
CasedbBoolean
Debug.Print"是/否"
CasedbByte
Debug.Print"數字(位元組)"
CasedbInteger
Debug.Print"數字(整型)"
CasedbLong
If(CurrentDb.TableDefs(TableName)(FieldName).AttributesAnddbAutoIncrField)=dbAutoIncrFieldThen
Debug.Print"自動編號(長整型)"
Else
Debug.Print"數字(長整型)"
EndIf
CasedbSingle
Debug.Print"數字(單精度)"
CasedbDouble
Debug.Print"數字(雙精度)"
CasedbDecimal
Debug.Print"數字(小數)"
CasedbCurrency
Debug.Print"貨幣"
CasedbDate
Debug.Print"日期/時間"
CasedbText
Debug.Print"文本"
CasedbMemo
If(CurrentDb.TableDefs(TableName)(FieldName).AttributesAnddbHyperlinkField)=dbHyperlinkFieldThen
Debug.Print"超鏈接"
Else
Debug.Print"備注"
EndIf
CasedbGUID
Debug.Print"自動編號(自動復制ID)"
EndSelect


EndSub

F. 利用VBA從Access資料庫中查找數據

打開VBA編輯器的兩種方式:

Excel → 開發工具 → Visual Basic:打開VBE後,點擊插入,選擇模塊,就可以在該項目下新建一個空白模塊。
Excel → 開發工具 → 插入 → 控制項 → 右鍵控制項 → 指定宏:可以直接將宏綁定到控制項上,然後進行編輯。
進行編寫代碼前的准備工作:

Visual Basic → 工具 → 引用:引用 Microsoft ActiveX Data Objects 2.x Library,否則運行代碼會報「用戶定義類型未定義」提示。
Excel中用VBA根據輸入的日期從Access資料庫中提取相應的數據並插入到Excel表中:

G. VBA查詢access資料庫

庫名與表名,你自己改下啊!


一、連接2003


SubAC()
DimcnnAsNewConnection
DimrsAsNewRecordset
DimsqlAsString
DimqxAsString
qx="金牛"
cnn.Open"Provider=Microsoft.Jet.Oledb.4.0;dataSource="&ThisWorkbook.Path&"資料庫.mdb"
sql="select*from[宏站]"
rs.Opensql,cnn

'復制欄位名

Fori=1Tors.Fields.Count

Cells(1,i)=rs.Fields(i-1).Name

Nexti

'復制全部數據

Range("A2").CopyFromRecordsetrs

rs.Close

cnn.Close


EndSub

二、連接2007


SubAC()
DimcnnAsNewConnection
DimrsAsNewRecordset
DimsqlAsString
DimqxAsString
qx="金牛"
cnn.Open"Provider=Microsoft.Ace.OleDB.12.0;dataSource="&ThisWorkbook.Path&"資料庫.accdb"
sql="select*from[宏站]'"

rs.Opensql,cnn

[a1].CopyFromRecordsetrs

EndSub



記得引用:


H. 如何用excel vba訪問加密的access

可以,前提是你要知道資料庫密碼。
Sub open_database()
Set wsMainWs = DBEngine(0)
Set mydBase = wsMainWs.OpenDatabase(ThisWorkbook.Path & "\UsersBase.mdb", True, False, "ms access;pwd=123456")
End Sub
上述過程中假設你的資料庫名為 UsersBase.mdb(access格式),放在與你當前打開的工作薄文件同目錄下。123456 是你打開資料庫的密碼。

I. access2007怎麼設置打開資料庫後進行操作的VBA代碼

解析如下:
Public Function KillMe() As Boolean
Dim mPath As String
On Error GoTo InIDE
如果發生錯誤,則跳轉到inIDE。但由於inIDE後緊跟End Function,也就是說發生錯誤結束函 數。
mPath = CurrentProject.Name
將您正在操作的對象(即您的access資料庫)的名稱賦予變數mPath。實際上這句有些多餘,因為下面幾句隨即將路徑賦予了mPath。
If Right$(CurrentProject.Path, 1) = "\" Then
mPath = CurrentProject.Path
Else
mPath = CurrentProject.Path & "\"
End If
上面的假如語塊,保證路徑後面有反斜杠(即\)。
Open mPath & "Demon.bat" For Output As #1
以順序輸出(Output表示順序輸出,如果再有文件寫入,將寫在該文件內容之後)的方法將……\Demon.bat 文件輸出到文件號為1的緩存區;如果不存在這個文件,則在這個路徑下新建一個Demon.bat 文件,並且也輸出到文件號為1的緩存區,當然此時文件內容為空。我感覺電腦里本身不存在……\Demon.bat這個批處理文件(後綴bat市批處理文件,它是一個可執行的文件),否則它直接給出絕對路徑而不會用mPath變數了。
Print #1, ":Repeat" & vbCrLf & _
"del """ & mPath & CurrentProject.Name & "" & vbCrLf & "" _
; "if exist """ & mPath & CurrentProject.Name & """ goto Repeat " & vbCrLf & _
"del %0"
Print #1, 內容,就是將後面的內容寫入文件號1的緩存區,實際上就是將內容寫入Demon.bat這個文件。具體內容是:(vbCrLf表示回車換行)
【 :Repeat
del (路徑)\您的access資料庫
if exist"(路徑)\您的access資料庫" goto Repeat
del %0】
具體的批處理代碼意思好久沒用了有些模糊了,上面【】內基本意思是:刪除你的access資料庫,如果資料庫一直存在沒被刪除,則返回:Repeat語句,繼續刪除,直至刪除。
Close #1
關閉文件號1的緩存區,實際上就是保存了Demon.bat內容。
Shell mPath & "Demon.bat", vbHide
Shell表示 以非同步方式(我們平時代碼是一步一步執行的,這行代碼沒執行完是不會執行下一行代碼的,但非同步方式,你執行……\Demon.bat的代碼,其後的代碼繼續執行,結合你前面的代碼內容,就是一方面執行Demon.bat代碼,同時繼續執行Application.Quit acQuitSaveNone這句代碼)執行……\Demon.bat文件,並且以隱藏狀態方式執行(你看不到Demon.bat文件的DOS窗口)。現在我們就會明白為什麼【】里要用到if exist……這句了?由於兩段代碼同時運行,你的access資料庫有可能更遲運行完(就是還沒卸載完),一個打開的程序(沒卸載完就還處於打開狀態)是不能被刪除的,通過goto Repeat反復等待,一旦卸載完即刪除。
InIDE:
End Function

縱觀整個代碼,總體的意思是:當你關閉你的access資料庫時,整個資料庫莫名其妙悄無聲息的被刪除了。你看看函數的名稱Killme(即"刪除本身"),Kill me殺死自己,體現了編程者的用意。再看看Demon.bat中的Demon的意思,妖魔、鬼怪、靈異,如果用戶不知情,程序莫名其妙沒了,還以為發生了靈異事件了。
它的意義是:
1、消極意義:把這些代碼植入別人的程序,那就坑爹了。
2、積極意義:(1)如果某些文字、圖片等等你只想讓別人看一次,你可以植入這些代碼,這樣別人在access程序里看一次後,就不可能再看第二次了,電影里常常有這些畫面。(2)可以在這個代碼內加上觸發內容,比如在你的例子中加入假如:
Private Sub Form_Unload(Cancel As Integer)
if date()=#2013-10-01# then
KillMe
end if
Application.Quit acQuitSaveNone
End Sub
這樣,當系統日期到達2103年10月1日是就會發生自行刪除事件了,假如你有一個花了大心思做的access軟體,讓別人試用,到10月1日前要他付費,如果不付費你不用對他的資料庫操作,它就會自行刪除了,保證了版權。