Hallo,
Konfig.:
- Delphi 5 Update Pack 1<br>
- Interbase 6.01 Open Source<br>
- BDE 5.2.0.2<br>
- Zugriff auf die IB-Datenbank erfolgt via TTable/TQuery und nicht über IBX<br>
SQL-Script-Fragment für Datenbankerzeugung:
<pre>
SET SQL DIALECT 3;
/* Datenbank erzeugen */
CREATE DATABASE '<MyDBFile>.gdb'
USER '<MyUser> PASSWORD '<MyPassword>';
/* Domains der Datenbank festlegen */
CREATE DOMAIN TID AS INTEGER;
CREATE DOMAIN TDescription AS VARCHAR(250);
CREATE DOMAIN TInfo AS VARCAHR(255);
/* Tabellen erzeugen */
CREATE TABLE MyTable (
ID TID NOT NULL,
Beschreibung TDescription NOT NULL,
Zusatzinformation TInfo
);
ALTER TABLE MyTable
ADD CONSTRAINT PK_MyTable PRIMARY KEY(ID);
CREATE UNIQUE ASCENDING INDEX IDX_MyTable ON MyTable(Beschreibung);
COMMIT WORK;
</pre>
In der Anwendung hat man die Möglichkeit nach der Beschreibung (auf der ein Index <i>lastet</i>) zu sortieren. Die Sortierung erfolgt über
<pre>
with TMyTable do begin
Close;
try
IndexName := ’IDX_MyTable’;
finally
Open;
end;
end;
</pre>
Dies funktioniert alles tadellos.
Liegt die sortierte Reihenfolge vor, so bekommt man, für den Fall, dass man in den Edit-Mode schaltet, bei einigen (wenigen) Datensätzen die Fehlermeldung <b>"Datensatz/Schlüssel gelöscht"</b>. Eine Bearbeitung des aktuellen Datensatzes ist somit nicht möglich. Hebe ich die Sortierreihenfolge auf (es wird nach dem Primärschlüssel sortiert), lokalisiere genau den Datensatz, der vorher diesen (komischen und seltsamen) Fehler nach sich gezogen hat, so klappt jetzt alles wunderbar. Man kann den Datensatz bearbeiten. Sortiert man wieder und versucht zu bearbeiten...Fehler. In den <i>ominösen</i> Datensätzen sind keine besonderen Zeichen (Umlaute, o.ä) vorhanden.
Bei anderen Datenbanken (Paradox, MS SQL 2000) läuft alles wunderbar.
Ein Problem mit Interbase 6.01 in Bezug auf Indizes?
Danke im voraus<br>
Stephan
Konfig.:
- Delphi 5 Update Pack 1<br>
- Interbase 6.01 Open Source<br>
- BDE 5.2.0.2<br>
- Zugriff auf die IB-Datenbank erfolgt via TTable/TQuery und nicht über IBX<br>
SQL-Script-Fragment für Datenbankerzeugung:
<pre>
SET SQL DIALECT 3;
/* Datenbank erzeugen */
CREATE DATABASE '<MyDBFile>.gdb'
USER '<MyUser> PASSWORD '<MyPassword>';
/* Domains der Datenbank festlegen */
CREATE DOMAIN TID AS INTEGER;
CREATE DOMAIN TDescription AS VARCHAR(250);
CREATE DOMAIN TInfo AS VARCAHR(255);
/* Tabellen erzeugen */
CREATE TABLE MyTable (
ID TID NOT NULL,
Beschreibung TDescription NOT NULL,
Zusatzinformation TInfo
);
ALTER TABLE MyTable
ADD CONSTRAINT PK_MyTable PRIMARY KEY(ID);
CREATE UNIQUE ASCENDING INDEX IDX_MyTable ON MyTable(Beschreibung);
COMMIT WORK;
</pre>
In der Anwendung hat man die Möglichkeit nach der Beschreibung (auf der ein Index <i>lastet</i>) zu sortieren. Die Sortierung erfolgt über
<pre>
with TMyTable do begin
Close;
try
IndexName := ’IDX_MyTable’;
finally
Open;
end;
end;
</pre>
Dies funktioniert alles tadellos.
Liegt die sortierte Reihenfolge vor, so bekommt man, für den Fall, dass man in den Edit-Mode schaltet, bei einigen (wenigen) Datensätzen die Fehlermeldung <b>"Datensatz/Schlüssel gelöscht"</b>. Eine Bearbeitung des aktuellen Datensatzes ist somit nicht möglich. Hebe ich die Sortierreihenfolge auf (es wird nach dem Primärschlüssel sortiert), lokalisiere genau den Datensatz, der vorher diesen (komischen und seltsamen) Fehler nach sich gezogen hat, so klappt jetzt alles wunderbar. Man kann den Datensatz bearbeiten. Sortiert man wieder und versucht zu bearbeiten...Fehler. In den <i>ominösen</i> Datensätzen sind keine besonderen Zeichen (Umlaute, o.ä) vorhanden.
Bei anderen Datenbanken (Paradox, MS SQL 2000) läuft alles wunderbar.
Ein Problem mit Interbase 6.01 in Bezug auf Indizes?
Danke im voraus<br>
Stephan
Comment