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 2 von 2     12   
Walter Landwehr

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

AW: SL Update mit StoredProc

  Alt 14. Aug 2015, 11:53
Hi Frank,

habe die Zeilen eingefügt.

nach Ausführung des SQL Befehls steht in Feld Sortierung aller Datensätze 'Ziffer'. ???
Walter Landwehr
Mfg

Walter
  Mit Zitat antworten Zitat
Walter Landwehr

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

AW: SL Update mit StoredProc

  Alt 14. Aug 2015, 11:57
OK K-H. Wie kann ich denn den Wert der Spalte Ziffer übergeben?
Walter Landwehr
Mfg

Walter
  Mit Zitat antworten Zitat
nahpets
(Gast)

n/a Beiträge
 
#13

AW: SL Update mit StoredProc

  Alt 14. Aug 2015, 12:00
Hi Frank,

habe die Zeilen eingefügt.

nach Ausführung des SQL Befehls steht in Feld Sortierung aller Datensätze 'Ziffer'. ???
Das ist auch nicht anders zu erwarten, solange Du die konstante Zeichenfolge 'Zffer' an die Prozedur übergibst.
Zitat:
OK K-H. Wie kann ich denn den Wert der Spalte Ziffer übergeben?
Code:
update tbl_gebuehren set sortierung = (select result from SP_Sortstring('Ziffer'))
Nimm doch bitte mal die Kontraproduktiven ' vor und hinter Ziffer heraus, damit die Datenbank die Möglichkeit bekommt, den Inhalt der Spalte Ziffer zu verwenden.

Also so:
Code:
update tbl_gebuehren set sortierung = (select result from SP_Sortstring(Ziffer))
  Mit Zitat antworten Zitat
Walter Landwehr

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

AW: SL Update mit StoredProc

  Alt 14. Aug 2015, 12:21
OK,

das funktioniert soweit. Danke.

Nun muss ich noch rausfinden bei welchen Datensatz dieser Fehler kommt.

Arithmetic overflow or division by zero has occurred.
arithmetic exception, numeric overflow, or string truncation.
string right truncation.
At procedure 'SP_SORTSTRING' line: 46, col: 2.
Walter Landwehr
Mfg

Walter
  Mit Zitat antworten Zitat
Benutzerbild von dataspider
dataspider

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

AW: SL Update mit StoredProc

  Alt 15. Aug 2015, 07:32
OK,

das funktioniert soweit. Danke.

Nun muss ich noch rausfinden bei welchen Datensatz dieser Fehler kommt.

Arithmetic overflow or division by zero has occurred.
arithmetic exception, numeric overflow, or string truncation.
string right truncation.
At procedure 'SP_SORTSTRING' line: 46, col: 2.
Walter,

deshalb wies ich dich bereits darauf hin, dass du die Länge der Varchar' s überprüfen sollst.
Setz doch mal alle VARCHAR auf 100:

Code:
create or alter procedure sp_sortstring (
    wert varchar(100))
returns (
    result varchar(100))
as
declare variable laenge smallint;
declare variable pos smallint;
declare variable zeichen char(1);
declare variable temp varchar(100);
declare variable rest varchar(100);
...
dann wird der Fehler sicher weg sein.


Frank
Frank Reim
  Mit Zitat antworten Zitat
hoika

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

AW: SL Update mit StoredProc

  Alt 15. Aug 2015, 07:33
Hallo,
Welche Zeile ist das (bin mit dem iPad hier).

Eine genaue Beschreibung wird es erst mit FB 3.0 geben.
Jetzt hilft hier nur, Ausgaben in eine Log-Tabelle zu schreiben.
Dort steht dann der letzte erfolgreiche gelesene String drin,
der nächste ist das Problemkind.

Woher kennt mein Vorredner die ganze SP???


Heiko
Heiko
  Mit Zitat antworten Zitat
TBx
(Administrator)

Registriert seit: 13. Jul 2005
Ort: Stadthagen
1.875 Beiträge
 
Delphi 12 Athens
 
#17

AW: SL Update mit StoredProc

  Alt 15. Aug 2015, 07:53
Er hat sie geschrieben
Thomas Breitkreuz

Geändert von TBx (15. Aug 2015 um 07:56 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von dataspider
dataspider

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

AW: SL Update mit StoredProc

  Alt 15. Aug 2015, 09:28
Hallo,
Welche Zeile ist das (bin mit dem iPad hier).

Eine genaue Beschreibung wird es erst mit FB 3.0 geben.
Jetzt hilft hier nur, Ausgaben in eine Log-Tabelle zu schreiben.
Dort steht dann der letzte erfolgreiche gelesene String drin,
der nächste ist das Problemkind.

Woher kennt mein Vorredner die ganze SP???


Heiko
Hier noch mal die komplette SP mit längeren VARCHAR Feldern:

Code:
create or alter procedure sp_sortstring (
    wert varchar(100))
returns (
    result varchar(100))
as
declare variable laenge smallint;
declare variable pos smallint;
declare variable zeichen char(1);
declare variable temp varchar(100);
declare variable rest varchar(100);
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 100);
        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
  else
    Result = :rest;
  suspend;
end
Ich habe auch in der Zeile die Zeile
Code:
  rest = substring(:wert from :pos for 100);
von 10 auf 100 geändert.

Walter,
du solltest dennoch die SP überprüfen.
Ich fülle jetzt die numerischen Teile bis 10 Stellen auf.
aus 14.5 mache ich 0000000014.0000000005

Auch das funktioniert evtl. nur korrekt, wenn deine numerischen Teile nie länger als 10 sind.
(hab jetzt nicht im Kopf, ob lpad dann abschneidet, den Wert so lässt oder eine Exception wirft.

Wenn du z.B. einen Wert 123456789012.3a hättest - hättest du u.U. ein neues Problem.

Ich kann nur eine Vorlage liefern, nicht die fehlerfreie Lösung.

Frank
Frank Reim

Geändert von dataspider (15. Aug 2015 um 09:33 Uhr)
  Mit Zitat antworten Zitat
Walter Landwehr

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

AW: SL Update mit StoredProc

  Alt 16. Aug 2015, 15:56
Danke Frank, hatte den Datensatz der den Fehler verursacht hat gefunden und Korrigiert. Lag an solchen Ziffern 50G (9.3a).

Funktioniert alles bestens.

Danke nochmals für Deine Mühen.
Walter Landwehr
Mfg

Walter

Geändert von Walter Landwehr (16. Aug 2015 um 15:59 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von dataspider
dataspider

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

AW: SL Update mit StoredProc

  Alt 17. Aug 2015, 08:36
Danke Frank, hatte den Datensatz der den Fehler verursacht hat gefunden und Korrigiert. Lag an solchen Ziffern 50G (9.3a).
Do solltest dennoch die Variablen vergrößern.
Dein Beispiel liefert "0000000050.0000000000G (9.3a)."

Das sind 30, die Länge von Result. Das ist arg grenzwertig.
Setz die Varchars hoch, wenn du es noch nicht gemacht hast.

Frank
Frank Reim
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 2     12   


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 20:41 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