📄 dbviewupdatedata.htm
字号:
<pre><code><span class="codeComment">//Update objects in the database via an update_iterator</span>
class Example
{
public: <span class="codeComment">// tablename.columnname:</span>
int exampleInt; <span class="codeComment">// DB_EXAMPLE.INT_VALUE</span>
string exampleStr; <span class="codeComment">// DB_EXAMPLE.STRING_VALUE</span>
double exampleDouble; <span class="codeComment">// DB_EXAMPLE.DOUBLE_VALUE</span>
long exampleLong; <span class="codeComment">// DB_EXAMPLE.EXAMPLE_LONG</span>
TIMESTAMP_STRUCT exampleDate; <span class="codeComment">// DB_EXAMPLE.EXAMPLE_DATE</span>
Example(int exInt, const string &exStr, double exDouble, long exLong,
const TIMESTAMP_STRUCT &exDate) :
exampleInt(exInt), exampleStr(exStr), exampleDouble(exDouble), exampleLong(exLong),
exampleDate(exDate)
{ }
};
class BCAExampleObj
{
public:
void operator()(BoundIOs &boundIOs, Example &rowbuf)
{
boundIOs["INT_VALUE"] == rowbuf.exampleInt;
boundIOs["STRING_VALUE"] == rowbuf.exampleStr;
boundIOs["DOUBLE_VALUE"] == rowbuf.exampleDouble;
boundIOs["EXAMPLE_LONG"] == rowbuf.exampleLong;
boundIOs["EXAMPLE_DATE"] == rowbuf.exampleDate;
}
};
class ExampleParamObj
{
public:
int lowIntValue;
int highIntValue;
string strValue;
TIMESTAMP_STRUCT dateValue;
};
class BPAParamObj
{
public:
void operator()(BoundIOs &boundIOs, ExampleParamObj &paramObj)
{
boundIOs[0] == paramObj.lowIntValue;
boundIOs[1] == paramObj.highIntValue;
boundIOs[2] == paramObj.strValue;
boundIOs[3] == paramObj.dateValue;
}
};
<span class="codeComment">// update Example object (with new values) meeting a query in the database</span>
void UpdateData()
{
<span class="codeComment">// construct view</span>
DBView<Example, ExampleParamObj>
view("DB_EXAMPLE", BCAExampleObj(),
"WHERE INT_VALUE BETWEEN (?) AND (?) AND "
"STRING_VALUE = (?) OR EXAMPLE_DATE = (?)", BPAParamObj());
<span class="codeComment">// build an updater for the view
// *** SQL Query Generated for this update_iterator:" ***
// *** (Note: All column and field names arealphabetized due to our implementation) ***
// "UPDATE DB_EXAMPLE SET DOUBLE_VALUE = (?), EXAMPLE_DATE = (?), EXAMPLE_LONG = (?), INT_VALUE = (?), "
// "STRING_VALUE = (?) WHERE INT_VALUE BETWEEN (?) AND (?) AND STRING_VALUE = (?) OR EXAMPLE_DATE = (?)"
</span>
DBView<Example, ExampleParamObj>::update_iterator
exampleUpdater = view;
<span class="codeComment">// set data fields we want to update to their desired values
// exampleStr to "Updated" andsampleLong to 0</span>
Example updateMe;
updateMe.exampleStr = "Updated";
updateMe.exampleLong = 25;
TIMESTAMP_STRUCT today = {2000, 9, 29, 0, 0, 0,0};
updateMe = Example(2121, "Updated", 99.99, 25, today);
*exampleUpdater = updateMe;
<span class="codeComment">// now set the parameters indicating which rows</span>
we want the update applied
exampleUpdater.Params().lowIntValue = 5;
exampleUpdater.Params().highIntValue = 13;
exampleUpdater.Params().strValue = "FindMe";
TIMESTAMP_STRUCT paramDate = {1999, 11, 11, 0,0, 0, 0};
exampleUpdater.Params().dateValue = paramDate;
<span class="codeComment">// execute the update</span>
exampleUpdater++;
cout << exampleUpdater.GetLastCount()
<< " rows updated!" << endl;
<span class="codeComment">// now can perform other updates using the same updater object
// make sure to put in your new values for both the data and parameter values
// for the update
// set data fields we want to update to their desired values
// exampleStr to "Second Update" and exampleLong to 66</span>
TIMESTAMP_STRUCT tomorrow = {2000, 9, 30, 0, 0,0, 0};
updateMe = Example(2222, "Second Update", 0.11111, 66, tomorrow);
updateMe.exampleLong = 66;
*exampleUpdater = updateMe;
<span class="codeComment">// now set the parameters indicating which rows</span>
we want the update applied
exampleUpdater.Params().lowIntValue = 21;
exampleUpdater.Params().highIntValue = 30;
exampleUpdater.Params().strValue = "To
find";
TIMESTAMP_STRUCT otherParamDate = {2001, 10, 31,0, 0, 0, 0};
exampleUpdater.Params().dateValue = otherParamDate;
<span class="codeComment">// execute the update</span>
exampleUpdater++;
cout << exampleUpdater.GetLastCount() << " rows updated!" << endl;
}
</code></pre>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -