Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Cross-Platform-Entwicklung (https://www.delphipraxis.net/91-cross-platform-entwicklung/)
-   -   [FMX Android] Bild Speichern -> Disk I/O Error (https://www.delphipraxis.net/194664-%5Bfmx-android%5D-bild-speichern-disk-i-o-error.html)

Devil1925 19. Dez 2017 09:58

[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:
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;
Ich befürchte das mein Problem irgendwo zwischen den Ohren liegt...

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)

Devil1925 19. Dez 2017 14:15

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?

matashen 19. Dez 2017 15:37

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.

himitsu 19. Dez 2017 15:46

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. :?

Devil1925 20. Dez 2017 07:23

AW: [FMX Android] Bild Speichern -> Disk I/O Error
 
Die Datei liegt im Appverzeichnis. Alle anderen Daten kann ich darin auch Ohne probleme Speichern.

Devil1925 21. Dez 2017 14:14

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:

Zitat von matashen (Beitrag 1389284)
Hi,

Ich schreibe die Bilder immer über ein UpdateBlob
allerdings hab ich das bisher nur auf Windows Sysemen genutzt, Android k.A.

Wie läuft das mit dem UpdateBlob? ich habe da jetzt gerade so spontan nichts zu gefunden, und das sagt mir auch so irgendwie nichts...

Devil1925 21. Dez 2017 15:33

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.

bra 22. Dez 2017 11:56

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.

Devil1925 22. Dez 2017 12:13

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]

bra 22. Dez 2017 12:27

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 09:21 Uhr.
Seite 1 von 2  1 2      

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz