none
VB 如何 新建帳號時 自動產生一個新資料庫 後續 新增修改資料庫資料如何處理 ?? RRS feed

  • 問題

  • 專題大部分的的架構已經完成了  但目前遇到一個問題

    小弟寫的是一個 單機版記帳本

    為了避免同一台電腦使用者使用不同帳號看到別人的資料

    目前想的方法是  每當一個新使用者增加時  自動產生一個相對應的資料庫

    但我不知道我的空白資料庫要放在哪裡   之後要怎麼拷貝

    再來是  如何針對每一個使用者 開啟相對應的資料庫

    找了好久的資料  但都沒有答案    上來跟各位高手求救  >_< ...



    2010年1月23日 上午 06:13

解答

  • Access是檔案型資料庫
    如果要用程式產生一個新的,我想應該要用File.Copy()

    先Copy出一份Access,然後再把裡面的資料清空
    新的檔案就用使用者NT帳號命名

    但抓資料的時候要依使用者帳號動態產生連線字串就是了
    • 已標示為解答 Rhinn 2010年1月25日 下午 12:58
    2010年1月23日 上午 07:38
  • Access是檔案型資料庫
    如果要用程式產生一個新的,我想應該要用File.Copy()

    先Copy出一份Access,然後再把裡面的資料清空
    新的檔案就用使用者NT帳號命名

    但抓資料的時候要依使用者帳號動態產生連線字串就是了
    剛剛試做了一下是成功了

    但如果要避免 新增另一個新帳戶時 已經存在同樣的帳號  可以如何處理 ?_?


    今天想到一個辦法
    用兩次  try catch

    第一次 try  抓帳號  來找 字串長度   成功  後
    第二次 try  就會 到資料庫 寫入帳號  但 因為裡面已經有帳號就跳出msgbox 告知已經有帳號了 請選其他帳號

    第一次 try 抓帳號  抓字串長度  失敗 拷貝一個新資料庫取名與帳號相同  
    第二次 try 寫入帳號密碼資料  寫入資料庫

    以下是程式碼  歡迎大家 指教 ^__^





     Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
            Dim account As String = Txt_account.Text + ".mdb"
            Try
                FileLen(account)
            Catch ex As Exception
                FileCopy("contacts.mdb", account)
            End Try

            Dim connStr As String = "Provider=Microsoft.Jet.OLEDB.4.0; Data source=" + account
            Dim Insertcmd As String = "Insert into Account(id,psd) values(@id,@psd)"


            Dim conn As OleDbConnection = New OleDbConnection(connStr)
            Dim cmd As OleDbCommand

            conn.Open()

            cmd = New OleDbCommand(Insertcmd, conn)
            cmd.Parameters.Add(New OleDbParameter("@id", OleDbType.Char))
            cmd.Parameters.Add(New OleDbParameter("@psd", OleDbType.Char))
            cmd.Parameters("@id").Value = Txt_account.Text
            cmd.Parameters("@psd").Value = Txt_password.Text


            Try
                cmd.ExecuteNonQuery()
                MsgBox("新增成功")
            Catch ex As Exception
                MsgBox("已有此帳號")
            End Try

            LoginForm1.txt_account.Text = Me.Txt_account.Text
            conn.Close()
        End Sub

    • 已標示為解答 Rhinn 2010年1月25日 下午 12:58
    2010年1月25日 下午 12:57

