tagCANDY CGI VBレスキュー(花ちゃん) の Visual Basic 2010 用 掲示板(VB.NET 掲示板) [ツリー表示へ]   [Home]
一括表示(VB.NET VB2005)
タイトルVBからAccessのデータベースの一部を更新するには?
記事No2571
投稿日: 2005/11/14(Mon) 15:33
投稿者ルピカ
[OSのVer]:WindowsXP    [VBのVer]:WebMatrixのVB.NET
WebMatrixを使い始めて2週間ほどです。
ただいまフォーム認証を製作中です。
Accessでユーザーの情報の入ったデータベースを作成し、最後にcheckという名前のフィールドを作成しました。
checkには、ログイン時に1を、ログオフ時に0を入力し、cookieと同じような作業をさせたいと思っています。
しかし、コードウィザードのUPDATE Data Methodで『更新するカラム』にcheckを、『where文』に『ID=@ID』としてAddCheckという関数をつくり、Btn_Clickの中にAddCheck(UserID.Text,"入力値(1又は0)")と書いても値は入力されません。
where文に何も入力しなければ値は入力されますが、当然のことすべてのユーザーのcheckに値が入ってしまいます。
指定したユーザーのcheckのみ更新するにはどのようにすれば宜しいのでしょうか?
ご教授お願いいたします。  

[ツリー表示へ]
タイトルRe: VBからAccessのデータベースの一部を更新するには?
記事No2582
投稿日: 2005/11/14(Mon) 21:20
投稿者なおこ(・∀・)
お世話になります。

テーブルのレイアウトは、フィールドにID(文字列?)とCheck(数値?)が存在するのですね?
あと、UPDATE Data Method で自動生成されたコード
は、どんな感じになっていますか?

AddCheck というのは
UPDATE Data Method で自動生成されたコード
のことでしょうか。

> [OSのVer]:WindowsXP    [VBのVer]:WebMatrixのVB.NET
> WebMatrixを使い始めて2週間ほどです。
> ただいまフォーム認証を製作中です。
> Accessでユーザーの情報の入ったデータベースを作成し、最後にcheckという名前のフィールドを作成
しました。
> checkには、ログイン時に1を、ログオフ時に0を入力し、cookieと同じような作業をさせたいと思って
います。
> しかし、コードウィザードのUPDATE Data Methodで『更新するカラム』にcheckを、『where文』に
『ID=@ID』としてAddCheckという関数をつくり、Btn_Clickの中にAddCheck(UserID.Text,"入力値(1又は
0)")と書いても値は入力されません。
> where文に何も入力しなければ値は入力されますが、当然のことすべてのユーザーのcheckに値が入っ
てしまいます。
> 指定したユーザーのcheckのみ更新するにはどのようにすれば宜しいのでしょうか?
> ご教授お願いいたします。  

[ツリー表示へ]
タイトルRe^2: VBからAccessのデータベースの一部を更新するには?
記事No2588
投稿日: 2005/11/15(Tue) 09:21
投稿者ルピカ
なおこさん、お返事早速有難うございます。

> テーブルのレイアウトは、フィールドにID(文字列?)とCheck(数値?)が存在するのですね?

はい。あとは名前とパスワードとメールアドレスのフィールドも存在します。
IDは半角英数の文字列で、checkには0か1の数値を入力したいと思っています。


> AddCheck というのは
> UPDATE Data Method で自動生成されたコード
> のことでしょうか。

はい。AddCheckというのはUPDATE Data Methodで自動生成されたコードです。
コードは下記のようになっています。

----------------------------------------------------------------------------------------
Function AddCheck(ByVal iD As String, ByVal check As Integer) As Integer
        Dim connectionString As String = "Provider=Microsoft.Jet.OLEDB.4.0; Ole DB Services=-
4; Data Source=C:\Documents an"& _
"d Settings\st03\My Documents\Visual Studio Projects\WindowsApplication1\Users.md"& _
"b"
        Dim dbConnection As System.Data.IDbConnection = New System.Data.OleDb.OleDbConnection
(connectionString)

        Dim queryString As String = "UPDATE [Users] SET [Check]=@Check WHERE ([Users].[ID] =
@ID)"
        Dim dbCommand As System.Data.IDbCommand = New System.Data.OleDb.OleDbCommand
        dbCommand.CommandText = queryString
        dbCommand.Connection = dbConnection

        Dim dbParam_iD As System.Data.IDataParameter = New System.Data.OleDb.OleDbParameter
        dbParam_iD.ParameterName = "@ID"
        dbParam_iD.Value = iD
        dbParam_iD.DbType = System.Data.DbType.String
        dbCommand.Parameters.Add(dbParam_iD)
        Dim dbParam_check As System.Data.IDataParameter = New
