Access поиск в таблицах

Весь MS Office, программирование на Visual Basic for Applications и MS VB

Модератор: Naeel Maqsudov

Аватара пользователя
Aent
Сообщения: 1129
Зарегистрирован: 01 окт 2006, 14:52
Откуда: Saratov,Russia
Контактная информация:

Teslenko_EA писал(а):Здравствуйте Asya.
хочу перейти от "страшилок" к реальным оценкам.
Из всего выше сказанного действительно может не позволить Вам решить задачу с помощью БД MS Access следующее:
>>1. ограничение подключений к рабочей станции с OC Windows устанавливаемое по умолчанию
>>(10 одновременных подключений, об этом писал Aent), но это решаемо:
10 это кстати для Professional - для Home вполовину меньше :(

>>а. выложить БД на файдовый сервер
Ну так я и пишу - или серверная OS Windows или тот или иной юникс (Linux,FreeBsd и т.д.)
Или Вы, Евгений, можете предложить под файловый сервер что нибудь ещё ?

>>б. создать рабочую станцию с расширенным ограничением (более 10 подключений).
Крайне не рекомендовал бы, Asya - не знаю как у вас в Украине а у нас это прямая дорога к
проблемам с отделом К. Лично знаю 3 случая с конторами пострадавшими именно на этом.
В 2х случаях дело кончилось многотысячным штрафом, в 3-м уголовным делом ибо то, что
рекомендует Евгений - прямое нарушение лицензии XP. И если с вашей конторы есть что взять ...

>>2. более 50 пользователей сетевой БД.
Ну Asya же пишет - 15 человек.

>>3. размер файла БД >2Гб.
Это да. Причём реально крышу ACCESS сносит при значительно меньших объёмах. У меня
были проблемы стабильной работы 2003 Access при 1.6 Gb Кстати SQL Express 2005 держит
4GB. Но по сети я бы его несмотря на бесплатность не использовал более чем для 2-3 человек.
А у ACCESS 2007 то же теоретическое ограничение на 2Gb. Причём 2Gb это максимальный размер с системными объектами. На данные пользователя даже теоретически остаётся меньше.

>Если Вас эти три фактора не пугают, все остальные связанные с таким проектом задачи
>(администрирование, бэкапирование...) вполне решаемы в БД MS Access.
Кто-ж спорит - возможно. Можно так же и на dbf и на плоских файлах... ,но IMHO - ЭТО КОНЦЕПТУАЛЬНО НЕПРАВИЛЬНО Это не красивое решение.
Тем не менее могу вам дать следующий совет: вы можете саму запросную систему и анализ результата сделать на знакомом вам Excel.
По смыслу задачи результат выборки очевидно не может быть слишком большим - вы всегда
можете разместить его на листе. А к чему обращаться через ADO к MDB или к SQL cерверу
с точки зрения программирования в вашем случае всё равно. Меняется только строка
Сonnection или UDL файл. Т.е такое решение будет ещё и масштабируемым
Asya
Сообщения: 110
Зарегистрирован: 06 фев 2007, 14:33
Откуда: Киев
Контактная информация:

Teslenko_EA писал(а): Если Вас эти три фактора не пугают...

:) не пугают..
Зря я, наверное, про 2,5 млн сказала :) Есть еще много таблиц, которые надо собрать в одну базу, они не такие большие, и если с теми не получится - получится хоть с этими..
В общем, простой Select я уже написала, который находит ИНН и выдает результат запроса. Но это одна таблица.
Подскажите, если таблиц пять, то каким образом выводить результат, если заемщик найден, например, в трех таблицах?? ..как это будет выглядеть?
Asya
Сообщения: 110
Зарегистрирован: 06 фев 2007, 14:33
Откуда: Киев
Контактная информация:

Aent писал(а): Меняется только строка
Сonnection или UDL файл. Т.е такое решение будет ещё и масштабируемым


VBA Excel моя любовь - но, к сожалению, я понятия не имею про строку Connection и UDL файл :) )))) А вообще, наверное, скажу начальнику - бери в штат настоящего программиста )) И там уже SQL и все такое :)
А если серьезно, Aent и Евгений, спасибо за ликбез по возможностям Access, теперь будет что предъявить в качестве аргументов :)
Asya
Сообщения: 110
Зарегистрирован: 06 фев 2007, 14:33
Откуда: Киев
Контактная информация:

Спасибо за ссылки (особенно за третюю :) )
Тока я поняла, что опять неправильно описала задачу )
Суть в том, что таблица как бы не связаны...это информация из разных источников, например: утерянные паспорта (таблицы без ИНН), поддельные ИНН - таблицы без паспортных данных (причем на один ИНН может быть несколько человек мошенников), поэтому как бы уникальных номеров заемщиков нет.
Поиск осуществляется по 1) ИНН 2) Серия + номер паспорта
В одной таблице нашли его по ИНН и показали результат, в другой нашли серию+номер паспорта показали результат, тока как показать один результат , если таблицы совсем разные.
Это надо пять раз нажимать на кнопку и пять раз получать результат запроса к каждой таблице??

