Поиск:

Ответ в темуСоздание новой темы Создание опроса
> перестал открываться .mdb, после переустановки windows xp 
:(
    Опции темы
rexen
Дата 5.1.2011, 00:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Есть некая мелкая складская программа для бухгалтерии, написанная лет 5 назад "программистом по-вызову" на C++Builder 05.03. Представляет из себя скомпиленый exe-шник и файл БД Access-а. Исходники тоже есть. Вот код glav.cpp:
Код

//---------------------------------------------------------------------------
#include <vcl.h>
#pragma hdrstop

#include "glav.h"
#include "intro.h"
#include "soob.h"
#include "pered.h"
#include "history.h"
#include "dobav_edit.h"
#include "dobav_edit_sto.h"
#include "prix_rasx.h"
#include "rasx.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma link "frame_avtopark"
#pragma link "frame_nastr"
#pragma link "frame_zap"
#pragma link "frame_sto"
#pragma link "frame_otch"
#pragma resource "*.dfm"
TForm1 *Form1;
int fz=0, fl_bd=0; // признак запуска программы
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner) : TForm(Owner)
{
   Frame11->Visible=false; Frame21->Visible=false;
   Frame31->Visible=false; Frame41->Visible=false;
   Frame51->Visible=false;
   Frame11->StringGrid1->Cells[0][0]="№пп";
   Frame11->StringGrid1->Cells[1][0]="Тип";
   Frame11->StringGrid1->Cells[2][0]="Номер";
   Frame11->StringGrid1->Cells[3][0]="Код затрат";
   Frame11->StringGrid1->Cells[4][0]="Отв.лицо";

   Frame31->StringGrid1->Cells[0][0]="Дата приоб.";
   Frame31->StringGrid1->Cells[1][0]="Поставщик";
   Frame31->StringGrid1->Cells[2][0]="Наим-ние";
   Frame31->StringGrid1->Cells[3][0]="Для авто";
   Frame31->StringGrid1->Cells[4][0]="Кол-во";
   Frame31->StringGrid1->Cells[5][0]="Сумма";
   Frame31->StringGrid1->Cells[6][0]="Сумма(НДС)";
   Frame31->StringGrid1->Cells[7][0]="Н/Б";
   Frame31->StringGrid1->Cells[8][0]="№ прих";
   Frame31->StringGrid1->Cells[9][0]="Прих.док";

   Frame31->StringGrid2->Cells[0][0]="Наименование";
   Frame31->StringGrid2->Cells[1][0]="№ прих";
   Frame31->StringGrid2->Cells[2][0]="гос.номер";
   Frame31->StringGrid2->Cells[3][0]="№ расх";
   Frame31->StringGrid2->Cells[4][0]="Кол-во";
   Frame31->StringGrid2->Cells[5][0]="Дата уст.";
   Frame31->StringGrid2->Cells[6][0]="Пробег";

   Frame31->StringGrid3->Cells[0][0]="Наименование";
   Frame31->StringGrid3->Cells[1][0]="Марка авто";
   Frame31->StringGrid3->Cells[2][0]="Остаток";

   Frame41->StringGrid1->Cells[0][0]="Вид работ";
   Frame41->StringGrid1->Cells[1][0]="Гос.номер";
   Frame41->StringGrid1->Cells[2][0]="Стоимость";
   Frame41->StringGrid1->Cells[3][0]="Стоим.(НДС)";
   Frame41->StringGrid1->Cells[4][0]="Н/БН";
   Frame41->StringGrid1->Cells[5][0]="СТО";
   Frame41->StringGrid1->Cells[6][0]="Дата";
   Frame41->StringGrid1->Cells[7][0]="Прих.док";

}
//---------------------------------------------------------------------------
void __fastcall TForm1::BitBtn1Click(TObject *Sender)
{
  Caption="АВТОСКЛАД 1.0 - АВТОПАРК"; Frame11->Visible=true; Frame21->Visible=false;
  Frame31->Visible=false; Frame41->Visible=false; Frame51->Visible=false;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::FormShow(TObject *Sender)
{
  if(fz==0)
    {
      fz++;
      Form9->ShowModal();
      AnsiString Bs1="Provider=MSDASQL.1;Persist Security Info=false;Extended Properties=\"DSN=База данных MS Access;DBQ=";
      AnsiString Bs1_1=ExtractFilePath(Application->ExeName)+"autobase.mdb";
      int Attrs = FileGetAttr(Bs1_1);
      if (Attrs & faReadOnly) FileSetAttr(Bs1_1, Attrs-1);
      AnsiString Bs2=";DefaultDir=";
      AnsiString Bs2_1=ExtractFilePath(Application->ExeName);
      AnsiString Bs3=";DriverId=25;FIL=MS Access;MaxBufferSize=2048;PageTimeout=5;UID=admin;\"";
      char CS0[300];
      strcpy(CS0,Bs1.c_str()); strcat(CS0,Bs1_1.c_str());
      strcat(CS0,Bs2.c_str()); strcat(CS0,Bs2_1.c_str());
      strcat(CS0,Bs3.c_str());
      Query1->Close();
      Query1->SQL->Clear(); Query1->SQL->Add("select auto_id from avtopark");
      Query1->ConnectionString=WideString(CS0);
      try{Query1->Open();}
      catch(...)
        {
          fl_bd=1;
          Form3->Memo1->Clear();
          Form3->Memo1->Lines->Add("Отсутствует файл базы данных AUTOBASE.MDB");
          Form3->ShowModal();
          if(OpenDialog1->Execute())
            {
               Bs1_1=OpenDialog1->FileName;
               Attrs = FileGetAttr(Bs1_1);
               if (Attrs & faReadOnly) FileSetAttr(Bs1_1, Attrs-1);
               strcpy(CS0,Bs1.c_str()); fl_bd=0;
               strcat(CS0,Bs1_1.c_str());   strcat(CS0,Bs2.c_str());
               strcat(CS0,Bs2_1.c_str());   strcat(CS0,Bs3.c_str());
               Query1->ConnectionString=WideString(CS0);
               try{Query1->Open();}
               catch(...)
                 {
                   Form3->Memo1->Clear(); fl_bd=1;
                   Form3->Memo1->Lines->Add("Отсутствует файл базы данных AUTOBASE.MDB");
                   Form3->ShowModal(); Close(); return;
                 }
            }
        }
      Query1->Close();
      if(fl_bd) return;
      Frame11->Query1->ConnectionString=WideString(CS0);
      Frame21->Query1->ConnectionString=WideString(CS0);
      Frame31->Query1->ConnectionString=WideString(CS0);
      Frame41->Query1->ConnectionString=WideString(CS0);
      Frame21->Query3->ConnectionString=WideString(CS0);
      Form2->Query1->ConnectionString=WideString(CS0);
      Form4->Query1->ConnectionString=WideString(CS0);
      Form4->Query2->ConnectionString=WideString(CS0);
      Form5->Query1->ConnectionString=WideString(CS0);
      Form6->Query1->ConnectionString=WideString(CS0);
      Form7->Query1->ConnectionString=WideString(CS0);
      Form8->Query1->ConnectionString=WideString(CS0);
      Frame31->PageControl1->ActivePage = Frame31->TabSheet1;
      Form6->DateTimePicker1->Date=Date();
      Form6->DateTimePicker2->Date=Date();
      Form7->DateTimePicker2->Date=Date();
      Form8->DateTimePicker1->Date=Date();      
      Frame31->DateTimePicker1->Date=Date();
      Frame31->DateTimePicker2->Date=Date();
      Frame31->DateTimePicker3->Date=Date();
      Frame31->DateTimePicker4->Date=Date();
      Frame41->DateTimePicker1->Date=Date();
      Frame41->DateTimePicker2->Date=Date();
      Frame51->DateTimePicker1->Date=Date();
      Frame51->DateTimePicker2->Date=Date();
      Frame51->DateTimePicker3->Date=Date();
      Frame51->DateTimePicker4->Date=Date();
      Frame21->CheckBox4->Checked=true;
      Frame31->RadioGroup1->ItemIndex=2;
      Frame31->RadioGroup2->ItemIndex=4;
      Frame31->RadioGroup3->ItemIndex=3;
      Frame11->RadioGroup1->ItemIndex=6;
      Frame11->CountRecPark(); Frame21->post_lb();
      Frame31->CountRecPrix();
      Frame31->CountRecRasx();
      Frame31->CountRecOst();
      Frame41->CountRecSto();
    }
}
//---------------------------------------------------------------------------
void __fastcall TForm1::BitBtn2Click(TObject *Sender)
{
  Caption="АВТОСКЛАД 1.0 - НАСТРОЙКИ"; Frame11->Visible=false; Frame21->Visible=true;
  Frame31->Visible=false; Frame41->Visible=false; Frame51->Visible=false;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::N1Click(TObject *Sender)
{ Frame11->podg_de2(); }
//---------------------------------------------------------------------------
void __fastcall TForm1::N2Click(TObject *Sender)
{  Frame11->del_rec(); }
//---------------------------------------------------------------------------
void __fastcall TForm1::N5Click(TObject *Sender)
{  Frame11->pered_avto(); }
//---------------------------------------------------------------------------
void __fastcall TForm1::N3Click(TObject *Sender)
{  Frame11->history_avto(); }
//---------------------------------------------------------------------------
void __fastcall TForm1::BitBtn3Click(TObject *Sender)
{
  Caption="АВТОСКЛАД 1.0 - СКЛАД"; Frame11->Visible=false; Frame21->Visible=false;
  Frame31->Visible=true; Frame41->Visible=false; Frame51->Visible=false;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::FormClose(TObject *Sender, TCloseAction &Action)
{ Frame11->FreePtr(); Frame31->FreePtr2(); Frame41->FreePtr3(); }
//---------------------------------------------------------------------------
void __fastcall TForm1::BitBtn4Click(TObject *Sender)
{
  Caption="АВТОСКЛАД 1.0 - СТО"; Frame11->Visible=false; Frame41->Visible=true;
  Frame31->Visible=false; Frame21->Visible=false; Frame51->Visible=false;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::BitBtn5Click(TObject *Sender)
{
  Caption="АВТОСКЛАД 1.0 - ОТЧЕТЫ (EXCEL)"; Frame11->Visible=false; Frame51->Visible=true;
  Frame31->Visible=false; Frame41->Visible=false; Frame21->Visible=false;
  Frame51->clean_proc();
}
//---------------------------------------------------------------------------

Суть проблемы в том, что недавно я переустановил винду и программа перестала видеть свой AUTOBASE.MDB - при запуске открывается модальное окно сообщения "Отсутствует файл базы данных AUTOBASE.MDB", ОК -> открывается стандартное окно открытия файла, указываю ему этот AUTOBASE.MDB, нажимаю ОК, вновь виду сообщение "Отсутствует файл базы данных AUTOBASE.MDB", ОК -> на долю секунды виднеется главное окно программы и она закрывается. :(

Под руками старый комп с Win 2000, на котором эта программа работает.

Главное подозрение в каких-то компонентах, которые в Винду надо дополнительно установить. Ставил МС Оффис вместе с Акцессом - ноль эффекта. Вот думаю теперь попробовать поставить на машину C++Builder.
PM MAIL   Вверх
Данкинг
Дата 5.1.2011, 01:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Yersinia pestis
****


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

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



А что за провайдер такой - "MSDASQL"? Нет, я против него ничего не имею, просто не знаю. smile И подключаюсь к .mdb через "Microsoft.Jet.OLEDB.4.0". Чего и тебе советую. smile

Добавлено через 1 минуту и 56 секунд
ВОт кусок кода из моей проги, CONN - это AdoConnection, остальное - сам догадаешься, там много лишнего, но суть должна быть ясна.
Код

void __fastcall TForm1::FormCreate(TObject *Sender)
{
AnsiString p,pp;
p=ExtractFilePath(Application->ExeName)+"\\bl.mdb";
pp="Provider=Microsoft.Jet.OLEDB.4.0;Data Source="+p+";Persist Security Info=False";
conn->Close();
conn->ConnectionString =pp;
conn->Open();




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


Эксперт
***


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

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





--------------------
Американские программисты долго не могли понять, почему русские при зависании Windоws всё время повторяют "Твой зайка написал" ("Yоur bunnу wrоte")
PM MAIL   Вверх
Isko
Дата 5.1.2011, 10:44 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Просто создай ODBC соединение (Control Panel->Administrativ Tools->Data Sources (ODBC))

Вот кусок из моей проги где мне необходимо коннектиться к старому dbf файлу.
Имя созданного ODBC соединение BfPCDB ( as += "Extended Properties=""DSN=BfPCDB;";)

 as += "Provider=MSDASQL.1;";
 as += "Persist Security Info=False;";
 as += "Extended Properties=""DSN=BfPCDB;";
 as += "DBQ=L:\\;";
 as += "DefaultDir=L:\\;";
 as += "DriverId=533;";
 as += "FIL=dBase 5.0;";
 as += "MaxBufferSize=2048;";
 as += "PageTimeout=600;""";
 BfPCDB->ConnectionString = as;
PM MAIL   Вверх
rexen
Дата 5.1.2011, 17:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Цитата
Просто создай ODBC соединение (Control Panel->Administrativ Tools->Data Sources (ODBC))

Спасибо, как раз это и помогло - просто указал там имя БД точно как в исходнике - "База данных MS Access" и путь к этому файлу.  smile 

Ну а насчёт правильности кода и использования MSDASQL - это пусть будет на совести того програмера, а мне было главное настроить какую-то плюшку в системе, из-за которой прога не видела базу. Править чужие исходники - это крайний случай.
Всё работает, тему можно закрывать.
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++ Builder"
Rrader

Запрещается!

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

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

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


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

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


 




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


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

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