Отправляет email-рассылки с помощью сервиса Sendsay

RFpro.ru: СУБД и Delphi/Lazarus

  Все выпуски  

RusFAQ.ru: СУБД и Delphi


РАССЫЛКИ ПОРТАЛА RUSFAQ.RU

/ КОМПЬЮТЕРЫ И ПО / Языки программирования / СУБД и Delphi

Выпуск № 225
от 19.10.2006, 21:05

Администратор:CJ
В рассылке:Подписчиков: 268, Экспертов: 39
В номере:Вопросов: 2, Ответов: 7


Вопрос № 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
---------
Если дело заслуживает быть сделаным, то оно заслуживает чтобы его сделали ХОРОШО
Ответ отправил: Архангельский Андрей Германович (статус: Практикант)
Ответ отправлен: 14.10.2006, 07:39

Отвечает: 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Гб (известный пример)
---------
Если дело заслуживает быть сделаным, то оно заслуживает чтобы его сделали ХОРОШО
Ответ отправил: Архангельский Андрей Германович (статус: Практикант)
Ответ отправлен: 14.10.2006, 19:39

Отвечает: 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


Отправить вопрос экспертам этой рассылки

Приложение (если необходимо):

* Код программы, выдержки из закона и т.п. дополнение к вопросу.
Эта информация будет отображена в аналогичном окне как есть.

Обратите внимание!
Вопрос будет отправлен всем экспертам данной рассылки!

Для того, чтобы отправить вопрос выбранным экспертам этой рассылки или
экспертам другой рассылки портала RusFAQ.ru, зайдите непосредственно на RusFAQ.ru.


Форма НЕ работает в почтовых программах The BAT! и MS Outlook (кроме версии 2003+)!
Чтобы отправить вопрос, откройте это письмо в браузере или зайдите на сайт RusFAQ.ru.


© 2001-2006, Портал RusFAQ.ru, Россия, Москва.
Идея, дизайн, программирование: Калашников О.А.
Email: adm@rusfaq.ru, Тел.: +7 (926) 535-23-31
Авторские права | Реклама на портале
Версия системы: 4.37 от 04.10.2006
Яндекс Rambler's Top100

В избранное