Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi Select zu Schnell für Datenbank (https://www.delphipraxis.net/99228-select-zu-schnell-fuer-datenbank.html)

grenzgaenger 8. Sep 2007 23:10

Datenbank: z. B. Access • Zugriff über: ADO/ODBC

Select zu Schnell für Datenbank
 
hallo Leuts,

hab mal ein problem mit der datenbank...

1. frag ich ab, ob ein satz mit dem primärschlüssel bereits in der db vorhanden ist
SQL-Code:
select ... from tabelle where PrimaryKey = ...
falls er etwas zurückliefert, kommt ein update statement, andernfalls ein insert.

das klappt auch ganz gut, wenn ein normaler dialog ist...

ich sammle allerdings die daten um sie anschliessend im batch zu verbuchen.

da kann es vorkommen, dass mehrere sätze zu einem primärschlüssel vorkommen... beim ersten mal macht er das auch noch richtig... wenn dann ein weiterer satz kommt, liesst er wohl ins leere und bringt irrtümlich die meldung, dass noch kein datensatz vorhanden ist, wenn dann der insert kommt, bringt er die meldung, dass bereits ein datensatz vorhanden ist...

gibt es da eine möglichkeit, die verbuchung resp. das lesen zu beschleunigen ... oder die verbuchung zu verlangsamen, so dass die datenbank mit dem fortschreiben nachkommt? :gruebel:


dank für euere hilf
gg

Mr_G 9. Sep 2007 08:29

Re: Select zu Schnell für Datenbank
 
Hallo grenzgaenger,

nutz doch einfach das "INSERT ... ON DUPLICATE KEY UPDATE"-Statement (siehe hier).
Gruß

Jan

grenzgaenger 9. Sep 2007 08:34

Re: Select zu Schnell für Datenbank
 
dank dir Mr. G, das wäre ein netter befehl welcher das problem lösen würd... doch leider gehört er nicht zum standard sprachumfang von SQL und mein datenbanktreiber unterstützt ihn auch nicht... :cry:

marabu 9. Sep 2007 08:54

Re: Select zu Schnell für Datenbank
 
Hallo,

Zitat:

Zitat von grenzgaenger
...ich sammle allerdings die daten um sie anschliessend im batch zu verbuchen.

packe doch das Übel bei der Wurzel: Kannst du die gesammelten Daten nicht konsolidieren, bevor du sie verarbeitest?

Ansonsten würde ich das Problem mal isolieren und in Richtung Transaktionsverarbeitung recherchieren.

Grüße vom marabu

grenzgaenger 9. Sep 2007 13:03

Re: Select zu Schnell für Datenbank
 
aktuell hab ich es so gelöst, dass ich die eingaben gleich abspeichere... funktioniert

an das thema mit den konsolidieren hab ich auch schon gedacht... dachte aber, dass ich das der DB überlassen kann ;-)

den isolation level hab ich bereits auf dirty read gesetzt, brachte aber nix...

nehme an, dass das problem liegt, dass die verbuchung von einem anderen thread aus läuft... so dass mein progy, meint, die verbuchung ist bereits abgeschlossen, während die DB noch dabei ist... die daten fortzuschreiben...

marabu 9. Sep 2007 14:32

Re: Select zu Schnell für Datenbank
 
Zitat:

Zitat von grenzgaenger
... nehme an, dass das problem liegt, dass die verbuchung von einem anderen thread aus läuft ...

Unter diesen Umständen würde ich eine CriticalSection einsetzen.

grenzgaenger 9. Sep 2007 19:24

Re: Select zu Schnell für Datenbank
 
ich glaub, da hast mich falsch verstanden...

die schnittstelle/der datenbanktreiber... ist der andere thread. mein progy, hat nur einen einzigen thread

die frage ist nur, wie man warten kann, bis der datenbanktreiber die daten auch in die datenbnank geschrieben hat, so dass man nachsehen kann, was schon drinne ist..

grüss und noch einen schönen sonntag
gg


Alle Zeitangaben in WEZ +1. Es ist jetzt 17:41 Uhr.

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