Autor Beitrag
diggebaggen
Hält's aus hier
Beiträge: 15


D3 Prof
BeitragVerfasst: Sa 01.01.05 21:10 
So, also folgendes:

Ich möchte meine Tabellen sortieren, habde das mit Sekundärindizes gelöst, funktioniert soweit auch. ABER:

Jetzt kann ich in die Tabelle nichts mehr eintragen, weil er jedesmal den Fehler

"index ist schreibgeschützt"

rauswirft. ich hab schon in diesem und in anderen Foren gesucht, aber keine Antwort darauf gefunden. In einem anderen Forum hat jemand das gelöst, indem er daraus einen Primären gemacht hat, das kann ich aber nicht, weil drei verschiedene brauche und es nur einen primären gibt.

Hat jemand eine Idee ? Oder gibt es noch eine andere Möglichkeit zu sortieren ? Im Moment tue ich das so:

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
procedure TForm1.ComboBox1Change(Sender: TObject);
begin

if combobox1.itemindex=0 then
Table2.IndexFieldNames := 'Datum;Zeit';
Table3.IndexFieldNames := 'Datum;Zeit';
Table4.IndexFieldNames := 'Erwartete Zeit';
if combobox1.itemindex=1 then
Table2.IndexFieldNames := 'Betrag;Datum';
Table3.IndexFieldNames := 'Betrag;Datum';
Table4.IndexFieldNames := 'Erwarteter Betrag';
if combobox1.itemindex=2 then
Table2.IndexFieldNames := 'Kommentar;Datum;Zeit';
Table3.IndexFieldNames := 'Kommentar;Datum;Zeit';
Table4.IndexFieldNames := 'Grund';


Moderiert von user profile iconChristian S.: Code- durch Delphi-Tags ersetzt.
grayfox
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 800

win98, winXP
D4 Standard; D6 Personal
BeitragVerfasst: So 02.01.05 02:11 
hallo diggebaggen!

im moment sehe ich in deinem quellcode nicht sehr viel ungewöhnliches, ausser, dass du es so 'tun' solltest:

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
case combobox1.itemindex of
  0begin
       Table2.IndexFieldNames := 'Datum;Zeit';
       Table3.IndexFieldNames := 'Datum;Zeit';
       Table4.IndexFieldNames := 'Erwartete Zeit'
     end;
  1: usw ...
  2: usw ...
end;


denn zusammengehörige blöcke sind mit begin einzuleiten und mit end zu beenden.

ist es zufall, dass table2 und table3 die gleichen felder & sekundärindizes enthalten, oder ein 'copy & paste hoppala'? ;)

mfg, stefan
diggebaggen Threadstarter
Hält's aus hier
Beiträge: 15


D3 Prof
BeitragVerfasst: So 02.01.05 12:22 
hallöle...

ja, das mit dem begin und end hab ich schon gemacht gehabt, hatte nur keine lust mehr das hier zu aktualisieren, weils für das Problem unrelavant ist. Das da die gleichen Felder benutzt werden ist gewollt, die Tabellen sind relativ gleich, unterscheiden sich nur in Konto und Bar, deswegen ist das schon richtig. Aber:

Wenn ich die Indexe setze bekomme ich trotzdem bei jedem Eintragen die Meldung, dass der Index schreibgeschützt ist.

Und das ist das eigentliche Problem, dass ich in die Tabelle deswegen nichts mehr eintragen kann. Hab das inzwischen wieder aus dem Prog rausgenommen, wäre aber schon, wenn da jemand ´ne lösung für hätte und ich die Funktion da doch noch benutzen kann.
grayfox
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 800

win98, winXP
D4 Standard; D6 Personal
BeitragVerfasst: So 02.01.05 12:29 
Zitat:
ja, das mit dem begin und end hab ich schon gemacht gehabt, hatte nur keine lust mehr das hier zu aktualisieren, weils für das Problem unrelavant ist


hast du sonst noch etwas ein- oder ausgebaut, das die fehlermeldung möglicherweise verursachen könnte?

poste mal mehr quelltext - im räteselraten war ich noch nie gut
diggebaggen Threadstarter
Hält's aus hier
Beiträge: 15


D3 Prof
BeitragVerfasst: So 02.01.05 12:45 
also den Quelltext für die Combobox hast oben im Grunde stehen, fehlt nur begin, end und end am Ende.

der "Bearbeiten" Button läuft einwandfrei, auch wenn die Combobox aktiv ist, aber hier mal der (etwas sehr umständliche) Quelltext:
ausblenden volle Höhe Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
procedure TForm1.Button11Click(Sender: TObject);
var Betrag:string; position,Laenge:integer; Betrag1:real;
begin
     table3.edit;

     radiogroup4.itemindex:=1;
     edit9.text:=dbedit12.text;
     edit8.text:=dbedit11.text;
     edit10.text:=dbedit8.text;
     betrag:=dbedit7.text;
     Laenge:=length(Betrag);
     Delete(Betrag,(Laenge-1),Laenge);
     position:=pos('.',Betrag);
     while position > 0 do
           begin
                delete(Betrag,position,1);
                position:=pos('.',Betrag);
           end;
     betrag1:=strtofloat(betrag);
     if betrag1 < 0 then
        begin
             radiogroup6.itemindex:=0;
             betrag1:=betrag1*(-1);
             edit7.text:=floattostr(betrag1);
        end
     else
        begin
             radiogroup6.itemindex:=1;
             edit7.text:=betrag;
        end;
