0

DUI_Database というデータベースがあります。その中には、DUI_Cite_Numbers というテーブルがあります。dui_cite_no と status の 2 つの列があります。2 つのテキスト ボックスから一連の数値を取得してテーブルに配置するコードがあります。また、ステータス列は FREE または ALLOCATED です。割り当てられた番号が使用され、再利用できません。無料はまさにそれです-利用可能な番号。

D100100 から D100105 までの範囲を入力したと仮定すると、表を見ると次のようになります。

    DB Name: DUI_Database
    Table Name: DUI_Cite_Numbers

    dui_cite_no   status
    D100100       FREE
    D100101       FREE
    D100102       FREE
    D100103       FREE
    D100104       FREE
    D100105       FREE

次に、これらの数値が使用されると、次のようになります-

    dui_cite_no   status
    D100100       ALLOCATED
    D100101       ALLOCATED
    D100102       ALLOCATED
    D100103       FREE
    D100104       FREE
    D100105       FREE

SELECT ステートメントについてサポートが必要です。フォームが開いたら、次の FREE dui_cite_no をそのフォームのテキスト ボックスで使用する必要があります。それを達成する方法がわかりません。

私はこれがうまくいくと思った -

    "SELECT TOP(1) dui_cite_no FROM DUI_Cite_Numbers WHERE status = 'FREE'"

機能していません。正しく見えますか?

一度使用すると、列に ALLOCATED としてマークされるため、

    "UPDATE DUI_Cite_Numbers SET status = 'ALLOCATED' WHERE dui_cite_no = @nextcit"

おそらく私はこれをあまりにも長く始めていたので、私は混乱しています。

コードチャンク全体は次のとおりです。

Public Function Get_Next_DUI_Cit_Number() As String
    ''Get the next available citation number from the database. If there is no free
    ''citation number then return a null string
    Dim nextcit As String = String.Empty
    Using DataConnection As New System.Data.SqlServerCe.SqlCeConnection("Data Source=C:\Program Files\DailyLog DUI\DUI_Database.sdf")
        DataConnection.Open()
        Dim SelectCommand As New System.Data.SqlServerCe.SqlCeCommand("SELECT TOP(1) dui_cite_no FROM DUI_Cite_Numbers WHERE status = 'FREE'", DataConnection)
        Dim DataReader As System.Data.SqlServerCe.SqlCeDataReader = SelectCommand.ExecuteReader()
        If DataReader.Read() Then
            nextcit = DataReader("dui_cite_no").ToString
            Using DataConnection2 As New System.Data.SqlServerCe.SqlCeConnection("Data Source=C:\Program Files\DailyLog DUI\DUI_Database.sdf")
                DataConnection2.Open()
                Dim UpdateCommand As New System.Data.SqlServerCe.SqlCeCommand("UPDATE DUI_Cite_Numbers SET status = 'ALLOCATED' WHERE dui_cite_no = @nextcit", DataConnection2)
                UpdateCommand.Parameters.AddWithValue("@nextcit", nextcit)
                UpdateCommand.ExecuteNonQuery()
                UpdateCommand.Dispose()
                DataConnection2.Close()
            End Using
        End If
        SelectCommand.Dispose()
        DataConnection.Close()
    End Using
End Function

次に、適切なフォームが開いたら、次のコードを実行します。

Public Sub frmDUI_Citation_Load (System.Object としての ByVal 送信者、System.EventArgs としての ByVal e) MyBase.Load を処理します

    Me.txt_dui_cite_no.Text = module1.Get_Next_DUI_Cit_Number() 'get the next available citation number and put it in the textbox

サブ終了

4

1 に答える 1

0

それらが順番に発行されていることを確認したい場合は、次を追加する必要がありますORDER BY

SELECT TOP(1) 
  dui_cite_no 
FROM 
  DUI_Cite_Numbers 
WHERE 
  status = 'FREE'
ORDER BY 
  dui_cite_Number
于 2012-09-15T18:32:08.840 に答える