, TDataSource (, ) . , . , , . . , DataSource, . . 5.6 :
. 5.6. .
AutoEdit , . true .
DataSet ( ), . " ", . DataSourcel "" "":
if (DataSourcel->DataSet == "")
DataSourcel->DataSet = "";
else
DataSourcel->DataSet = "";
, DataSet :
void_fastcall TForm2::FormCreate (TObject *Sender)
{
DataSourcel->Dataset = Forml->Tablel;
Name , . . . , "Clients", DataSet, Name "ClientsSource" .
TDataSource :
OnDdlciC/iange "" .
OnStciteChcinse State . , ( 5.1) MyTable, .
void_fastcall TFormI::StateChange(TObject *Sender)
{
char S[20];
switch (MyTabie->State) {
case dslnactive:
strcpy(S," ");
break;
case dsBrowse:
strcpytS, " ");
break;
case dsEdit:
strcpytS, " ");
break;
case dslnsert:
strcpy(S, " ");
break;
} // S
}
5.1. OnStateChange .
|
|
OnUpdateData .
5.2.1.2
. TTable BDE, - , . . 5.7 :
. 5.7. . Active " " . true Open . false ( ) Close .
DatabaseName . : , , . - Aliases BDE.
TableName .
Exclusive , . false .
IndexFiles .
IndexName , (primary key order).
Filter , .
ReadOnly . false .
MasterFields MasterSource ( ) master-detail. BCDEMOS, CUSTOMER ORDERS, : .
IndexName , (primary key order).
Filter , .
ReadOnly . false .
MasterFields MasterSource ( ) master-detail. BCDEMOS, CUSTOMER ORDERS, :
1. File | New Data Module, DataModule2. TTable TDataSource (. 5.8).
2. Tablet
DatabaseName = BCDEMOS TableName = CUSTOMER.DB Name = CustomersTable
|
|
. 5.8. .
3. Table2
DatabaseName = BCDEMOS TableName = ORDERS.DB Name = OrdersTable
4. DataSourcel DataSet = CustomersTable Name = CustomersSource
5. DataSource2 DataSet = OrdersTable Name = OrdersSource
6. TDBGrid.
7. File | Include Unit Hdr, , .
8. DBGridI
DataSource = DataModule2->CustomersSource DBGrid2
DataSource = DataModule2->OrdersSource
9. OrdersTable
MasterSource = CustomersSource, CUSTOMER ORDERS.
10. MasterFields,
- CustNo ( ) Available Indexes;
- CustNo Detail Fields Master Fields;
- Add, Joined Fields CustNo -> CustNo;
- OK, .
11. Active = true CustomersTable OrdersTable , .
12. . . 5.9 : , .
. 5.9. muster-detail.
Locate Lookup , : . , . BDE .
Locate . , . 5.2 , "" MyTable "". . Locate true, . . Locate false, .
(boot Success;
TLocateOptions Options;
Options loPartialKey;
Success = MyTable->Locate("", "", Options);
}
5.2. Locate.
. :
bool _fastcall Locate(const AnsiString KeyFields, const Variant SKeyValues, TLocateOptions Options);
3 , Variant ( C++Builder Delphi). KeyFields .
Lookup , . . , . 5.3 , MyTable , "" "Borland". . Lookup Variant , . . Lookup Null.
|
|
{
Variant Results;
Results = MyTable->Lookup("", "Borland",
";;");
}
5.3. Lookup.
. :
Variant _fastcall Lookup(const AnsiString KeyFields, const Variant sKeyValues, const AnsiString ResultFields);
KeyFields .
TTable :
GotoCurrent , .
First, Next, Prior, Last MoveBy .
SetKey, FindKey, FindNearest, GotoKey GotoNearest .
Append, Insert, AppendRecord InsertRecord . Delete . Edit , a Post .
EditRangeStart, EditRangeEnd, SetRangeStart, SetRangeEnd, ApplyRange SetRange , .
5.2.1.3
, , . TTable , . . TQuery . (result set) , , , , .
SQL (Structured Query Language), , Sybase, Oracle, InterBase SQL Server. Ha SQL . C++Builder , .
. 5.10 :
. 5.10. . Active " ", . false .
DatabaseName , .
RequestLive BDE "" . false ( ) , . true , SELECT .
SQL SQL , . SQL: SELECT - ; INSERT -
|
|
; UPDATE - ; DELETE - . . EMPLOYEE , :
1. TQuery .
2. DatabaseName. BCDEMOS , , , .
3. , SQL
SELECT * FROM EMPLOYEE WHERE Salary>40000 .
4. TDataSource DataSet = Queryl.
5. TDBGrid DataSource = DataSourcel.
6. Active = true Queryl , (. 5.11).
. 5.] ]. .
SQL TStrings . 5.4 ButtonlClick, . SQL ( TStrings) Memol->Lines TMemo. , , .
void_fastcall TFormI::ButtonlClick(TObject *Sender) {
// , - Memol if (strcmp(Memol->Lines->Strings[0].c_str(), "") == 0) (
MessageBox(0, "No SQL Statement Entered", "Error", MB_OK);
return;
} else
(
// , Queryl->Close ();
// SQL Queryl->SQL->Clear ();
// Memol SQL Queryl->SQL->Add(Memol->Lines->Strings[0].c_str());
try
{
Queryl->0pen(); // SQI }
catch(EDBEngineError* dbError).// BDE {
for (int i=0; i<dbError->ErrorCount; i++) MessageBox (0, dbError[i].Message.c_str(), "SQL Error", MB_OK);
}) }
5.4. SQL.
Params , . C++Builder SQL . , . , employee SQL: SELECT * FROM employee WHERE EmpNo =:EmpNo.
(. 5.12), . SQL .
. 5.12. .
Params -. TParams. ^ I terns TParams:;
Queryl->Params->Items[0]->AsInteger = 4;
, ParamByName:
Queryl->ParamFjyName ("FirstName") ->AsString = "John";
5.5 ParamByName . FirstName SQL:
SELECT * FROM EMPLOYEE WHERE FirstName =:FirstName
, Prepare, SQL . , . , , - Open.
void_fastcall TFormI::ButtonlClick(TObject *Sender) {
// , Queryl->Close ();
if (!Queryl->Prepared)
Queryl->Prepare(); // // Queryl->ParamByName("FirstName")->AsString =
Editl->Text.c_str();
try
{
Query 1 ->0pen(); // SQL }
|
|
catch(EDBEngineError* dbError) // BDE {
for (int i=0; i<dbError->ErrorCount; i++)
MessageBox(0, dbError[i].Message.c_str(), "SQL Error", MB_OK);
} }
5.5. .
. 5.13 : FirstName .
. 5.13. .
DataSource , , . SQL . , . , CUSTOMER ORDERS CustNo:
1. TQuery TTable
BCDEMOS DatabaseName.
void _fastcall TPormI::DataSource2DataChange(TObject
*Sender, TField *Field) {
// ORDERS ? if (Queryl->DataSource!= NULL)
return; // , // , Queryl->Close();
if (!Queryl->Prepared)
Queryl->Prepare(); // // Queryl->ParamByName("CustNo")->AsInteger =
Tablel->Fields[1]->AsInteger;
try
{
Query 1 ->0pen(); // SQL }
catch(EDBEngineError* dbError) // BDE (
for (int i=0; i<dbError->ErrorCount; i++)
MessageBox(0, dbError[i].Message.c_str(), "SQL Error", MB_OK);
} }
5.6. .
SQL Windows sprintf. (%s, %d, %n ..) , , :
tbIName = "EMPLOYEE";
fIdName = "EmpNo";
fIdValue = 3;
sprintf(sqls, "SELECT * FROM %s WHERE %s = %d", tbIName, fIdName, fIdValue)
sqls :
"SELECT * FROM EMPLOYEE WHERE EmpNo =3"
5.7 sprintf SELECT EMPLOYEE. Clear Add SQL. , , C++Builder SQL (.. false Prepared). .
void _fastcall TFormI::ButtonlClick(TObject *Sender)
{
char sqls[250]; // SQL
char fmts[50]; //
// fmts ,
if (i (strcmp(SalaryEdit->Text.c_str (), " ") ==0)) strcpytfmts, SalaryEdit->Text.c_str());
else
strcpy(fmts, "100000"); //
// ,
Queryl->Close();
// SQL
Queryl->SQL->Clear();
// SELECT sprintf
sprintf(sqls, "SELECT * FROM EMPLOYEE WHERE Salary<%s", fmts);
// SELECT SQL
Queryl->SOL->Add(sqls);
try
{
Query 1 ->0pen(); // SELECT)
catch(EDBEngineError* dbError) // BDE {
for (int i=0; i<dbError->ErrorCount; i++) MessageBox(0, dbError[i].Message.c_str(), "SQL Error",
MB_OK);,) 1
5.7. SQL sprintf.
. 5.15 : , ( Salary ) .
. 5.15. .
Open ExecSQL SQL . SELECT. select , , . SQL, , UPDATE, , . ExecSQL Open.
5.8 .
: Salary EMPLOYEE BCDEMOS. , UPDATE, , , . --Builder \...\CBuilder\Examples\Data.
void_fastcall TFormI::ButtonlClick(TObject *Sender) {
char sqls[250]; // SELECT char fmts[50]; // int mins, adds; //
// fmts ,
strcpy(fmts, SalaryEdit->Text.c_str());
mins = atoi(fmts);
// SQL
Queryl->Close ;
Queryl->SQL->Clear ();
sprintf(sqls, "SELECT * FROM EMPLOYEE WHERE Salary<%s", fmts);
// SELECT SQL
Queryl->SQL->Add(sqls);
try
{
Queryl->0pen (); // SELECT
} catch(EDBEngineError* dbError) // BDE
{
for (int i=0; i<dbErro-r->ErrorCount; i++) MessageBox(0, dbError[i].Message.c_str(), "SQL Error", MB_OK);
}
// fmts [ %],
strcpy(fmts, AddEdit->Text.c_str());
adds = atoi(fmts);
// SQL Queryl->Close ();
Queryl->SQL->Clear();
// UPDATE SQL Queryl->SQL->Add("UPDATE EMPLOYEE set Salary =
(Salary+((Salary*:adds))/100) WHERE (Salary <:mins)");
Queryl->ParamByName("mins")->AsInteger = mins;
Queryl->ParamByName("adds")->AsInteger = adds;
try
{ Queryl->ExecSQL(); // UPDATE
}
catch(EDBEngineError* dbError) // BDE
{
for (int i=0; i<dbError->ErrorCount; i++) MessageBox(0, dbError[i].Message.c_str(), "SQL Error", MB_OK);
) // SQL
Queryl->Close ();
Queryl->SQL->Clear();
// SELECT Queryl->SQL->Add(sqls);
try
{
Queryl->0pen (); // SELECT }
catch(EDBEngineError* dbError) // BDE {
for (int i=0; i<dbError->ErrorCount; i++)
MessageBox(0, dbError[i].Message.c_str(), "SQL Error", MB_OK);
} }
5.8. ExecSQL UPDATE.
. 5.16 , mins , adds. , . (. 5.15).
. 5.16. .
, :
First, Next, Prior, Last MoveBy .
Append, Insert, AppendRecord InsertRecord . Delete . Edit , a Post .
5.2.1.4
(, , ) - . TStoredProc , , .
, . , . , , .
, - . , , . - - , " " , .
. 5.17 :
. 5.17. . Active " ", . false .
DatabaseName .
StoredProcName , .
ParamBindMode , . pbByName ( ) , pbByNumber - .
Params ( ). , , .
, , . (Input, Output, Result), , , . -
, (. 5.18). . Oracle , , . Add, Delete Clear , .
. 5.18. .
, Params TParams. Items TParams:
StoredProcl->Params[0]->Items[1]->AsString = Editl->Text;
, ParamByName:
StoredProcl->ParamByName("_")->AsInteger++;
Prepare :
StoredProcl->Prepare ();
StoredProcl->ExecProc ();
. ( ) Items TParams:
Editl->Text = StoredProcl->Params[0]->Items[0]->AsString;
, ParamByName:
Edit2->Text =
StoredProcl->ParamByName("_")->AsInteger;
(, Sybase) , , , - . TStoredProc , :
1. DatabaseName.
2. TDataSource DataSet = StoredProcl.'
3. TDBGrid DataSource = DataSourcel.
4. TStoredProc .
5. StoredProcName.
6. Active = true StoredProcl , .
7. , ( ) .
5.2.1.5
TDatabase BDE , BDE. . , TDatabase (login), . , , TDatabase , .
. . , . SQL " " , . TDatabase. , , StartTransaction. , , , Commit Rollback () . Commit , Rollback .
. 5.19 :
. 5.19. . AliasName , BDE. DriverName.
DatabaseName AliasName DriverName.
DriverName BDE DatabaseName. AliasName.
Params . 5.9 CUSTOMER ORDERS. , EditOld, , EditNew. Databasel , . - - , ( , , , ) . , , . 5.19.
void_fastcall TFormI::ButtonlClick(TObject *Sender) {
char sqls[250]; // SQL try
{
Databasel->StartTransaction ();
Queryl->SQL->Clear ();
// EditOld EditNew CUSTOMER sprintf(sqls, "UPDATE CUSTOMER set Addrl = \"%s\" WHERE (Addrl = \"%s\")", EditNew->Text.c_str(), Edit01d->Text.c_str());
Queryl->SQL->Add(sqls);
Queryl->ExecSQL ();
Queryl->SQL->Clear ();
// EditOld EditNew ORDERS sprintf(sqls, "UPDATE ORDERS set ShipToAddrl = \"%s\" WHERE (ShipToAddrl = \"%s\")", EditNew->Text.c_str(), Edit01d->Text.c_str());
Queryl->SQL->Add(sqls);
Queryl->ExecSQL();
// , Databasel->Commit();
Tablel->Refresh();
Table2->Refresh();
}
catch(EDBEngineError* dbError) // BDE {
for (int i=0; i<dbError->ErrorCount; i++) MessageBox (0, dbError[i].Message.c_str(), "SQL Error", MB_OK);
Databasel->Rollback();
return;
} catch (Exception* exception) //
{
MessageBox (0, exception->Message.c_str (), "Error", MB_OK);
Databasel->Rollback();
return;
) }
5.9. , .
, . 5.20 TDatabase.
. 5.20. .
5.10 , , . , DriverName , ( Editi Edit2). , BDE. SQLPASSTHRU MODE Add, Append Insert , . NOT SHARED , . . , , , , . SHARED NOAUTOCOMMIT SHARED AUTOCOMMIT , . , SHARED NOAUTOCOMMIT NOT SHARED.
void_fasfccall TFormI::ButtonlClick(TObject *Sender) (
char name[20]; // char pass [20]; // try
{
// Databasel->Close();
Databasel->DriverName = "STANDARD";
Databasel->KeepConnection = true;
Databasel->LoginPrompt = false;
Databasel->Params->Add("SERVER NAME=
...\\CBuilder\\EXAMPLES\\DATA\\EMPLOYEE.DB");
Databasel->Params->Add("SCHEMA CACHE=8");
Databasel->Params->Add("OPEN MODE=READ/WRITE");
Databasel->Params->Add("SQLPASSTHRU MODE=NOT SHARED");
sprintffname, "USER NAME=%s", Editl->Text.c_str ());
Databasel->Params->Add(name);
sprintf(pass, "PASSWORD=%s", Edit2->Text.c_str());
Databasel->Params->Add(pass);
// Databasel->0pen();
Tablel->0pen();
}
catch(EDBEngineError* dbError) // BDE
{
for (int i=0; i<dbError->ErrorCount; i++) MessageBox(0, dbError[i].Message.c_str(), "SQL Error", MB_OK);
})
5.10. .
, BCDEMOS , , , . . 5.21 .
. 5.21. "" .
5.2.2
. DataSource . TDataSource, DataSource.
, Standard Windows , 4 .
TDBNavigator. (. 5.22).
. 5.22. .
First, Prior, Next Last, , Insert, Delete, Edit, Post, Cancel Refresh -
. , . .
. 5.23 :
. 5.23. . DataSource . , . DBEditI DBEdit2, CustomersTable OrdersTable CustomersSource OrdersSource, . ( Company DBEditI), CustomersSource, ( OrderNo DBEdit2), OrdersSource. , OnEnter , ( 5.11).
VisibleButtons , , , . / First Last, .
- . , CustomersTable OrdersTable. , Insert, Delete, Edit, Post, Cancel Refresh, - . 5.11 OnEnter .
void_fastcall TFormI:: DBEditlEnter(TObject *Sender) {
if (Sender == DBEditI)
{
DBNavigator->DataSource = CustomersSource;
Set<TNavigateBtn, 0, 9> btnShow;
btnShow nbFirstnbPrior nbNextnbLastnbInsert nbDeletenbEditnbPostnbCancelnbRefresh;
DBNavigator->VisibleButtons = btnShow;
}
else
{
DBNavigator->DataSource = OrdersSource;
Set<TNavigateBtn, 0, 9> btnShow;
btnShow nbFirstnbPriornbNextnbLast;
DBNavigator->VisibleButtons = btnShow;
} }
5.11. DataSource VisibleButtons.
ShowHint , . false ( ) .
Hints . , , .
. 5.24 , .
. 5.24. .
5.3
C++Builder - , , .
, . SQL , .
, C++Builder :
1. (TTable TQuery) Data Access .
2. [15 DataSet ^ (. Table 1 Query 1).
3. Data Controls DataSource (, DataSourcel). DataField. '
4. TDBGrid, TDBNavigator.