Mam nastepujacy problem: Jest sobie tabela na serwerze MSSQL. W tabeli znajduje sie pole ID z ustawionym Identity (autoincrement). Otwieram tabele w trybie dodawania (append). Jak przed wyslaniem zmian w rekordzie na serwer (Post) pobrac wartosc tego pola? Za kazdym razem dostaje NULL. Cala operacja jest objeta transakcja. Uzywam ADO (standadowe komponenty z zakladki dbGo)? Jest mi bardzo potrzebne i bede bardzo wdzieczny za kazda sugestie.
You can use @@IDENTITY - see Books Online. Assuming you have MSSQL 2000,
there are also SCOPE_IDENTITY(), and IDENT_CURRENT(), but the functionality
is slightly different in each case. To get the new value while in the stored
procedure you would use SCOPE_IDENTITY() instead.
cytat z grup - powinien Cię naprowadzić :P
Hmm... SCOPE_IDENTITY bylo by idealne, ale zadziala dopiero po Post. Dla odmiany IDENT_CURRENT dziala przed Post ale olewa sesje i jak odpale aplikacje na kilku kompach i userzy otworza ta sama formatke to dostana ta sama wartosc. Widac trzeba sobie jakas proteze dorobic.
// EDIT
OK, wymusilem po prostu wypelnienie czesci formularza na poczatku, dzieki czemu moge zrobic Post i odczytac to Identity. W razie rezygnacji z wypelniaia calosci i tak robi sie Rollback, takze po sprawie. Delikatnie zmienilo obsluge, ale moze byc. Dzieki za pomoc.
A nie możesz po prostu zrobić w onBeforePost:
SELECT max(ID) from tabela
I tak dostaniesz ostatnie ID(nie wiem, czy o to Ci chodzi)
?
Juhas napisał(a)
A nie możesz po prostu zrobić w onBeforePost:
SELECT max(ID) from tabela
I tak dostaniesz ostatnie ID(nie wiem, czy o to Ci chodzi)
wartość Identity i wartość ostatniego ID nie muszą się pokrywać - wystarczy usunąć ostatni rekord i już są inne