Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Работа с БД FoxBASE+/dBase III PLUS в С++ Билдер 6, Какие инструменты использовать? 
:(
    Опции темы
Eugene82
  Дата 15.7.2005, 10:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 85
Регистрация: 30.5.2005
Где: г. Ростов-на-Дону

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



Вообще задача такая: Есть таблица FoxBASE+/dBASE III PLUS. Нужно исправить значение текстового поля, добавив текст в начало записи, если начало записи удовлетворяет условию вхождения в текстовый файл - в текстовом файле существует такая строка.

Я представляю программу примерно так:
1. Открыть файл таблицы.
2. Открыть текстовый файл.
3. Взять значение из поля таблицы.
4. Сравнить это значение строкой текстового файла. Сравнение должно быть по количеству первых символов равное количеству символов текущей строки в текстовом файле.
5. Если совпадают - записать в поле новое значение в виде "новый текст + старое значение".
6. Если не совпадают - сравнить со следующей строкой текстового файла.
7. Взять значение из следующей строки таблицы.
8. Повторять пункты 4-7 пока не кончаться строки в таблице.

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

Какой из вариантов лучше?

Помогите пожалуйста с реализацией этого алгоритма в коде! Можно по отдельным пунктам.
PM WWW ICQ   Вверх
ArnoldLane
Дата 18.7.2005, 01:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Не совсем понял тебя. Скорее всего понял не правильно. Вот, что я понял, если неправ поправь:

1. Есть текстовый файл, в который построчно записанна какая-то информация.
2. Есть файл dbf с текстовым полем.
3. К примеру в тестовом файле первая сторока выглядит следующим образом - "date47ef", так вот надо найти в таблице такую запись, в искомом поле которой будет следующая строка, к примеру - "date47ef_JAGA_JAGA".
4. Значение этого же поля в найденной записе, следует изминить на - "date47ef-date47ef_JAGA_JAGA".

Если все же я прав, то задача довольна проста. В принципе могу помочь с кодом.
PM MAIL   Вверх
Eugene82
  Дата 18.7.2005, 07:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 85
Регистрация: 30.5.2005
Где: г. Ростов-на-Дону

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



ArnoldLane Ты почти прав. Только прибавлять к значению поля надо не строку из файла, а определённую текстовую константу: "643" (Код России по Общероссийскому классификатору стран мира (ОКСМ)).
В результате должна получиться строка типа: "643,,Область,Район,Город,Населённый пункт,Улица,Дом,Корпус,Квартира". В текстовом файле находиться перечень областей, краёв, АО и республик. Искать надо строки без кода страны, т.е. начинающиеся на ",,"+"строка из текстового файла".

PM WWW ICQ   Вверх
ArnoldLane
Дата 18.7.2005, 20:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Код

void Operate(char* txt, char* dbf, char* path)
{
  ifstream txt_file;
  char str_ch[SIZE] ;
  String str,S;
  TADOQuery *Q = new TADOQuery(NULL);
  S.printf("Provider=MSDASQL.1;Persist Security Info=False;Data Source=файлы dBASE;Mode=ReadWrite; Initial Catalog = %s",path);
  Q->ConnectionString  = S;
  txt_file.open(txt);
  if (!txt_file)
  {
    Application->MessageBoxA("Unable to open file - example.txt","Такое дело",MB_ICONWARNING);
    return;
  }
  while(!txt_file.eof())
  {
    txt_file.getline(str_ch,sizeof(str_ch));
    str = str_ch;
    str = ",," + str + "%";
    Q->Close();
    Q->SQL->Clear();
    S.printf("UPDATE \"%s\" SET ADRESS = ('647' + ADRESS) WHERE ADRESS LIKE '%s'", dbf, str);
    Q->SQL->Add(S);
    Q->ExecSQL();
  }
  delete Q;
}

Кажется так.
PM MAIL   Вверх
Eugene82
Дата 20.7.2005, 12:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 85
Регистрация: 30.5.2005
Где: г. Ростов-на-Дону

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



ArnoldLane Создал формочку, подключил файл operate, кинул на формочку ADOQuery, а Билдер говорит что не понял что такое ifstream. Что ещё надо подключить?
PM WWW ICQ   Вверх
ArnoldLane
Дата 20.7.2005, 13:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Код

#include <fstream>

PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C++: Базы данных"
chipset

Данный форум предназначен для обсуждения вопросов прямым образом связанных с C++ и БД. Так, вопросы только по C++ следует задавать в C++:Общие вопросы а вопросы по абстрактным БД в Базах данных или в соответствующих под-форумах.

Благодарим за понимание.


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

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


 




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


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

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