Цитата(DITR @ 8:02:2006, 10:12 )

Так для работы с любой базой данных я использую ADO - принцип работы - на мой взгляд - очень прост. Приведу код на VC++
Хочю успокоить

. Это класно расписано. Но в Билдере всё проще.
Никаких путе прописывать ненужно.
В ADOConnection компоненте указываешь Build->Melkosoft Jet 4.0 OLE DB Provider.
Это дает твоему приложению мультисовместимость со всеми версиями Винды. Даже 95.
Я сам проверял - подключил MDB-файл базы Access 2003 без установленого Офиса или Аксеса.
Глюков нет вообще. Правда ключи (после ввода) обновлять нужно почаще, а то начинает таблица сыпаться - то данных не запоминает, то непонятные ошибки выдает. А если это основное правило соблюдать, то не будет ни глюков, ни головной боли. Кстати я очень уважаю Мелкософт за такой подарок всем программистам. В базе/файле можно создавать немеряное количество таблиц. Я делал около 50 шт. и всё работало без тормозов. Каждая таблица может содержать более 10 млн. записей (этого я не проверял, но люди говорят, что это вранье). Также необходимо иногда делать компрессию таблиц в Аксесе. Это ускоряет работу. Кстати, я видел несколько функций как делать сжатие, но из моих программ этого добиться не смог. Так, что если кто знает как это делать, киньте мне на мыло исходничек. Буду очень благодарен.

Ну, дальше я покажу код подключения базы (отлаженный листинг формы с календарем "Unit2.cpp" - вводиш дату создается база за год методом копирования из резервного файла):
//---------------------------------------------------------------------------
#include <vcl.h>
#pragma hdrstop
#include "Unit2.h"
#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm2 *Form2;
//---------------------------------------------------------------------------
__fastcall TForm2::TForm2(TComponent* Owner)
: TForm(Owner)
{
}
//---------------------------------------------------------------------------
void __fastcall TForm2::Button1Click(TObject *Sender)
{
Form1->Panel3->Caption=FormatDateTime("dd.mm.yyyy",CDate->Date);
AnsiString sFDB=ExtractFileDir(ParamStr(0))+"\\"+FormatDateTime("yyyy",CDate->Date)+".mdb";
AnsiString sFDef=ExtractFileDir(ParamStr(0))+".\\p_default.mdb";
if(!FileExists(sFDB))
{
if(!FileExists(sFDef))Application->Terminate();
else
{
if(!CopyFile(sFDef.c_str(), sFDB.c_str(), true))
{
ShowMessage("Не можу створити нову базу даних!");
Application->Terminate();
}
else
{
Form1->TNew->Active=false;
Form1->TLists->Active=false;
Form1->TFilters->Active=false;
Form1->QBaza->Active=false;
Form1->TMKX->Active=false;
Form1->TConf->Active=false;
Form1->ADOConnection1->Connected=false;
Form1->ADOConnection1->ConnectionString= "Provider=Microsoft.Jet.OLEDB.4.0;"
"Password=;User ID=Admin;Data Source="+sFDB+";"
"Mode=ReadWrite;Extended Properties=;"
"Jet OLEDB:System database=;Jet OLEDB:Registry Path=;"
"Jet OLEDB:Database Password=;Jet OLEDB:Engine Type=4;"
"Jet OLEDB:Database Locking Mode=0;"
"Jet OLEDB:Global Partial Bulk Ops=2;"
"Jet OLEDB:Global Bulk Transactions=1;"
"Jet OLEDB:New Database Password=;"
"Jet OLEDB:Create System Database=False;"
"Jet OLEDB:Encrypt Database=False;"
"Jet OLEDB:Don't Copy Locale on Compact=False;"
"Jet OLEDB:Compact Without Replica Repair=False;"
"Jet OLEDB:SFP=False";
Form1->ADOConnection1->Connected=true;
Form1->TNew->Active=true;
Form1->TLists->Active=true;
Form1->QBaza->Active=true;
Form1->TFilters->Active=true;
Form1->TMKX->Active=true;
Form1->TConf->Active=true;
Form1->Panel5->Caption=IntToStr(Form1->QBaza->RecordCount);
}
}
}
else
{
Form1->TNew->Active=false;
Form1->TLists->Active=false;
Form1->TFilters->Active=false;
Form1->QBaza->Active=false;
Form1->TMKX->Active=false;
Form1->TConf->Active=false;
Form1->ADOConnection1->Connected=false;
Form1->ADOConnection1->ConnectionString= "Provider=Microsoft.Jet.OLEDB.4.0;"
"Password=;User ID=Admin;Data Source="+sFDB+";"
"Mode=ReadWrite;Extended Properties=;"
"Jet OLEDB:System database=;Jet OLEDB:Registry Path=;"
"Jet OLEDB:Database Password=;Jet OLEDB:Engine Type=4;"
"Jet OLEDB:Database Locking Mode=0;"
"Jet OLEDB:Global Partial Bulk Ops=2;"
"Jet OLEDB:Global Bulk Transactions=1;"
"Jet OLEDB:New Database Password=;"
"Jet OLEDB:Create System Database=False;"
"Jet OLEDB:Encrypt Database=False;"
"Jet OLEDB:Don't Copy Locale on Compact=False;"
"Jet OLEDB:Compact Without Replica Repair=False;"
"Jet OLEDB:SFP=False";
Form1->ADOConnection1->Connected=true;
Form1->TNew->Active=true;
Form1->TLists->Active=true;
Form1->QBaza->Active=true;
Form1->TFilters->Active=true;
Form1->TMKX->Active=true;
Form1->TConf->Active=true;
Form1->Panel5->Caption=IntToStr(Form1->QBaza->RecordCount);
}
if (Form1->TConf->Active==true)
{
Form1->TConf->First();
while(!Form1->TConf->Eof)
{
if(Form1->TConf->FieldByName("Command")->AsString=="RAYON")
{
if(Form1->TConf->FieldByName("Name")->AsString!="")
{
Form1->Panel8->Caption=Form1->TConf->FieldByName("Name")->AsString;
Form1->Panel6->Caption=Form1->TConf->FieldByName("Size")->AsString;
//Form1->Panel5->Caption=IntToStr(Form1->QBaza->RecordCount);
}
else
{
Form1->Panel8->Caption="Не вибрано район!";
}
}
Form1->TConf->Next();
}
Form1->Panel5->Caption=IntToStr(Form1->QBaza->RecordCount);
Form1->TConf->First();
}
if (Form1->TNew->Active==true)
{
Form1->TNew->First();
int i=0;
while(!Form1->TNew->Eof)
{
if(Form1->TNew->FieldByName("Table")->AsString!="")
{
Form1->QBaza->Fields->Fields[i]->DisplayLabel=Form1->TNew->FieldByName("Name")->AsString;
Form1->QBaza->Fields->Fields[i]->Visible=Form1->TNew->FieldByName("Visible")->AsBoolean;
Form1->QBaza->Fields->Fields[i]->DisplayWidth=Form1->TNew->FieldByName("Table_SIZE")->AsInteger;
}
//else Form1->QBaza->Fields->Fields[i]->Visible=false;
Form1->TNew->Next();
i++;
}
Form1->TNew->First();
}
Close();
}
//---------------------------------------------------------------------------