Assertion failure 'unknwon error' bei SELECT

    Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

    • Assertion failure 'unknwon error' bei SELECT

      Sorry, ich bin auch zu blöd.

      Das Abfragen des Rückgabewertes war falsch, weil ich einen Fehler ausgebe, wenn kein Satz gefunden wird.

      Jetzt wüsste ich nur gern, wie ich diesen Eintrag als erledigt markieren oder besser gleich löschen kann....


      Hallo Forum,

      ich habe ein seit ein paar Tagen merkwürdiges Problem mit meiner SQLite3-Datenbank.
      In einer Tabelle speichere ich Images, die an verschiedenen Stellen gelesen werden.

      Jetzt erhalte ich beim Start plötzlich folgende Fehlermeldung:
      NSInternalInconsistencyException', reason: 'Fehler beim Ausführen der SEL-IMG-Anweisung: 'unknown error''

      Das Auslesen passiert hier:

      Quellcode

      1. -(UIImage*)readImageForTable:(int)tableID forRowID:(int)rowID forImageName:(NSString*)imageName {
      2. UIImage *res = nil;
      3. sqlite3_stmt *selectImgStmt = nil;
      4. DLog(@"Read Image %@ for TableID %d and RowID %d...", (imageName ? imageName : @"NULL"), tableID, rowID);
      5. const char* l_SQL = Str2Char(@"SELECT %@ FROM %@ WHERE %@ = %d AND %@ = %d AND %@ = '%@';",
      6. img_ImageData, img_TableName, img_TableID, tableID, img_RowID, rowID, img_ImageName, imageName);
      7. DLog(@"Prepare SEL-IMG: %s", l_SQL);
      8. if (sqlite3_prepare_v2(database, l_SQL, -1, &selectImgStmt, NULL) != SQLITE_OK) {
      9. NSAssert1(0, @"Fehler beim Erzeugen der SEL_IMG-Anweisung: '%s'", sqlite3_errmsg(database));
      10. return nil;
      11. }
      12. if (sqlite3_step(selectImgStmt) == SQLITE_ROW) {
      13. const void *blobBytes = sqlite3_column_blob(selectImgStmt, 0);
      14. int blobBytesLength = sqlite3_column_bytes(selectImgStmt, 0);
      15. NSData *blobData = [NSData dataWithBytes:blobBytes length:blobBytesLength];
      16. res = [UIImage imageWithData:blobData];
      17. } else {
      18. NSAssert1(0, @"Fehler beim Ausführen der SEL-IMG-Anweisung: '%s'", sqlite3_errmsg(database));
      19. }
      20. sqlite3_reset(selectImgStmt);
      21. return res;
      22. }
      Alles anzeigen


      Protokoll:

      Quellcode

      1. 2013-01-25 15:19:49.396 SmartPadClient[1385:19d03] -[BISMobilDB readImageForTable:forRowID:forImageName:] [Zeile 491] Read Image action-20x20.png for TableID 1 and RowID 3...
      2. 2013-01-25 15:19:49.397 SmartPadClient[1385:19d03] -[BISMobilDB readImageForTable:forRowID:forImageName:] [Zeile 494] Prepare SEL-IMG: SELECT imagedata FROM images WHERE tableid = 1 AND rowid = 3 AND imagename = 'action-20x20.png';
      3. 2013-01-25 15:19:51.207 SmartPadClient[1385:19d03] *** Assertion failure in -[BISMobilDB readImageForTable:forRowID:forImageName:], /Users/Udo/_iPhone/SmartPadClient/../SmartPhoneClient/Classes/BISMobilDB.m:505
      4. 2013-01-25 15:20:02.595 SmartPadClient[1385:19d03] *** Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'Fehler beim Ausführen der SEL-IMG-Anweisung: 'unknown error''
      5. *** First throw call stack:
      6. (0x209f012 0x1dd1e7e 0x209ee78 0x1867f35 0x7722b 0x2b8c4 0x2cf75 0x30197 0x687c8 0x68d03 0xdfc753 0xdfca7b 0xe0a590 0xd65437 0xd646b7 0xd653d6 0xe0a3d4 0x5e3a 0x61ed 0x1de5705 0x7274c 0x4356a 0x438ae 0x17cfe83 0x205e376 0x205de06 0x2045a82 0x2044f44 0x2044e1b 0x1f5c7e3 0x1f5c668 0xd1965c 0x21f2 0x2125 0x1)
      7. libc++abi.dylib: terminate called throwing an exception
      8. (lldb)


      Wenn ich die SQL-Anweisung aus dem Protokoll kopiere und manuell im Datamanager unter Firefox starte, gibt es keinen Fehler.
      Ich habe auch sowohl mit einfachen, wie auch mit doppelten Anführungszeichen experimentiert und ein Semikolon angehängt, aber es ändert sich nichts.

      Hat einer von euch schon mal so ein Problem gehabt? Und es womöglich sogar lösen können??

      Was mich auch noch irritiert, ist die Darstellung im Datamanager.
      Die Tabelle hat folgende Struktur:

      Quellcode

      1. CREATE TABLE images(tableid integer not null, rowid integer not null, imagename TEXT NOT NULL, imagedata blob, primary key (tableid, rowid, imagename))


      Wenn ich mir den Inhalt ansehe, zeigt mir der Datamanager immer die Spalten: rowid, tableid, rowid, imagename, imagedata an.
      Die Spalte 'rowid' kommt also zweimal vor, was eigentlich nicht stimmt.
      Aber andere Zugriffe auf die Tabelle gehen und ich habe das Problem auf dem Simulator und auf dem iPad.

      Hilfe ! ;(

      Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von Gibbsnich () aus folgendem Grund: Hat sich erledigt!

    • Naja, die InkonsistenzException rufst du ja brav selbst auf. Insofern ist die wenig bis gar nicht hilfreich.

      Du solltest ggf. den Rückgabewert des Aufrufs in eine Variable packen und dann den Wert der Variable überprüfen statt einfach gegen 'OK' zu prüfen und im Fehlerfall mit einer Exception um dich zu werfen.
      So ist das Ganze wie gesagt eher nicht hilfreich.
      «Applejack» "Don't you use your fancy mathematics to muddle the issue!"

      Iä-86! Iä-64! Awavauatsh fthagn!

      kmr schrieb:

      Ach, Du bist auch so ein leichtgläubiger Zeitgenosse, der alles glaubt, was irgendwelche Typen vor sich hin brabbeln. :-P