Stallion
版主
發表:52 回覆:1600 積分:1995 註冊:2004-09-15
發送簡訊給我
|
在borland.public.cppbuilder.ide有討論。
http://groups.google.com/group/borland.public.cppbuilder.ide/browse_thread/thread/94ebc47887dc9708/7872faa7a70bb731
摘錄貼過來大家參考一下,免得連結不見了!
<textarea cols="60" rows="10" class="cpp" name="code"> // in the header, among other things, you will need:
#include
#include
#include // in the main form, here are some of the routines I used. Obviously, your
database will be populated differently, but you can still use it as a great
example:
//---------------------------------------------------------------------------
void __fastcall TfrmCan1::FormCreate(TObject *Sender) {
AnsiString ExeFile;
AnsiString ExeFilePath;
ExeFilePath = ExtractFilePath(Application->ExeName);
ExeFile = CreateDB( ExeFilePath.c_str() );
ADOConnection1->ConnectionString = ConnStrBldr(ExeFile.c_str());
if (hasTable == false)
BuildTable("SPNs");
Initialize();
} //---------------------------------------------------------------------------
int TfrmCan1::Initialize() {
int retVal = 0;
spn = 0;
bDataChanged = false;
ddlSPN->ItemIndex = 0;
lblSpnNewBits->Caption = "";
lblSpnNewValue->Caption = "";
lblMSB->Caption = "";
lblLSB->Caption = "";
lblPgn->Caption = "";
strcpy(Unit[enmKpa], "kPa");
strcpy(Unit[enmPct], "%");
strcpy(Unit[enmCel], "deg C");
strcpy(Unit[enmMpa], "Mpa");
strcpy(Unit[enmVts], "V");
strcpy(Unit[enmLph], "L/h");
strcpy(Unit[enmRpm], "rpm");
strcpy(Unit[enmSec], "s");
strcpy(Unit[enmDeg], "deg");
strcpy(Unit[enmKMh], "km/h");
strcpy(Unit[enmAmp], "A");
strcpy(Unit[enmKGh], "kg/h");
strcpy(Unit[enmAci], "ASCII");
strcpy(Unit[enmLtr], "L");
strcpy(Unit[enmKg], "kg");
strcpy(Unit[enmKMg], "km/kg");
strcpy(Unit[enmHrs], "h");
strcpy(Unit[enmRev], "r");
strcpy(Unit[enmGer], "gear");
strcpy(Unit[enmRto], "ratio");
strcpy(Unit[enmNm], "Nm");
strcpy(Unit[enmStp], "steps");
AnsiString Desc;
try { // read in the database
ADOQuery1->SQL->Clear();
ADOQuery1->SQL->Add("SELECT * FROM SPNs");
ADOQuery1->Open();
while (ADOQuery1->Eof == false) {
spn = ADOQuery1->FieldValues["SPN"];
spd[spn].min = ADOQuery1->FieldValues["Min"];
spd[spn].ofs = ADOQuery1->FieldValues["Ofs"];
if (spd[spn].ofs == spd[spn].min) {
spd[spn].min -= spd[spn].ofs; // minus a negative is addition
spd[spn].self = spn;
Desc.printf("]", spn);
ddlSPN->Items->Add(Desc);
spd[spn].max = ADOQuery1->FieldValues["Max"] - spd[spn].ofs;
spd[spn].val = ADOQuery1->FieldValues["Val"] - spd[spn].ofs;
spd[spn].len = ADOQuery1->FieldValues["Len"];
spd[spn].res = ADOQuery1->FieldValues["Res"];
spd[spn].PGN = ADOQuery1->FieldValues["PGN"];
spd[spn].bit = ADOQuery1->FieldValues["start"];
Desc = ADOQuery1->FieldValues["Desc"];
strcpy(spd[spn].desc, Desc.c_str());
Desc = ADOQuery1->FieldValues["Unit"];
if (strcmp(Desc.c_str(), Unit[enmKpa]) == 0)
spd[spn].pUnit = Unit[enmKpa];
else if (strcmp(Desc.c_str(), Unit[enmPct]) == 0)
spd[spn].pUnit = Unit[enmPct];
else if (strcmp(Desc.c_str(), Unit[enmCel]) == 0)
spd[spn].pUnit = Unit[enmCel];
else if (strcmp(Desc.c_str(), Unit[enmMpa]) == 0)
spd[spn].pUnit = Unit[enmMpa];
else if (strcmp(Desc.c_str(), Unit[enmVts]) == 0)
spd[spn].pUnit = Unit[enmVts];
else if (strcmp(Desc.c_str(), Unit[enmLph]) == 0)
spd[spn].pUnit = Unit[enmLph];
else if (strcmp(Desc.c_str(), Unit[enmRpm]) == 0)
spd[spn].pUnit = Unit[enmRpm];
else if (strcmp(Desc.c_str(), Unit[enmSec]) == 0)
spd[spn].pUnit = Unit[enmSec];
else if (strcmp(Desc.c_str(), Unit[enmDeg]) == 0)
spd[spn].pUnit = Unit[enmDeg];
else if (strcmp(Desc.c_str(), Unit[enmKMh]) == 0)
spd[spn].pUnit = Unit[enmKMh];
else if (strcmp(Desc.c_str(), Unit[enmAmp]) == 0)
spd[spn].pUnit = Unit[enmAmp];
else if (strcmp(Desc.c_str(), Unit[enmKGh]) == 0)
spd[spn].pUnit = Unit[enmKGh];
else if (strcmp(Desc.c_str(), Unit[enmAci]) == 0)
spd[spn].pUnit = Unit[enmAci];
else if (strcmp(Desc.c_str(), Unit[enmLtr]) == 0)
spd[spn].pUnit = Unit[enmLtr];
else if (strcmp(Desc.c_str(), Unit[enmKg]) == 0)
spd[spn].pUnit = Unit[enmKg];
else if (strcmp(Desc.c_str(), Unit[enmKMg]) == 0)
spd[spn].pUnit = Unit[enmKMg];
else if (strcmp(Desc.c_str(), Unit[enmHrs]) == 0)
spd[spn].pUnit = Unit[enmHrs];
else if (strcmp(Desc.c_str(), Unit[enmRev]) == 0)
spd[spn].pUnit = Unit[enmRev];
else if (strcmp(Desc.c_str(), Unit[enmGer]) == 0)
spd[spn].pUnit = Unit[enmGer];
else if (strcmp(Desc.c_str(), Unit[enmRto]) == 0)
spd[spn].pUnit = Unit[enmRto];
else if (strcmp(Desc.c_str(), Unit[enmNm]) == 0)
spd[spn].pUnit = Unit[enmNm];
else if (strcmp(Desc.c_str(), Unit[enmStp]) == 0)
spd[spn].pUnit = Unit[enmStp];
spd[spn].xER = int(MaxInt / spd[spn].max);
spd[spn].max *= spd[spn].xER;
spd[spn].bvl = int((spd[spn].val / spd[spn].res) 0.5);
spd[spn].val *= spd[spn].xER;
} else {
Desc.printf("SPN%d: Offset not equal to Minimum.\n\n", spn);
Desc = "This situation was not covered in SAE J1939-71;\n";
Desc = "therefore, this value will not be loaded.";
MessageBox(NULL, Desc.c_str(), "Data Corrupt", MBOKINFO);
}
ADOQuery1->Next();
}
ADOQuery1->Close();
ddlSPN->Items->Add("Add New");
} catch (Exception* ex) {
MessageBox(NULL, ex->Message.c_str(), "Query Exception", MBOKEROR);
retVal = 1;
}
return retVal;
} //---------------------------------------------------------------------------
char* TfrmCan1::CreateDB(char* pDir) {
char cFile[MAXPATH];
strcat(strcpy(cFile, pDir), "j1939.mdb"); // replace with your DB file
OpenDialog1->InitialDir = pDir;
OpenDialog1->FileName = cFile;
if (FileExists(OpenDialog1->FileName) == false) {
OpenDialog1->Execute();
}
if (FileExists(OpenDialog1->FileName) == false) {
AnsiString str1;
str1 = ConnStrBldr(OpenDialog1->FileName.c_str());
WideString strConn = str1;
Adox_tlb::TCOM_Catalog cat = CoCatalog::Create(); // creates Access DB
try { // release
try { // create the database
cat->Create(strConn.c_bstr());
} catch (Exception* ex) {
str1.printf("The following error was encountered while trying to\n"
"create the database:\n\n%s", ex->Message.c_str());
MessageBox(NULL, str1.c_str(), "DB Creation", MBOKEROR);
}
} __finally {
cat.Release();
hasTable = false;
}
}
return OpenDialog1->FileName.c_str();
} //---------------------------------------------------------------------------
int TfrmCan1::BuildTable(char* pTable) {
int retVal = 0;
try { // closes the database
try { // create the database
sqlCreateTable.printf("CREATE TABLE %s ("
" [SPN] INTEGER CONSTRAINT PK_spn PRIMARY KEY,"
" [Desc] TEXT(50), [Len] INTEGER, [Res] DOUBLE, "
" [Val] DOUBLE, [Ofs] DOUBLE, [Min] DOUBLE,"
" [Max] DOUBLE, [Unit] TEXT(10), [Type] TEXT(50),"
" [Sus] INTEGER, [PGN] LONG, [start] INTEGER)", pTable);
ADOQuery1->SQL->Clear();
ADOQuery1->SQL->Add(sqlCreateTable);
ADOQuery1->ExecSQL();
sqlInsertParams = "INSERT INTO [SPNs] ("
"[SPN], [Desc], [Len], [Res], [Val], [Ofs], [Min], "
"[Max], [Unit], [Type], [Sus], [PGN], [start]) VALUES
";
sqlInsertData = "(22,'Extended Crankcase Blow-by
Pressure',8,0.05,6.95,0.00,0.00,"
"12.50,'kPa','Measured',22,65263,8)";
ADOCommand1->CommandText = sqlInsertParams sqlInsertData;
ADOCommand1->Execute();
sqlInsertData = "(92,'Percent Load At Current
Speed',8,1.00,100,0.00,0.00,"
"250.00,'%','Status',92,61443,16)";
ADOCommand1->CommandText = sqlInsertParams sqlInsertData;
ADOCommand1->Execute();
sqlInsertData = "(94,'Fuel Delivery
Pressure',8,4.00,299.15625,0.00,0.00,"
"1000.00,'kPa','Measured',94,65263,0)";
ADOCommand1->CommandText = sqlInsertParams sqlInsertData;
ADOCommand1->Execute();
sqlInsertData = "(98,'Engine Oil Level',8,0.40,90,0.00,0.00,"
"100.00,'%','Measured',98,65263,16)";
ADOCommand1->CommandText = sqlInsertParams sqlInsertData;
ADOCommand1->Execute();
sqlInsertData = "(99,'Engine Oil Filter Differential
Pressure',8,0.50,25,0.00,0.00,"
"125.00,'kPa','Measured',99,65276,24)";
ADOCommand1->CommandText = sqlInsertParams sqlInsertData;
ADOCommand1->Execute();
sqlInsertData = "(100,'Engine Oil Pressure',8,4.00,496,0.00,0.00,"
"1000.00,'kPa','Measured',100,65263,24)";
ADOCommand1->CommandText = sqlInsertParams sqlInsertData;
ADOCommand1->Execute();
sqlInsertData = "(101,'Crankcase
Pressure',16,0.0078125,1,-250.00,-250.00,"
"251.99,'kPa','Measured',101,65263,32)";
ADOCommand1->CommandText = sqlInsertParams sqlInsertData;
ADOCommand1->Execute();
sqlInsertData = "(102,'Boost Pressure',8,2.00,86,0.00,0.00,"
"500.00,'kPa','Measured',102,65270,8)";
ADOCommand1->CommandText = sqlInsertParams sqlInsertData;
ADOCommand1->Execute();
sqlInsertData = "(105,'Intake Manifold 1
Temperature',8,1.00,86,-40.00,-40.00,"
"210.00,'deg C','Measured',105,65270,16)";
ADOCommand1->CommandText = sqlInsertParams sqlInsertData;
ADOCommand1->Execute();
sqlInsertData = "(108,'Barometric Pressure',8,0.50,12.5,0.00,0.00,"
"125.00,'kPa','Measured',108,65269,0)";
ADOCommand1->CommandText = sqlInsertParams sqlInsertData;
ADOCommand1->Execute();
sqlInsertData = "(109,'Coolant Pressure',8,2.00,250,0.00,0.00,"
"500.00,'kPa','Measured',109,65263,48)";
ADOCommand1->CommandText = sqlInsertParams sqlInsertData;
ADOCommand1->Execute();
sqlInsertData = "(110,'Engine Coolant
Temperature',8,1.00,85,-40.00,-40.00,"
"210.00,'deg C','Measured',110,65262,0)";
ADOCommand1->CommandText = sqlInsertParams sqlInsertData;
ADOCommand1->Execute();
sqlInsertData = "(111,'Coolant Level',8,0.40,90,0.00,0.00,"
"100.00,'%','Measured',111,65263,56)";
ADOCommand1->CommandText = sqlInsertParams sqlInsertData;
ADOCommand1->Execute();
sqlInsertData = "(144,'Trailer, Tag Or Push Channel Tire
Pressure',16,0.50,9680,0.00,0.00,"
"32127.50,'kPa','Measured',144,65146,0)";
ADOCommand1->CommandText = sqlInsertParams sqlInsertData;
ADOCommand1->Execute();
sqlInsertData = "(157,'Injector Metering Rail 1
Pressure',16,0.00390625,31.60156,0.00,0.00,"
"251.00,'Mpa','Measured',157,65243,16)";
ADOCommand1->CommandText = sqlInsertParams sqlInsertData;
ADOCommand1->Execute();
sqlInsertData = "(158,'Battery Potential (Voltage),
Switched',16,0.05,24.3,0.00,0.00,"
"3213.00,'V','Measured',158,65271,48)";
ADOCommand1->CommandText = sqlInsertParams sqlInsertData;
ADOCommand1->Execute();
sqlInsertData = "(171,'Ambient Air
Temperature',16,0.03125,69,-273.00,-273.00,"
"1735.00,'deg C','Measured',171,65269,24)";
ADOCommand1->CommandText = sqlInsertParams sqlInsertData;
ADOCommand1->Execute();
sqlInsertData = "(174,'Fuel Temperature',8,1.00,33,-40.00,-40.00,"
"210.00,'deg C','Measured',174,65262,8)";
ADOCommand1->CommandText = sqlInsertParams sqlInsertData;
ADOCommand1->Execute();
sqlInsertData = "(175,'Engine Oil Temperature
1',16,0.03125,267.625,-273.00,-273.00,"
"1735.00,'deg C','Measured',175,65262,16)";
ADOCommand1->CommandText = sqlInsertParams sqlInsertData;
ADOCommand1->Execute();
sqlInsertData = "(183,'Fuel Rate',16,0.05,401.60,0.00,0.00,"
"3212.75,'L/h','Measured',183,65266,0)";
ADOCommand1->CommandText = sqlInsertParams sqlInsertData;
ADOCommand1->Execute();
sqlInsertData = "(190,'Engine Speed',16,0.125,3192.00,0.00,0.00,"
"8031.87,'rpm','Measured',190,61444,24)";
ADOCommand1->CommandText = sqlInsertParams sqlInsertData;
ADOCommand1->Execute();
sqlInsertData = "(513,'Actual Engine - Percent
Torque',8,1.00,10.67939,-125.00,-125.00,"
"125.00,'%','Measured',513,61444,16)";
ADOCommand1->CommandText = sqlInsertParams sqlInsertData;
ADOCommand1->Execute();
sqlInsertData = "(1129,'Turbocharger 3 Boost
Pressure',16,0.125,514.75,0.00,0.00,"
"8032.00,'kPa','Measured',1129,65190,32)";
ADOCommand1->CommandText = sqlInsertParams sqlInsertData;
ADOCommand1->Execute();
sqlInsertData = "(1131,'Intake Manifold 2
Temperature',8,1.00,83.9313,-40.00,-40.00,"
"210.00,'deg C','Measured',1131,65189,0)";
ADOCommand1->CommandText = sqlInsertParams sqlInsertData;
ADOCommand1->Execute();
sqlInsertData = "(1132,'Intake Manifold 3
Temperature',8,1.00,107.41985,-40.00,-40.00,"
"210.00,'deg C','Measured',1132,65189,8)";
ADOCommand1->CommandText = sqlInsertParams sqlInsertData;
ADOCommand1->Execute();
sqlInsertData = "(1133,'Intake Manifold 4
Temperature',8,1.00,109.57252,-40.00,-40.00,"
"210.00,'deg C','Measured',1132,65189,16)";
ADOCommand1->CommandText = sqlInsertParams sqlInsertData;
ADOCommand1->Execute();
sqlInsertData = "(1137,'Exhaust Gas Port 1
Temperature',16,0.03125,936.9375,-273.00,-273.00,"
"1735.00,'deg C','Measured',1137,65187,0)";
ADOCommand1->CommandText = sqlInsertParams sqlInsertData;
ADOCommand1->Execute();
sqlInsertData = "(1138,'Exhaust Gas Port 2
Temperature',16,0.03,919.8125,-273.00,-273.00,"
"1735.00,'deg C','Measured',1138,65187,16)";
ADOCommand1->CommandText = sqlInsertParams sqlInsertData;
ADOCommand1->Execute();
sqlInsertData = "(1139,'Exhaust Gas Port 3
Temperature',16,0.03125,945.50,-273.00,-273.00,"
"1735.00,'deg C','Measured',1139,65187,32)";
ADOCommand1->CommandText = sqlInsertParams sqlInsertData;
ADOCommand1->Execute();
sqlInsertData = "(1140,'Exhaust Gas Port 4
Temperature',16,0.03125,928.375,-273.00,-273.00,"
"1735.00,'deg C','Measured',1140,65187,48)";
ADOCommand1->CommandText = sqlInsertParams sqlInsertData;
ADOCommand1->Execute();
sqlInsertData = "(1141,'Exhaust Gas Port 5
Temperature',16,0.03125,919.8125,-273.00,-273.00,"
"1735.00,'deg C','Measured',1141,65186,0)";
ADOCommand1->CommandText = sqlInsertParams sqlInsertData;
ADOCommand1->Execute();
sqlInsertData = "(1142,'Exhaust Gas Port 6
Temperature',16,0.03125,928.3775,-273.00,-273.00,"
"1735.00,'deg C','Measured',1142,65186,16)";
ADOCommand1->CommandText = sqlInsertParams sqlInsertData;
ADOCommand1->Execute();
sqlInsertData = "(1143,'Exhaust Gas Port 7
Temperature',16,0.03125,936.9375,-273.00,-273.00,"
"1735.00,'deg C','Measured',1143,65186,32)";
ADOCommand1->CommandText = sqlInsertParams sqlInsertData;
ADOCommand1->Execute();
sqlInsertData = "(1144,'Exhaust Gas Port 8
Temperature',16,0.03125,928.375,-273.00,-273.00,"
"1735.00,'deg C','Measured',1144,65186,48)";
ADOCommand1->CommandText = sqlInsertParams sqlInsertData;
ADOCommand1->Execute();
sqlInsertData = "(1145,'Exhaust Gas Port 9
Temperature',16,0.03125,928.375,-273.00,-273.00,"
"1735.00,'deg C','Measured',1145,65185,0)";
ADOCommand1->CommandText = sqlInsertParams sqlInsertData;
ADOCommand1->Execute();
sqlInsertData = "(1146,'Exhaust Gas Port 10
Temperature',16,0.03125,919.8125,-273.00,-273.00,"
"1735.00,'deg C','Measured',1146,65185,16)";
ADOCommand1->CommandText = sqlInsertParams sqlInsertData;
ADOCommand1->Execute();
sqlInsertData = "(1147,'Exhaust Gas Port 11
Temperature',16,0.03125,936.9375,-273.00,-273.00,"
"1735.00,'deg C','Measured',1147,65185,32)";
ADOCommand1->CommandText = sqlInsertParams sqlInsertData;
ADOCommand1->Execute();
sqlInsertData = "(1148,'Exhaust Gas Port 12
Temperature',16,0.03125,936.9375,-273.00,-273.00,"
"1735.00,'deg C','Measured',1148,65185,48)";
ADOCommand1->CommandText = sqlInsertParams sqlInsertData;
ADOCommand1->Execute();
sqlInsertData = "(1173,'Turbocharger 2 Compressor Inlet
Temperature',16,0.03125,87.4375,-273.00,-273.00,"
"1735.00,'deg C','Measured',1173,65178,8)";
ADOCommand1->CommandText = sqlInsertParams sqlInsertData;
ADOCommand1->Execute();
sqlInsertData = "(1349,'Injector Metering Rail 2
Pressure',16,0.00390625,13.8615,0.00,0.00,"
"251.00,'Mpa','Measured',1349,65243,48)";
ADOCommand1->CommandText = sqlInsertParams sqlInsertData;
ADOCommand1->Execute();
} catch (Exception* ex) {
MessageBox(NULL, ex->Message.c_str(), "DB Create Table", MBOKEROR);
retVal = 1;
}
} __finally {
ADOConnection1->Close();
}
return retVal;
} //---------------------------------------------------------------------------
char* TfrmCan1::ConnStrBldr(char* pDbFileName) {
char loc[500];
strcat(strcpy(loc, "Provider=Microsoft.Jet.OLEDB.4.0;Data Source="),
pDbFileName);
return &loc[0];
} //--------------------------------------------------------------------------- </textarea>
|