Thema: Delphi SL Update mit StoredProc

Einzelnen Beitrag anzeigen

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