Вопрос № 58849: Здравствуйте!!! Вопрс следующий,
пусть имеется база данных Access и в ней допустим 3 таблицы, например:
T1:
Фамилия
имя
отчество
T2
Фамиля
год рождения
город проживания
T3
фамилия
тел мобильны...Вопрос № 58862: Ссылаясь на вопрос № 58758 хочу спросить: как работать с потоками.
В моей программе идет обработка большого текстового файла (2-5Мб) инфа из которого заносится в БД (стандартная paradox). Так вот, можно ли в этом случае использовать потоки,...
Вопрос № 58.849
Здравствуйте!!! Вопрс следующий,
пусть имеется база данных Access и в ней допустим 3 таблицы, например:
T1:
Фамилия
имя
отчество
T2
Фамиля
год рождения
город проживания
T3
фамилия
тел мобильный
тел домашний
Пусть фамилия будет ключевым (ну и универсальным) полем во всех таблицах, таблицы связаны между собой через поле "фамилия", так вот вопрос, если применить допустим фильтр (table.Filter:=....), будут отфильтрованы все таблицы или только та над которой он применялся? Если нет, то как это сделать?
И еще небольшое дополнение к вопросу))) Допустим я применил фильтр к таблице. Как вывести именно ОТФИЛЬТРОВАННЫЕ данные в Excel.
Огромное спасибо.
Отправлен: 14.10.2006, 01:26
Вопрос задал: Глеб (статус: Посетитель)
Всего ответов: 3 Мини-форум вопроса >>> (сообщений: 0)
Отвечает: Архангельский Андрей Германович
Здравствуйте, Глеб!
1) Фильтр применяется только к одной таблице. Если хочешь получить общие данные строй запрос, объединяющий 3 таблицы.
2) В каждой версии Access внутренние функции разные, поэтому я прекратил все работы с Access.
Структура таблиц настолько безграмотна, что смахивает на учебный пример из информатики. В таблице Т1 невозможно ввести всех людей проживающих, например, в Москве. Например - Власов Александр Владимирович, имеющий Авто - таких в Москве 28 человек (БД ГИБДД 2004г). А уж Иванов Иван Иванович - около 40тыс.
Иметь ключевым текстовое поле длиной 20 символов - это иметь индекс громадного размера и страшно медленную работу, особенно в Access
--------- Если дело заслуживает быть сделаным, то оно заслуживает чтобы его сделали ХОРОШО
Отвечает: sir henry
Здравствуйте, Глеб!
Вы ключом лучше вместо фамилии введите дополнительное цифровое поле, которое будет идентифицировать именно этого человека. Работать будет в десятки раз быстрее. :)
Если фильтровать нужно три таблицы, то здесь, однозначно, нужно делать запрос, фильтры применяются только к одной таблице.
Передать данные в Эксель можно с помощью OLE или применив соответствующий компонент с закладки Server.
Ответ отправил: sir henry (статус: Академик) Россия, Красноярск ---- Ответ отправлен: 14.10.2006, 07:53
Отвечает: 3лоумышленник
Здравствуйте, Глеб!
Будут отфильтрованы записи той таблицы, которую собственно фильтруете. Нет смысла разбивать на три таблицы. В вашем случае нужно создать ОДНУ таблицу "Anketa"с перечисленными полями в вопросе + ключевое поле типа "счётчик":
1. AnketaId - счётчик, первичный ключ
2. F
3. I
4. O
5. Birthday
6. City
8. MobPhone
9. HomePhone
Про реляционные БД и суть нормализации лучше почитать какой-нибудь самоучитель, очень хрош Ю. Бекаревич, Н. Пушкина "Самоучитель Microsoft Access 2002"
--------- "Люди неизбежно умирают", A. Schwarzenegger (Terminator 3: Rise of the Machines)
Ответ отправил: 3лоумышленник (статус: Студент)
Ответ отправлен: 14.10.2006, 12:02
Вопрос № 58.862
Ссылаясь на вопрос № 58758 хочу спросить: как работать с потоками.
В моей программе идет обработка большого текстового файла (2-5Мб) инфа из которого заносится в БД (стандартная paradox). Так вот, можно ли в этом случае использовать потоки, что бы побыстрее все работало? Какое ограничение на кол-во записей в таблице парадокса? По-моему около 65000 записей - не более. Если оно так, то какую БД посоветуете использовать, чтоб ее можно было с прогой переносить и устанавливать? (я понимаю, что MS SQL хороший выбор, но она уж слишком большая)...
Удачи =)
Отправлен: 14.10.2006, 11:07
Вопрос задал: Baduin (статус: 1-ый класс)
Всего ответов: 4 Мини-форум вопроса >>> (сообщений: 2)
Отвечает: Morgen_krsk
Здравствуйте, Baduin!
Не знаю про Paradox, работал/ю c Interbase (Firebird), Oracle. По моему, если в БД ограничение 65536 строк, то это не база данных. Используйте Firebird.
Ответ отправил: Morgen_krsk (статус: 2-ой класс)
Ответ отправлен: 14.10.2006, 11:36
Отвечает: 3лоумышленник
Здравствуйте, Baduin!
Используйте MS Access, это если БД как локальная используется.
Работа с потоками: С. Тейксейра, К. Пачеко "Delphi 5. Руководство разработчика. Том 1. Основные методы и технологии", Глава 11. Создание многопоточных приложений, стр.447-504.
В вашем случае всё просто, создадите поток и в нём пишете в базу, можно синхронизипровать с VCL через Synchronize()
--------- "Люди неизбежно умирают", A. Schwarzenegger (Terminator 3: Rise of the Machines)
Ответ отправил: 3лоумышленник (статус: Студент)
Ответ отправлен: 14.10.2006, 12:12
Отвечает: Архангельский Андрей Германович
Здравствуйте, Baduin!
FireBird Embeded - бесплатный, стандартный SQL, полно компонентов прямого доступа, не требует установки, дистрибутив весит 2877Кб, поддерживает БД до 980Гб (известный пример)
--------- Если дело заслуживает быть сделаным, то оно заслуживает чтобы его сделали ХОРОШО
Отвечает: sir henry
Здравствуйте, Baduin!
Не знаю, как в современных (относительно) версиях Парадокса, однако в версии 4.0 предел для таблиц был в 262 миллиона символов. Исходя из этого можно подсчитать, сколько записей умещается в таблицу.
Количество полей - 255,
Количество символов в поле - 255,
Итого получаем:
262 000 000 div 255 div 255 ~ 4000 записей. Такая БД кому-то нужна? думаю вряд ли.
Попробуйте подсчитать максимальное кол-во записей для своих размеров полей. Могу сказать точно, что люди делают и намного больше записей, так что тут должен быть какой-то другой максимальный параметр.
По-моему в последних версиях (5.0 и выше) размер таблицы зависит от размера блока. Сама таблица может обрабатывать не более чем 64 килоблока. Если у Вас блоки заданы размером по 4098 то умножив 64к на 4096 мы получаем максимальный размер таблицы. После этого, Вы определяете по размеру и кол-ву полей, сколько у Вас уходит на одну запись и делите на эту цифру получившийся макс размер таблицы. Так Вы узнаете, сколько записей может иметь конкретно Ваша таблица.
По работе с потоками в инете очень много примеров. Вот один из них:
http://www.soft32.ru/delphi.shtml?topic=comps&title=threads_example
Ответ отправил: sir henry (статус: Академик) Россия, Красноярск ---- Ответ отправлен: 15.10.2006, 07:36