AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi Was mache ich falsch? Firebird rattert wie irre auf der HDD

Was mache ich falsch? Firebird rattert wie irre auf der HDD

Ein Thema von Gecko · begonnen am 9. Jun 2007 · letzter Beitrag vom 12. Jun 2007
Antwort Antwort
Seite 4 von 6   « Erste     234 56   
hoika

Registriert seit: 5. Jul 2006
Ort: Magdeburg
8.270 Beiträge
 
Delphi 10.4 Sydney
 
#31

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

  Alt 11. Jun 2007, 09:48
Hallo,

was passiert, wenn du z.B. nur 100 Einträge in die DB packst,
rattert der dann genauso ?

Wie sieht es bei dem Server mit dem RAM und RAM-Verbrauch von FB aus ?


Heiko
Heiko
  Mit Zitat antworten Zitat
Gecko
(Gast)

n/a Beiträge
 
#32

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

  Alt 11. Jun 2007, 10:45
Zitat von hoika:
Hallo,
was passiert, wenn du z.B. nur 100 Einträge in die DB packst,
rattert der dann genauso ?
Wie sieht es bei dem Server mit dem RAM und RAM-Verbrauch von FB aus ?
Heiko
Nein, bei 100 Einträgen rattert nichts, ich konnte das ganze ja auch durch die freundliche Hilfe von mkinzler und co soweit in den Griff kriegen.
Was ich aber noch bräuchte ist eine Übersetzung von

Code:
INSERT INTO SPAM (WORD,ANZAHL) VALUES ('TEST',0) ON DUPLICATE KEY UPDATE ANZAHL=ANZAHL+1;
in die Syntax von Firebird 2.1, also irgendwie sowas:

Code:
UPDATE OR INSERT INTO <table or view> [(<column_list>)]
VALUES (<value_list>)
[MATCHING <column_list>]
[RETURNING <column_list> [INTO <variable_list>]]
Das peil ich nämlich nicht so ganz
  Mit Zitat antworten Zitat
Benutzerbild von MrSpock
MrSpock
(Co-Admin)

Registriert seit: 7. Jun 2002
Ort: Owingen
5.865 Beiträge
 
Delphi 2010 Professional
 
#33

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

  Alt 11. Jun 2007, 11:39
Hallo Gecko,

alex517 hat dir in seinem Beitrag auf der ersten Seite dieses Threads eine StoredProcedure vorgestellt, die automatisch ein UPDATE anstelle eines INSERT durchführt, wenn der Schlüssel schon existiert. Diese kannst du benutzen, denn die funktioniert bei ellen FB Versionen. So mache ich es bei ähnlicher Problemstellung auch immer.
Albert
Live long and prosper


MrSpock
  Mit Zitat antworten Zitat
Gecko
(Gast)

n/a Beiträge
 
#34

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

  Alt 11. Jun 2007, 11:45
Zitat von MrSpock:
Hallo Gecko,

alex517 hat dir in seinem Beitrag auf der ersten Seite dieses Threads eine StoredProcedure vorgestellt, die automatisch ein UPDATE anstelle eines INSERT durchführt, wenn der Schlüssel schon existiert. Diese kannst du benutzen, denn die funktioniert bei ellen FB Versionen. So mache ich es bei ähnlicher Problemstellung auch immer.
Wie rufe ich die denn auf?
Ist die ganze Procedure das dann meine SQL Query? also Zeosquery.SQL.text:=Code von Alex?
  Mit Zitat antworten Zitat
Benutzerbild von MrSpock
MrSpock
(Co-Admin)

Registriert seit: 7. Jun 2002
Ort: Owingen
5.865 Beiträge
 
Delphi 2010 Professional
 
#35

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

  Alt 11. Jun 2007, 11:47
Hallo Gecko,

nein, eine SP wird in der Datenbank gespeichert und direkt auf dem Server ausgeführt. Ich benutze kein Zeos, aber gibt es dort keine Komponente für die Verbindung mit StoredProcedures? Eine solche Komponente hat dann in der Regel eine Methode wie "Execute".
Albert
Live long and prosper