P.S. Сразу добавлю, что к этим главным таблицам, есть все таки другие связанные таблицы, с описанием всяких причин попадания в список и все такое, поэтому тут все таки Access с SQL запросами
Аватара пользователя
Aent
Сообщения: 1129
Зарегистрирован: 01 окт 2006, 14:52
Откуда: Saratov,Russia
Контактная информация:

Ну на кнопку, думаю, жать можно и один раз :)
А запросы разные - к разным таблицам, а отображать результат можно скажем как на
radarix.com - cобственно ваша задача их частный случай ... :)
Teslenko_EA
Сообщения: 526
Зарегистрирован: 04 фев 2007, 18:37
Откуда: Сургут
Контактная информация:

Здравствуйте Asya.
Как я понял БД используется только для получения информации, ввод и обработка данных в ней не подразумевается.
И потому решение Вашей задачи, не требует постоянного подключения к БД, а следовательно ограничений о которых говорили ранее для проекта нет:
1,2 время подключение к удаленной системе определяется временем подключения к БД и временем выполнения запоса. Вероятность того, что все 15 пользователей одновременно пошлют запрос к БД очень мала, но если это произойдет, вполне достаточно по коду ошибки подключения попытаться еще несколько раз. Для пользователя такая задержка будет мало заметна.
3 файл БД выкладывается для чтения, соответственно его роста до 2Гб не будет.
Вопрос только о структуре таблиц выкладываемой БД. Если структура постоянна, имена таблиц и полей можно разместить в коде. Подключаться к БД можно как уже говорил Aent, с помощью файла UDL. Ну а код может выглядеть подобным образом:

Код: Выделить всё

Dim cn As New ADODB.Connection
Sub toExcel()
Dim i&
Set cn = New Connection
cn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\Base_NEW\OMTS.mdb"
'с использованием UDL
'Set cn = New Connection
'cn.ConnectionString = "FILE NAME=C:\DB.udl"
'cn.Open
i = 5
i = fromDB("[User]", "iRight", "0", i)
i = fromDB("[User]", "iRight", "1", i)
i = fromDB("[User]", "", "", i) 'все записи таблицы
cn.Close:    Set cn = Nothing
End Sub
Function fromDB(sTable$, sField$, sCriteria$, iRow&) As Long
'sTable     - имя таблицы
'sField     - имя поля отбора
'sCriteria  - критерий отбора
'iRow       -
Dim rs As New ADODB.Recordset, ssql$
If Len(sField) > 0 Then
    'конструкция для отбора по строчным полям
    ssql = " where " & sField & "='" & sCriteria & "'"
    'конструкция для отбора по числовым полям
    'ssql = " where " & sField & "=" & sCriteria
End If
ssql = "select * from " & sTable & ssql
rs.Open ssql, cn, adOpenKeyset, adLockReadOnly
'ограничение максимального кол-ва строк
'If rs.RecordCount < 100 Then
    ActiveSheet.Range("A" & iRow).CopyFromRecordset rs
    fromDB = iRow + 2 + rs.RecordCount
'End If
rs.Close:    Set rs = Nothing
End Function
Конечно подключение библиотеки ADO обязательно!
Евгений.
P.S.не сделал пометку, этот код для "Вашего любимого" :)
Teslenko_EA
Сообщения: 526
Зарегистрирован: 04 фев 2007, 18:37
Откуда: Сургут
Контактная информация:

To Aent
Вы наверное восприняли мой пост как личную обиду, "Ну так я и пишу.... "
Не принимайте все на свой счет, это было изложение моего виденья предмета, к тому же я ссылался на предидущих авторов - "...из всего выше сказанного...".
И я не призываю автора преступать закон, пропатчить систему можно так же приобретя лицензию на подобное действие в Microsoft. Но это только возможный вариант - не рекоменднация.
С уважением.
Евгений.
Аватара пользователя
Aent
Сообщения: 1129
Зарегистрирован: 01 окт 2006, 14:52
Откуда: Saratov,Russia
Контактная информация:

To Teslenko EA - Никаких обид, Евгений. Я просто хотел прояснить вопрос.
Нельзя ли ссылочку на возможность приобретения лицензии на пропачивание системы. Меня этот вопрос очень интересует. Проблема встаёт регулярно а не все клиенты согласны на нормальный файловый сервер. Но что то я о том что бы Микрософт давала такие разрешения впервые слышу...
C уважением,
Андрей С. Энтелис
Аватара пользователя
Aent
Сообщения: 1129
Зарегистрирован: 01 окт 2006, 14:52
Откуда: Saratov,Russia
Контактная информация:

К рабочей станции разрешается подключать не более 10 (десяти) компьютеров
или других электронных устройств (далее «устройство») для использования
служб данного продукта, причем исключительно для доступа к файловым службам,
службам печати, службам IIS, а также к службам удаленного доступа (включая
общий доступ к подключению и телефонные службы).
Максимальное количество подключений, равное деcяти, включает любые косвенные
подключения, производимые через «мультиплексирующее» или иное программное
или аппаратное обеспечение, позволяющее осуществлять коллективный доступ
или поочередные подключения.
Из лицензии Microsoft на Windows XP Professional (для Home 5)
Андрей Энтелис,
aentelis.livejournal.com
Ответить