System.Data.OleDb.OleDbParameter
        dbParam_check.ParameterName = "@Check"
        dbParam_check.Value = check
        dbParam_check.DbType = System.Data.DbType.Int32
        dbCommand.Parameters.Add(dbParam_check)

        Dim rowsAffected As Integer = 0
        dbConnection.Open
        Try
            rowsAffected = dbCommand.ExecuteNonQuery
        Finally
            dbConnection.Close
        End Try

        Return rowsAffected
    End Function

[ツリー表示へ]
タイトルRe^3: VBからAccessのデータベースの一部を更新するには?
記事No2592
投稿日: 2005/11/15(Tue) 10:48
投稿者なおこ(・∀・)
お世話になります。

こんな感じでいかがでしょう。
<%@ Page Language="VB" %>
<script runat="server">
  Sub Page_Load(sender As Object, e As EventArgs)
    ' ページを初期化するユーザー コードをここに挿入します。
    If Not IsPostBack Then
      'ID用テキストボックス
      Me.TextBox1.Text = ""
      'Password用テキストボックス
      Me.TextBox2.Text = ""
      'ログインボタン
      Me.Button1.Text = "ログイン"
      'メッセージ表示用
      Me.Label1.Text = ""
    End If
  End Sub
  
  Sub Button1_Click(sender As Object, e As EventArgs)
    If Me.AddCheck(1, Me.TextBox1.Text, Me.TextBox2.Text) > 0 Then
      Me.Label1.Text = "ログインしました"
    Else
      Me.Label1.Text = "該当ユーザーが見つかりませんでした"
    End If
  End Sub
  
  Private Function AddCheck(ByVal check As Integer, _
               ByVal id As String, _
               ByVal pass As String) As Integer
  
    Dim connectionString As String = "Provider=Microsoft.Jet.OLEDB.4.0;" & _
                     "Data Source=C:\test\db1.mdb"
    Dim oleConnection As System.Data.OleDb.OleDbConnection
    oleConnection = New System.Data.OleDb.OleDbConnection(connectionString)
  
    Dim updateCommand As System.Data.OleDb.OleDbCommand
    updateCommand = New System.Data.OleDb.OleDbCommand
    updateCommand.Connection = oleConnection
    updateCommand.CommandType = System.Data.CommandType.Text
    updateCommand.CommandText = "UPDATE Users SET Users.Check=@Check WHERE ID=@ID AND
Password=@Password;"
  
    Dim param_check As System.Data.OleDb.OleDbParameter
    param_check = New System.Data.OleDb.OleDbParameter
    param_check.OleDbType = System.Data.OleDb.OleDbType.Integer
    param_check.Value = check
    updateCommand.Parameters.Add(param_check)
  
    Dim param_id As System.Data.OleDb.OleDbParameter
    param_id = New System.Data.OleDb.OleDbParameter
    param_id.OleDbType = System.Data.OleDb.OleDbType.VarChar
    param_id.Value = id
    updateCommand.Parameters.Add(param_id)
  
    Dim param_pass As System.Data.OleDb.OleDbParameter
    param_pass = New System.Data.OleDb.OleDbParameter
    param_pass.OleDbType = System.Data.OleDb.OleDbType.VarChar
    param_pass.Value = pass
    updateCommand.Parameters.Add(param_pass)
  
    Dim rowsAffected As Integer = 0
    oleConnection.Open()
    Try
      rowsAffected = updateCommand.ExecuteNonQuery()
      Return rowsAffected
    Finally
      updateCommand.Dispose()
      oleConnection.Close()
    End Try
  End Function

</script>
<html>
<head>
</head>
<body>
  <form runat="server">
    <table>
      <tbody>
        <tr>
          <td>
            <asp:TextBox id="TextBox1" runat="server"></asp:TextBox>
          </td>
        </tr>
        <tr>
          <td>
            <asp:TextBox id="TextBox2" runat="server"></asp:TextBox>
          </td>
        </tr>
        <tr>
          <td>
            <asp:Button id="Button1" onclick="Button1_Click" runat="server"
Text="Button"></asp:Button>
          </td>
        </tr>
      </tbody>
      <tbody>
        <tr>
          <td>
            <asp:Label id="Label1" runat="server"
