Поиск всех таблиц базы по содержанию части поля.
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 - ную часть. Нет, я конечно могу все таблицы прилинковать, но это наверное геморно будет.