Поиск всех таблиц базы по содержанию части поля.

Flammer
Дата: 26.11.2009 10:35:46
Ситуация:
Есть база, скажем, на 200-300 таблиц.
Как найти таблицы, имеющие текстовые поля (имена полей разные и неизвестны), с конкретным содержанием. Например, надо найти все таблицы с содержанием текстового поля like '*Муниципальное образование Москва*', т.е. искать по части поля.
При просмотре FARом я вижу искомую строчку, но в какой именно таблице - не знаю, как найти.
отакота
Дата: 26.11.2009 11:28:16
программно в цикле по списку таблиц (currentdb.tabledefs) генерить sql-текст на выборку (select count(*) from) с LIKE-условием по OR по всем текстовым полям (найти их в tabledef.fields по свойству Type). потом открыть recordset на этом sql и прочитать этот count - если он больше нуля - взять/показать имя этой таблицы.
mds_world
Дата: 26.11.2009 11:46:18
Например:
Sub allfieldsearch(shl)
    Dim db As Database, tdf As TableDef, fld As Field, i, j, s, rst As ADODB.Recordset
    Set db = CurrentDb
    On Error Resume Next
    Set rst = New ADODB.Recordset
    For Each tdf In db.TableDefs
        If Left(tdf.Name, 4) <> "Msys" Then
            For Each fld In tdf.Fields
                If fld.Type = dbText Or fld.Type = dbMemo Then
                    s = "select *, [" & fld.Name & "] as NameTable from [" & tdf.Name & "]" _
                    & " where [" & fld.Name & "]='" & shl & "'"
                    
                    rst.Open s, CurrentProject.Connection
                    If rst.EOF And rst.BOF Then GoTo nexttbl
                    Do Until rst.EOF
                        Debug.Print tdf.Name, rst.GetString(, , ",")
                        rst.MoveNext
                    Loop
nexttbl:
                    rst.Close
                End If
            Next
        End If
    Next
End Sub
Здесь shl это шаблон поиска. Результат поиска выводится в Immediate в виде названия таблицы и значений всех полей таблицы
Flammer
Дата: 17.05.2010 14:38:46
Форумчане, доброе время!
Попробовал сделать так, как советовал mds_world.
Но, при попытке запуска Sub в модуле компилятор ругается на
"Dim db As Database"
Пишет, что
"Compile error:
User-defined type not defined"
И дальше никак...
Подскажите, что можно сделать или что я сделал не так?
Может быть, что-то с настройками самого Access?
Karfaqen
Дата: 17.05.2010 14:40:51
Flammer
Форумчане, доброе время!
Попробовал сделать так, как советовал mds_world.
Но, при попытке запуска Sub в модуле компилятор ругается на
"Dim db As Database"
Пишет, что
"Compile error:
User-defined type not defined"
И дальше никак...
Подскажите, что можно сделать или что я сделал не так?
Может быть, что-то с настройками самого Access?
Подключите в референсах библиотеку DAO
Flammer
Дата: 17.05.2010 15:30:34
Нашёл ответ на свой вопрос :-).

Надо было Tools->References отметить "галкой" пунктик "Microsoft DAO 3.6 Object Library".

Теперь буду с самим поиском в Sub разбираться.
Flammer
Дата: 17.05.2010 15:32:45
Точно, Karfagen, так и сделал!
Извини, что сразу не написал - пока в Сети лазил, не заходил на форум.
Flammer
Дата: 07.06.2010 15:48:37
Привет, народ!
Пробую этот код - не получается, в том смысле, что код ничего не делает.
Прокручивается процедура и всё, ноль эмоций.
Смотрю переменные в окошке "Locals" переменной "fld" ничего не присваивается, значение - "Nothing".
Подскажите, что делать?
ё
Дата: 07.06.2010 16:08:59
Flammer
Привет, народ!
Пробую этот код - не получается, в том смысле, что код ничего не делает.
Прокручивается процедура и всё, ноль эмоций.
Смотрю переменные в окошке "Locals" переменной "fld" ничего не присваивается, значение - "Nothing".
Подскажите, что делать?

...а у меня - работает
что я делаю не так? (с)

это из окна Иммедиайте
allfieldsearch("ляляля")
МояТаблитса   ляляля,1,
alvk
Дата: 07.06.2010 16:14:11
mds_world,

Немного не в тему. А эту фишку есть возможность переделать и использовать в SQL сервере? Хочу расковырять 1с 7.7 sql - ную часть. Нет, я конечно могу все таблицы прилинковать, но это наверное геморно будет.