AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi SL Update mit StoredProc
Thema durchsuchen
Ansicht
Themen-Optionen

SL Update mit StoredProc

Ein Thema von Walter Landwehr · begonnen am 14. Aug 2015 · letzter Beitrag vom 17. Aug 2015
Antwort Antwort
Seite 1 von 2  1 2      
Walter Landwehr

Registriert seit: 28. Mär 2006
Ort: 32816 Schieder-Schwalenberg
397 Beiträge
 
Delphi 10.4 Sydney
 
#1

SL Update mit StoredProc

  Alt 14. Aug 2015, 10:12
Datenbank: Firebird • Version: 2.5.4 • Zugriff über: IBO
Hallo,

geht so was:


update tbl_gebuehren set sortierung = (select result from SP_Sortstring('Ziffer')) Der Befehl wird ausgeführt aber die Spalte Sortierung ist null.
Walter Landwehr
Mfg

Walter
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

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

AW: SL Uodate mit StoreOroc

  Alt 14. Aug 2015, 10:20
Liefert die SP auch ein Feld mit der Bezeichnung "result" zurück?
SUSPEND vergessen?
Markus Kinzler

Geändert von mkinzler (14. Aug 2015 um 10:23 Uhr)
  Mit Zitat antworten Zitat
nahpets
(Gast)

n/a Beiträge
 
#3

AW: SL Uodate mit StoreOroc

  Alt 14. Aug 2015, 11:40
Hallo,

habe von FireBird keine Ahnung, bei den mir bekannten Datenbanken würde ich es in der Form machen:
Code:
update tbl_gebuehren set sortierung = SP_Sortstring(Ziffer);
'Ziffer' dürfte in Deinem Beispiel bedeuten, dass die SP_Sortstring aus der Zeichenfolge 'Ziffer' die Sortierung erstellt, also bei allen Datensätzen zum gleichen Ergebnis kommt. Du möchtest aber sicherlich die Sortierung aus dem Inhalt der Spalte Ziffer gebildet bekommen.

Geändert von nahpets (14. Aug 2015 um 11:40 Uhr) Grund: Edit fand (mal wieder) Schreibfehler
  Mit Zitat antworten Zitat
Benutzerbild von p80286
p80286

Registriert seit: 28. Apr 2008
Ort: Stolberg (Rhl)
6.659 Beiträge
 
FreePascal / Lazarus
 
#4

AW: SL Uodate mit StoreOroc

  Alt 14. Aug 2015, 12:01
Ja das kann funktionieren, aber deine SP scheint mir ein wenig unangepasst zu sein.
Normal wäre mindestens ein (individueller) Eingabewert, wenn 'Ziffer' genutzt wird um Zufallszahlen zu generieren sollte es reichen. Wird denn überhaupt ein Wert zurück gegeben?

Aber warum so, die SP kann den Update doch selbst durchführen!?

Gruß
K-H
Programme gehorchen nicht Deinen Absichten sondern Deinen Anweisungen
R.E.D retired error detector
  Mit Zitat antworten Zitat
nahpets
(Gast)

n/a Beiträge
 
#5

AW: SL Uodate mit StoreOroc

  Alt 14. Aug 2015, 12:28
Ja das kann funktionieren, aber deine SP scheint mir ein wenig unangepasst zu sein.
Normal wäre mindestens ein (individueller) Eingabewert, wenn 'Ziffer' genutzt wird um Zufallszahlen zu generieren sollte es reichen. Wird denn überhaupt ein Wert zurück gegeben?

Aber warum so, die SP kann den Update doch selbst durchführen!?

Gruß
K-H
Ein Wert wird hier zurückgegeben.

Wenn die SP das Update selbst ausführt, geht es aber nur nach dem Motto: "Alles oder nichts", also für die gesamte Tabelle. Dies ist bei der erstmaligen Befüllung der Spalte Sortierung sicherlich sinnvoll. Bei allen später hinzukommenden oder geänderten Datensätzen aber nicht, da sollte man die SP lieber in einen entsprechenden Datenbanktrigger legen, der nur bei Änderungen der Spalte Ziffer für eine Neubefüllung der Spalte Sortierung, des konkret betroffenen Datensatzes, sorgt.
  Mit Zitat antworten Zitat
Benutzerbild von p80286
p80286

Registriert seit: 28. Apr 2008
Ort: Stolberg (Rhl)
6.659 Beiträge
 
FreePascal / Lazarus
 
#6

AW: SL Update mit StoredProc

  Alt 14. Aug 2015, 12:35
Wenn ich mich nicht verlesen habe, dann liefert die SP von DataSpider für 'Ziffer' NULL. Für '1Ziffer' sieht das schon ganz anders aus.

Gruß
K-H
Programme gehorchen nicht Deinen Absichten sondern Deinen Anweisungen
R.E.D retired error detector
  Mit Zitat antworten Zitat
Benutzerbild von dataspider
dataspider

Registriert seit: 9. Nov 2003
Ort: 04539 Groitzsch
1.351 Beiträge
 
Delphi 11 Alexandria
 
#7

