2013-08-02 21 views
0

在我的iphone應用程序(SDK 6.1)中使用FMDB。我有3 DB使用FMDB在這個應用程序中工作 。我添加了另一個DB文件到同一個應用程序。 這個也應該返回 的結果,但實際上它只是返回0的結果。如果我在unix提示符下使用sqlite3 並複製我的查詢(select * from tablename),我看到 結果。FMDB在應用程序中返回0結果

有人看到這段代碼有什麼問題嗎? 我開啓了錯誤檢查功能,並在運行代碼時沒有發生錯誤。 我試着刪除應用程序,然後在模擬器和iPhone 上重新安裝它並獲得相同的結果。

感謝您的幫助!

FMDatabase *database = [FMDatabase databaseWithPath:file]; 
database.logsErrors = YES; 
if (![database open]) 
{ 
    [Log log:TERR :@"ERROR Opening Database <%@>", file]; 
    return FILE_NOT_FOUND; 
} 

NSString *selquery = [[[NSString alloc] initWithFormat:@"SELECT * FROM %@", 
         tablename] autorelease]; 
[Log log:TINFO :@"selquery: %@", selquery]; 
FMResultSet *results = [database executeQuery:selquery]; 

NSUInteger count = [database changes]; // how many rows affected apparently 
if (!count) 
{ 
    [Log log:TINFO :@"NO RESULTS FOUND, count = %d", count]; 
    return NO_SQL_RESULTS; 
} 

if ([database hadError]) 
{ 
    NSString *msg = [[[NSString alloc] initWithFormat:@"Database Error <%@> %d: %@", dbname, [database lastErrorCode], [database lastErrorMessage]] autorelease]; 
    [Log log:TERR :msg]; 
    [Log log:TSERVLOG :msg]; 
    return DB_ERROR; 
} 

SearchItem *item = nil; 
while ([results next]) 
{ 
+0

['changes'](http://ccgus.github.io/fmdb/html/Classes/FMDatabase.html#//api/name/changes)方法調用['sqlite3_changes'](http:/ /www.sqlite.org/c3ref/changes.html)函數,它僅與更新/插入/刪除查詢有關。正如fattomhk指出的那樣,你應該簡單地繼續返回值。跟蹤迭代while循環時返回的記錄數,並將'if(count == 0)'邏輯移至'while'循環之後。 – Rob

回答

0

我覺得NSUInteger count = [database changes]; 並不適用於選擇查詢。

嘗試跳過,如果阻止。

您可能包含FMDatabaseAdditions.h頭文件以使用intForQuery:

+0

感謝您的建議。剛剛添加它,但同樣的問題仍然存在。 – Tim

+0

它可以進入while([next next])嗎? – Horst

+0

好吧,奇怪。它現在起作用了,不知道是什麼改變了。在這個問題上花了3個小時,現在只是很高興,現在學到了新東西。謝謝。 – Tim