Поиск:

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


Новичок



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

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



Цитата(Frees @  28.1.2010,  19:44 Найти цитируемый пост)
можно с помощью вычислимого поля.  

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


Опытный
**


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

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



Вот нашел код с помощью, которого можно убрать все символы с номера телефона кроме цифр, то есть если введено:
тел. 8-(44)-222-22-22, то результат будет 80442222222

Код

var
 Source, Dest: String;
 i: Integer;
begin
  Source := 'строка откуда нужно убрать все символы';
  Dest := '';

   for i := 1 to Length(Source) do
    if Source[i] in ['0'..'9'] then
     Dest := Dest + Source[i];

 Edit2.Text:=ANSILowerCase(Dest);
end;


Добавлено через 1 минуту и 18 секунд
Дальше номер телефона 80442222222 нужно сократить до 7 сиволов, то есть убрать код города и т.д., для этого делаем проверку на количество символов, и если длина больше 7, удаляем первые символы пока не будет 7 знаков, то есть результат 2222222


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


Эксперт
****


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

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



Цитата(Valior @  28.1.2010,  23:49 Найти цитируемый пост)
Это как?

вот как то так
http://www.citforum.ru/programming/32less/les38.shtml#3


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


Опытный
**


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

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



Цитата

Что такое вычисляемые поля 

     Данные, хранимые в таблицах базы данных, обычно бывают представлены не в таком виде, который необходим для ваших приложений. Вот несколько примеров.

  • Вам необходимы общая сумма, среднее значение или результаты других расчетов, основанные на данных, имеющихся в таблице.
  • Вам необходимо отобразить поле, содержащее имя компании с ее адресом, но эта информация расположена в разных столбцах таблицы. 
  • Город, штат и ZIP-код хранятся в отдельных столбцах (как и должно быть), но для программы печати почтовых наклеек необходима эта информация в одном, корректно сформированном поле. 
  • Данные в столбце введены с заглавными и строчными буквами, но в вашем отчете необходимо использовать только заглавные буквы.
  • В таблице с предметами заказа хранятся цены продуктов и их количество, но не полная цена (цена одного продукта, умноженная на его количество) каждого продукта. Чтобы распечатать счет, необходимы полные цены. 

     В каждом из этих примеров данные хранятся не в том виде, в котором их необходимо предоставить приложению. Вместо того чтобы извлекать эти данные, а затем изменять их форму при помощи клиентского приложения или отчета, лучше извлекать уже преобразованные, подсчитанные или отформатированные данные прямо из базы данных. 


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


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


Новичок



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

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



Ну это я и сам сообразил, просто перебирать все строки в таблице очень и очень долго. Вопрос был, про возможность как то ускорить процедуру.
PM MAIL   Вверх
chip_and_dayl
Дата 28.1.2010, 21:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



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

Какая будет скорость неизвестно

Добавлено через 2 минуты и 30 секунд
Кстати, а сколько записей в текстовом файле?

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


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


Новичок



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

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



Ну это я и сам сообразил, просто перебирать все строки в таблице очень и очень долго. Вопрос был, про возможность как то ускорить процедуру.

Добавлено через 1 минуту и 12 секунд
Цитата(chip_and_dayl @  28.1.2010,  21:35 Найти цитируемый пост)

Добавлено через 2 минуты и 30 секунд
Кстати, а сколько записей в текстовом файле?


На вскидку не скажу, около 5 тысяч. В базе, где происходит поиск порядко 900 тыс
PM MAIL   Вверх
chip_and_dayl
Дата 28.1.2010, 21:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



smile ничего себе.

А как часто будет происходит сравнение базы данных с текстовым  файлом?

Добавлено через 55 секунд
И будут все записи проверятся на соответствие в базе по заданному критерию !?!


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


Новичок



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

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



Каждую неделю, + за неделю база возрастает на 1000-2000 обьявлений. Число в текстовом файле более или менее постоянно. Вот поэтому нужно поиск осуществлять не более 90 дней с текущей даты.

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


Эксперт
****


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

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



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

900 тысяч уже весомое число, так что для оптимизации забудь про локейт и займись индексацией, и поиском с помощью запросов. 


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


Новичок



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

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



Цитата(Frees @  28.1.2010,  21:44 Найти цитируемый пост)
900 тысяч уже весомое число, так что для оптимизации забудь про локейт и займись индексацией, и поиском с помощью запросов.  


В том то и дело, что теоретически запросы намного быстрее должны работать.
Но когда я вывжу в  дбгрид испобльзуя тайбл, процесс занимает сек 4-5, а когда через запрос 
Код

Select nomer,telefon,data from table

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


Опытный
**


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

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



Valior
Я бы тогда предложил следующее:
1. В таблице где хранится номер телефона, создать доп. поле с хранением номера телефона в чистом виде. 
2. Текстовой файл закинуть в базу
3. И также добавить поле номер телефона в чистом виде

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

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


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


Эксперт
****


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

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



а возможности поменять dbf на нормальную СУБД нет?
Цитата(Valior @  29.1.2010,  00:51 Найти цитируемый пост)
секунд 10-15

для 900 тыс это не много...

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


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


Опытный
**


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

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



Цитата(Frees @  28.1.2010,  21:44 Найти цитируемый пост)
и поиском с помощью запросов. 


Цитата(Valior @  28.1.2010,  21:51 Найти цитируемый пост)
В том то и дело, что теоретически запросы намного быстрее должны работать.Но когда я вывжу в  дбгрид испобльзуя тайбл, процесс занимает сек 4-5, а когда через запрос 


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


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


Новичок



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

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



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

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



Не совсем понял мысль.

Добавлено через 1 минуту и 3 секунды
Цитата(Frees @  28.1.2010,  21:55 Найти цитируемый пост)
а возможности поменять dbf на нормальную СУБД нет?

К сожалению нет, если только отдельными прогами перезапись в некую другую БД.
PM MAIL   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "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.1120 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


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

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