Używanie widoków SQL do dodawania/edycji danych w programie Microsoft Access
To jest druga część dwuczęściowej serii poświęconej poglądom, które napisałem. Część I możesz zobaczyć tutaj.
W ciągu ostatnich kilku lat miałem duże doświadczenie w pracy nad bazami danych Access z danymi połączonymi z tabelami przechowywanymi w SQL Server. Dzięki relacyjnym bazom danych i tabelom przeglądowym możesz łatwo uzyskać widok zawierający wiele kolumn liczbowych, które po prostu przechowują klucz podstawowy z innych tabel.
Załóżmy na przykład, że masz bazę danych z dwiema tabelami:jedną dla informacji o firmie, a drugą tylko dla kontaktów, ale musisz połączyć swoje kontakty z firmami i zdarzają się sytuacje, w których kontakt jest powiązany z wieloma firmami. Możesz łatwo zarządzać tym, tworząc trzecią tabelę CompanyContacts, która byłaby wierszami danych zawierającymi CompanyID i ContactID. Istnieje wiele sytuacji, w których będziesz mieć podobną tabelę, która łączy dane z jednej tabeli do drugiej, ale te tabele muszą być utrzymywane i zarządzane przez użytkowników, którzy naprawdę potrzebują widzieć podstawowe dane, a nie tylko identyfikatory. Aby rozwiązać ten problem, możesz utworzyć widok ze wszystkimi potrzebnymi tabelami i oprzeć formularz na widoku połączonym, ale szybko zauważysz, że nie możesz edytować żadnych danych, wszystkie są tylko do odczytu.
Wskazówki dotyczące edytowania widoku
Aby edytować widok w programie Access, musisz upewnić się, że zawiera on klucz podstawowy z tabeli, którą chcesz edytować, wraz z polem sygnatury czasowej i indeksem. Pierwsze dwa można łatwo wykonać, dodając pola w projekcie widoku w SQL Server, w przypadku drugiego użyj CREATE UNIQUE INDEX, jak pokazano poniżej, wraz z kodem, aby dodać widok jako połączoną tabelę:
Przyciemnij tdf jako DAO.TableDef
Przyciemnij bazę jako DAO.Baza danychSet db =CurrentDb
Set tdf =db.CreateTableDef
tdf.Name ="ViewNameInAccess"
tdf.SourceTableName ="dbo.ViewName ”
tdf.Connect =„ODBC;”
db.TableDefs.Append tdfdb.Execute „UTWÓRZ UNIKALNY INDEKS [PRIMARY] ON [ViewNameInAccess](MainTableID);”, dbFailOnError