Поиск:

Ответ в темуСоздание новой темы Создание опроса
> работа с dbf 
:(
    Опции темы
Valior
Дата 28.1.2010, 16:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 38
Регистрация: 24.5.2006

Репутация: нет
Всего: нет



Имеется, база данных состоящая из 3 файлов dbf
1й Файл имеет структуру в 35 полей. Нужны только 3.(номер заказа, дата и телефон)
2й 3й имеют структуру в 2 поля (номер заказа и текст заказа.)
Соответственно Номер заказа во всех файлах одинаковое(названия полей только разные).
Так же есть текстовый файл.(телефон и текст заказа)
необходимо посредством дельфи, организовать сравнение содержимого текстового файла с данной базой за определенный период.

Подскажите с чего начать7 Что лучше использовать и прочее?

PM MAIL   Вверх
Valior
Дата 28.1.2010, 17:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 38
Регистрация: 24.5.2006

Репутация: нет
Всего: нет



Подскажите, как удалить ненужные столбцы, и обьединить 3 файла в один, но чтобы поле номер заказа было одно?
PM MAIL   Вверх
Данкинг
Дата 28.1.2010, 17:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Yersinia pestis
****


Профиль
Группа: Завсегдатай
Сообщений: 8302
Регистрация: 7.11.2006
Где: მოსკოვი

Репутация: 35
Всего: 130



Цитата(Valior @  28.1.2010,  16:24 Найти цитируемый пост)
Что лучше использовать и прочее?

Можно ADO.

Цитата(Valior @  28.1.2010,  17:02 Найти цитируемый пост)
Подскажите, как удалить ненужные столбцы

Код

alter table BASE drop column Nenuzhnoe_pole


Цитата(Valior @  28.1.2010,  17:02 Найти цитируемый пост)
обьединить 3 файла в один

Перебором строк только. Но вообще данную задачу я бы решал на фоксе.


--------------------
There's nothing left but silent epitaphs.
PM MAIL WWW   Вверх
chip_and_dayl
Дата 28.1.2010, 17:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 603
Регистрация: 22.4.2007
Где: Украина, Киев

Репутация: 2
Всего: 9



Под обьединением файлов я так понял подразумевается - обьединение трех таблиц? Тады inner в помощь

А под удалением я так понял, что нужно просто вывести из всей кучи три поля? Тогда перечисление полей в Select поможет


--------------------
Фсё будет хорошо!!!
PM MAIL Skype   Вверх
Valior
Дата 28.1.2010, 17:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 38
Регистрация: 24.5.2006

Репутация: нет
Всего: нет



Цитата(Данкинг @  28.1.2010,  17:22 Найти цитируемый пост)
Можно ADO.


С ним вообще дела не имел, даже не представляю что это за зверь.



Цитата(chip_and_dayl @  28.1.2010,  17:39 Найти цитируемый пост)
Под обьединением файлов я так понял подразумевается - обьединение трех таблиц? Тады inner в помощь

А под удалением я так понял, что нужно просто вывести из всей кучи три поля? Тогда перечисление полей в Select поможет 


Обьединение, ну да, думаю что если привести ее к виду:

дата    номер заказа     телефон   текст заказа 1      текст заказа 2 

будет удобнее с ней дальше работать, при условии, что поля обьединятся правильно по "номера заказа".
Если же такой возможно нет, то возможно ли работать сразу с 3 таблицами? и как то указывать на это ключевое поле ?

PM MAIL   Вверх
chip_and_dayl
Дата 28.1.2010, 17:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 603
Регистрация: 22.4.2007
Где: Украина, Киев

Репутация: 2
Всего: 9



Valior
Все возможно. Какие компоненты используете для работы с базой?


--------------------
Фсё будет хорошо!!!
PM MAIL Skype   Вверх
Valior
Дата 28.1.2010, 17:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 38
Регистрация: 24.5.2006

Репутация: нет
Всего: нет



Цитата(chip_and_dayl @  28.1.2010,  17:49 Найти цитируемый пост)
Все возможно. Какие компоненты используете для работы с базой? 


    DataSource1: TDataSource;
    DBGrid1: TDBGrid;
    Table1: TTable;

База в Aliase.

Это сообщение отредактировал(а) Valior - 28.1.2010, 17:51
PM MAIL   Вверх
chip_and_dayl
Дата 28.1.2010, 18:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 603
Регистрация: 22.4.2007
Где: Украина, Киев

Репутация: 2
Всего: 9



Valior
Кстати, Ado, о котором говорил Данкинг имеет аналогичный компонент AdoTable, за рядом маленьких исключений которые связаны с подключением к базе/таблице

Значить для того, чтобы обьденить все три таблицы, нужен компонент Query, который подключается как и Table, только не выбирается название таблицы. Нас интересует свойство SQL, куда нужно программно или во время построения программы написать запрос:

Код

select Таблица1.НомерЗаказа, Таблица1.Поле13, Таблица2.Поле1, Таблица3.ПОле3 
from Таблица1, Таблица2, Таблица3
where Таблица1.НомерЗаказа=Таблица2.НомерЗаказа and Таблица1.НомерЗаказа=Таблица3.НомерЗаказа

или обьеденять через inner join

В первом варианте есть минус, во всех трех таблицах должен быть существовать заказ, то есть заказ с номером 5484 должен быть и в таблице 1 и 2 и 3, в противном случае он не попадет в результат.
Если в вашем случае наличие ссылки на номер заказ в какой-то таблице нет, то нужно использовать inner join

Добавлено @ 18:07
Вот инфа по inner join

Это сообщение отредактировал(а) chip_and_dayl - 28.1.2010, 18:09


--------------------
Фсё будет хорошо!!!
PM MAIL Skype   Вверх
Valior
Дата 28.1.2010, 18:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 38
Регистрация: 24.5.2006

Репутация: нет
Всего: нет



Цитата(chip_and_dayl @  28.1.2010,  18:03 Найти цитируемый пост)
В первом варианте есть минус, во всех трех таблицах должен быть существовать заказ, то есть заказ с номером 5484 должен быть и в таблице 1 и 2 и 3, в противном случае он не попадет в результат.
Если в вашем случае наличие ссылки на номер заказ в какой-то таблице нет, то нужно использовать inner 


Ахха, вот обнаружил 1 свою ошибку.
2 и 3 файл, они отличаются по кол-ву. Тоесть в 2 файле 10000 записей, а в 3 всего 6000.  Значит эта запись вообще не попадет?


Если забежать вперед, то  алгоритм такой, считали телефон из текстого файла, выполнили поиск в 1 таблице за промежуток в -90 дней назад, если телефон не найден в базе, то сохранить номер телефона и обьявление(взятые из текстогово файла) в другую базу.

Это сообщение отредактировал(а) Valior - 28.1.2010, 18:14
PM MAIL   Вверх
chip_and_dayl
Дата 28.1.2010, 18:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 603
Регистрация: 22.4.2007
Где: Украина, Киев

Репутация: 2
Всего: 9



Цитата(Valior @  28.1.2010,  18:07 Найти цитируемый пост)
Ахха, вот обнаружил 1 свою ошибку.2 и 3 файл, они отличаются по кол-ву. Тоесть в 2 файле 10000 записей, а в 3 всего 6000.  Значит эта запись вообще не попадет?

Аха, не попадет (тут уже нужно копать в сторону inner join). ТО есть 1 и 2 файл одинаковы (то беж каждому номеру заказу в первой таблице соответствует номер заказа во второй таблице)!?!

Добавлено через 4 минуты и 26 секунд
Цитата(chip_and_dayl @  28.1.2010,  18:35 Найти цитируемый пост)
(тут уже нужно копать в сторону inner join).

Ой, извиняюсь. Нужно копать в сторону левого или правого внешнего обьединения, то есть Left Outer Join  или Right Outer Join


--------------------
Фсё будет хорошо!!!
PM MAIL Skype   Вверх
Valior
Дата 28.1.2010, 19:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 38
Регистрация: 24.5.2006

Репутация: нет
Всего: нет



Ахха, это понятно. 
В поле телефон, записан телефон заказчика. Но не строго, тоесть может попадаться техх-хх-хх, может х(хххх)хх-хх-хх,ну вообщем по разному. А искать перебором, это очень долго, использую вот это
Table1.Locate('teefon',s,[loCaseInsensitive]);

но к сожалению, не всегда точно находит.... Как быть?
PM MAIL   Вверх
Данкинг
Дата 28.1.2010, 19:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Yersinia pestis
****


Профиль
Группа: Завсегдатай
Сообщений: 8302
Регистрация: 7.11.2006
Где: მოსკოვი

Репутация: 35
Всего: 130



Цитата(Valior @  28.1.2010,  19:12 Найти цитируемый пост)
не всегда точно находит.... Как быть? 

Запрос на фоксе:
Код

select * from BASE where allt(telefon)=='460-1517'




--------------------
There's nothing left but silent epitaphs.
PM MAIL WWW   Вверх
Frees
Дата 28.1.2010, 19:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2233
Регистрация: 2.12.2005
Где: Екатеринбург

Репутация: 23
Всего: 54



Цитата(Valior @  28.1.2010,  22:12 Найти цитируемый пост)
но к сожалению, не всегда точно находит.... Как быть?

привести все номера в базе к одному формату - убрать все кроме чисел, по длине номера определить нужно ли дописывать код города


--------------------
Кольцов Виктор Владимирович
PM MAIL ICQ   Вверх
Valior
Дата 28.1.2010, 19:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 38
Регистрация: 24.5.2006

Репутация: нет
Всего: нет



Цитата(Frees @  28.1.2010,  19:18 Найти цитируемый пост)
привести все номера в базе к одному формату - убрать все кроме чисел, по длине номера определить нужно ли дописывать код города 


Тоесть методом перебора? не годится... База оч большая.
PM MAIL   Вверх
Frees
Дата 28.1.2010, 19:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2233
Регистрация: 2.12.2005
Где: Екатеринбург

Репутация: 23
Всего: 54



Цитата(Valior @  28.1.2010,  22:41 Найти цитируемый пост)
Тоесть методом перебора? не годится...

 можно с помощью вычислимого поля. 


--------------------
Кольцов Виктор Владимирович
PM MAIL ICQ   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Базы данных и репортинг"
Vit
Петрович

Запрещено:

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами


Обязательно указание:

1. Базы данных (Paradox, Oracle и т.п.)

2. Способа доступа (ADO, BDE и т.д.)


  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи
  • Вопросы по SQL и вопросы по базам данных не связанные с Дельфи задавать здесь

FAQ раздела лежит здесь!


Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Vit, Петрович.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Базы данных и репортинг | Следующая тема »


 




[ Время генерации скрипта: 0.0944 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.