MrSpock
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.851 Beiträge
 
Delphi 11 Alexandria
 
#36

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

  Alt 11. Jun 2007, 11:55
TZStoredProc oder halt einen Query
Markus Kinzler
  Mit Zitat antworten Zitat
Gecko
(Gast)

n/a Beiträge
 
#37

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

  Alt 11. Jun 2007, 15:28
Ich hab die StoredProc von Alex jetzt (leicht abgeändert) in IBExpert probiert:

Tabellenaufbau:
Word | Anzahl
Primary Key
Indiziert

SQL-Code:

CREATE PROCEDURE SP_SPAM_IU (
    word varchar(30))
returns (
    anzahl integer)
as

BEGIN
  SELECT WORD, ANZAHL FROM SPAM WHERE (WORD = :WORD) INTO :WORD, :ANZAHL;
  IF (WORD is not NULL) THEN
  BEGIN
    UPDATE SPAM SET ANZAHL = :ANZAHL +1
    WHERE (WORD = :WORD);
  END ELSE
  BEGIN
    INSERT INTO SPAM (
        WORD,
        ANZAHL)
    VALUES (
        :WORD,
        1);
    ANZAHL = 1;
  END

  SUSPEND;
END
Es kommt dann beim Ausführen auch ein Abfragefeld für den Parameter (Word), allerdings ist der Rückgabeparameter (anzahl) der mir dann angezeigt wird immer NULL
und in die Tabelle wird auch nichts eingefügt
  Mit Zitat antworten Zitat
hoika

Registriert seit: 5. Jul 2006
Ort: Magdeburg
8.270 Beiträge
 
Delphi 10.4 Sydney
 
#38

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

  Alt 11. Jun 2007, 15:44
Hallo,

der Parameter Word wird überschrieben.
Ist nie ne gute Idee, einen Parameter als Variable zu missbrauchen

mal so hingetippert.

SQL-Code:
CREATE PROCEDURE SP_SPAM_IU (
    word varchar(30))
returns (
    anzahl integer)
as
  declare variable LocalWord varchar(30);
BEGIN
  SELECT WORD, ANZAHL FROM SPAM WHERE (WORD = :WORD) INTO :LocalWord, :ANZAHL;
  IF (LocalWord is not NULL) THEN
  BEGIN
    UPDATE SPAM SET ANZAHL = :ANZAHL +1
    WHERE (WORD = :WORD);

    Anzahl = Anzahl +1;
  END ELSE
  BEGIN
    INSERT INTO SPAM (
        WORD,
        ANZAHL)
    VALUES (
        :LocalWord,
        1);
    ANZAHL = 1;
  END

  SUSPEND;
END

Heiko
Heiko
  Mit Zitat antworten Zitat
Gecko
(Gast)

n/a Beiträge
 
#39

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

  Alt 11. Jun 2007, 15:52
@hoika

Jetzt kommt leider "The insert failed because a column definition includes validation constrains.
validation error for column WORD, value ***NULL***

  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.851 Beiträge
 
Delphi 11 Alexandria
 
#40

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

  Alt 11. Jun 2007, 15:54
Im 2. Fall ist ja localWord leer, da Word nehmen:
SQL-Code:
CREATE PROCEDURE SP_SPAM_IU (
    word varchar(30))
returns (
    anzahl integer)
as
  declare variable LocalWord varchar(30);
BEGIN
  SELECT WORD, ANZAHL FROM SPAM WHERE (WORD = :WORD) INTO :LocalWord, :ANZAHL;
  IF (LocalWord is not NULL) THEN
  BEGIN
    UPDATE SPAM SET ANZAHL = :ANZAHL +1
    WHERE (WORD = :WORD);

    Anzahl = Anzahl +1;
  END ELSE
  BEGIN
    INSERT INTO SPAM (
        WORD,
        ANZAHL)
    VALUES (
        :Word,
        1);
    ANZAHL = 1;
  END

  SUSPEND;
END
Markus Kinzler
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 05:44 Uhr.
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