PDA

Показать полную графическую версию : [решено] Access. Выбор данных


ab.random
30-08-2011, 21:14
Помогите, пожалуйста, выбрать данные из БД *.mdb. База очень большая, и изменять значения вручную просто бессмысленно.
Задача такая. В БД имеется большое количество таблиц, сделанных по одному шаблону. В частности, в каждой таблице имеется колонка с названием "ОУ". Требуется из всех таблиц вывести строки, у которых в столбце ОУ содержится число 21 (с любыми комбинациями остальных слов). В одной таблице может быть несколько строк, удовлетворяющих этому требованию. Затем, во всех выбранных строках надо увеличить значение столбца "стаж" на единицу. Так же желательно, чтобы в найденной строке отображалось название таблицы, из которой она взята.
Заранее спасибо.

Iska
31-08-2011, 06:54
ab.random, примерно так:
Option Compare Database
Option Explicit

Sub ExecFromAllTables()
Dim objTableDef As TableDef

With CurrentDb
For Each objTableDef In .TableDefs()
If objTableDef.Properties.Item("Attributes") And dbSystemObject = dbSystemObject Then
Else
If FieldExist(objTableDef, "ОУ") And FieldExist(objTableDef, "стаж") Then
.Execute _
"UPDATE [" & objTableDef.Name & "] " & _
"SET [стаж] = [стаж] + 1 " & _
"WHERE [ОУ] LIKE '*21*'"

Debug.Print objTableDef.Name, vbTab, "обновлено: " & .RecordsAffected & " записей"
End If
End If
Next
End With
End Sub

Function FieldExist(objTableDef As TableDef, strFieldName As String)
Dim objField As Field

FieldExist = False

For Each objField In objTableDef.Fields
If objField.Name = strFieldName Then
FieldExist = True

Exit For
End If
Next
End Function

ab.random
31-08-2011, 10:21
Спасибо, конечно, но где это прописывать?
Я Access открыл второй или третий раз в жизни :lamer: и рассчитывал на подсказку, как это сделать с помощью конструкторов и мастеров из стандартной панели инструментов, если это возможно

ferget
31-08-2011, 10:43
попробуйте ALT+F11

Iska
31-08-2011, 14:23
ab.random, у меня нет Microsoft Access 2010. В 2003-ем это может выглядеть так:

* открыть базу данных;
* перейти на вкладку «Модули»;
* нажать кнопку «Создать»;
* выделить (если есть) текст нового модуля и заменить его на код из #2 (http://forum.oszone.net/post-1742979-2.html);
* сменить, по потребности, имя модуля нужное и сохранить.

Вывод через «Debug.Print» заменить потребным выводом. Вызов процедуры также назначить, через что нужно.

ferget
31-08-2011, 15:22
вкладка «Создание»

ab.random
31-08-2011, 23:41
Всё, разобрался :yahoo: Всем откликнувшимся огромное спасибо!)




© OSzone.net 2001-2012