![]() |
[FMX Android] Bild Speichern -> Disk I/O Error
Guten Tag allerseits!
Ich versuche über unten angefügten Code ein Bild, welches ich zuvor aufgenommen habe auf meinem Android Tablet in eine SQLITE Datenbank zu schreiben. Wenn ich das Ganze in eine Temp Tabelle schreibe, funktioniert alles einwandfrei, ändere ich das Ganze allerdings auf eine "echte" Tabelle, oder versuche ich die Daten aus der Temptabelle in die "echte" Tabelle einzufügen, bekomme ich den Fehler "disk I/O Error".
Delphi-Quellcode:
Ich befürchte das mein Problem irgendwo zwischen den Ohren liegt...
procedure TfrmKontakt.DoDidFinish(Image: TBitmap);
var str:TMemoryStream; SQLText:String; begin BT_Save.Visible := (not Kommentar) or (neu); IMG.Bitmap.Assign(Image); try str := TMemoryStream.Create; IMG.Bitmap.SaveToStream(str); if not ExistiertTabelle(Daten.SQLITE_Connection, 'TEMP_Kontakt_Bilder') then Begin SQLExec(Daten.SQLITE_Connection, 'Create Table TEMP_Kontakt_Bilder (IDX INTEGER, Kontakt_Sub_IDX INTEGER, Kontakt_IDX INTEGER, Bild BLOB, User_ID INTEGER, Station_ID INTEGER, Changed_By INTEGER, Changed_Last DATETIME, Creation_Date DATETIME, KundLief VARCHAR)'); SQLText := 'Insert into TEMP_Kontakt_Bilder (IDX, Kontakt_Sub_IDX, Kontakt_IDX, Bild, User_ID, Station_ID, Changed_By, Changed_Last, Creation_Date, KundLief) '+ 'values ('+ReadINITab('Kontakt', 'MaxBildIDX')+'+1, :Kontakt_Sub_IDX, :Kontakt_IDX, :Bild, :User_ID, :Station_ID, :Changed_By, :Changed_Last, :Creation_Date, ''K'')'; End else Begin SQLText :='Insert into TEMP_Kontakt_Bilder (IDX, Kontakt_Sub_IDX, Kontakt_IDX, Bild, User_ID, Station_ID, Changed_By, Changed_Last, Creation_Date, KundLief) '+ 'values ((Select Max(IDX) +1 from TEMP_Kontakt_Bilder), :Kontakt_Sub_IDX, :Kontakt_IDX, :Bild, :User_ID, :Station_ID, :Changed_By, :Changed_Last, :Creation_Date, ''K'')'; End; Daten.Q_Bild.Close; Daten.Q_Bild.SQL.Text := SQLText; Daten.Q_Bild.ParamByName('Kontakt_Sub_IDX').AsInteger := StrToInt(ReadINITab('Kontakt', 'MaxKontaktSubIDX')) +1; Daten.Q_Bild.ParamByName('Kontakt_IDX').AsInteger := Kontakt_Nr; Daten.Q_Bild.ParamByName('Bild').LoadFromStream(str, ftBlob); Daten.Q_Bild.ParamByName('User_ID').AsInteger := CurrentUser; Daten.Q_Bild.ParamByName('Station_ID').AsInteger := Station_ID; Daten.Q_Bild.ParamByName('Changed_By').AsInteger := CurrentUser; Daten.Q_Bild.ParamByName('Changed_Last').AsDateTime := Now; Daten.Q_Bild.ParamByName('Creation_Date').AsDateTime := Now; Daten.Q_Bild.Execute; finally str.Free; end; IMG.Bitmap := nil; end; PS: Ich habe mit diesem Code schon früher Bilder in meine DB gespeichert. Das einzige, das mir gerade einfällt was geändert wurde, ist das Tool mit dem ich die Datenbank angucke und aufbereite auf meinem Rechenr. (vorher dieses SQLITE Tool in Firefox, jetzt SQLITEStudio 3.1.1) |
AW: [FMX Android] Bild Speichern -> Disk I/O Error
Ich habe jetzt mal mit nen paar anderen Geräte getestet. Auf einem iPhone5 Funktioniert das speichern, auf einem AlcatelShineLite mit Android 6.0 ebenfalls. nur auf dem Samsung Tablet mit android 4.1 tut es nicht. liegt es eventuell an einem Veralteten Android, das das damit nicht mehr funktioniert?
Alternativ: Wie / Wo kann ich mehr auslesen? ich hab gesehen, dass dieser i/o error verschiedene Varianten hat, welche verschiedene Ursachen haben. kann ich das irgendwie auslesen, welcher spezifische Fehler das ist? |
AW: [FMX Android] Bild Speichern -> Disk I/O Error
Hi,
Ich schreibe die Bilder immer über ein UpdateBlob allerdings hab ich das bisher nur auf Windows Sysemen genutzt, Android k.A. |
AW: [FMX Android] Bild Speichern -> Disk I/O Error
Wo liegt die Datei der Datenbanktabelle?
Eventuell hast du keine Schreibrechte auf dem Verzeichnis. Oder der Speicher ist kaputt. :? |
AW: [FMX Android] Bild Speichern -> Disk I/O Error
Die Datei liegt im Appverzeichnis. Alle anderen Daten kann ich darin auch Ohne probleme Speichern.
|
AW: [FMX Android] Bild Speichern -> Disk I/O Error
Ich habe irgendwie gerade erst gesehen, dass du auch was geschrieben hast... (schande über mich).
Zitat:
|
AW: [FMX Android] Bild Speichern -> Disk I/O Error
Ich habe jetzt gerade noch mal weiter getestet, und es scheint an der Größe der gleichzeitig bewegten Daten zu liegen. Auf meinen Anderen Geräten (ein Altes iPad (iOS 9.3) und ein iPhone5 (iOS 10.3) erzeugen den selben Fehler, wenn ich mehrere Bilder gleichzeitig aus einer Tabelle in eine Andere einfüge.
SQL-Code:
Insert into Kontakt_Bilder select * from TMP_Kontakt_Bilder
Auf dem iPad entsteht der Fehler beim einfügen von zwei Bildern gleichzeitig und auf dem iPhone5 bei 10 Bildern. |
AW: [FMX Android] Bild Speichern -> Disk I/O Error
Wie groß sind denn die Bilder, die du hier in die Datenbank schreibst? SQLite hat bei größeren Blob-Daten eine unterirdische Performance. Es ist nicht empfohlen, Dateien in der Datenbank zu speichern.
|
AW: [FMX Android] Bild Speichern -> Disk I/O Error
das sind bilder, die ich direkt mit der Kamera des Gerätes aufnehme... Ich Speichere die Bilder auch nur in der Datenbank, da die Öfer mal hin und her Übertragen werden sollen, zwischen MSSQL-Server und SQLITE Datenbank. Und da ist das besser, die in der DB zu haben. ich kann aber gleich mal gucken wie groß die bilder so sind...
[Edit] Bei dem Tablet, bei dem Der Fehler direkt bei dem Ersten bild auftritt, sind die Bilder etwa 500 KB bis 1 MB groß. [/Edit] |
AW: [FMX Android] Bild Speichern -> Disk I/O Error
Läuft das ganze in einem Thread? Also schreibt der vielleicht noch in die Datenbank, während du schon versuchst, die wieder auszulesen?
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 12:06 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz