Поиск:

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


Опытный
**


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

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



1. Создать в таблице доп. поле, чтобы хранить телефон в виде ххххххх
2. Отказать от текстового файла. Создать таблицу с теми же полями, что  хранил текстовой файл, и информацию перенести  в эту же созданную таблицу
3. В таблице, которую мы создали как замену текстовому файлу хранить телефон в виде ххххххх

Правда с хранением есть один нюанс, так как мы храним 7  цифр, то кода города нету, может возникнуть ситуация, когда номер телефона с Донецка, например, 0(62)-222-22-22 совпадет с номером телефона с Киева 0(44)-222-22-22.

Да, теперь самое главное, для того, чтобы сравнить есть ли данные в базе, которые  есть в текстовом файле (который теперь не текстовой) достаточно написать запрос следующего плана
Код

select выводим нужные поля
from указываем таблицы
делаем обьединение таблиц
задаем условие не больше 90 дней

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



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


Эксперт
****


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

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



Цитата(chip_and_dayl @  29.1.2010,  00:53 Найти цитируемый пост)
Я бы тогда предложил следующее:1. В таблице где хранится номер телефона, создать доп. поле с хранением номера телефона в чистом виде. 2. Текстовой файл закинуть в базу3. И также добавить поле номер телефона в чистом виде

4 проиндексировать поле "Телефон в чистом виде"


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


Опытный
**


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

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



Frees
Точно. Самое главное упустил)


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


Новичок



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

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



Цитата(chip_and_dayl @  28.1.2010,  22:12 Найти цитируемый пост)
1. Создать в таблице доп. поле, чтобы хранить телефон в виде ххххххх
2. Отказать от текстового файла. Создать таблицу с теми же полями, что  хранил текстовой файл, и информацию перенести  в эту же созданную таблицу
3. В таблице, которую мы создали как замену текстовому файлу хранить телефон в виде ххххххх

Правда с хранением есть один нюанс, так как мы храним 7  цифр, то кода города нету, может возникнуть ситуация, когда номер телефона с Донецка, например, 0(62)-222-22-22 совпадет с номером телефона с Киева 0(44)-222-22-22.

Да, теперь самое главное, для того, чтобы сравнить есть ли данные в базе, которые  есть в текстовом файле (который теперь не текстовой) достаточно написать запрос следующего плана
    
select выводим нужные поля
from указываем таблицы
делаем обьединение таблиц
задаем условие не больше 90 дней
полученный результат можно куда-то вставить




1. А разница между созданием поля и изменением уже существующего?
2. Тут есть проблема. Данный файл мы получаем, после работы программы FineReader, тоесть будут еще процедуры для преобразования в надлежащий вид. но думаю, что можно потом будет перенести в БД
3.Можно

А вот ньюанс очень критичный, тк, телефоны действительно межрегиональные. но думаю, не составит особо труда хранить и 12 цифр



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


Опытный
**


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

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



Цитата(Valior @  28.1.2010,  22:20 Найти цитируемый пост)
1. А разница между созданием поля и изменением уже существующего?

Разница в том, что нам не нужно будет его гонять туда и сюда. Так как мы в виде ххххххх храним для базы, а для пользователя отображаем в удобном виде, в котором он записал.

Цитата(Valior @  28.1.2010,  22:20 Найти цитируемый пост)
2. Тут есть проблема. Данный файл мы получаем, после работы программы FineReader, тоесть будут еще процедуры для преобразования в надлежащий вид. но думаю, что можно потом будет перенести в БД

Тогда постоянно загонять с текстового файла данные в базу, после чего очистить текстовой файл

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

Можно 12, но если он в базе хранится в виде тел. 478-77-44, а в текстовом файле записан как 044-478-77-44, то на выходе будут разные значения. Тут такой вопрос, код города все пишут!?! или есть люди, которые  записывают без кода города?

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


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


Новичок



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

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



А, все дошло, тоесть одно поле в отором будем хранить еще и голой телефон, все понял.
В базе поле телефон имеет длину 12 символов. И код города только в случае, если он не родной город. 
А из текстового файла запись производить в новую таблицу? Как лучше? И что значит индексировать? Про это можно поподробнее?

Офтоп, 

dbmemo1.text:=(Текст из колонки 'номер', в веделенной в дб гриде строке), как это сделать? чет не могу найти нужное...

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


Опытный
**


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

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



Цитата(Valior @  28.1.2010,  22:58 Найти цитируемый пост)
dbmemo1.text:=(Текст из колонки 'номер', в веделенной в дб гриде строке), как это сделать? чет не могу найти нужное...

Если Дбгрид отображает результат Квери, то 

Код

