このメソッド (Visual Basic で記述) は、新しいアカウントの反復を作成します。これは、特定の命名規則に従って複数のアカウントを同時に作成する場合に非常に役立ちます。
私の仕事では、複数の Web 環境で 1 日に複数のアカウントを作成する必要があります。これらのアカウントは、環境ごとに特定の命名規則に従う必要があります。新しいアカウントの命名規則は次のようになります。
「ノード」 + 姓 + 環境サフィックス + #。
たとえば、テスト環境では、「nodemccoytest200」が適切な命名規則になります。
これらのアカウントを説明し、その後にパスワード、デフォルトの言語、および出身国を入力する必要がありました。フォームやタブのアクセシビリティを気に入っているので、この理由で Access データベースを作成しました。
ここで、基本的に同じユーザー名とアカウントの詳細を複数入力する必要があることを想像してください。時代。ある日。
これを約 2 か月間繰り返しました。その後、手根管の感覚が気に入らないと思い、その面倒な作業を行う VB スクリプトを作成しました。
これは、テスト環境のすべてのアカウントを入力および編集するために作成したフォームのスクリーン キャプチャです。ご覧のとおり、いくつかのアカウントを作成しました...
作成した最新のアカウントは「nodemccoytest280」としてリストされています。
ここで、下部にある [新しいアカウント] ボタンを選択すると、命名規則に従って 1 つ上の間隔で新しいアカウントが作成されます。 「nodemccoytest281」。
Private Sub cmdQuickAccountTest_Click()
'----------------Declarations----------------------
Dim dbs As DAO.Database, rst As DAO.Recordset, rst2 As DAO.Recordset
Dim varMaxID As Integer
Dim varMaxUser As String
Dim varUserNumber As String
'----------------String: Latest ID-------------------
Dim strFindID As String
strFindID = "SELECT Max(accID) as maxID " _
& "FROM tbl_Accounts " _
& "WHERE accType = 'TST';"
'----------------Method: Get latest ID --------------------
Set dbs = CurrentDb
Set rst = dbs.OpenRecordset(strFindID)
varMaxID = rst!maxID
OpenRecordset 関数を実行するには、関数の開始時にデータベース変数とレコードセット変数を宣言する必要があります。 SELECT ステートメントは、テーブル (tbl_Accounts) の ID (accID) から最後に作成されたレコードを取得します。このレコードのアカウント タイプ (accType) は「TST」 (テスト環境のサフィックス) と等しくなります。その後、文字列変数「strFindID」として初期化されます。
次に、「strFindID」が OpenRecordset 関数に渡されて読み取られます。 maxID が検索され、「varMaxID」として初期化されます。
'----------------String: Latest username (from ID) -------------------
Dim strFindLastUser As String
strFindLastUser = "SELECT accName " & _
"FROM tbl_Accounts " & _
"WHERE accID = " & varMaxID & ""
'----------------Method: Get latest Username, then clean string to find the number-----------
Set rst2 = dbs.OpenRecordset(strFindLastUser)
varMaxUser = rst2!accName
varUserNumber = CleanString(varMaxUser)
Dim finalNumber As Integer
finalNumber = CInt(varUserNumber)
finalNumber = finalNumber + 1
'---------------------------------------------------------------------------------------------
ここでは、2 番目の SELECT ステートメントが文字列変数 'strFindLastUser' として初期化されています。今回は、テーブル (tbl_Accounts) からアカウント名 (accName) を SELECT します。ここで、ID (accID) は、コンパイラーが最初の SELECT ステートメント (varMaxID) から選択した最大 ID と等しくなります。
この文字列は、それ自体を OpenRecordset 関数に渡す際に使用され、「varMaxUser」として初期化されます。今回は、「varMaxUser」から文字が削除され、数値のみが返されます。
この数値は、「CInt」を使用して INT に変換され、その数値自体に 1 が加算されます。
'-----------------Method: Declare all new variables before insert-----------------------------
Dim finalUsername As String
Dim finalEmail As String
Dim finalPassword As String
Dim finalLanguage As String
Dim finalCountry As Integer
Dim finalType As String
finalUsername = "nodemccoytest" & finalNumber
finalEmail = "* +test" & finalNumber & "@gmail.com"
finalPassword = "Password123!"
finalLanguage = "English (EN)"
finalCountry = 233
finalType = "TST"
ここでは、SELECT ステートメントに読み込まれるすべての変数を初期化しています。これは、SELECT ステートメントを読み取れるようにするためです。関数が呼び出されるたびにこれらの変数がデータベースに挿入されるため、この時点でデフォルトで必要な変数を変更することもできます。
'-----------------String: Insert new Username into table--------------------------------------
Dim strInsert As String
strInsert = "INSERT INTO tbl_Accounts " & _
"(accName, accEmail, accPassword, accLang, accCountry, accType) VALUES " & _
"('" & finalUsername & "' , '" & finalEmail & "', '" & finalPassword & "', '" & finalLanguage & "' , " & CStr(finalCountry) & " ,'" & finalType & "');"
'---------------------------------------------------------------------------------------------
dbs.Execute (strInsert)
DoCmd.Requery
End Sub
これで最終形が完成しました。 INSERT ステートメントは文字列として初期化され、ステートメントを実行する「dbs.Execute」関数で使用されます。
次に、フォームが再クエリされて、新しく作成されたレコードが表示されます。