end;


Der schreibt halt die Sachen aus der Tabelle wieder in die Edit-Felder und und aktiviert dann verschiedene Radiogroup-Buttons, die z.B. angeben ob das ein Geld Ein- oder Ausgang ist.

Dann der "Eintragen" Button: Hier tritt immer der Fehler auf, wenn ich Sekundärindizes in der Tabelle gesetzt habe:

ausblenden volle Höhe Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
var gesamtko:string; laenge:integer; gesamtbar,Betrag,gesamtkonto:real;
begin

     if radiogroup6.itemindex=0 then
        begin
             Betrag:=strtofloat(edit7.text);
             Betrag:=Betrag*(-1);
             DBEdit7.text:=floattostr(Betrag);
        end;
     if radiogroup6.itemindex=1 then
        dbedit7.text:=edit7.text;

     dbedit8.text:=edit10.text;
     dbedit11.text:=edit8.text;
     dbedit12.text:=edit9.text;

     table3.append;                                 //Sende die Änderungen an die Datenbank.
     table3.refresh;                                //Aktualisiere die Datenbank.
     radiogroup4.ItemIndex:=-1;                     //Die Radiobuttons werden
     radiogroup6.ItemIndex:=-1;                     //auf Null gesetzt.
     edit7.text:='';                                //Die Edit-Felder werden geleert.
     edit8.text:='';
     edit9.text:='';
     edit10.text:='';

     gesamtbar:= 0;
     table3.First;
     while not table3.eof do
       begin
          gesamtbar:= gesamtbar + table3.FieldByName('Betrag').asFloat;
          table3.Next;
       end;
     edit15.text:=floattostr(gesamtbar)+' €';

     gesamtko:=edit14.text;
     laenge:=length(gesamtko);
     delete(gesamtko,laenge,laenge+1);
     gesamtkonto:=strtofloat(gesamtko);
     edit11.text:=floattostr(gesamtkonto+gesamtbar)+' €';

end;


Der schreibt einmal die Edit-Felder wieder in die Tabelle zurück, außerdem berechnet er die Summe der Tabelle und die Gesamtsumme aus der Tabelle Bar und der Tabelle Konto.

Wenn du noch mehr brauchst sag bescheid.... :D echt nett von dir !

Moderiert von user profile iconChristian S.: Code- durch Delphi-Tags ersetzt.
grayfox
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 800

win98, winXP
D4 Standard; D6 Personal
BeitragVerfasst: So 02.01.05 14:58 
dein quellcode ist ja gut und schön. ich frage mich nur, warum du mit TEdit-feldern hantierts, da du ja ohnehin mittels gebundenen DBEdit-feldern auf die daten zugreifst. inwiefern macht das bei deinem programm sinn?
wie sehen denn deine tabellen und die indizes dazu aus?

mfg, stefan
MrSpock
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 262



BeitragVerfasst: So 02.01.05 15:37 
Hallo diggebaggen,

es könnte an den Dateien des Sekundärindex liegen, die möglicherweise beschädigt wurden. Oder hast du die Datenbank an eine andere Stelle kopiert und die Dateien des Sekundärindexes vergessen mit zu kopieren?

Lösche einfach einmal den Sekundärindex über die DB Oberfläche und lege ihn neu an.

_________________
Live long and prosper
MrSpock \\//
diggebaggen Threadstarter
Hält's aus hier
Beiträge: 15


D3 Prof
BeitragVerfasst: So 02.01.05 16:40 
Das mit den Edit-Feldern hab ich gemacht, weil das Problem sonst ist, dass die Daten beim Eintragen in die DBEdit-Felder sofort in der nebenstehenden Tabelle erscheinen. Das wollte ich vermeiden, damit der User auf jeden Fall den Eintragen-Button drücken muss, damit etwas in die Tabelle übertragen wird.

Die sekundärindizes hab ich folgendermaßen erstellt:

Datenbankoberfläche -> Datenbank umstrukturieren (is ´ne Paradox 5.0) -> Tabelleneigenschaften Sekundärindizes -> Definieren -> dann halt meine Spalten in der richtigen reihenfolge -> Indexoptionen keine angeklickt, weder eindeutig noch gewartet oder so -> dann OK, Indexnamen gegeben.

das ganze halt für jede reihenfolge die ich wollte und am ende die tabelle wieder gespeichert.

gibts da noch andere möglichkeiten ? oder hab ich was vergessen ?
MrSpock
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 262



BeitragVerfasst: So 02.01.05 18:56 
Hallo diggebaggen,

ich arbeite oft mit Sekundärindices, benutze aber nur gewartete Indexe. Stelle mal "gewartet" ein. Am besten löscht du zunächst den alten Sekundärindex und erstellst dann den neuen als gewarteten Index. Zeigt DataBaseName auch auf den korrekten Pfad?

_________________
Live long and prosper
MrSpock \\//
diggebaggen Threadstarter
Hält's aus hier
Beiträge: 15


D3 Prof
BeitragVerfasst: So 02.01.05 19:41 
:D

Sehr schön !!!! Danke !!!!

Hab jetzt Datum als Primärindex genommen, den Rest als gewartet definiert und es scheint zu funktionieren !!! ECHT, vielen Dank !!!! :D :D

Werd nochmal schnell gucken, ob das mit den anderen Tabellen auch geht und dann schließe ich das Thema ab.

Edit: PERFEKT !!! Danke nochmal !