Delphi-PRAXiS
Seite 2 von 6     12 34     Letzte »    

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi Was mache ich falsch? Firebird rattert wie irre auf der HDD (https://www.delphipraxis.net/93696-mache-ich-falsch-firebird-rattert-wie-irre-auf-der-hdd.html)

Gecko 10. Jun 2007 01:31

Re: Was mache ich falsch? Firebird rattert wie irre auf der
 
So Update:

Der Code schafft jetzt 8000 in 4 Sekunden...ich denk viel besser wirds nicht gehn.

Delphi-Quellcode:
zconnection1.StartTransaction;
qrsecond.SQL.Text:='INSERT INTO SPAM (WORD) VALUES (:WORD)';

for I := 0 to sl.Count-1 do begin

qrsecond.ParamByName('WORD').AsString:=sl.Strings[i];
qrsecond.ExecSQL;

end;

zconnection1.Commit;
Allerdings muss ich vorher bei jedem Eintrag ja noch nen Select machen um zu schaun ob der Eintrag schon drin ist und dann nen Update um den Zähler um eins zu erhöhen,
wie oft das Word schon vorgekommen ist. Falls er nicht drin ist eben den Insert hier.

Hm gibts da irgenden Weg um das halbwegs effizient zu lösen?

omata 10. Jun 2007 02:54

Re: Was mache ich falsch? Firebird rattert wie irre auf der
 
Hallo Gecko,

mach dein WORD zum PrimaryKey und bau um dein ExecSQL ein Try-Except.

Wenn die Zahl nicht da ist wird sie hinzugefügt, wenn sie schon da ist wird eine Exception ausgelöst und dann kannst du dein UPDATE machen.

Das sollte wesentlich schneller gehen.

Gruss
Thorsten

alex517 10. Jun 2007 09:37

Re: Was mache ich falsch? Firebird rattert wie irre auf der
 
Hallo Gecko,

Lass doch die Arbeit Firebird machen, dazu hast du ihn (den Vogel ;)) doch.
Für deinen Fall dürfte diese SP reichen.
Es wird nachgesehen ob der Begriff schon vorhanden ist und entsprechend reagiert.
Wichtig ist ein Index auf das Feld "BEGRIFF" für den indizierten Zugriff.

SQL-Code:
CREATE PROCEDURE SP_SPAM_IU (
    BEGRIFF VARCHAR(30))
RETURNS (
    ANZAHL INTEGER)
AS
DECLARE VARIABLE ID INTEGER;
BEGIN
  BEGRIFF = UPPER(BEGRIFF);
  SELECT ID, ANZAHL FROM SPAM WHERE (BEGRIFF = :BEGRIFF) INTO :ID, :ANZAHL;
  IF (ID is not NULL) THEN
  BEGIN
    UPDATE SPAM SET ANZAHL = :ANZAHL +1
    WHERE (ID = :ID);
  END ELSE
  BEGIN
    INSERT INTO SPAM (
        BEGRIFF,
        ANZAHL)
    VALUES (
        :BEGRIFF,
        1);
    ANZAHL = 1;
  END
  SUSPEND;
END
alex

gsh 10. Jun 2007 10:56

Re: Was mache ich falsch? Firebird rattert wie irre auf der
 
warum nicht einfach:
SQL-Code:
INSERT INTO TABLE SET id = 1, Test = 'Test' ON DUPLICATE KEY UPDATE Test = 'Test'

Gecko 10. Jun 2007 15:39

Re: Was mache ich falsch? Firebird rattert wie irre auf der
 
Zitat:

Zitat von gsh
warum nicht einfach:
SQL-Code:
INSERT INTO TABLE SET id = 1, Test = 'Test' ON DUPLICATE KEY UPDATE Test = 'Test'

Mich beschleicht das Gefühl, das es ON DUPLICATE KEY in Firebird garnicht gibt :-( ??
Es funktioniert nämlich nicht und bei google gibts nicht nen einzigen eintrag dazu

Was kann man anstattdessen verwenden?

hoika 10. Jun 2007 21:05

Re: Was mache ich falsch? Firebird rattert wie irre auf der
 
Hallo,

der Code On Duplicate klappt erst ab FB2.x.

8000 Einträge in 4 sec sind doch nicht schlecht...
Ist auf Word überhaupt ein Index drauf ?


Heiko

Gecko 10. Jun 2007 21:40

Re: Was mache ich falsch? Firebird rattert wie irre auf der
 
Zitat:

Zitat von hoika
der Code On Duplicate klappt erst ab FB2.x.

Ich hab aber Firebird 2.x, klappen tuts trotzdem nicht :(
Invalid Token: ON

mkinzler 10. Jun 2007 21:41

Re: Was mache ich falsch? Firebird rattert wie irre auf der
 
Mit 2.x ist >= 2.1 gemeint

Gecko 10. Jun 2007 21:43

Re: Was mache ich falsch? Firebird rattert wie irre auf der
 
Zitat:

Zitat von mkinzler
Mit 2.x ist >= 2.1 gemeint

Ist die im Alpha Stadium? Auf der HP gibts nämlich nur 2.01
Hm was mach ich da? Den Workaround von alex517 nehmen oder kann man diese Alpha bereits stabil nutzen? (vlt hats ja jemand getestet)

mkinzler 10. Jun 2007 21:47

Re: Was mache ich falsch? Firebird rattert wie irre auf der
 
Zitat:

Ist die im Alpha Stadium?
Ja
Zitat:

Auf der HP gibts nämlich nur 2.01
http://www.ibphoenix.com/main.nfs?a=...bp_download_21
Zitat:

Hm was mach ich da? Den Workaround von alex517 nehmen?
Kommt auf den Zeitrahmen, des Einsatzes deines Programmes an. Meiner Erfahrung nach ist die 2.1 recht stabil


Alle Zeitangaben in WEZ +1. Es ist jetzt 17:26 Uhr.
Seite 2 von 6     12 34     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