所有回覆

  • 你是用MS SQL Server嗎 ?
    請參閱MSDN文件庫
    [CREATE DATABASE (Transact-SQL) ]
    [CREATE TABLE (Transact-SQL) ]


    MSDN 文件庫很重要
    問題本身越具體, 越容易得到大家的回應
    回應幫助你的人是一種禮貌, 良好的禮貌有助於激發大家對你問題回應的熱情
    2010年1月23日 上午 06:31
    版主
  • 在資料表上多加個欄位用來判斷此筆記錄是哪一個使用者
    然後抓資料的時候就依登入帳號去抓資料

    這樣應該會比較簡單一點
    2010年1月23日 上午 06:53
  • 你是用MS SQL Server嗎 ?
    請參閱MSDN文件庫
    [CREATE DATABASE (Transact-SQL) ]
    [CREATE TABLE (Transact-SQL) ]


    MSDN 文件庫很重要
    問題本身越具體, 越容易得到大家的回應
    回應幫助你的人是一種禮貌, 良好的禮貌有助於激發大家對你問題回應的熱情
    ^^!!  只是用 Access 的資料庫......沒用那麼強大的資料庫
    2010年1月23日 上午 07:22
  • 在資料表上多加個欄位用來判斷此筆記錄是哪一個使用者
    然後抓資料的時候就依登入帳號去抓資料

    這樣應該會比較簡單一點
    在登入後來有很多須要用 where 及 join 資料庫,為了提升效能  所以沒採這樣的方式 ^^!!
    2010年1月23日 上午 07:22
  • Access是檔案型資料庫
    如果要用程式產生一個新的,我想應該要用File.Copy()

    先Copy出一份Access,然後再把裡面的資料清空
    新的檔案就用使用者NT帳號命名

    但抓資料的時候要依使用者帳號動態產生連線字串就是了
    • 已標示為解答 Rhinn 2010年1月25日 下午 12:58
    2010年1月23日 上午 07:38
  • 可以先做一個空白的資料檔案當來源, 每次要產生就從這邊複製一個新的更名

    MSDN 文件庫很重要
    問題本身越具體, 越容易得到大家的回應
    回應幫助你的人是一種禮貌, 良好的禮貌有助於激發大家對你問題回應的熱情
    2010年1月23日 上午 07:39
    版主
  • Access是檔案型資料庫
    如果要用程式產生一個新的,我想應該要用File.Copy()

    先Copy出一份Access,然後再把裡面的資料清空
    新的檔案就用使用者NT帳號命名

    但抓資料的時候要依使用者帳號動態產生連線字串就是了
    剛剛試做了一下是成功了

    但如果要避免 新增另一個新帳戶時 已經存在同樣的帳號  可以如何處理 ?_?


    2010年1月23日 上午 07:55
  • 要有帳號資料表,查詢沒重複,才能新增帳號和資料庫檔...
    2010年1月23日 上午 08:14
  • 依照我的經驗,應該是輸入帳號密碼登入後先檢查對應的資料庫,
    如果存在就連接現有資料庫,不存在就新增一個新的資料庫,
    應該不會有新增重複帳號的問題
    2010年1月23日 上午 08:48
  • Access是檔案型資料庫
    如果要用程式產生一個新的,我想應該要用File.Copy()

    先Copy出一份Access,然後再把裡面的資料清空
    新的檔案就用使用者NT帳號命名

    但抓資料的時候要依使用者帳號動態產生連線字串就是了
    剛剛試做了一下是成功了

    但如果要避免 新增另一個新帳戶時 已經存在同樣的帳號  可以如何處理 ?_?


    今天想到一個辦法
    用兩次  try catch

    第一次 try  抓帳號  來找 字串長度   成功  後
    第二次 try  就會 到資料庫 寫入帳號  但 因為裡面已經有帳號就跳出msgbox 告知已經有帳號了 請選其他帳號

    第一次 try 抓帳號  抓字串長度  失敗 拷貝一個新資料庫取名與帳號相同  
    第二次 try 寫入帳號密碼資料  寫入資料庫

    以下是程式碼  歡迎大家 指教 ^__^





     Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
            Dim account As String = Txt_account.Text + ".mdb"
            Try
                FileLen(account)
            Catch ex As Exception
                FileCopy("contacts.mdb", account)
            End Try

            Dim connStr As String = "Provider=Microsoft.Jet.OLEDB.4.0; Data source=" + account
            Dim Insertcmd As String = "Insert into Account(id,psd) values(@id,@psd)"


            Dim conn As OleDbConnection = New OleDbConnection(connStr)
            Dim cmd As OleDbCommand

            conn.Open()

            cmd = New OleDbCommand(Insertcmd, conn)
            cmd.Parameters.Add(New OleDbParameter("@id", OleDbType.Char))
            cmd.Parameters.Add(New OleDbParameter("@psd", OleDbType.Char))
            cmd.Parameters("@id").Value = Txt_account.Text
            cmd.Parameters("@psd").Value = Txt_password.Text


            Try
                cmd.ExecuteNonQuery()
                MsgBox("新增成功")
            Catch ex As Exception
                MsgBox("已有此帳號")
            End Try

            LoginForm1.txt_account.Text = Me.Txt_account.Text
            conn.Close()
        End Sub

    • 已標示為解答 Rhinn 2010年1月25日 下午 12:58
    2010年1月25日 下午 12:57
  • VBNET / VB6 都可以用,這是 VBNET 的。

     Public Function CreateAccessDatabase(ByVal dBaseFile As String)
      Dim cat As Object = CreateObject("ADOX.Catalog")
      Dim strProvider As String = "Provider=Microsoft.Jet.OLEDB.4.0; " & "Data Source=" & dBaseFile & "; "
      cat.Create(strProvider)
      cat = Nothing
     End Function

    論壇是網友平等互助 保證解答請至 微軟技術支援服務
    提問時,錯誤情境描述與錯誤訊息很重要,情境描述包含你做了什麼,預期的結果與實際發生的結果。一個最爛的問法範例:「我的電腦電腦怎麼不能開機?」誰知道你家是不是沒電還是你根本找不到電源鈕。
    2010年1月25日 下午 04:23
  • VBNET / VB6 都可以用,這是 VBNET 的。

     Public Function CreateAccessDatabase(ByVal dBaseFile As String)
      Dim cat As Object = CreateObject("ADOX.Catalog")
      Dim strProvider As String = "Provider=Microsoft.Jet.OLEDB.4.0; " & "Data Source=" & dBaseFile & "; "
      cat.Create(strProvider)
      cat = Nothing
     End Function

    論壇是網友平等互助 保證解答請至 微軟技術支援服務
    提問時,錯誤情境描述與錯誤訊息很重要,情境描述包含你做了什麼,預期的結果與實際發生的結果。一個最爛的問法範例:「我的電腦電腦怎麼不能開機?」誰知道你家是不是沒電還是你根本找不到電源鈕。
    恕小弟不材

    不知道怎麼用  @_@  可以簡單說明一下嗎 ??
    2010年1月26日 上午 05:32
  • VB.NET - Create new MS Access Database using ADOX

    產生MDB檔和資料表的方式,參考以上網址的範例...
    2010年1月26日 上午 05:47
  • VB.NET - Create new MS Access Database using ADOX

    產生MDB檔和資料表的方式,參考以上網址的範例...

    感謝分享這篇文章   還蠻實用的

    可是只需要 copy的功能      這篇太強大了............. ^^!!

    研究了好久    .....底子太差了  >_<
    2010年1月26日 上午 11:28