Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > C++ Builder
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 19.04.2013, 12:05   #1
semen70
 
Регистрация: 09.04.2013
Сообщений: 4
Печаль как мне переподключиться к БД Access???

здравствуйте все кто это смотрит!!! недавно начал изучать С++ Builder 6, написал небольшую программу смотрел по примеру из книги. и вот в этом коде подключение к БД идёт через командную строку к простому txt файлу, а я пытаюсь её переподключить к БД Access. как подключится в принципе понял(через:ADOConnection и ADOTable), но как переподключить этот код не понимаю. вот подскажите какую строку и на какую мне в коде заменить чтоб подключится к БД Access, чтоб он мне все вопросы в Label считывал из Access. прогу отладил всё работает(в данном случае),поиск файла БД и подключение идёт в функцииvoid __fastcall TForm1::FormActivate(TObject *Sender)) код прокомментирую чтоб лучше понять можно было. вот код:
int f;// дескриптор файла теста
// имя файла теста берем из командной строки
int level[4]; // кол-во правильных ответов, необходимое для достижения уровня
AnsiString mes[4];// сообщение о достижении уровня
TVopros Vopros;// вопрос
int otv;// номер выбранного ответа
int right = 0;// кол-во правильных ответов
// функции, обеспечивающие чтение вопроса из файла теста
int GetInt(int f);// читает целое
int GetString(int f, AnsiString *st);// читает строку
//----------------------------------------------
void __fastcall TForm1::FormActivate(TObject *Sender)
{
AnsiString st;
// имя файла теста должно быть указано в командной строке
int n = ParamCount();
if ( n < 1 )
{
Label1->Font->Style = TFontStyles()<< fsBold;
Label1->Caption = "В командной строке запуска программы надо задать имя файла теста";
Button1->Tag = 2;
return;
}
// открыть файл теста
f = FileOpen(ParamStr(1), fmOpenRead);
if ( f == -1 )
{
Label1->Font->Style = TFontStyles()<< fsBold;
Label1->Caption ="Ошибка доступа к файлу теста " + ParamStr(1);
Button1->Tag = 2;
return;
}
// вывести информацию о тесте
GetString(f, &st); // прочитать название теста
Form1->Caption = st;
GetString(f, &st); // прочитать вводную информацию
Label1->Width = Form1->ClientWidth - Label1->Left -20;
Label1->Caption = st;
Label1->AutoSize = true;
// прочитать информацию об уровнях оценки
for (int i=0; i<4; i++)
{
level[i] = GetInt(f);
GetString(f, &mes[i]);
}
}
// читает из файла очередной вопрос
bool GetVopros(TVopros *v)
{
AnsiString st;
int p; // если p=1, то к вопросу есть иллюстрация
if (GetString(f , &(v->Vopr)) != 0 )
{
// прочитать кол-во вариантов ответа, номер правильного ответа
// и признак наличия иллюстрации
v->nOtv = GetInt(f);
v->rOtv = GetInt(f);
p = GetInt(f);
if (p) // к вопросу есть иллюстрация
GetString(f,&(v->Img) );
else v->Img = "";
// читаем варианты ответа
for (int i = 0; i < v->nOtv; i++)
{
GetString(f,&(v->Otv[i]));
}
return true;
}
else return false;
}
//-----------------------------------------------
// выводит вопрос
void __fastcall TForm1::ShowVopros(TVopros v)
{
int top;
int i;
// вопрос
Label1->Width = ClientWidth - Label1->Left -20;
Label1->Caption = v.Vopr;
Label1->AutoSize = true;
if (v.Img != "") // к вопросу есть иллюстрация
{
/* определим высоту области, которую можно
использовать для вывода иллюстрации */
int RegHeight = Button1->Top
- (Label1->Top + Label1->Height +10) // область вывода вопроса
- (RadioButton[1]->Height + 10) * v.nOtv;
Image1->Top = Label1->Top + Label1->Height + 10;
// загрузим картинку и определим ее размер
Image1->Visible = false;
Image1->AutoSize = true;
Image1->Picture->LoadFromFile(v.Img);
if (Image1->Height > RegHeight) // картинка не помещается
else // положение полей отсчитываем от вопроса
top = Label1->Top + Label1->Height + 10;
// варианты ответа
for (i = 0; i < v.nOtv; i++)
{
RadioButton[i]->Top = top;
RadioButton[i]->Caption = v.Otv[i];
RadioButton[i]->Visible = true;
RadioButton[i]->Checked = false;
top += 20;
}
}
semen70 вне форума Ответить с цитированием
Старый 19.04.2013, 15:21   #2
FataLL
Форумчанин
 
Аватар для FataLL
 
Регистрация: 29.01.2013
Сообщений: 319
По умолчанию

Для начала надо создать БД в Access. Для этого надо решить сколько будет таблиц, какие поля, какая информация в них будет находится и т.д. Это самое сложное. Всё остальное труда не составляет. Подключаешься к ней через ADOConnection, совершенно верно. Для этого в ConnectionString надо указать имя файла.
Цитата:
ADOConnection1->ConnectionString = "Provider=Microsoft.Jet.OLEDB.4 .0; Persist Security Info=False;Data Source=" + ParamStr(1);
Только передавать имя файла из командной строки - это жуть. Почему бы не сделать диалог "Открытие файла" и позволить пользователю выбрать нужный файл как во всех нормальных программах?

С помощью ADOTable можно открыть нужную таблицу. Читаешь текущую запись, переходишь к следующей. Например, чтение вопроса могло бы выглядеть так:
Код:
// читает из файла очередной вопрос
bool GetVopros(TVopros *v)
{
  if( !ADOTable1->Eof )
  {
    v->Vopr = ADOTable1->FieldByName("Vopr")->AsString;
    // прочитать кол-во вариантов ответа, номер правильного ответа
    // и признак наличия иллюстрации
    v->nOtv = ADOTable1->FieldByName("nOtv")->AsInteger;
    v->rOtv = ADOTable1->FieldByName("rOtv")->AsInteger;
    v->Img = ADOTable1->FieldByName("Img")->AsString;
    // читаем варианты ответа
    for (int i = 0; i < v->nOtv; i++)
    {
      v->Otv[i] = ADOTable1->FieldByName("Otv" + IntToStr(i))->AsString;
    }
    ADOTable1->Next(); // перешли на следующий вопрос
    return true;
  }
  else return false; // больше вопросов нет
}
Названия полей БД я придумал по аналогии. Лучше же им давать осмысленные имена. Как-то так...

Последний раз редактировалось FataLL; 19.04.2013 в 15:23.
FataLL вне форума Ответить с цитированием
Старый 19.04.2013, 15:30   #3
semen70
 
Регистрация: 09.04.2013
Сообщений: 4
По умолчанию Спасибо тебе большое!!!! я думал уже никогда никто неответит где ток неспрашивал(((

Цитата:
Сообщение от FataLL Посмотреть сообщение
Для начала надо создать БД в Access. Для этого надо решить сколько будет таблиц, какие поля, какая информация в них будет находится и т.д. Это самое сложное. Всё остальное труда не составляет. Подключаешься к ней через ADOConnection, совершенно верно. Для этого в ConnectionString надо указать имя файла.

Только передавать имя файла из командной строки - это жуть. Почему бы не сделать диалог "Открытие файла" и позволить пользователю выбрать нужный файл как во всех нормальных программах?

С помощью ADOTable можно открыть нужную таблицу. Читаешь текущую запись, переходишь к следующей. Например, чтение вопроса могло бы выглядеть так:
Код:
// читает из файла очередной вопрос
bool GetVopros(TVopros *v)
{
  if( !ADOTable1->Eof )
  {
    v->Vopr = ADOTable1->FieldByName("Vopr")->AsString;
    // прочитать кол-во вариантов ответа, номер правильного ответа
    // и признак наличия иллюстрации
    v->nOtv = ADOTable1->FieldByName("nOtv")->AsInteger;
    v->rOtv = ADOTable1->FieldByName("rOtv")->AsInteger;
    v->Img = ADOTable1->FieldByName("Img")->AsString;
    // читаем варианты ответа
    for (int i = 0; i < v->nOtv; i++)
    {
      v->Otv[i] = ADOTable1->FieldByName("Otv" + IntToStr(i))->AsString;
    }
    ADOTable1->Next(); // перешли на следующий вопрос
    return true;
  }
  else return false; // больше вопросов нет
}
Названия полей БД я придумал по аналогии. Лучше же им давать осмысленные имена. Как-то так...
.....
....
....
....теперь по аналогии с этой строкой и по другим таким же строкам
v->nOtv = ADOTable1->FieldByName("nOtv")->AsInteger;
всё переделать смогу
я просто не знал как в билдере сделать вот такое сравнение переменной с данными в БД..... Ещё раз огромное спасибо!!!!
semen70 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как открыть из БД Access другую Бд Access? Ribun Microsoft Office Access 8 10.03.2012 05:44
А вдруг ко мне придет халява БД ГАИ(access)... WhoI 14 Microsoft Office Access 1 01.05.2010 01:29
Напишите мне БД в Access Ek@teriN@ Помощь студентам 0 15.11.2009 18:09
Ребята!!!Помогите!!!Мне..мне край!!! Генерал_Касетр Помощь студентам 0 15.06.2009 16:48
подходит ли мне MS Access? mitek Microsoft Office Access 3 05.03.2008 13:08