dbmemo1.Tetx:=Query1.FieldByNAMe('telefon').AsString


если ДбГрид выводит набор данных с Табле, то Квери1 заменить на Табле1

Добавлено @ 23:08
Цитата(Valior @  28.1.2010,  22:58 Найти цитируемый пост)
А, все дошло, тоесть одно поле в отором будем хранить еще и голой телефон, все понял.

Аха. Первый храним для пользователя, а второй для сравнения данных

Цитата(Valior @  28.1.2010,  22:58 Найти цитируемый пост)
В базе поле телефон имеет длину 12 символов. И код города только в случае, если он не родной город. 

Все-таки нужно найти оптимальную длину, на которую нужно усекать телефон, то есть нам нужно оставить главные цифры, код и номер телефона, если минимальный код страны 2 символа, а номер телефона 7, то выходит 9.
Для чего это я говорю, код города я так понял пишут, но вот код страны, могут написать и могут не написать, тогда выйдет разная длина

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


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


Новичок



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

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



Цитата(chip_and_dayl @  28.1.2010,  23:04 Найти цитируемый пост)
Все-таки нужно найти оптимальную длину, на которую нужно усекать телефон, то есть нам нужно оставить главные цифры, код и номер телефона, если минимальный код 2 символа а номер телефона 7, то выходит 9.
Для чего это я говорю, код города я так понял пишут, но вот код страны, могут написать и могут не написать, тогда выйдет разная длина 


Там еще пишут и сотовые.
PM MAIL   Вверх
chip_and_dayl
Дата 28.1.2010, 23:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Valior
Ну, сотовый тоже имеет 7 цифр - сам номер, и 2 цифры код оператора

9 цифр должно хватить, чтобы телефоны следующего плана были равны:
38(код страны) 78(оператора/города) 545 56 55  = 78 545 56 55
38(код страны) 068(оператора/города) 545 51 11 = 68 545 51 11
38(код страны) 378(оператора/города) 545 56 55 = 78 545 56 55
096 787 77 05 = 96 787 77 05

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


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


Новичок



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

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



Ок, согласен)

Щас уже проверить не смогу, забыл с работы захватить файлы.
Но подведем итог.

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


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


Опытный
**


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

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



Valior
Итог утверждаю :) 


Цитата(Valior @  28.1.2010,  23:26 Найти цитируемый пост)
Щас уже проверить не смогу, забыл с работы захватить файлы.

Уже и время позднее, чтобы проверять. Да и работы здесь не на час :)

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


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


Новичок



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

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



Query1.SQL.Text:='INSERT INTO base (phone) '
пытаюсь вставлять в поле с "чистым номером", результат выполнения процедуры nomer, как это оформить?
PM MAIL   Вверх
Frees
Дата 29.1.2010, 11:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



Код

Query1.SQL.Text:='INSERT INTO base (phone)VALUES(:phone) '
Query1.ParamByName('phone').Value := nomer;


Добавлено через 1 минуту и 44 секунды
а если ты хочеш в уже добавленной записи дописать "чистый номер" то тебе нужен update а не insrt


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


Новичок



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

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



Цитата(Frees @  29.1.2010,  11:18 Найти цитируемый пост)

а если ты хочеш в уже добавленной записи дописать "чистый номер" то тебе нужен update а не insrt 


создано чистое поле, я в него хочу скопировать то, что уже в другом поле, но с необходимыми изменениями.
Query1.ParamByName('phone').Value := nomer;
это тож понятно, как передавать в процедуру в виде входного параметра, результат селекта?

Это сообщение отредактировал(а) Valior - 29.1.2010, 11:45
PM MAIL   Вверх
Frees
Дата 29.1.2010, 12:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



Цитата(Valior @  29.1.2010,  14:36 Найти цитируемый пост)
создано чистое поле, я в него хочу скопировать то, что уже в другом поле, но с необходимыми изменениями.

тебе нужен UPDATE


Код

Query1.SQL.Text:='SELECT id, old_number from base'
Query1.open;
Query2.SQL.Text:='udate base set phone = :phone) where id = :id';
while  not Query1.eof do
begin
  Query2.Close;
  Query2.ParamByName('id').Value := Query1.FieldByName('id').Value;
  Query2.ParamByName('phone').Value := nomer(Query1.FieldByName('old_number').asString);
  Query2.execsql;//или как то так, вобщем выполняем запрос
  Query1.next;
end;


Это сообщение отредактировал(а) Frees - 29.1.2010, 12:21


--------------------
Кольцов Виктор Владимирович
PM MAIL ICQ   Вверх
Страницы: (5) Все 1 2 [3] 4 5 
Ответ в темуСоздание новой темы Создание опроса
Правила форума "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.0898 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


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

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