Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   SQL Updatefrage zum Trimmen (https://www.delphipraxis.net/52333-sql-updatefrage-zum-trimmen.html)

WEBSTER 28. Aug 2005 08:59

Datenbank: Sybase • Zugriff über: ODBC

SQL Updatefrage zum Trimmen
 
Salute,

ich habe eine SQL Update Problem. Ich habe eine Tabelle mit KundenNr.
Diese sehen folgendermaßen aus:

12312 121 4564
34 64 65456466
5646456464666
4564646 56
1646465

KundenNr ist Prim.Key

Nun möchte ich alle Leerstellen in der KundeNr löschen. Ergebnis sollte also so aussehen:

123121214564
346465456466
5646456464666
456464656
1646465

Wie müsste der Updatebefehl lauten ?

THX
WEBSTER

marabu 28. Aug 2005 09:18

Re: SQL Updatefrage zum Trimmen
 
Hallo WEBSTER,

wenn Sybase dir eine entsprechende String-Funktion bereit stellen würde, dann würdest du sie im Handbuch gefunden haben. Bleiben genau zwei Möglichkeiten: du implementierst dir eine user defined function, die alle Leerstellen aus einer Zeichenkette entfernt, oder du erledigst das in der host language (Delphi?), was ich für das Naheliegendste halte:

Delphi-Quellcode:
function Without(const s, chars: string): string;
var
  i, iDel: integer;
begin
  Result := s;
  iDel := 0;
  for i := 1 to Length(s) do
    if Pos(s[i], chars) = 0
      then Result[i - iDel] := s[i]
      else Inc(iDel);
  SetLength(Result, Length(s) - iDel);
end;
Grüße vom marabu

WEBSTER 28. Aug 2005 16:24

Re: SQL Updatefrage zum Trimmen
 
Salute,

ich habe folgenden Tipp bekommen:

Update Kundentabelle set KundenNr = REPLACE ('KundenNr',' ','')

Das scheint mein richtiger Weg zu sein.

Leider habe ich nun das Problem:

Verletzung der Integritätsregel: Primärschlüssel in der Tabelle 'KHKArtikel' wird vom Fremdschlüssel 'KHKArtiKundenKHKArtikel' in der Tabelle 'KHKArtikelKunden' referenziert.

Wie kann ich nun beide Tabellen gleichzeitig updaten. Ich müsste mir einen Join bauen… oder… ?

Und wenn ja, wie…?

THX
WEBSTER

alzaimar 28. Aug 2005 17:56

Re: SQL Updatefrage zum Trimmen
 
Hi Webster,

Leider hast du gegen die Oberste Heilige Grundregel aller Datenbanken verstossen (vielleicht nicht Du selbst, aber der Entwickler):
Benutze nie! NIE! NIEMALS!!! Tabellen über 'sprechende' Kundennummern.
Warum? Weil! (...den Grund siehst du gerade)

Wer sowas macht, gehört gefeuert.

Um Dein PRoblem zu beheben musst du die Foreign-Key Verknüpfung aufheben, beide Tabellen updaten und dann die Forgein-Keys wieder einpflegen.

marabu 28. Aug 2005 18:13

Re: SQL Updatefrage zum Trimmen
 
Hi alzaimar,

wenn er schon am Datenmodell einer fremden Anwendung (SAGE) rumfummelt, dann hat er noch eine andere Option. Die gemeldete constraint violation deutet auf eine REFERENCES-Klausel hin, bei der für das nachträgliche Ändern von Schlüsselfeldern der Zusatz ON UPDATE CASCADE fehlt.

Und Webster, man bekommt genau die Qualität bei den Antworten, die man vorher in die Fragestellung investiert. Hättest ruhig schreiben können, dass es sich um eine turn-key Lösung handelt. Gut zu wissen wäre auch, welche Version der Datenbank du einsetzt - Sybase ist nicht gleich Sybase.

Grüße vom marabu

WEBSTER 28. Aug 2005 18:24

Re: SQL Updatefrage zum Trimmen
 
Salute.

@alzaimar: Sorry, aber was ist bitte eine 'turn-key Lösung'?

Die DB-Version ist 5.0.

Wie habe ich das -> ON UPDATE CASCADE anzuwenden...?

THX

WEBSTER

marabu 28. Aug 2005 21:22

Re: SQL Updatefrage zum Trimmen
 
Hallo Webster,

ich denke, deine Frage bzgl. Turn-Key-Lösung ist an mich gerichtet? So nennt man eine Software, die für den Einsatz in der betrieblichen Praxis zugekauft wird - quasi "schlüsselfertig". Aufgrund der von dir angegebenen Tabellen-Namen bin ich darauf gekommen, dass deine Probleme irgendwie mit KHK Kaufmann oder einem Vorgänger (heute im Vertrieb von SAGE) zusammen hängen.

Die von dir angegebene "DB-Version 5.0" setze ich mal mit Sybase SQL Server 5.0 gleich. Das ist kein aktuelles Produkt - die heißen Adaptive Server V12 oder SQL Anywhere V9 - wenn ich mich richtig informiert habe.

Was die Anwendung von ON UPDATE CASCADE angeht, so ist die Syntax - laut MS T-SQL Referenz, die hoffentlich nicht zu sehr abweicht - folgende:

SQL-Code:
ALTER TABLE detail_table
WITH CHECK ADD CONSTRAINT constraint_name
FOREIGN KEY (detail_fk) REFERENCES master_table (master_pk) ON UPDATE CASCADE
Eventuell musst du das bereits existierende constraint vorher mit DROP freigeben:

SQL-Code:
ALTER TABLE detail_table
DROP CONSTRAINT constraint_name
Die klein geschriebenen Namen musst du passend ersetzen.

marabu


Alle Zeitangaben in WEZ +1. Es ist jetzt 08:54 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