width="409px">Label</asp:Label></td>
        </tr>
      </tbody>
    </table>
  </form>
</body>
</html>

[ツリー表示へ]
タイトルRe^4: VBからAccessのデータベースの一部を更新するには?
記事No2593
投稿日: 2005/11/15(Tue) 11:15
投稿者ルピカ
わざわざ詳しいコードまで有難うございます。
このコードだとどうやら新しいユーザー登録になってしまうみたいです。既存のユーザー名で入力すると"値が重複している"とエラーが出てしまいました。
わざわざ書いてくださったのに申し訳ありません。
でも先ほどのコードを見て、やはり問題なのは作成した関数のAddCheckの方ではなく、それに値を入力するやり方なのだと思いました。
私は今、下記のようなやり方で値入力をしているのですが、どうやらうまく入力されていないみたいです。
------------------------------------------------------------------

GetUser   入力したIDが登録されていて、パスワードがあっているかを確認する関数です

-------------------------------------------------------------------
Private Sub LoginBtn_Click(Sender As Object, E As EventArgs)
        Dim userDS As New System.Data.DataSet
        userDS = GetUser(UserID.Text, UserPass.Text)

          If userDS.Tables(0).Rows.Count = 1 Then 'ID・パスワードが合っているか'
            AddCheck(UserID.Text,"1")  'あっていたらそのユーザーのチェックに1を入力(おそらくここの書き方が間違っているのだと自分では考えています)'
            Response.Redirect ("hhttp://yahoo.co.jp")
          Else
            Msg.Text = "ID・パスワードに誤りがあるか、まだユーザー登録されていません。登録は<a href='/NewUser.aspx'>こちら</a>からどうぞ。"
        End If

      End Sub

[ツリー表示へ]
タイトルRe^5: VBからAccessのデータベースの一部を更新するには?
記事No2594
投稿日: 2005/11/15(Tue) 11:54
投稿者なおこ(・∀・)
お世話になります。

> このコードだとどうやら新しいユーザー登録になってしまうみたいです。既存のユーザー名で入力す
ると"値が重複している"とエラーが出てしまいました。

いえ、私のコードのみで実験した場合は、そんなはずは無いです。
理由は、Insert 文はどこにも書いていません。

> Private Sub LoginBtn_Click(Sender As Object, E As EventArgs)
>         Dim userDS As New System.Data.DataSet
>         userDS = GetUser(UserID.Text, UserPass.Text)
>
>           If userDS.Tables(0).Rows.Count = 1 Then 'ID・パスワードが合っているか'
>             AddCheck(UserID.Text,"1")  'あっていたらそのユーザーのチェックに1を入力(おそ
らくここの書き方が間違っているのだと自分では考えています)'

AddCheck メソッドの第 2 引数は、Integerですよね?
何故、"1"を渡しているのでしょう?

>             Response.Redirect ("hhttp://yahoo.co.jp")
>           Else
>             Msg.Text = "ID・パスワードに誤りがあるか、まだユーザー登録されていません。登録
は<a href='/NewUser.aspx'>こちら</a>からどうぞ。"
>         End If
>
>       End Sub

[ツリー表示へ]
タイトルRe^6: VBからAccessのデータベースの一部を更新するには?
記事No2595
投稿日: 2005/11/15(Tue) 12:09
投稿者ルピカ
> いえ、私のコードのみで実験した場合は、そんなはずは無いです。
> 理由は、Insert 文はどこにも書いていません。
もう一度確認したところ、書いてくださったコードをこちらでうまく実行できなかったようです。実行
してみるとほかに作ったページが実行されてしまっていました。もう一度後で試してみます。

> AddCheck メソッドの第 2 引数は、Integerですよね?
> 何故、"1"を渡しているのでしょう?
初めは1で渡していたのですが入力されなかったのでためしに""を付けてみたのですがやはり結果は同じ
になってしまいました。

とりあえずもう一度載せてくださったコードを試してみて、結果を報告いたします。学校の関係上報告
できるのは明日になります。申し訳ありません。

[ツリー表示へ]
タイトルRe^7: VBからAccessのデータベースの一部を更新するには?
記事No2602
投稿日: 2005/11/16(Wed) 09:22
投稿者ルピカ
昨日は失礼いたしました。結果をご報告いたします。無事checkに1を入力することができました。
これからこのコードをよく勉強し、改良して自分の目的通りのフォームを作っていこうと思います。
本当に有難うございました。

[ツリー表示へ]