Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi Datensätze nach Buchstaben einfügen (https://www.delphipraxis.net/86634-datensaetze-nach-buchstaben-einfuegen.html)

needatip 16. Feb 2007 15:55

Datenbank: MS SQL Server • Version: 2000 • Zugriff über: ADO

Datensätze nach Buchstaben einfügen
 
ich habe in einer Datenbank folgende Felder:

Positionsnummer : Integer
A_Position : varchar(1)

Die einzelnen Positionen können z. B. folgende Werte annehmen: (Positionsnummer) beliebige Zahl; (A_Position) Buchstabe a-z
z.B.

1
2
3
3a
4
4a
4b
5
6
7
7a
8
9
10g

wenn der Datensatzcursor nun auf irgendeiner Zeile steht, soll geprüft werden ob hier noch eine Position im Zusammenhang mit einem Buchstaben (Feld A_Position) eingefügt werden kann !
(Beispiele anhand der o.g. Auflistung)
DSCursor steht auf 2 - Einfügen 2a
DSCursor steht auf 4a - Einfügen 4c (da es 4b ja schon gibt)
DSCursor steht auf 7a - Einfügen 7b
DSCursor steht auf 10g - Einfügen 10a
Also immer der nächstmöglich freie Buchstabe !
Wer kann mir bei der Problemlösung helfen?

Jürgen Thomas 16. Feb 2007 16:26

Re: Datensätze nach Buchstaben einfügen
 
Das müsste mit einer Stored Procedure mit if-Abfragen möglich sein. 1. Schritt:
SQL-Code:
SELECT COUNT(*) FROM Tabelle
 WHERE Positionsnummer = @NeuePosition
   AND A_Position <> ' '
INTO @Anzahl
2. Schritt:
SQL-Code:
IF (@Anzahl = 0)
THEN A_Position = 'a';
ELSE BEGIN
  /* suche im String 'abcde...z' den kleinsten noch nicht benutzten Buchstaben */
END
Du musst die Art der Variablen natürlich an Deinen SQL-Dialekt anpassen. Vielleicht ist es auch für Dich einfacher, das im Programm zu erledigen; deshalb verzichte ich auch darauf, den letzten Teil zu skizzieren, weil es dafür mehrere Wege gibt, und der günstigste hängt eben von dem Dir Möglichen ab.

Viel Erfolg! Jürgen

needatip 16. Feb 2007 16:35

Re: Datensätze nach Buchstaben einfügen
 
Danke für den Tip,
ich wollte das aber nicht mit einer Stored Procedure lösen !

Jürgen Thomas 16. Feb 2007 17:17

Re: Datensätze nach Buchstaben einfügen
 
SP war nur ein Vorschlag; aber das, was ich so skizziert habe, kannst Du genauso auch direkt im Programm erledigen. Jürgen

marabu 16. Feb 2007 18:18

Re: Datensätze nach Buchstaben einfügen
 
Hallo,

die Beispiele in Beitrag #1 scheinen mir nicht konsistent zu sein. Ich hätte erwartet, dass bei Cursor auf (10, 'g') nicht (10, 'a') sondern (10, ' ') eingefügt würde. Vor allen Dingen würde ich bei der alpha-position keinen NULL-Wert oder Leerstring zulassen. Ein Blank wäre okay, der Feldtyp sollte dann von varchar(1) auf char(1) geändert werden. Mit diesen Korrekturen und einer Lookup-Tabelle LETTERS (LETTER), welche alle gültigen alpha-position Werte enthält, lässt sich der "nächste" Buchstabe leicht ermitteln:

SQL-Code:
select min(letter)
  from letters
  where letter not in (select alphapos from items where numpos = 10)
Der Code könnte entsprechend angepasst gut in einem Trigger untergebracht werden. Es gibt aber sicher noch andere Wege.

Grüße vom marabu

needatip 21. Feb 2007 09:10

Re: Datensätze nach Buchstaben einfügen
 
Gute Lösungsvorschläge.
Hab den Feldtyp auch auf Char(1) geändert.
Besonders die Lösung von Marabu hat mich auf weitere Ideen gebracht.
Vielen Dank nochmal.


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