|
Тема
|
Ъпдейт на таблица в Аксес
|
|
Автор | Sgromolenko (Нерегистриран) |
Публикувано | 04.02.07 17:38 |
|
Имам една таблица в аксес, която съдържа стари данни. Данните и трябва да се обновят от друга таблица, като вариантите за обновление са 2:
1. В старата таблица има съществуващ запис, който трябва да се опресни с нови данни.
2. В старата таблица няма такъв запис и се налага да се добави.
Отделно на това в новата таблицата източник има поле "yes/no" дали записа е обработен, т. е. след като бъде добавен или опреснен в старата, трябва да стане на yes
Ако използвам Append Query и след това Update Query изниква опасност от грешки (защото в първата таблица може да има дублирани записи) + това при Append Query не намирам начин да сменя полето за състояние (обработен запис).
Сещате ли се за елегантен начин да реша проблема, че втори ден се блъскам и нищо не ми идва на акъла.
Поздрави
| |
Тема
|
Re: Ъпдейт на таблица в Аксес
[re: Sgromolenko]
|
|
Автор | ju (Нерегистриран) |
Публикувано | 05.02.07 08:39 |
|
Първо стартирай Update query, ще се обновят само съществуващите в старата таблица записи, а след това стартирай Append query , за да добавиш липсващите записи.
| |
Тема
|
Re: Ъпдейт на таблица в Аксес
[re: ju]
|
|
Автор | Sgromolenko (Нерегистриран) |
Публикувано | 05.02.07 18:21 |
|
Така го мислех и аз, но има 2 недостатъка:
За да разберете проблема ще се опитам да го онагледя с пример
Имаме таблица [skladova nalichnost] с полета [KatalojenNomer] и [Broj]
Имаме и таблица [Dostavka] със същите полета.
Целта е като се попълни таблицата доставка всеки ред обработва по следния начин:
1. Ако има съществуващ запис в таблица [skladova nalichnost] със същия каталожен номер, броя му да се увеличи с броя от таблица [Dostavka].
2. Ако няма такъв запис - да се добави, със същия брой.
Проблем може да има, защото има възможност в таблица доставка да има дублиращи се каталожни номера. Желателно е всеки обработен ред от таблица доставка да му се слага отметка, че е прибавен към таблицата.
Това е в общи линии, но не виждам как може да стане с Аксес...
Може би с Update - Append - Update последователно, но не мога да намеря как да слагам отметки в източник таблицата на всеки прибавен ред.
| |
Тема
|
Re: Ъпдейт на таблица в Аксес
[re: Sgromolenko]
|
|
Автор | ju (Нерегистриран) |
Публикувано | 06.02.07 08:29 |
|
това е лесно:)
Sub UpdateDostavka()
Dim DB As Database
Dim R As Recordset
Dim RUp As Recordset
Set DB = CurrentDb
Set R = DB.OpenRecordset("Dostavka")
Do Until R.EOF
Set RUp = DB.OpenRecordset("SELECT [skladova nalichnost].KatalojenNomer, [skladova nalichnost].Broj " & _
" FROM [skladova nalichnost] WHERE [skladova nalichnost].KatalojenNomer= '" & R!KatalojenNomer & "';")
If RUp.RecordCount > 0 Then
RUp.Edit
RUp!Broj = RUp!Broj + R!Broj
RUp.Update
RUp.Close
Else
RUp.AddNew
RUp!KatalojenNomer = R!KatalojenNomer
RUp!Broj = R!Broj
RUp.Update
RUp.Close
End If
R.MoveNext
Loop
R.Close
End Sub
| |
Тема
|
Re: Ъпдейт на таблица в Аксес
[re: Sgromolenko]
|
|
Автор | ju (Нерегистриран) |
Публикувано | 06.02.07 08:34 |
|
Малка поправка , забравих за маркирането на обработените записи. Ето ти поправената процедура
Sub UpdateDostavka()
Dim DB As Database
Dim R As Recordset
Dim RUp As Recordset
Set DB = CurrentDb
Set R = DB.OpenRecordset("Select * From Dostavka Where Mark = False ")
Do Until R.EOF
Set RUp = DB.OpenRecordset("SELECT [skladova nalichnost].KatalojenNomer, [skladova nalichnost].Broj " & _
" FROM [skladova nalichnost] WHERE [skladova nalichnost].KatalojenNomer= '" & R!KatalojenNomer & "';")
If RUp.RecordCount > 0 Then
RUp.Edit
RUp!Broj = RUp!Broj + R!Broj
RUp.Update
RUp.Close
Else
RUp.AddNew
RUp!KatalojenNomer = R!KatalojenNomer
RUp!Broj = R!Broj
RUp.Update
RUp.Close
End If
R.Edit
R!mark = True
R.Update
R.MoveNext
Loop
R.Close
End Sub
| |
Тема
|
Re: Ъпдейт на таблица в Аксес
[re: Sgromolenko]
|
|
Автор |
wqw (АзСъмЖив) |
Публикувано | 06.02.07 17:32 |
|
1. Използват се транзакции за "как да слагам отметки в източник таблицата на всеки прибавен ред." -- просто два UPDATE-а.
2. Тази схема е много чуплива и никъде не е работила стабилно. Най-малкото имхлементация на Access.
3. Хората са измислили индексирани/материализирани view-та именно с такава цел, но Access е мноо далеч.
Така, че виж дали можеш да направиш нещо с транзакции и тегли една кръстачка да няма проблеми с file access-а.
Предложението на ju е смехотворно -- пример как *не* трябва да подхождаш. Какво става ако спре тока точно преди да "постави отметката"? Също интересно е колко порядъци по-бавен е този "курсор" от истинско rowset oriented решение в случая. В clipper не е имало друг начин, но вече (дори в Access) можеш да избираш.
cheers,
</wqw>
| |
Тема
|
Re: Ъпдейт на таблица в Аксес
[re: wqw]
|
|
Автор | Sgromolenko (Нерегистриран) |
Публикувано | 06.02.07 18:10 |
|
Благодаря на двама ви за мненията,
Засега го направих по метода на Ju, и това което мога да кажа е, че работи!
Наистина ако спре тока ще стане гаф, но предвид че на ден ще се изпълняват 2-3 подобни заявки, всяка за по частици от секундата и имам UPS-и мисля си струва риска.
wqw, виждам, че имаш сериозни познания по бази данни - предполагам отдавна си далеч от аксес. Все пак ако имаш някакво конкретно предложение как по-добре да реализирам задачата *в рамките на аксес* ще съм благодарен да споделиш.
Поздрави и на двамата - живи и здрави да сте!
| |
|
|
|
|