0

Visual Basic for Applications を初めて使用します。現在のプログラムにログイン システムがあります。以下を読むとシステムが理解できます。次のようなテーブルを持つ Access データベースがあります。

Name : Cookies
----------------------------
ID     |   Nme  |    Val   | 
----------------------------

フォームを閉じると、テーブルがクリアされ、その内容がすべて削除されます。これで、ユーザーがサインインすると、行が追加されます:-

----------------------------
(id)   | "user" | username |
----------------------------

ここで、ユーザーは自分の ID とパスワードを index.vb の形式で入力します。アクセス データベースに行を追加するコマンドも index.vb ファイルにあります。行が追加されると、index.vb ファイルが非表示になり、userpage.vb ファイルが表示されます。ここで、ユーザーがログインすると、(アクセス ファイルを手動で更新することにより) アクセス ファイルに行が適切に追加され、ウィンドウが閉じられるとテーブル内のすべてが適切に削除されることがわかりました。したがって、行の挿入と削除には問題はありません。したがって、明らかに、問題は表示部分にあります。ユーザー名を表示するための私のコードは次のとおりです(コードはuserpage.vbファイルにあります):-

Dim Username As String = ""
Dim Conn As New OleDb.OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\Software\db.accdb")
Conn.Open()

Dim Cmd As New OleDb.OleDbCommand("Select Val From Cookies Where Nme='user'", Conn)
Dim Reader = Cmd.ExecuteReader
Do While Reader.Read
    Username = Reader.Item("Val")
Loop
Label1.Text = "Welcome " & Username
Conn.Close()

行が追加された場合でも、表示される出力は「ようこそ」であり、ユーザー名は「」です。さて、これは、データベースに問題が追加されるのと同じ詳細を持つ行をアクセス データベースに手動で追加すると、プログラムが正常に動作することを実験することによってもわかりました。もちろん、どんな助けでも大歓迎です。この長い投稿を読んでくれてありがとう。

更新 1 (@Dimple の提案による) 挿入用の私のコードは次のとおりです (このコードは index.vb ページにあります):-

    Dim usernameinput As String = TextBox1.Text
    Dim Cmmd As New OleDb.OleDbCommand()
    Cmmd.Connection = Conn

    Cmmd.CommandText = "INSERT INTO Cookies (Nme, Val)  Values('user','" & usernameinput & "')"
    Cmmd.ExecuteNonQuery()

    Dim Userpage As New User_page
    Me.Hide()

    Userpage.Show()
4

2 に答える 2

1

Accessファイル(データベース)を手動で更新した後、Accessが行を表示するとおっしゃいました。挿入後にデータベースを Requery() する必要がある場合があります。Accessで作業中にこの問題が発生しました。

Form1

    Public Class Form1

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        Dim Conn As New OleDb.OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=D:\db.accdb")

        Conn.Open()
        Dim usernameinput As String = "TextBox3.Text"
        Dim Cmmd As New OleDb.OleDbCommand()
        Cmmd.Connection = Conn

        Cmmd.CommandText = "INSERT INTO Cookies (Nme, Val)  Values('user','" & usernameinput & "')"
        Cmmd.ExecuteNonQuery()
        Conn.Close()
        Me.Hide()
        Form2.Show()
    End Sub
End Class


Form2

    Public Class Form1

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        Dim Conn As New OleDb.OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=D:\db.accdb")

        Conn.Open()
        Dim usernameinput As String = "TextBox3.Text"
        Dim Cmmd As New OleDb.OleDbCommand()
        Cmmd.Connection = Conn

        Cmmd.CommandText = "INSERT INTO Cookies (Nme, Val)  Values('user','" & usernameinput & "')"
        Cmmd.ExecuteNonQuery()
        Conn.Close()
        Me.Hide()
        Form2.Show()
    End Sub
End Class

名前を付けた変数も変更しませんでした。msgbox を使用してフォームの設計を回避しました。

于 2013-08-29T10:02:24.693 に答える
0

お兄さんが使う代わりに、

Do While Reader.Read
    Username = Reader.Item("Val")
Loop

試す

Do While Reader.Read = True
    Username = Reader.Item(0)
Loop

それがあなたのために働くかどうか私に知らせてください。

于 2013-08-30T05:59:37.313 に答える