Wat ik wil doen is een veld updaten in een DBF-file via de OLEDB Foxpro Driver van Microsoft.
Ik krijg echter de volgende foutmelding:
"Bij een bewerking die uit meerdere stappen bestaat, is een fout opgetreden. Controleer alle statuswaarden."
Ik heb al veel sites gevonden met deze foutmelding, echter nog nergens een goede oplossing.
Iemand een goede tip?
De ontwikkelomgeving is RAD C++ Builder 2010.
Ik krijg echter de volgende foutmelding:
"Bij een bewerking die uit meerdere stappen bestaat, is een fout opgetreden. Controleer alle statuswaarden."
Ik heb al veel sites gevonden met deze foutmelding, echter nog nergens een goede oplossing.
Iemand een goede tip?
De ontwikkelomgeving is RAD C++ Builder 2010.
C++:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
| void __fastcall Tdm::UpdateArticle() { String DBFconn = "Provider=VFPOLEDB.1;Mode=ReadWrite|Share Deny None;Password='';Collating Sequence=MACHINE;Data Source=\\srv123\data\dbf\"; try { std::auto_ptr<TADODataSet>plg(new TADODataSet(NULL)); plg->Connection = dm->PLGconn; // SQLOLEDB ADOconnection plg->LockType = ltReadOnly; plg->CursorType = ctOpenForwardOnly; plg->CommandText = "SELECT id, price FROM PLG_Data WHERE id>0"; plg->Open(); std::auto_ptr<TADODataSet>dbf(new TADODataSet(NULL)); dbf->Connection = DBFconn; // VFPOLEDB ADOconnection dbf->CursorLocation = clUseServer; // dbf->LockType = ltOptimistic; // dbf->CursorType = ctDynamic; for (plg->First(); !plg->Eof; plg->Next()) { dbf->Close(); dbf->CommandText = "SELECT * FROM article.dbf WHERE ID = " + plg->FieldByName("id")->AsString; dbf->Open(); if (!dbf->Eof) { dbf->First(); dbf->Edit(); dbf->FieldByName("price")->Value = 1.0; //dbf->FieldByName("price")->Value = plg->FieldByName("price")->Value; dbf->Post(); // Hier gaat het fout ! } else { // Append? } } dbf->Close(); plg->Close(); } catch(Exception & E) {} catch(...) {} } |