Sqlserver
 sql >> Baza danych >  >> RDS >> Sqlserver

Problemy z edytowaniem rekordów w programie Access / SQL (konflikt zapisu)

Możliwe problemy:

1 równoczesne zmiany

Przyczyną może być to, że dany rekord został otwarty w formularzu, który edytujesz. Jeśli zmienisz rekord programowo podczas sesji edycji, a następnie spróbujesz zamknąć formularz (i tym samym spróbujesz zapisać rekord), Access powie, że rekord został zmieniony przez kogoś innego (oczywiście to Ty, ale Access nie wie ).

Zapisz formularz przed programową zmianą rekordu.
W formularzu:

'This saves the form's current record
Me.Dirty = False

'Now, make changes to the record programmatically

2 Brak klucza podstawowego lub sygnatury czasowej

Upewnij się, że tabela SQL-Server zawiera klucz podstawowy oraz kolumnę sygnatury czasowej.

Kolumna sygnatury czasowej pomaga programowi Access określić, czy rekord był edytowany od czasu ostatniego wybrania. Access robi to, sprawdzając wszystkie pola, jeśli nie jest dostępna sygnatura czasowa. Może to nie działa dobrze z wpisami zerowymi, jeśli nie ma kolumny sygnatury czasowej (patrz Problem z 3 bitami zerowymi ).

Znacznik czasu faktycznie przechowuje numer wersji wiersza, a nie godzinę.

Nie zapomnij odświeżyć linku do tabeli w programie Access po dodaniu kolumny sygnatury czasowej, w przeciwnym razie program Access go nie zobaczy. (Uwaga:Kreator rozbudowy firmy Microsoft tworzy kolumny sygnatury czasowej podczas konwertowania tabel programu Access na tabele SQL-Server.)

Problem z 3 pustymi bitami

Według @AlbertD.Kallal może to być problem z pustymi bitami opisany tutaj:KB280730 (ostatnia migawka na WayBackMachine, oryginalny artykuł został usunięty). Jeśli używasz pól bitowych, ustaw ich domyślną wartość na 0 i zastąp wszystkie NULL wprowadzone wcześniej przez 0 . Zwykle używam BIT DEFAULT 0 NOT NULL dla pól logicznych, ponieważ najbardziej pasuje do idei logicznych.

Artykuł KB mówi, aby używać *.adp zamiast *.mdb; jednak Microsoft zakończył wsparcie dla Access Data Projects (ADP) w programie Access 2013 .



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Dlaczego kolumna TEXT zwraca tylko 4096 bajtów?

  2. Skrypt do zabijania wszystkich połączeń z bazą danych (więcej niż RESTRICTED_USER ROLLBACK)

  3. Wstaw ręcznie do tabeli za pomocą instrukcji SQL, ale klucz jest automatycznie zwiększany

  4. Przechowuj plik w bazie danych SQL Server przy użyciu .Net MVC3 z Entity Framework

  5. Włączenie programu SQL Server do rozproszonej transakcji XA