2012-01-10 4 views
1

newid()機能の助けを借りて自分のSQL Server DBテーブルのPKを生成するとします。Delphi ADOで挿入中に生成されたuniqueidentifierの値を取得する方法は?

... 
String query = "DECLARE @newGuid uniqueidentifier "+ 
"SET @newGuid = newid() "+ 
"INSERT INTO myTable(id, stringval) "+ 
"VALUES (@newGuid, "Hello") "+ 
"SELECT uid FROM @newGuid"; 
PreparedStatement ps = conn.prepareStatement(query); 
ResultSet rs = ps.executeQuery(); 
String uid = rs.getString("uid"); 

をしかし、私は、Delphi + ADOでそれを作るしようとしたとき、私はどちらかのDBからデータを取得することができます立ち往生原因ADOAdoQueryOpen方法)を取得または(DBにデータを置く:Javaで私はこのような何かを行うことができますExecSQL方法)。だから私はテーブルに新しい値を挿入し、後でパラメータ値を取得することはできません。

答えて

4

少なくともこの問題は2通りの方法で解決できます。

  1. あなたは1つの文字列にあなたのSQLクエリの両方を入れて(あなたはあなたの例を持っているだけのように)とTADOQuery.OpenまたはTADOQuery.Active := Trueを呼び出すことができます。クエリが何かを返す限り、そこにはINSERTというステートメントがあることは関係ありません。

  2. ADOQuery.ParametersのpdOutputとしてパラメータの方向を定義し、クエリ実行後にそのパラメータの値を読み取ることができます。

1

あなたはのように扱っています。クエリの最後の行は、次のとおりです。

SELECT @newGuid as uid 
関連する問題