根據說明文檔otl_stream類構造函數的第一個參數是緩存區中能存放查詢結果的行數,按正常理解,如果表中有100條記錄,我將該參數設置成50條(代碼如下)應該是可以的,但實際上不行,在讀第50條的f2的時候就報錯,所以我將該參數設置到200,但是一樣讀到第100行的f2的時候報錯,錯誤與設置50是一樣的,不同只是一個在讀第50行最後一列的值時報錯,一個在讀第100行最後一列的值時報錯,且otl_exception中所有屬性成員都為空字符串!我將otl源碼中的拋出異常的那一句去掉(這是下策,可能造成嚴重的潛在問題,但是我想看一下結果,而且只是去掉一個throw語句),我想總該沒有錯誤了吧?合理的話,到第100行之後,i.eof()語句應該為false,但是實際卻仍是true,所以程序繼續執行循環然後報錯,看來簡單修改一下otl源碼也不行,這如何解決呢?很急,望有高手能救一把!
void select() {
otl_stream i(50, "select f1,f2 from test_tab", db);
float f1, f2;
while (!i.eof()){ //不知為何i.eof()總是為true?
//i.set_flush(true); //此句加與不加是一樣的
i>>f1>>f2;
cout<<"f1="<<f1<<", f2="<<f2<<endl;
} }
我用的是SqlServer2005,otl版本4.0.334
改好了,暫時未查明原因,估計是某個參數變量(如db是局部變量),與select不在同一函數作用域,然後程序正常運行,又不知道什麼時候程序才發現這個變量無效了,就將某個狀態變量設置為無效,但是直到運行到超出緩存才去檢查這個狀態,結果就運行不下去了,初步理解是這樣!