AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken SQL Updatefrage zum Trimmen
Thema durchsuchen
Ansicht
Themen-Optionen

SQL Updatefrage zum Trimmen

Ein Thema von WEBSTER · begonnen am 28. Aug 2005 · letzter Beitrag vom 28. Aug 2005
Antwort Antwort
WEBSTER

Registriert seit: 24. Apr 2003
Ort: Bergisch Gladbach
28 Beiträge
 
#1

SQL Updatefrage zum Trimmen

  Alt 28. Aug 2005, 09:59
Datenbank: Sybase • Zugriff über: ODBC
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
Wer etwas anders macht, aber nicht besser, der sollte besser etwas anderes machen.
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#2

Re: SQL Updatefrage zum Trimmen

  Alt 28. Aug 2005, 10:18
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
  Mit Zitat antworten Zitat
WEBSTER

Registriert seit: 24. Apr 2003
Ort: Bergisch Gladbach
28 Beiträge
 
#3

Re: SQL Updatefrage zum Trimmen

  Alt 28. Aug 2005, 17:24
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
Wer etwas anders macht, aber nicht besser, der sollte besser etwas anderes machen.
  Mit Zitat antworten Zitat
alzaimar
(Moderator)

Registriert seit: 6. Mai 2005
Ort: Berlin
4.956 Beiträge
 
Delphi 2007 Enterprise
 
#4

Re: SQL Updatefrage zum Trimmen

  Alt 28. Aug 2005, 18:56
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.
"Wenn ist das Nunstruck git und Slotermeyer? Ja! Beiherhund das Oder die Flipperwaldt gersput!"
(Monty Python "Joke Warefare")
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#5

Re: SQL Updatefrage zum Trimmen

  Alt 28. Aug 2005, 19:13
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
  Mit Zitat antworten Zitat
WEBSTER

Registriert seit: 24. Apr 2003
Ort: Bergisch Gladbach
28 Beiträge
 
#6

Re: SQL Updatefrage zum Trimmen

  Alt 28. Aug 2005, 19:24
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
Wer etwas anders macht, aber nicht besser, der sollte besser etwas anderes machen.
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#7

Re: SQL Updatefrage zum Trimmen

  Alt 28. Aug 2005, 22:22
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
  Mit Zitat antworten Zitat
Antwort Antwort


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