2012-08-24 2 views
2

같은 시간에 2 tabels입니다 필드를 업데이트 어떻게나는 액세스 DB에 tabels입니다에있는

사용자

  • 사용자 ID
  • 이름
  • useractiv

사용자 정보

    내가 다음 몇 가지 ASP에서 정보를 얻을

  • userinfoid
  • userrealname
  • userphone : 업데이트 핸들러에 텍스트 필드, 내가 아니라 2

    에 대해 하나 개의 테이블에 대해이 작업을 수행하는 방법을 알고

    는 일반적으로 내가 사용이

    Dim strSQL As String = "" 
        strSQL = "" & _ 
        "UPDATE Userinfo " & _ 
        "SET userrealname = @therealname, userphone = @theuserphone " & _ 
        "WHERE userinfoid =" & Session("theeditid") & "" 
    
        Using connection As OleDbConnection = New OleDbConnection(ConfigurationManager.ConnectionStrings("ConnStr").ConnectionString) 
         Using updatecmd As OleDbCommand = New OleDbCommand(strSQL, connection) 
          updatecmd.CommandType = CommandType.Text 
          updatecmd.Parameters.AddWithValue("@therealname", OleDbType.VarChar).Value = TextBox1.Text 
          updatecmd.Parameters.AddWithValue("@theuserphone", OleDbType.VarChar).Value = CKEditor1.Text 
          Try 
           updatecmd.Connection.Open() 
           Dim i As Integer = CInt(updatecmd.ExecuteNonQuery()) 
           If i = 0 Then 
            Session("editsucces") = "NoMatch" 'no rows were updated because none matched the criteria 
           End If 
          Catch ex As Exception 
           Session("editsucces") = "DBerror" 'Something went wrong, such as the database was unavailable 
          End Try 
         End Using 
        End Using 
    

    그래서 제 질문은 지금, 내가 사용자 tabel에서 필드를 추가 할 수있는 방법!? user.userid는 userinfo.userinfoid와 동일한 번호입니다.

    EDIT ........ EDIT ........ EDIT ....... EDIT ......... EDIT ........ .EDIT .......... 편집

    그래서이 코드는 괜찮아요, 또는 내가 recoment 내가 그 중 일부를 변경합니까!?

    Dim strSQL As String = "" 
        strSQL = "" & _ 
        "UPDATE Users INNER JOIN Userinfo ON Users.UserID = Userinfo.UserID " & _ 
        "SET Users.Username = [@uname], Users.Password = [@upass], Users.UserActiv = [@uactiv], Userinfo.UserRealName = [@urname], Userinfo.UserEmail1 = [@umail], Userinfo.UserDOB = [@udob], Userinfo.UserPhone1 = [@uphone1], Userinfo.UserPhone2 = [@uphone2], Userinfo.UserPhone3 = [@uphone3], Userinfo.UserYear = [@uyear], Userinfo.UserSick = [@usick] " & _ 
        "WHERE Users.UserID = [@uid]" 
    
        Using connection As OleDbConnection = New OleDbConnection(ConfigurationManager.ConnectionStrings("ConnStr").ConnectionString) 
         Using updatecmd As OleDbCommand = New OleDbCommand(strSQL, connection) 
          updatecmd.CommandType = CommandType.Text 
          updatecmd.Parameters.AddWithValue("@uname", OleDbType.VarChar).Value = userinput1.Text 
          updatecmd.Parameters.AddWithValue("@upass", OleDbType.VarChar).Value = userinput2.Text 
          updatecmd.Parameters.AddWithValue("@uactiv", OleDbType.VarChar).Value = "Y" 
          updatecmd.Parameters.AddWithValue("@urname", OleDbType.VarChar).Value = userinput3.Text 
          updatecmd.Parameters.AddWithValue("@umail", OleDbType.VarChar).Value = userinput4.Text 
          updatecmd.Parameters.AddWithValue("@udob", OleDbType.VarChar).Value = userinput5.Text 
          updatecmd.Parameters.AddWithValue("@uphone1", OleDbType.VarChar).Value = userinput6.Text 
          updatecmd.Parameters.AddWithValue("@uphone2", OleDbType.VarChar).Value = userinput7.Text 
          updatecmd.Parameters.AddWithValue("@uphone3", OleDbType.VarChar).Value = userinput8.Text 
          updatecmd.Parameters.AddWithValue("@uyear", OleDbType.VarChar).Value = userinput9.Text 
          updatecmd.Parameters.AddWithValue("@usick", OleDbType.VarChar).Value = usertextarea.Text 
          Try 
           updatecmd.Connection.Open() 
           Dim i As Integer = CInt(updatecmd.ExecuteNonQuery()) 
           If i = 0 Then 
            Session("editsucces") = "NoMatch" 'no rows were updated because none matched the criteria 
           End If 
          Catch ex As Exception 
           Session("editsucces") = "DBerror" 'Something went wrong, such as the database was unavailable 
          End Try 
         End Using 
        End Using 
    
        Response.Redirect("default.aspx", False) 
    
  • 답변

    1

    조인을 만들어 두 테이블을 모두 업데이트 할 수 있어야합니다. 예 :

    sSQL = "UPDATE [User] INNER JOIN userinfo " _ 
    & "ON User.UserID = userinfo.userinfoid SET " _ 
    & "[User].UserName = [uname], userinfo.userrealname = [urname] " _ 
    & "WHERE [User].UserID = [uid]" 
    
    cmd.ActiveConnection = cn 
    cmd.CommandText = sSQL 
    cmd.CommandType = adCmdText 
    cmd.Parameters.Append cmd.CreateParameter(_ 
        "uname", adVarChar, adParamInput, 50, "user name") 
    cmd.Parameters.Append cmd.CreateParameter(_ 
        "urname", adVarChar, adParamInput, 50, "user real name") 
    cmd.Parameters.Append cmd.CreateParameter(_ 
        "uid", adInteger, adParamInput, , 2) 
    cmd.Execute 
    
    +0

    안녕 WHERE userinfoid = "& 세션 ("theeditid ")" "내가 아마 3 user.userid 그게 전부가 필요하다고 다음이 알 수 있도록!? –

    +0

    끝에. 내가 메모를 추가합니다. – Fionnuala

    +0

    안녕하세요, 다시 EDIT 라인 아래의 코드는 OK입니다.? 또는 ..... –

    1

    이해되는 것으로부터, 나는 사용자와 userinfo 테이블 사이에 일대일 대응이 있다고 생각합니다. (user.userid가 userinfo.userinfoid와 동일하고 각 테이블의 기본 키인 것처럼 보임). 따라서 두 테이블을 단일 테이블로 병합해야합니다.

    이제 두 테이블의 열을 업데이트하려면 각 테이블마다 두 개의 업데이트 문을 실행해야합니다. 원 자성을 보장하려면 단일 트랜잭션에서 두 개의 갱신 명령문을 실행하십시오. 이 말이 맞습니까? 아니면 뭔가 빠져 있습니까?

    1

    트랜잭션을 사용해야합니다. 기본적으로 데이터베이스에서 많은 변경 작업을 수행하는 것이 일반적인 방법입니다. 귀하의 경우에 대한 좋은 예 내가 사용합니까 http://www.dreamincode.net/forums/topic/186402-transaction-on-access-database-adonet/

    Using con As New OleDbConnection(ConfigurationManager.ConnectionStrings("ConnStr").ConnectionString) 
        Dim cmd As New OleDbCommand("", con) 
        Dim tra As OleDbTransaction = Nothing 
        Dim ct1 As String = "" 
        Dim ct2 As String = "" 
    
        Try 
        con.Open() 
        tra = con.BeginTransaction 
        cmd.Transaction = tra 
    
        strSQL = "" & _ 
        "UPDATE User " & _ 
        ' set fields needed to update in table USER 
        "WHERE userid =" & Session("theeditid") & "" 
        cmd.CommandText = strSQL 
        ' set parameters for user update 
        cmd.ExecuteNonQuery() 
    
        strSQL = "" & _ 
        "UPDATE Userinfo " & _ 
        "SET userrealname = @therealname, userphone = @theuserphone " & _ 
        "WHERE userinfoid =" & Session("theeditid") & "" 
        cmd.CommandText = strSQL 
        cmd.Parameters.Clear() 
    
        ' set parameters for userinfo update 
        cmd.ExecuteNonQuery() 
    
        ' Complete transacton 
        tra.Commit() 
    
        ' i think here should be closing cmd 
    
        Catch ex As Exception 
         MsgBox("The data could not be saved.", MsgBoxStyle.Critical, "Error") 
         Try : tra.Rollback() : Catch : End Try 
        End Try 
    End Using 
    
    관련 문제