none
程式開發時,預設圖檔及Access資料庫的位置,要放在哪裡?才能在Installer時一起封裝。 RRS feed

  • 問題

  • 請問各位學長:

    我現在遇到一個困擾,當我程式開發完成並且Installer之後,去RUN程式時才發現資料庫及一些要預載的圖檔都發生錯誤,想請問各位學長,你們在程式中都如何連接Access以及要預載的圖檔(我不是說字串,而是擺放位置)?

     

    我的Access資料庫連結語法如下:

    Provider=Microsoft.Jet.OLEDB.4.0;Data Source=\MyDataBase.mdb,資料庫檔案擺放在 Debug\bin\下面。

    圖檔也是擺放在 Debug\images\下面。

    可是我Installer之後去RUN,卻出現..應用程式錯誤...無效的參數之類的,怎辦?

    如果我將資料庫及圖檔路徑都改成 C:\...或是D:\...,那就都沒問題;但是...總不能叫客戶自己建立複製檔案吧,要如何的寫法才能將資料庫及預設圖檔一起完整Installer封裝。請指導。

    2007年5月22日 上午 09:27

解答

  • Hi,

    StartupPath指的就是執行檔的位置,所以你的相關檔案要跟執行檔在同一個目錄下;Debug時就是在bin\Debug\裡面;

    其實在專案中你可以將相關檔案加進來(當然也可以建立個別目錄來存放各類檔案),之後在屬性"複製選項"的地方設定

    成永遠複製,這麼一來,每一次debug的時候IDE會幫你重新複製一份新的檔案到bin\debug目錄中。

    附帶一提,mdb檔也是會每次debug就重新複製一份新的到bin\debug資料夾中,所以程式中對資料庫的變更會是

    bin\debug\xxxx.mdb這個檔案,這部份要注意一下。

    2007年5月22日 上午 10:45
    版主
  • Hi,

    我簡單的錄了一下我的畫面,參考看看吧

    http://bauann.myweb.hinet.net/DEV/test.htm

    另外,圖檔的部份也可以加到資源檔裡面,之後利用My命名空間抓圖檔來用也是很方便~

     

    補充一下,你的安裝部署專案裡面在"應用程式安裝目錄"裡面也是要建立相關的資料夾、加入相關的檔案,這樣安裝完成才會將相關檔案安裝到目標電腦上。

    2007年5月22日 下午 03:59
    版主
  • 我自己會在專案內加個 ini 檔,由 ini 檔指定資料庫格式、位置,以便將來若有需求,可以抽換成不同資料庫。

     

    特別針對於原先就是既有專案在跑的,會先複製原先專案的 Access 檔測試,指向測試位置,等到完成測試後,就直接指向原先的資料庫。或是 SQL Server 專案我一開始雛型會先用 Access 來做開發測試。

     

    獨立專案通常會放在子目錄下,不過我還是習慣另外開個 ini 檔處理。

     

    資料庫或資料檔則不會特別把它加入方案總管納管。

    2007年7月13日 上午 01:37
    版主
  • 我自己不把 Access 加到專案內,而是在封裝專案才指定路徑,特別是封裝時,可能要用的是空白資料庫,跟開發測試玩得亂七八糟的資料庫要有所區隔。

     

    此外我會把編譯路徑 bin\Debug 改成 .\ ,讓執行檔直接在專案根路徑產生,要做成 Release 時再直接重新編譯。

     

    2008年1月3日 下午 04:13
    版主

