Delphi-PRAXiS
Seite 8 von 12   « Erste     678 910     Letzte »    

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi Datenbank für schnelle Bilder, Vorschläge bitte. (https://www.delphipraxis.net/196084-datenbank-fuer-schnelle-bilder-vorschlaege-bitte.html)

KodeZwerg 26. Apr 2018 07:53

AW: Datenbank für schnelle Bilder, Vorschläge bitte.
 
Ich verstehe was Du meinst, Danke für den Guten Ratschlag!

p80286 26. Apr 2018 08:39

AW: Datenbank für schnelle Bilder, Vorschläge bitte.
 
Zitat:

Zitat von KodeZwerg (Beitrag 1400513)
Hier beschrieb ich was ich mit DB vorhabe.

Pardon nicht aufmerksam gelesen, ich hatte es so verstanden, daß du den CRC des Dateinamens bildest, nicht des Dateiinhaltes.:oops:

Dann muß ich noch mal nachfragen, Du schreibst sinngemäß:
Zunächst suche ich den Namen, wenn der nicht vorhanden ist wird er angelegt.
Dann wird der CRC verglichen, ist der unterschiedlich, wird der neue eingetragen.

Wenn ich das so richtig verstanden habe, mußt Du mit zwei Abfragen arbeiten. Ungefähr so:

(Pseudocode)
Code:
Function getCRC(name,CRC,IMG1,IMG2):boolean;

select
   IMG1, IMG2 
from
   Projekte
where
   NAME = :name and CRC = :CRC;

result:=(reccount>0) ;

end;

Function GetName(Name);

select
   name
from
   Projekte
where
   NAME = :name ;

result:=reccount>0;

end;


If not GetName(Name) then InsertName(Name);
If not getCRC(Name,CRC,IMG1,IMG2) then UpdateCRC(Name,CRC)
else Machwasmit_IMG1_und_IMG2;
Gruß
K-H

IBExpert 26. Apr 2018 09:15

AW: Datenbank für schnelle Bilder, Vorschläge bitte.
 
in meinem Verständnis ist das CRC Verfahren eine Checksumme, mit der man ähnlich wie mit einer Quersumme die Konsistenz der Daten prüfen kann, aber keineswegs dazu geeignet, eine Eindeutigkeit sicherzustellen. Nur so als Hinweis, das du da nicht mit dem falschen Verfahren Inhalte überbügelst ...

Wenn du dir eine simple Bitmap Grafik vorstellst und die pixel so veränderst, das dein CRC den gleichen Wert ergibt, werden 2 unterschiedliche Bilder mit der gleichen CRC dargestellt. Würde ich so nicht als Merkmal der Eindeutigkeit festlegen wollen.

mkinzler 26. Apr 2018 09:29

AW: Datenbank für schnelle Bilder, Vorschläge bitte.
 
Zitat:

Zitat von p80286 (Beitrag 1400535)
Wenn ich das so richtig verstanden habe, mußt Du mit zwei Abfragen arbeiten.

Nein ich würde das eher über ein
SQL-Code:
update or insert
oder
SQL-Code:
merge
machen.

Delphi-Quellcode:
if query.RecordCount > 0 then //gefunden
...
else
begin
  NeueBilderErzeugen(..);
  queryU.ParamByName ...
  ...
end;
mit
Delphi-Quellcode:
  QueryU.SQL.Text := 'update or insert into project ( name, crc, bild1, bild) values ( :name, :crc, :bild1, :bild2) matching (name) returning id;';
...
Ist eine name vorhanden wird der crc und die Bilder upgedatet sonst wird ein neuer DS erzeugt.

mkinzler 26. Apr 2018 09:31

AW: Datenbank für schnelle Bilder, Vorschläge bitte.
 
Zitat:

Zitat von IBExpert (Beitrag 1400542)
in meinem Verständnis ist das CRC Verfahren eine Checksumme, mit der man ähnlich wie mit einer Quersumme die Konsistenz der Daten prüfen kann, aber keineswegs dazu geeignet, eine Eindeutigkeit sicherzustellen. Nur so als Hinweis, das du da nicht mit dem falschen Verfahren Inhalte überbügelst ...

Wenn du dir eine simple Bitmap Grafik vorstellst und die pixel so veränderst, das dein CRC den gleichen Wert ergibt, werden 2 unterschiedliche Bilder mit der gleichen CRC dargestellt. Würde ich so nicht als Merkmal der Eindeutigkeit festlegen wollen.

Ein Hash wäre u.U besser geeignet.

KodeZwerg 26. Apr 2018 09:53

AW: Datenbank für schnelle Bilder, Vorschläge bitte.
 
Danke für Eure Nachträge, das mit der If then else Abfrage habe ich ähnlich bereits umgesetzt.
Nochmal zur CRC, die CRC wird berechnet von dateiname.ext und nicht aus den Bildern oder aus dateinamen.
Also eine Prüfsumme der binär-Datei, das original Input File.
Beispiel:
Start analysiere "Datei.xyz", die CRC16 Berechnung für Datei "Datei.xyz" ergibt $0AF2 <<<<-- das hat noch nichts mit DB zu tun
(Die CRC an sich muss nicht bulletproof sein aber geeignet um "Datei.xyz" zu verifizieren, da es schnell gehen soll entschied ich mich für CRC16 Methode, wobei CRC32/64 nicht arg länger braucht, also das kann ich mit einem Befehl abändern.)
Jetzt schau ich wie bei Eurem DB Code nach "Datei.xyz" und prüfe ob in DB die gleiche CRC (if crc = $0AF2) drinnen ist wie die CRC16 Berechnung ergeben hat. <<<<-- hier erfolgen die DB aufrufe nach [NAME] + [CRC]
Dann wird entschieden ob Bild1 oder Bild2 bei erfolgreicher CRC Prüfung geladen werden soll bzw das in DB hinterlegte Bild erneuert werden muss.
Das alles bekomme ich Dank Eurem Code Beispielen und die vielen Hinweise mitlerweile sehr gut hin!
Nun habe ich sogar Code von Euch vorliegen mit dem ich gleich auch neue DS anlegen kann bzw Updaten, das rockt!
Vielen Lieben Dank für all Eure Mühen!!

Delphi.Narium 26. Apr 2018 10:00

AW: Datenbank für schnelle Bilder, Vorschläge bitte.
 
Der Name soll hier wohl als eindeutiger Identifizierer dienen, der unveränderlich ist. CRC kann sich datenabhängig ändern. Von daher kann die Abfrage nicht

SQL-Code:
select BILD1, BILD2 from project where NAME = :name and CRC = :CRC;


lauten (da hier bei geänderten Daten und damit geänderter CRC nicht gefunden wird), sondern nur

SQL-Code:
select BILD1, BILD2, CRC from project where NAME = :name;


Wenn dann die gefundene CRC von der im Programm berechneten abweicht, müssen die Bilder neu erstellt werden.

Ungefähr sowas:
Delphi-Quellcode:
// Einmalig irgendwo vor der ersten Benutzung der Querys;
QueryCRC.SQL.Text := 'select CRC from project where NAME = :name';
QueryCRC.Params.ParamByName('NAME').DataType := ftString;
QueryCRC.Prepare;

QueryBilder.SQL.Text := 'select Bild1, Bild2 from project where NAME = :name';
QueryBilder.Params.ParamByName('NAME').DataType := ftString;
QueryBilder.Prepare;

QueryUpdate.SQL.Text := 'update project set CRC = :CRC, Bild1 = :Bild1, Bild2 = :Bild2 where NAME = :name';
QueryUpdate.Params.ParamByName('NAME').DataType := ftString;
QueryUpdate.Params.ParamByName('CRC').DataType := ftWord;
QueryUpdate.Params.ParamByName('Bild1').DataType := ftWasAuchImmer;
QueryUpdate.Params.ParamByName('Bild2').DataType := ftWasAuchImmer;
QueryUpdate.Prepare;


// In der Routine, die für die Anzeige der Bilder verantwortlich ist:
MeineCRCWordVariable := BerechneIrgendwieCRCAusAktuellenDaten(MeineNameVariable);
QueryCRC.Params.ParamByName('NAME').Value := MeineNameVariable;
QueryCRC.Open;
if QueryCRC.RecordCOunt = 0 then begin
  // Neuen Datensatz anlegen.
end else
if QueryCRC.FieldByName('CRC').AsInteger <> MeineCRCWordVariable then begin
  QueryUpdate.Params.ParamByName('CRC').Value := MeineCRCWordVariable;
  QueryUpdate.Params.ParamByName('Bild1').Value := IrgendwieBild1Berechnen(MeineNameVariable);
  QueryUpdate.Params.ParamByName('Bild2').Value := IrgendwieBild2Berechnen(MeineNameVariable);
  QueryUpdate.ExecSQL;
end;
QueryCRC.Close;

QueryBilder.Params.ParamByName('NAME').Value := MeineNameVariable;
QueryBilder.Open;
Bild1Anzeigen(QueryBilder.FieldByName('Bild1').Value);
Bild2Anzeigen(QueryBilder.FieldByName('Bild2').Value);
QueryBilder.Close;
Um auf Änderungen der Daten reagieren zu können, würd' ich als CRC 'ne MD5-Checksumme nehmen, damit kann man dann auf Änderungen reagieren und auch eine Eindeutigkeit (soweit überhaupt erforderlich, da bereits über den Namen gegeben) sicherstellen.


Ok, das hat sich wohl erledigt, da der letzte Beitrag von KodeZwerg genau das bereits verbal beschreibt.

Jumpy 26. Apr 2018 10:01

AW: Datenbank für schnelle Bilder, Vorschläge bitte.
 
Nur zum Verständnis: Datei.XYZ ist keine Bilddatei, sondern irgendeine Daten-Datei, deren Daten ggf. genutzt würden, die Bilder zu erzeugen?

mkinzler 26. Apr 2018 10:03

AW: Datenbank für schnelle Bilder, Vorschläge bitte.
 
Zitat:

Der Name soll hier wohl als eindeutiger Identifizierer dienen, der unveränderlich ist. CRC kann sich datenabhängig ändern. Von daher kann die Abfrage nicht

select BILD1, BILD2 from project where NAME = :name and CRC = :CRC;

lauten (da hier bei geänderten Daten und damit geänderter CRC nicht gefunden wird), sondern nur

select BILD1, BILD2, CRC from project where NAME = :name;
Warum es macht doch keinen Unterschied ob es noch kein Bild oder eines, welches geändert wurde gibt. In beiden Fällen muss neu berechnet werden. Ich würde es, wie oben beschrieben per
SQL-Code:
update or insert into
machen

KodeZwerg 26. Apr 2018 10:06

AW: Datenbank für schnelle Bilder, Vorschläge bitte.
 
Zitat:

Zitat von Jumpy (Beitrag 1400553)
Nur zum Verständnis: Datei.XYZ ist keine Bilddatei, sondern irgendeine Daten-Datei, deren Daten ggf. genutzt würden, die Bilder zu erzeugen?

Genau, Datei.xyz ist eine binär-Datei die nichts mit Bildern zu tun hat aber durch Analyse entsteht ein Diagram (Bild) was es in zwei Ausführungen geben kann, das steuer ich über eine Boolean (True = Bild1, False = Bild2)
Die Datei.xyz kann man nicht in einem Bild-Betrachter laden, dort würde man nur Hex-Werte dargestellt bekommen, wenn überhaupt.


Alle Zeitangaben in WEZ +1. Es ist jetzt 08:33 Uhr.
Seite 8 von 12   « Erste     678 910     Letzte »    

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