Centrum skryptów - Systemy operacyjne

Jak dodać wartość do określonego pola dla każdego rekordu w bazie danych?

Udostępnij na: Facebook

Skrypciarze odpowiadają na Wasze pytania

Cześć Skrypciarze!

Witamy w rubryce TechNet, w której Skrypciarze z firmy Microsoft odpowiadają na częste pytania dotyczące używania skryptów w administracji systemu. Jeśli macie jakieś pytania z tej dziedziny, zachęcamy do wysłania e-maila na adres: scripter@microsoft.com. Nie możemy zagwarantować odpowiedzi na każde otrzymane pytanie, ale staramy się jak możemy.

Jak dodać wartość do określonego pola dla każdego rekordu w bazie danych?

Cześć Skrypciarze! Pytanie

Cześć, Skrypciarze! Jak dodać literę s na końcu określonego pola dla każdego rekordu w bazie danych Access?

-- A

Cześć Skrypciarze! Odpowiedź

Cześć, A. Czy ktoś z Was chociażby śnił o tym, że kiedyś możliwe będzie wypalanie płyt CD za pomocą skryptu (j.ang.) w Windows Vista oraz Windows Server 2008? Zakładam, że nie, ale ogłaszam teraz uroczyście, że stało się to faktem i jest możliwe. Więcej informacji na ten temat pojawi się już wkrótce, tymczasem prawie wszyscy Skrypciarze są zajęci na konferencji TechEd 2007 (j.ang.), tak bardzo zajęci, że już nie mogą doczekać się powrotu do domu i do swoich zwykłych zajęć.

Prawdę mówiąc, dopiero teraz daje się odczuć, że przebywanie z dala od domu to chyba nie jest to, co Skrypciarze lubią najbardziej i pojawiły się już nawet głosy twierdzące, że jedzenie w kantynie Microsoft wcale nie jest takie złe i że nasza Redaktorka jest wspaniałą, przemiłą osobą, co jest bardzo wyraźnym znakiem, że wszyscy zaczynają tęsknić do domu.

Żeby chociaż odrobinę poczuć się jak u siebie, piszący te słowa Skrypciarz postanowił nie czekać do powrotu i już teraz odpowiedzieć na pytanie o skrypt, za pomocą którego można dodać literę s do końca każdego rekordu w polu bazy danych:

Const adOpenStatic = 3

Const adLockOptimistic = 3



Set objConnection = CreateObject("ADODB.Connection")

Set objRecordSet = CreateObject("ADODB.Recordset")



objConnection.Open _

    "Provider = Microsoft.Jet.OLEDB.4.0; " & _

        "Data Source = c:\scripts\test.mdb" 



objRecordSet.Open "UPDATE TextFiles SET FileName = FileName & 's'", _

    objConnection, adOpenStatic, adLockOptimistic



objRecordSet.Close

objConnection.Close

Jak widzimy, rozpoczynamy od określenia pary stałych: adLockOptimistic oraz adOpenStatic. Nie będziemy się dzisiaj zagłębiać w szczegóły dotyczące tych stałych; jeżeli chcecie wiedzieć więcej o tych zmiennych i o ich zastosowaniach, zapraszamy do naszego webcastu na ten temat. Teraz powinno nam wystarczyć to, że stałe te służą do określania blokady rekordów i typu kursora w naszym zbiorze rekordów.

Po określeniu stałych tworzymy wystąpienia obiektów ADODB.Connection oraz ADODB.Recordset; następnie używamy poniższego wiersza kodu w celu otwarcia bazy danych C:\Scripts\Test.mdb:

objConnection.Open _

    "Provider = Microsoft.Jet.OLEDB.4.0; " & _

        "Data Source = C:\Scripts\Test.mdb"

Uwaga: Jeżeli mamy do czynienia z bazą danych Access 2007, nasze polecenie otwarcia Open będzie wyglądało nieco inaczej. Inne będzie nie tylko rozszerzenie pliku w pliku bazy danych. (.accdb a nie .mdb), trochę inny będzie także provider:

objConnection.Open _

    "Provider = Microsoft.ACE.OLEDB.12.0; " & _

        "Data Source = C:\Scripts\Test.accdb"

Jak się okazuje, Test.mdb jest bazą danych, która pochodzi z poprzedniego artykułu rubryki Cześć Skrypciarze. Ale to nic: skoro posiada tabelę, a w tej tabeli jest pole, możemy wykorzystać ją do celów demonstracyjnych. Zakładając, że mamy tabelę o nazwie TextFiles (a przecież mamy) oraz zakładając, że ta tabela ma pole o nazwie FileName (a przecież ma) możemy dodać s do FileName dla każdego rekordu w tabeli używając jednego wiersza kodu:

objRecordSet.Open "UPDATE TextFiles SET FileName = FileName & 's'", _

        objConnection, adOpenStatic, adLockOptimistic

Fajne, prawda? Na wypadek, gdyby się ktoś zastanawiał, najważniejsze w tym wierszu kodu jest zapytanie SQL:

UPDATE TextFiles SET FileName = FileName & 's'

Stosujemy teraz zapytanie Update w celu dokonania aktualizacji wszystkich rekordów w naszym zbiorze rekordów. (W tym przypadku, oczywiście, będzie to każdy rekord w tablicy TextFiles.) A jak mamy zamiar zaktualizować te rekordy? Mamy zamiar to zrobić ustawiając wartość pola FileName (SET FileName =) na istniejącą wartość pola FileName plus literę s (FileName & 's’). Zwróćmy uwagę na tę składnię. Ponieważ FileName to nazwa pola w tabeli, możemy ją uwzględnić w zapytaniu bez konieczności umieszczania jej w cudzysłowie. Po nazwie pola następuje znak & (zwyczajowy znak jeżeli chodzi o informacje połączone); z kolei po znaku & następuje wartość, którą chcemy dodać: litera s. W z uwagi na fakt, iż s jest wartością ciągu, musimy umieścić ją w apostrofach.

Może i dziwnie to wygląda, ale naprawdę ma sens.

Możecie wierzyć lub nie, ale to wystarczy: jak tylko zadamy zapytanie, litera s zostanie dołączona do wartości FileName dla każdego rekordu w tabeli z osobna. Jasne, że proste.

Następnie zostaje już tylko wywołanie metody Close i usunięcie obiektów Recordset oraz Connection.

Uwaga: Jest jeszcze jedna różnica pomiędzy bazą danych Access 2007 a poprzednimi wersjami. W Access 2007, skrypt zadziała i baza danych zostanie zmieniona, ale napotkamy błąd przy próbie zamknięcia zbioru rekordów. Wtedy wystarczy tylko usunąć poniższy wiersz kodu ze skryptu i wszystko będzie załatwione:

objRecordSet.Close
 Do początku strony Do początku strony

Centrum skryptów - Systemy operacyjne