IB/FB - nie chcę powtarzać tego samego słowa w nast. wier

0

Witam.
Robię jakąś tam bazkę w Firebird na komponentach IBX komunikując się za pomoca SQL.
W bazie tabela posiada takie pola:

| ID | Dzień | Nr tyg. | Godz. |Nazwa przedmiotu |

I gdy uzupełniam dane, po wprowadzeniu wyglądają one tak:

| ID | Dzień | Nr tyg. | Godz. | Nazwa przedmiotu |

| 1 |Poniedziałek | 1 | 10:00 | Informatyka |
| 2 |Poniedziałek | 1 | 11:30 | Automatyka |
| 3 |Poniedziałek | 1 | 13:30 | Inż. oprogram. |
| 4 |Wtorek | 1 | 9:30 | Systemy baz d. |
| 5 |Wtorek | 1 | 11:30 | Automatyka |

Chodzi o to aby nie powtarzać dni tygodnia w tabeli, czyli:

| ID | Dzień | Nr tyg. | Godz. | Nazwa przedmiotu |

| 1 |Poniedziałek | 1 | 10:00 | Informatyka |
| 2 | - | 1 | 11:30 | Automatyka |
| 3 | - | 1 | 13:30 | Inż. oprogram. |
| 4 |Wtorek | 1 | 9:30 | Systemy baz d. |
| 5 | - | 1 | 11:30 | Automatyka |

Tylko w te powtarzające się nazwy dni wstawiać np. myślnik.

No i teraz trzeba napisać warunek, taki gdy wprowadzam drugi wiersz np. z dniem Poniedziałek to ma wstawiać myślnik. Oczywiście będzie brane Nr tygodnia, czyli:
Dzień Nr tyg.
Poniedziałek 1
- 1
- 1
- 1
Poniedziałek 2
- 2
- 2

itd. itp.

Czy wie ktoś jak napisać kod np. w SQL lub ewentualnie jakąś pętlę?
Chodzi o to aby nie powtarzać nazwy dni w danym Nr tygodnia.
Jak wg. was byłoby estetyczniej? Podawać przy każdym wierszu nazwę dnia czy robić tak po myślniku jak ja chcę?
Z góry dzięki za wskazówki.

0

procedura, która wygląda mniej więcej tak:

CREATE PROCEDURE nazwa_proc 
RETURNS (
    d INTEGER,
    n INTEGER,
    g TIME,
    a VARCHAR(50) CHARACTER SET WIN1250)
AS
DECLARE VARIABLE x VARCHAR(50) CHARACTER SET WIN1250;
begin
  x = '-';
  FOR SELECT dzien, nrtygodnia, godzina, nazwa FROM tabela ORDER BY nrtygodnia, godzina INTO :d, :n, :g, :a DO
  BEGIN
    if (d = x) then
      d = '-';
    else
      x = d;
    suspend;
  END
end
0

Super dzięki. Działa.

0

A jak ten kodzik przerobić na kod w Delphi, abym mógł przerobić na swoją tabelkę?

0
Sonda napisał(a)

A jak ten kodzik przerobić na kod w Delphi, abym mógł przerobić na swoją tabelkę?

ke?

0

No żebym mógł ten kod np. podpiąć pod Buttona w swoim programie.
Z tego co widzę, ten kod jest raczej do wklepania w jakimś kliencie Interbase lub Firebird i chyba go trzeba przerobić na Object Pascala. Mam rację czy nie mam racji? ;)

0

nie masz racji - to jest procedura wbudowana, która działa po stronie bazy

0

Wywala błąd w IBExpercie na 1 linii

CREATE PROCEDURE nazwa_proc

Unknown token CREATE. Nie brakuje tam jakichś parametrów po nazwie procedury?
Bo ta procedurka nie chce się skompilować.

CREATE PROCEDURE nazwa_proc
RETURNS (
    d INTEGER,
    n INTEGER,
    g TIME,
    a VARCHAR(50) CHARACTER SET WIN1250)
AS
DECLARE VARIABLE x VARCHAR(50) CHARACTER SET WIN1250;
begin
  x = '-';
  FOR SELECT dzien, nrtygodnia, godzina, nazwa FROM tabela ORDER BY nrtygodnia, godzina INTO :d, :n, :g, :a DO
  BEGIN
    IF (d = x) then
      d = '-';
    else
      x = d;
    suspend;
  END
end
0

u mnie i u RedbaKa wszystko działa

0

No widzisz, u mnie nie działa. Nawet jak tabelę od nowa zrobiłem :(

1 użytkowników online, w tym zalogowanych: 0, gości: 1