Delphi-PRAXiS
Seite 1 von 4  1 23     Letzte »    

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Komischer Datenbankeffekt (https://www.delphipraxis.net/194462-komischer-datenbankeffekt.html)

sko1 24. Nov 2017 09:23

Datenbank: SQLite • Version: ? • Zugriff über: FDConnection / FDQuery

Komischer Datenbankeffekt
 
Hallo,

ein besserer Threadtitel fiel mir nicht ein, ich debugge seit Stunden und komme nicht weiter:

Folgender Ablauf:
Es gibt eine global deklarierte Klasse, welche unter anderem ein Array beinhaltet.
Dieses wird beim Erstellen der Klasse mit SetLength eingestellt und gefüllt.

Nun speichere ich in einer SQLite-DB folgendermaßen:

- Tabellen anlegen
- Tabellen füllen

Jedes Tabelle füllen erzeugt eine Connection zur DB, füllt die Tabelle und Destroid diese Connection wieder.
Das Füllen der ersten Tabellen funktioniert, bei der dritten Tabelle ist beim .Connected := true der FDConnection plötzlich das Array leer (High()=-1)!!!!!

Da ich absolut keinen Zusammenhang sehe, das Tabelle füllen bei den ersten Malen funktioniert, bin ich mit meinem Latein am Ende!

Hat irgend jemand eine Idee wo ich ansetzen könnte?

Ciao
Stefan

sakura 24. Nov 2017 09:33

AW: Komischer Datenbankeffekt
 
Das eine hat sehr wahrscheinlich nichts mit dem anderen zu tun... Aber ohne den Source Code wird das hier ein Jahrmarktsraten...

...:cat:...

TiGü 24. Nov 2017 09:48

AW: Komischer Datenbankeffekt
 
Guck dir mal das Tutorial an:
http://www.delphipraxis.net/41047-tu...ortgeschr.html

Speziell der Abschnitt Datenhaltepunkte.
Damit kannst du eventuell herausfinden, wann und warum dein Array verändert wird.

sko1 24. Nov 2017 09:53

AW: Komischer Datenbankeffekt
 
Jetzt habe ich mal etwas entdeckt, aber warum das so ist, vielleicht weiß jemand etwas:

Den kompletten (sehr umfangreichen) Code kann ich leider nicht zur Verfügung stellen, ich versuche mal zu skizzieren:

global deklariert:

Delphi-Quellcode:
type
  TFeld = record
    Eintrag1: integer;
    Eintrag2: integer;
    ...
  end;

type
  TSettings = record
    Eintrag1: integer;
    Eintrag2: integer;
    Stream1 : TMemoryStream;
    Stream2 : TMemoryStream;
    ...
  end;

type
  TVorlage = class
  private
  public
    Filename: string;
    Settings: TSettings;
    Felder : Array of TFeld;
Zum Schreiben in die Datenbank folgender Codeschnipsel:

Delphi-Quellcode:
    Vorlage.Settings.Stream1.Position := 0;
    TBlobfield(FDQuery.FieldByName('Stream1'))
          .LoadFromStream(Vorlage.Settings.Stream1);
      end;

und mit dieser Zeile LoadFromStream... ist das Array of TFeld leer!

Kann jemand damit etwas anfangen?

Ciao
Stefan

sakura 24. Nov 2017 09:56

AW: Komischer Datenbankeffekt
 
Bist Du Dir sicher, dass das Feld als TBlobfield erstellt wurde? Überprüfe mal den Datentyp.

...:cat:...

sko1 24. Nov 2017 10:02

AW: Komischer Datenbankeffekt
 
ich denke schon, das Speichern / Laden der Streams hat ja vorher funktioniert, jetzt möchte ich zusätzlich das Array speichern und es wird dabei zerstört!

Delphi-Quellcode:
SQL.TEXT := 'CREATE TABLE IF NOT EXISTS [Vorlage] (Seite INTEGER, Stream1 BLOB, .......);';


Ciao
Stefan

sakura 24. Nov 2017 10:11

AW: Komischer Datenbankeffekt
 
Zitat:

Zitat von sakura (Beitrag 1387067)
Bist Du Dir sicher

...
Zitat:

Zitat von sko1 (Beitrag 1387068)
ich denke schon

Denken ist nicht überprüfen. ;-)

Unabhängig davon, es ist wahrscheinlich, dass der Fehler schon an anderer Stelle auftritt und durch einen Überlauf verursacht wurde. Wenn Du die Reihenfolge der Deklarationen in Deiner Klasse änderst, dann würdest Du evtl. den Inhalt einer anderen Variable zerstören.

...:cat:...

sko1 24. Nov 2017 10:22

AW: Komischer Datenbankeffekt
 
Wie bekomme ich solch einen Überlauf raus?
Selbst wenn ich den Stream auf Platte zwischenkopiere und daraus ins Datenbankfeld schreibe ist das Array futsch!

Delphi-Quellcode:
    Vorlage.Settings.Stream1.Position := 0;
    Vorlage.Settings.Stream1.SaveToFile('c:\temp\xxx');
    TBlobfield(FDQuery.FieldByName('Stream1')).LoadFromFile('c:\temp\xxx');
und zwar genau in dem Moment TBlobfield(FDQuery.FieldByName('Stream1')).LoadFro mFile

Ciao
Stefan

TiGü 24. Nov 2017 10:37

AW: Komischer Datenbankeffekt
 
Datenhaltepunkt...hallo? Irgendwer? Beitrag Nummer 3?

sko1 24. Nov 2017 10:39

AW: Komischer Datenbankeffekt
 
Ich habe umgebaut, es wird noch verwirrender:

Delphi-Quellcode:
 
   //umkopieren in anderen Stream
   ms:=TMemoryStream.Create();
   ms.Position := 0;
   ms.CopyFrom(Vorlage.Settings.Stream1, Vorlage.Settings.Stream1.size);
   ...
schon beim Kopieren in ms ist das Array Vorlage.Felder, was damit ja eigentlich überhaupt nichts zu tun hat, leer!

Ciao
Stefan


Alle Zeitangaben in WEZ +1. Es ist jetzt 10:45 Uhr.
Seite 1 von 4  1 23     Letzte »    

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