全國最多中醫師線上諮詢網站-台灣中醫網
發文 回覆 瀏覽次數:2619
推到 Plurk!
推到 Facebook!

如何用ADO或其他方式建立一個新的Access.MDB 資料庫

答題得分者是:Stallion
SuperRock
一般會員


發表:5
回覆:13
積分:3
註冊:2004-05-20

發送簡訊給我
#1 引用回覆 回覆 發表時間:2007-04-24 23:58:14 IP:61.172.xxx.xxx 訂閱
查過許多文章都用dephi自動建立新的ACCESS檔案,也查過底下文章
http://delphi.ktop.com.tw/board.php?cid=171&fid=1014&tid=24531,
但檔案無法下載,請問各位大大,如何用BCB實現此功能呢?謝謝!!
Stallion
版主


發表:52
回覆:1600
積分:1995
註冊:2004-09-15

發送簡訊給我
#2 引用回覆 回覆 發表時間:2007-04-25 00:31:09 IP:211.22.xxx.xxx 未訂閱
在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>
SuperRock
一般會員


發表:5
回覆:13
積分:3
註冊:2004-05-20

發送簡訊給我
#3 引用回覆 回覆 發表時間:2007-05-15 20:49:18 IP:58.39.xxx.xxx 訂閱
對不起最近比較忙,所以這麼晚才結案,感謝Stallion,但小弟在http://delphi.ktop.com.tw/board.php?cid=168&fid=918&tid=49032找到了答案,而且很簡單,但還是謝謝Stallion的回覆,因無人回覆所以將分數給您喔!
系統時間:2024-04-27 1:25:19
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!