2016-06-24 7 views
1

フロントエンドにはAccess 2016を使用し、バックエンドにはSQL Server 2008を使用します。バックエンドSQLと互換性のあるフロントエンドアクセスで日付/時刻を設定する方法はありますか?

ユーザーは、フォームに新しいレコードを作成します。この新しいレコードの自動番号付きIDを生成するために、私はDoCmd.RunCommand acCmdSaveRecordを使用します。このコマンドを使用すると、フォームはそのレコードから移動します。私はちょうど作成されたレコードのIDを見つける必要があります。マージレプリケーションを使用し、異なるユーザーが異なるID範囲を持つため、最大のオートナンバーIDを検索することはできません。

私はDateCreated列を作り、SQL ServerでGetDate()を使用して現在の日付と時刻にその列をデフォルト設定しようとしたが、それは、それは適切にSQL Serverのdatetime型の形式を読み取ることができないので、アクセスがロックエラーやその他のエラーを与える可能という。

.saverecordオプションは、フォームの現在のレコードから移動しませんか?または、SQL Serverバックエンドとアクセスフロントエンドを使用しているときにエラーを生成しない日付/時刻フィールドがありますか?

要するに、フォームで作成された最後のレコードの自動番号付きIDが必要です。あなたのレコードを挿入した後

+0

このコマンドは、フォームをレコードから移動してはなりません。あなたは、私の場合、より良い方を使用してください.Dirty = True then me.Dirty = false。 –

答えて

-1

実行IDを取得するには、同じセッションで別のコマンド:MSDNドキュメント:詳細については SELECT @@IDENTITY

を確認してください。

とにかく、データベースにアクセスするAPIを持っていて、これを公開していない場合は、スコープIDを返す必要があります。これは、IDが生成されたことを知る唯一の信頼できる方法です。

+0

私はVBAのフロントエンドではなく、SQLデータのプロシージャを実行しています。 VBAコードにこれに相当するものがありますか? – dkimbrell

+0

@@ IDENTITYを取得するために同じセッションで別のクエリを実行するだけです - [this](https://support.microsoft.com/en-us/kb/815629)をチェックしてください。 –

0

は、このSQL文を実行するために、クエリを通じてパスを使用します。

SELECT SCOPE_IDENTITY() AS ID 

それは現在のスコープで最後に使用し作成されたIDを返します。

+0

VBAコードに相当するものはありますか? – dkimbrell

+0

ローカルのAccessテーブルの最新のIDを取得するためのものですが、VBAのパススルーレコードセットを使用してSQL Serverから取得するためにこれを呼び出す必要があります – Rono

+0

ああ、 VBAのサーバー私は居心地の良いVBAシェルを残す時が来たと思う。私はSQLへの接続を開いてテーブルをクエリする必要があるようです。これを試みます、ありがとう! – dkimbrell

0

SQL ServerテーブルにバインドされたAccessフォームに自動番号フィールドを入力するには、フォームにレコードを保存する必要があります。レコードを保存する行為は、その形式をレコードの外に移動させてはならないし、そうしないでもいけません。

自動番号は、このようにある取得するためのコード:

If me.Dirty = True then Me.Dirty = false 
Debug.print "Auto number from SQL server = " & me!id 

形で使用される接続は、あなたが実行するために使用する接続異なるものになりますので、一般的なルールとして、あなたがSELECT SCOPE_IDENTITY()を使用することはできませんSQLパススルークエリだから、ここでの反応は野生のガチョウの追跡と間違った方法で、この問題に近づくことです。

関連する問題