所有回覆

  • Hi,

    通常這類檔案我自己是都用 application.StartupPath & "\我的檔案.副檔名",去處理,你參考看看。

    2007年5月22日 上午 10:16
    版主
  • 謝謝指教!

    這一段 ....application.StartupPath & "\我的檔案.副檔名",是用在圖檔還是資料庫?

    在Debug的時候,圖檔應該放在哪一個資料夾ㄋ?

    2007年5月22日 上午 10:30
  • Hi,

    StartupPath指的就是執行檔的位置,所以你的相關檔案要跟執行檔在同一個目錄下;Debug時就是在bin\Debug\裡面;

    其實在專案中你可以將相關檔案加進來(當然也可以建立個別目錄來存放各類檔案),之後在屬性"複製選項"的地方設定

    成永遠複製,這麼一來,每一次debug的時候IDE會幫你重新複製一份新的檔案到bin\debug目錄中。

    附帶一提,mdb檔也是會每次debug就重新複製一份新的到bin\debug資料夾中,所以程式中對資料庫的變更會是

    bin\debug\xxxx.mdb這個檔案,這部份要注意一下。

    2007年5月22日 上午 10:45
    版主
  • 那嚜說來......

    在Debug時,我將資料庫檔案MyDb.mdb放在 bin\Debug下面,然後資料庫字串這樣寫對ㄇ?

    Provider=Microsoft.Jet.OLEDB.4.0;Data Source=MyDb.mdb

     

    至於圖檔的部份,我將所有要預載的圖檔,放在 bin\Debug\images\下面,然後語法這樣下對ㄇ?

    Dim img As New Bitmap(Application.StartupPath & "\images\DefaultPhoto.jpg", False)

    Me.PictureBox.image = img

     

    如果上述都正確的話,當我要封裝的時候,我在 bin\Release\下面卻都看不到資料庫檔案及要預載的圖檔ㄋ....。

    2007年5月22日 上午 11:32
  • Hi,

    我簡單的錄了一下我的畫面,參考看看吧

    http://bauann.myweb.hinet.net/DEV/test.htm

    另外,圖檔的部份也可以加到資源檔裡面,之後利用My命名空間抓圖檔來用也是很方便~

     

    補充一下,你的安裝部署專案裡面在"應用程式安裝目錄"裡面也是要建立相關的資料夾、加入相關的檔案,這樣安裝完成才會將相關檔案安裝到目標電腦上。

    2007年5月22日 下午 03:59
    版主
  • 哈哈...猴腮雷ㄚ,已經可以用了,感謝學長的指導啦。

    2007年5月23日 上午 02:02
  • 各位學長好:

    這個問題我先前有貼文發問過,也有學長指教,但是似乎沒有說到重心。

    我的問題是這樣:

    我將Asc.mdb資料庫放到方案總管中,在Debug Run的時候,當我在程式碼中使用

    Me.HelpStateTableAdapter.Update(Me.DataSet1.HelpState)

    的時候,資料庫內的檔案是有更新,但是離開Debug Run之後,然後再次進入Debug Run,發現剛剛UpDate的記錄資料全部都回來了;我追蹤發現當我UpDate的時候DataSet內的資料並沒有同步UpDate,所以再次進入Debug Run的時候,就把資料回灌給Asc.mdb。

    這個問題好像沒人發問,大家都沒有類似的經驗嗎?還是都不用Access?

    請學長指教。

    2007年7月12日 上午 03:01
  • 我並沒有把資料庫加到方案總管內,執行時沒啥特別的,塞到方案總管也只有 link 進去,理論上應該也沒有特別的吧,至少我用 Access 更新了就是更新了。

     

    你有使用 xxxCommandBuilder 或 UpdateCommand 嗎?如果沒有,你更新的應該只是 DataSet 的內容,你可以試試用 Access 開啟你的資料庫,看看是否真的更新了,還是只是 DataSet 更新,造成介面上看起來更新了。

    2007年7月12日 上午 10:08
    版主
  • 請問學長:

    那麼您在開發階段的時候,如果mdb檔不放在專案內,那都是放在什麼位置?讓我參考一下

    2007年7月13日 上午 12:57
  • 我自己會在專案內加個 ini 檔,由 ini 檔指定資料庫格式、位置,以便將來若有需求,可以抽換成不同資料庫。

     

    特別針對於原先就是既有專案在跑的,會先複製原先專案的 Access 檔測試,指向測試位置,等到完成測試後,就直接指向原先的資料庫。或是 SQL Server 專案我一開始雛型會先用 Access 來做開發測試。

     

    獨立專案通常會放在子目錄下,不過我還是習慣另外開個 ini 檔處理。

     

    資料庫或資料檔則不會特別把它加入方案總管納管。

    2007年7月13日 上午 01:37
    版主
  • 了解

    這對我來說是一個新的做法,也有人叫我放到Bin\Debug,我看我要摸索一下,謝謝您。

    2007年7月13日 上午 02:11
  • ...

    應該說這才是傳統的方法。

     

    我想 Access 加入方案總管納管,應該是可以用物件名存取或是針對封裝精靈而存在吧?傳統方法在封裝時,會手動加入必須伴隨專案散佈的資料檔或資料庫。

     

    我傳統方法用習慣了,也有慣用程式碼後,就懶得改了。

    2007年7月13日 上午 02:15
    版主
  • 請教各位先進:
    下面這個問題不是程式或設計上的問題,而是VS.NET 2005介面的存取使用問題。
    ......
    我把Access資料庫檔案加入專案內(根目錄下),名稱為ACS.mdb,並且把它的屬性[複製到輸出目錄]設定為永遠複製;專案下同時產生一個DataSet.xsd。
    然後,我在Form上加入DataBindingSource,並且新增一個DataGridView,利用SmartTag讓DataGridView可以新增資料。
    問題來了....
    當我要顯示剛剛新增的記錄時,我在程式碼中新加入這一行指令
    Me.MyTableAdapter.Fill(Me.PetmisDS.DataSet)
    結果內容是空的,我追查ACS.mdb的結果發現
    剛剛新增的資料都存進\bin\Debug\ACS.mdb內,而不是存入根目錄下的ACS.mdb;而根目錄下的ACS.mdb檔案屬性又有設定永遠複製,所以根目錄下的ACS.mdb(空記錄)會一直覆蓋\bin\Debug\ACS.mdb檔案,所以我怎嚜存都看不到資料(被空記錄的檔案覆蓋)
    如果,我將根目錄下的ACS.mdb移出專案,那我的DataSet.xsd就會出現錯誤的訊息。

    我想應該有很多人都會搭配Accsess資料庫,這個問題應該會遇到吧,不知道大家這部份都是如何處理。
    請指教,謝謝!

    2008年1月3日 上午 10:31
  • Dear Sir

    那如果設定成"不要複製",手動copy一份到bin\Debug資料夾下面,之後測試你的動作;這樣的結果看看是不是你要的

     

    2008年1月3日 下午 12:04
    版主
  • 我自己不把 Access 加到專案內,而是在封裝專案才指定路徑,特別是封裝時,可能要用的是空白資料庫,跟開發測試玩得亂七八糟的資料庫要有所區隔。

     

    此外我會把編譯路徑 bin\Debug 改成 .\ ,讓執行檔直接在專案根路徑產生,要做成 Release 時再直接重新編譯。

     

    2008年1月3日 下午 04:13
    版主
  • 回Bauann:

    現在我只要存檔就一定會存入bin\Debug\下的Access檔,所以我必須再手動把Access檔Copy到根目錄下才能同步。

     

    回璉大:

    若是不把Access加到專案內,那嚜就無法在專案中產生DataSet.xsd,不是嗎?

    2008年1月4日 上午 12:48
  • HI,

     

    請問您的DataSet.xsd是如何產生的?

     

    tihs

    2008年1月4日 上午 02:45
  • 解決了!解決了!

    半年來的心頭大石解決了,我用璉璉大的方式,更改Debug編譯時的存放路徑到根目錄下,這樣Debug建置時資料庫都會存到同一個檔案內,哈哈哈!老問題退休了。

     

    學貫有出一本書「Visual Basic 2005程式設計」,作者也是遇到和我一樣的問題,我想她應該多來站上看看才對,才不會誤了一些新手。

     

    感謝有回文的諸位大大指點迷津!甘溫哪~~~

    2008年1月4日 上午 05:12