0

アクセス テーブルの列の最大値を見つける方法。とテキストボックスに表示されます。列のデフォルト値として 101 を指定すると、テーブルは空になります。私はこのように試します..しかし、うまくいきません。コードを以下に示します

Dim empid As Integer
empid=101
TXTEMPID.Text=empid
getConnect()
    Dim strSQL As String = "SELECT MAX(EMP_ID) FROM EMPLOYEE "
    Dim cmd As OleDb.OleDbCommand
    Dim Reader As OleDb.OleDbDataReader
    cmd = New OleDb.OleDbCommand(strSQL, Conn)
    Try
        Conn.Open()
        Reader = cmd.ExecuteReader()
        If Reader.Read Then
            empid = CInt(Reader("EMP_ID"))
        End If
        MessageBox.Show(empid)
    Catch ex As Exception
        MessageBox.Show(ex.Message)
    Finally
        Conn.Close()
    End Try
    TXTEMPID.Text = empid + 1
4

3 に答える 3

1

テーブルが空の場合、テーブルには値がまったく含まれていないため、「最大値」はありません。

編集

うん、いいよ。DMax("EMP_ID","YourTable")空のテーブルの場合、 will return NullNull + 1will return のような式が返されるという事実につまずいていたようですが、Nullどうやって始めればよいでしょうか? 次のようなものを試すことができます...

Me.txtEMP_ID.Value = Nz(DMax("EMP_ID","YourTable"), 100) + 1

...Form Loadイベントでは、このタイプのアプローチが問題を引き起こす可能性があることに言及する必要がありますが、データベースはマルチユーザーです (またはマルチユーザーになります)。

于 2013-05-01T11:49:11.513 に答える
0

以下に示すようにコードを変更します..その作業クール......

 getConnect()
    Conn.Open() 
    Dim str As String
    Dim newNumber As Integer
    str = "SELECT MAX(EMP_ID) AS MAXIMUM FROM EMPLOYEE"
    Dim cmd As OleDbCommand = New OleDbCommand(str, Conn)
    Dim dr As OleDbDataReader
    dr = cmd.ExecuteReader
    If dr.HasRows Then
        While dr.Read()
            TXTEMPID.Text = dr("MAXIMUM").ToString
            newNumber = CInt(Val(TXTEMPID.Text))
            If newNumber = 0 Then
                newNumber = 101
                TXTEMPID.Text = CStr(newNumber)
            Else
                newNumber = newNumber + 1
                TXTEMPID.Text = CStr(newNumber)
            End If
        End While
    End If
    Conn.Close() 

私の質問をリプレイしてコメントしてくれてありがとう

于 2013-05-02T07:58:47.257 に答える
0

ここにクエリがあります

Select Top 1 MAX(col 2), col1 from Table1 group by col1

実行しなければならない結果を得るために

Dim cnnOLEDB As New OleDbConnection
Dim cmdOLEDB As New OleDbCommand
Dim strConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" &    System.Environment.CurrentDirectory & "\URDataBaseName.mdb"
cnnOLEDB.ConnectionString = strConnectionString
cnnOLEDB.Open()

cmdOLEDB.CommandText ="Select Top 1 MAX(col 2), col1 from Table1 group by col1"
cmdOLEDB.Connection = cnnOLEDB

txtbox.text = cmdOLEDB.ExecuteScalar().ToString()

ExecuteScalar クエリを実行し、クエリによって返された結果セットの最初の行の最初の列を返します。追加の列または行は無視されます

于 2013-05-01T11:52:35.287 に答える