2017-02-01 4 views
0

背景: 私は、ユーザーがログインして製品テストのデータを入力するように求めるアプリケーションをVBで作成しています。SQLデータベースから入力します。ログインしたユーザーと一致し、データバインドされたフォームで表示します

問題: 私はSQLデータベースと会話し、その人が正しいユーザー名/パスワードを提供していることを確認するログインフォームを持っています。ユーザー名はメインフォームに渡されます。ここからは、ログインしたユーザーによって追加されたメインテーブルのレコードを記入できるようにしたいので、ユーザーは入力したレコードとのみ対話できます。

私はVBでかなり自信があり、SQLでクラスを取りましたが、正しい方法を見つけるためにこの問題を検索する方法はわかりません。私はtableadapters.fillと.getdataを見てきましたが、答えとは思われません。

ログインフォーム:

Imports System.Data 
Imports System.Data.SqlClient 

Public Class frmLogin 
    Dim userName As String 
    Dim extrainfo As String 


    Private Sub btnLogin_Click(sender As Object, e As EventArgs) Handles     btnLogin.Click 
     If ConnectToSQL() Then 

     Dim frm As New frmQuality(userName, extrainfo) 
     Me.Hide() 
     frm.Show() 
     Me.Close() 

    End If 



    End Sub 



Private Function ConnectToSQL() As Boolean 

    Dim con As New SqlConnection 
    Dim cmd As New SqlCommand 
    Dim dbPassword As String 
    Dim enteredPasswrd As String 
    ' Dim userName As String 

    Try 



     con.ConnectionString = "Data Source " 

     con.Open() 

     cmd.Connection = con 

     cmd.CommandText = " SELECT UserName, Password, extrainfo FROM users WHERE (UserName like '" & "%" & txtUsername.Text.ToLower() & "%" & "')" 



     Dim lrd As SqlDataReader = cmd.ExecuteReader() 
     If lrd.HasRows Then 
      While lrd.Read() 

       'Do something here 
       dbPassword = lrd("Password").ToString() 
       userName = lrd("UserName").ToString() 
       extrainfo = lrd("assigned_ei").ToString() 


       enteredPasswrd = txtPassword.Text() 

       If dbPassword.Trim() = enteredPasswrd And userName.TrimEnd(vbCrLf.ToCharArray).ToLower() = txtUsername.Text.ToLower() Then 


        Return True 

        'Clear all fields 
        txtPassword.Text = "" 
        txtUsername.Text = "" 
       Else 
        MsgBox("Incorrect Password") 
       End If 

      End While 

     Else 
      MessageBox.Show("Username and Password do not match..", "Authentication Failure", MessageBoxButtons.OK, MessageBoxIcon.Exclamation) 
      'Clear all fields 
      txtPassword.Text = "" 
      txtUsername.Text = "" 
     End If 

     Return False 

    Catch ex As Exception 
     MessageBox.Show("Error while connecting to SQL Server." & ex.Message) 

    Finally 
     con.Close() 'Whether there is error or not. Close the connection. 

    End Try 

End Function 

Private Sub frmLogin_Load(sender As Object, e As EventArgs) Handles MyBase.Load 
    txtUsername.Focus() 

End Sub 

End Class 

メインフォーム

ピック:https://i.imgur.com/LY6wjQZ.png

コード

Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load 

    Dim con As New SqlConnection 
    Dim cmd As New SqlCommand 

    Try 


     con.ConnectionString = "Data Source = location" 

     con.Open() 

     cmd.Connection = con 

     cmd.CommandText = " SELECT * FROM table WHERE adduser = '" & user & "'" 

     Dim lrd As SqlDataReader = cmd.ExecuteReader() 
     If lrd.HasRows Then 
      While lrd.Read() 

       ' i see that above can pull the info 
       ' but how do I get it into the form? 

      End While 
     End If 



    Catch ex As Exception 
     MessageBox.Show("Error while connecting to SQL Server." & ex.Message) 

    Finally 
     con.Close() 'Whether there is error or not. Close the connection. 

    End Try 



End Sub 

私はメインテーブルを持つデータベースを持っている情報の9列があります。 1つは、ログインしてデータを入力するユーザーであるaddUserです。彼らが記録を表示するだけでログインする必要があります。私はテキストボックスに直接添付したくありません。あなたがフォームから見ることができるように、あなたは最初に所有者の最後のレコードを見て周りに移動することができます。私はレコードをブラウズできるようにする必要があります。 1人でログインし、1〜10個以上のレコードを持つことができます。このアプリケーションでは、新しいレコードを移動または作成できます。これはどうすればいいですか?

+0

あなたは 'SqlConnection'、' SqlCommand'と 'DataTable'を使う必要があります。これらを使用すると、 'SqlConnection'を使ってデータベースに接続することができます。 'SqlCommand'を使ってSQLコマンドを実行し(' SqlParameters'を使ってください)、 'DataTable'を記入してください。 'DataTable'を' DataGridView'のようなビューに割り当てることができます。あなたの 'SELECT'ステートメントは' SELECT column1、column2 FROM table WHERE userId = @ userId'のようになります。列を列に、 'table'を表の名前に変更します。 [this](http://stackoverflow.com/a/41954987/6375113)のようなものが役に立ちます。 – Bugs

+1

私のコメントから、あなたの質問はかなり広いことがわかります。考慮すべきことがたくさんあるので、私がまとめたものを見て、それにつきまして、さらに具体的な問題に戻ってください:) – Bugs

+0

ありがとう、ありがとうございます。私はこれを作成することができますが、どうやってフォームに入れるのですか?フォーム上には、データ入力に必要な他の情報を取り込むためのデータバインディングがあります。だから、単にこの "クエリ"をフォーム上でブラウズ可能にするにはどうすればいいですか? –

答えて

0

私は、DataReaderからテキストボックスなどのフォームフィールドにデータを読み取る方法を尋ねていると思います。そうであれば、返されたデータベースフィールド( "FieldName1")の1つをフォームフィールド( "TextBox1")の1つに読み込む行の一般的な構造です。あなたのフィールド名とあなたのフォームのコントロールのIDを知る必要があります。

TextBox1.Text = lrd("FieldName1").ToString() 
+0

私は質問を編集しました。私はレコードをブラウズできるようにする必要があります。 1人でログインし、1〜10個以上のレコードを持つことができます。このアプリケーションでは、新しいレコードを移動または作成できます。 –

+0

一度にすべてのレコードをロードする代わりに、DBから最初のレコードをロードします。ユーザーが「次へ」ボタンを押すと、シーケンスの次のレコードがDBからロードされ、すべてのフォームフィールドの値が変更されます。新しいレコードを作成するには、すべてのフィールドを空白にして空にしておく必要がありますし、明らかに両方のケースで保存や削除などを処理する必要があります。これはもっと多くのコードになります。 – ADyson

関連する問題