Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   SQL-Frage (https://www.delphipraxis.net/198914-sql-frage.html)

Trafel21 10. Dez 2018 13:27

Datenbank: firebird • Version: 2.5 • Zugriff über: Delphi XE

SQL-Frage
 
Hallo zusammen,

Ich hab ein kleines Denkproblem und komme nicht auf die Lösung.

Ich hab eine Tabelle aus einem Telefonbuch mit Name(string) und Telefonnummer(string).

Bspw.:

Name Telefon
Max Mustermann 5623345345, 343242355

Ich würde gerne eine Procedur schreiben die die Telefonnummer trennt und als 2 Datensätze in die Tabelle schreibt.

Name
Max Mustermann 5623345345
Max Musternman 343242355

Ich hab bereits eine Funktion, die den Telefonstrings filtert und als 2 Werte zurückgibt als Tabelle. Nur weiß ich nicht,
wie ich diese 2 Werte in eine Tabelle bekomme.

mkinzler 10. Dez 2018 13:32

AW: SQL-Frage
 
Am Besten durch Normalisierung ( 2 Tabellen)

Person
ID
Name

Nummer
ID
Person
Nummer

Nummer.Person ist dann ein FK auf die Tabelle Person

jobo 10. Dez 2018 14:26

AW: SQL-Frage
 
Zitat:

Zitat von mkinzler (Beitrag 1420471)
Am Besten durch Normalisierung..

Also (nicht durch eine wie "gefordert", sondern) durch 2 Tabellen.

Man würde es nicht mit 1 Tabelle machen.
(Wenn das überhaupt die Frage ist)

Jumpy 10. Dez 2018 14:52

AW: SQL-Frage
 
Zitat:

Zitat von jobo (Beitrag 1420481)
Man würde es nicht mit 1 Tabelle machen.

In alten Systemen findet sich oft noch der Ansatz mit einer Tabelle und zwei Telefonnumner/-Fax Feldern, also gibt es das schon noch. Aber sinnvoll ist eine zweite Tabelle (z.B. "Kommunikationsdaten"), die ggf. sogar pro Eintrag noch eine Charakterisierung ermöglicht (Fax,Telefon,Mobil,Email,...) oft schon.

hoika 10. Dez 2018 16:24

AW: SQL-Frage
 
Hallo,
Zitat:

Nur weiß ich nicht,
wie ich diese 2 Werte in eine Tabelle bekomme.
Delphi-Quellcode:
Query.SQL.Clear;
Query.SQL.Add('Insert Into Tabelle Values(:Name,:TelefonNummer)');
Query.ParamByName('Name').AsString:= 'Bla1';
Query.ParamByName('TelefonNummer').AsString:= 'Bla2';
Query.ExecSQL;
Oder was genau weisst Du nicht?

Frickler 12. Dez 2018 17:20

AW: SQL-Frage
 
Zitat:

Zitat von Trafel21 (Beitrag 1420469)
Ich hab bereits eine Funktion, die den Telefonstrings filtert und als 2 Werte zurückgibt als Tabelle. Nur weiß ich nicht,
wie ich diese 2 Werte in eine Tabelle bekomme.

Sollen die beiden in die gleiche Tabelle oder eine andere? Sprich, sollen einfach nur alle Einträge mit mehreren Nummern ersetzt werden durch mehrere Einträge mit je einer Nummer, oder soll eine ganz neue Struktur aufgebaut werden?
Ich könnte mir vorstellen, dass die Tabelle tatsächlich nicht nur Name und Nummer enthält, sondern Teil einer ganzen Adresstabelle ist. Da wäre eine externe Tabelle, die über eine Fremdschlüsselbeziehung nur die Nummern zur Adresse enthält, sicherlich angebracht. In einem klassischen Bildschirmformular wird dann bei der Adresse statt einem Textfeld mit 3 Nummern eine Listbox, Tabelle etc. mit den zugehörigen Nummern angezeigt.

scrat1979 12. Dez 2018 18:15

AW: SQL-Frage
 
Wie schon erwähnt die 2. Tabelle entsprechend anlegen.

Ich persönlich würde die Datensätze der Ursprungstabelle in Delphi durchiterieren, mit den üblichen Stringfunktionen von Delphi in die einzelnen Teile zerlegen und dann in die neue Tabelle eintragen. Ob du da mit reinem SQL schneller oder überhaupt ans Ziel kommst weiß ich nicht.

Ich hatte vor paar Tagen das Problem ein STRING-Feld in integer umwandeln zu müssen. Da hier teilweise auch Buchstaben eingetragen waren musste ich diese zuerst eliminieren. Das habe ich auch mit durchiterieren gemacht. Programm war in 15 Minuten geschrieben, die Konvertierung war in 5 Sekunden durch. Leider konnte mein verwendetes DBMS die SQL-Anweisung ISNUMERIC nicht, sonst wäre das mit reinem SQL schneller erledigt gewesen.


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