AW: SL Update mit StoredProc

  Alt 14. Aug 2015, 12:36
Hi,

die SP berücksichtigt nicht, dass es auch Werte ohne Zahl gibt.

Du musst das Ende der SP noch mal ändern:

Code:
  ...
  if (coalesce(:temp, '') <> '') then
  begin
    -- Zahl vor Punkt auffüllen
    pos = position('.', :temp);
    if (:pos = 0) then
      result = lpad(:temp, 10, '0')||'.'||lpad('0', 10, '0');
    else
      result = lpad(substring(:temp from 1 for :pos -1), 10, '0')||'.'||
               lpad(substring(:temp from :pos + 1 for :laenge), 10, '0');
    result = :result||coalesce(:rest, '');
  end
  else
    Result = :rest;
  suspend;
die 2 Zeilen vor dem supend hinzufügen


Frank
Frank Reim
  Mit Zitat antworten Zitat
Walter Landwehr

Registriert seit: 28. Mär 2006
Ort: 32816 Schieder-Schwalenberg
397 Beiträge
 
Delphi 10.4 Sydney
 
#8

AW: SL Update mit StoredProc

  Alt 14. Aug 2015, 12:44
Hallo,

hier mal zum besseren Verständnis dir SP:

Delphi-Quellcode:
begin
   result = null;
   laenge = char_length(:wert);
   if (:laenge > 0) then
   begin
     pos = 1;
     while (:pos <= :laenge) do
     begin
       zeichen = substring(:wert from :pos for 1);
       if (:zeichen in ('0','1','2','3','4','5','6','7','8','9', '.')) then
         temp = coalesce(:temp, '')||:zeichen;
       else
       begin
         -- Rest hinten
         rest = substring(:wert from :pos for 10);
         break;
       end
       pos = :pos + 1;
     end
   end
   if (coalesce(:temp, '') <> '') then
   begin
     -- Zahl vor Punkt auffüllen
     pos = position('.', :temp);
     if (:pos = 0) then
       result = lpad(:temp, 10, '0')||'.'||lpad('0', 10, '0');
     else
       result = lpad(substring(:temp from 1 for :pos -1), 10, '0')||'.'||
                lpad(substring(:temp from :pos + 1 for :laenge), 10, '0');
     result = :result||coalesce(:rest, '');
   end
   suspend;
 end
Ich möchte einmalig alle Datensätze das Feld Sortierung füllen.

Später wir beim Ändern oder Neuanlegen eines Datensatzes ein Trigger benutzt.
Walter Landwehr
Mfg

Walter
  Mit Zitat antworten Zitat
Benutzerbild von p80286
p80286

Registriert seit: 28. Apr 2008
Ort: Stolberg (Rhl)
6.659 Beiträge
 
FreePascal / Lazarus
 
#9

AW: SL Update mit StoredProc

  Alt 14. Aug 2015, 12:50
Nicht daß es untergeht:

Hi,

die SP berücksichtigt nicht, dass es auch Werte ohne Zahl gibt.

Du musst das Ende der SP noch mal ändern:

Code:
  ...
  if (coalesce(:temp, '') <> '') then
  begin
    -- Zahl vor Punkt auffüllen
    pos = position('.', :temp);
    if (:pos = 0) then
      result = lpad(:temp, 10, '0')||'.'||lpad('0', 10, '0');
    else
      result = lpad(substring(:temp from 1 for :pos -1), 10, '0')||'.'||
               lpad(substring(:temp from :pos + 1 for :laenge), 10, '0');
    result = :result||coalesce(:rest, '');
  end
  else
    Result = :rest;
  suspend;
die 2 Zeilen vor dem supend hinzufügen


Frank
Programme gehorchen nicht Deinen Absichten sondern Deinen Anweisungen
R.E.D retired error detector
  Mit Zitat antworten Zitat
nahpets
(Gast)

n/a Beiträge
 
#10

AW: SL Update mit StoredProc

  Alt 14. Aug 2015, 12:52
Wenn ich mich nicht verlesen habe, dann liefert die SP von DataSpider für 'Ziffer' NULL. Für '1Ziffer' sieht das schon ganz anders aus.

Gruß
K-H
Das mag ja durchaus so sein, aber mir erscheint ein Aufruf in der Form
Code:
update tbl_gebuehren set sortierung = (select result from SP_Sortstring('Ziffer'))
wenig sinnvoll, da hier für alle Datensätze der Tabelle die Sortierung anhand der konstanten Zeichenfolge 'Ziffer' ermittelt wird und nicht anhand des Inhaltes der Spalte Ziffer. Bei '1Ziffer' mag also durchaus was anderes herauskommen, als bei 'Ziffer', aber es wird für alle Datensätze der Tabelle der gleiche Wert sein, Null wird also für alle Datensätze durch einen anderen, aber immer gleichen Wert, ersetzt.

Oder ist die Funktionalität von Firebird so anders, dass bei SP_Sortstring('Ziffer') hier tatsächlich der Inhalt der Spalte Ziffer genutzt wird?
Dies würde mich doch sehr wundern.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 19:13 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