Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Microsoft Office (Word, Excel, Outlook и т.д.) (http://forum.oszone.net/forumdisplay.php?f=115)
-   -   [решено] Access. Выбор данных (http://forum.oszone.net/showthread.php?t=214441)

ab.random 30-08-2011 21:14 1742807

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

Iska 31-08-2011 06:54 1742979

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 1743056

Спасибо, конечно, но где это прописывать?
Я Access открыл второй или третий раз в жизни :lamer: и рассчитывал на подсказку, как это сделать с помощью конструкторов и мастеров из стандартной панели инструментов, если это возможно

ferget 31-08-2011 10:43 1743072

попробуйте ALT+F11

Iska 31-08-2011 14:23 1743239

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

* открыть базу данных;
* перейти на вкладку «Модули»;
* нажать кнопку «Создать»;
* выделить (если есть) текст нового модуля и заменить его на код из #2;
* сменить, по потребности, имя модуля нужное и сохранить.

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

ferget 31-08-2011 15:22 1743285

вкладка «Создание»

ab.random 31-08-2011 23:41 1743663

Всё, разобрался :yahoo: Всем откликнувшимся огромное спасибо!)


Время: 02:22.

Время: 02:22.
© OSzone.net 2001-