返回列表 上一主題 發帖

[發問] Excel工作表單與Access資料庫的VBA互動問題

回復 34# JEAN
請問妳是要執行 MDF 資料庫、抑或是 ACCDB 資料庫?
因這兩種資料庫的驅動程式是不同的。
For Access MDF (2003):
  1.     .ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;" & "Data Source=" & _
  2.                           ThisWorkbook.Path & Application.PathSeparator & "機票記錄明細表.mdb" & ";"
複製代碼
For Access Accdb (2007、2010):
  1.     '  For Microsoft.ACE.OLEDB.12.0,you need Microsoft Office 12.0 Access Database Engine to be installed.
  2.     .ConnectionString = "Provider=Microsoft.Ace.OLEDB.12.0;" & "Data Source=" & _
  3.                          ThisWorkbook.Path & Application.PathSeparator & "機票記錄明細表檔案.accdb" & ";"
複製代碼
當妳要使用 Accdb 資料庫時,妳程式碼的驅動程式便要啟動 For Access Accdb、反之亦然。

TOP

回復 33# c_c_lai


    您好:   我有你的方法...會出現這個錯誤~~~
      

    您好:   我把檔案二個放在一起上傳給你~~請幫我看看..謝謝您
      2014年機票記錄二個檔案一起.rar (141.5 KB)

TOP

回復 26# JEAN
順序應先從 ThisWorkbook 的程式碼看起,然後再分別去瞭解
Sheets("機票作業")、以及 Sheets("機票登錄") 內的程式碼,
妳的重點可以先放在 ("機票登錄") 上。 理解後再行去體會
("機票作業")、如此妳的進展才會順利。最後才去瞭解 "模組"
裡如何處裡 ComboBox 內如何應用滑鼠滾軸的運作(Hook)、
以及如何釋放 (UnHook)。至於資料庫結構保持不變(Mdf、Accdb)。
最後、祝妳一帆風順!
2014年機票記錄.rar (123.68 KB)

TOP

回復 26# JEAN
這裡,我已再加入一個新的工作表單 Sheets("機票登錄"),在此表單內
"機票登錄" 只單純處理資料新增、更新、刪除、重置等輸入作業,相關的
資料儲存作業則全交由 Access 機票記錄明細表.mdb 資料庫存取紀錄。
至於原 Sheets("data") 的紀錄則依然保留給工作表單 "機票作業",
作為雙向儲存範例之用。也就是說、工作表單 "機票登錄" 或許就是
妳的需求 (程式碼在其"機票登錄"本身工作表單內),妳可以將它與
"機票作業"內之程式碼相互比較,便可領會兩者之間處理上的差異,
進而可作為妳個人領域上之探討及研究。

TOP

本帖最後由 c_c_lai 於 2013-12-27 18:03 編輯

回復 30# JEAN
這個是刪除資料錄的程式碼,
其內容是首先會刪除 Sheets("data") 內對應的被刪除資料,
接著、回頭又繼續去刪除儲存在 Access 的對應的資料,以保持兩者資料同步之故。
首先、妳幫我檢查一項動作:
A、  先勾選  "SQL Data"。然後在 "名字" 欄隨便輸入一名字、如: LuLu。
B、  輸完 LuLu 後,點選 "輸入確定" 按鈕,接著點選 "簽證內容1"、或者是
         "簽證內容2",然後瞧瞧裡面有沒有 "簽證選項",如果答案是 "Yes",
        那便要恭喜妳已找到(連結到) Access 資料庫了。
C、  最後妳才告訴我,妳實際想做的是甚麼?

TOP

回復  c_c_lai


您好:
謝謝您的機票作業,請問我是否可以改為把名字用選項方式輸入.....然後自動帶入 ...
JEAN 發表於 2013-12-27 13:32


