Как получить значение уникального идентификатора, созданного при вставке в Delphi ADO? - PullRequest
1 голос
/ 10 января 2012

Предположим, что я сгенерировал PK для своей таблицы БД SQL Server с помощью функции newid(). В Java я могу сделать что-то вроде этого:

...
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, я застреваю, потому что ADO может либо получить данные из БД (Open метод AdoQuery), либо поместить данные в БД (ExecSQL метод). Поэтому я не могу вставить новое значение в таблицу и впоследствии получить значение параметра.

Ответы [ 2 ]

4 голосов
/ 10 января 2012

Вы можете решить эту проблему, по крайней мере, двумя способами.

  1. Вы можете поместить оба ваших SQL-запроса в одну строку (как в вашем примере) и вызвать TADOQuery.Openили TADOQuery.Active := True.не имеет значения, что у вас есть оператор INSERT, пока запрос что-то возвращает.

  2. Вы можете определить направление параметра как pdOutput в коллекции ADOQuery.Parameters и прочитать значение этого параметрапосле выполнения запроса.

1 голос
/ 10 января 2012

Вы рассматриваете @newGuid, как если бы это был стол.Ваша последняя строка в запросе должна быть:

SELECT @newGuid as uid  
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...