Private Sub DeleteData_Click()
    Dim nCode As Range, ret As Boolean
   
    With Sheets("data")
        Set nCode = .[B:B].Find(CallID.Text, , , 1)
        .Rows(Val(Mid(nCode.Address, 4))).EntireRow.Delete Shift:=xlUp
    End With
   
    ret = ExcelData.Value
    ExcelData.Value = False
   
    closeRS
    OpenDB
   
    strSQL = "DELETE FROM 機票記錄 WHERE 名字 = '" & CallID.Text & "'"
    cmd.CommandText = strSQL
   
    cmd.ActiveConnection = cnn
    cmd.Execute
    cnn.Close
   
    Confirm.Enabled = True
    ExcelData.Value = ret
    ResetData_Click
End Sub


請問是改這邊嗎?

TOP

回復 28# c_c_lai


  您好:

我的意思是說:如果選擇SQL DATA方式 輸入資料....他的儲存明細表應該是在ACCESS吧....可是我開啟ACCESS明細表,必沒有我輸入的資料。

我會想用到ACCESS資料庫裡面是方便查詢,而且可以一直增加年度...譬如明年是2014年用完,我還可以在ACCESS明細表直接在加上2015年度就可以了。

這樣我就不用每年想要如何去做,而且我打算今年把表格搞定好把所有的缺點和優點整合出來。  以後也可以提供其他網友做使用。  

另外真的很感謝 c_c_lai 幫助才能完成表格。

TOP

回復 26# JEAN
又、妳說用都不行?
此話怎說?
妳是指直接點選 "機票記錄明細表.mdb" 都無法進入到 Access 嗎?

TOP

回復  c_c_lai


您好:
謝謝您的機票作業,請問我是否可以改為把名字用選項方式輸入.....然後自動帶入 ...
JEAN 發表於 2013-12-27 13:32

當然可行,只要是 VBA 語法能處裡的,幾乎都有實現之可能。
另外我摘錄了 SQL 一詞的解釋:
結構化查詢語言(Structured Query Language,縮寫為SQL),一種程式語言,用於資料庫中的標準資料查詢語言,IBM公司最早使用在其開發的資料庫系統中。1986年10月,美國國家標準學會(ANSI)對SQL進行規範後,以此作為關聯式資料庫管理系統的標準語言(ANSI X3. 135-1986),1987年得到國際標準組織的支援下成為國際標準。不過各種通行的資料庫系統在其實踐過程中都對SQL規範作了某些編改和擴充。所以,實際上不同資料庫系統之間的SQL不能完全相互通用。
看完了這段說明,你應該便能了解到 SQL 它扮演的只是一般程式語言與資料庫間的一個介面語言。例如:
本程式碼裡的:
  1.     If ExcelData.Value = True Then
  2.         '  strSQL = "Select Distinct [簽證內容] From [簽證項目$] Order by [簽證內容]"
  3.         strSQL = "Select * From [簽證項目$] Order by [簽證內容]"
  4.     Else
  5.         '  strSQL = "Select Distinct 簽證內容 From 簽證項目 Order by 簽證內容"
  6.         strSQL = "Select * From 簽證項目 Order by 簽證內容"
  7.     End If
  8.    
  9.     '  closeRS
  10.     OpenDB
  11.   
  12.     rs.Open strSQL, cnn, 1, 3     '  adOpenKeyset, adLockOptimistic
  13.     If rs.RecordCount > 0 Then
  14.        .
  15.        .
  16.     End If
  17.       .
複製代碼
等與資料庫存取有關語法皆屬之。

TOP

回復 25# c_c_lai


您好:
謝謝您的機票作業,請問我是否可以改為把名字用選項方式輸入.....然後自動帶入"單位"這個欄位。
就像我"機票"裡面的名字....會自動帶入"單位"。

請問SQL是登入到ACCESS的意思嗎??  可是我用都不行~~

TOP

        靜思自在 : 要比誰更受誰.不要比誰更怕誰。
返回列表 上一主題