Autor |
Beitrag |
diggebaggen
Hält's aus hier
Beiträge: 15
D3 Prof
|
Verfasst: 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:
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 Christian S.: Code- durch Delphi-Tags ersetzt.
|
|
grayfox
      
Beiträge: 800
win98, winXP
D4 Standard; D6 Personal
|
Verfasst: 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:
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9:
| case combobox1.itemindex of 0: begin 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 
Hält's aus hier
Beiträge: 15
D3 Prof
|
Verfasst: 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
      
Beiträge: 800
win98, winXP
D4 Standard; D6 Personal
|
Verfasst: 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 
Hält's aus hier
Beiträge: 15
D3 Prof
|
Verfasst: 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: 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:
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; table3.refresh; radiogroup4.ItemIndex:=-1; radiogroup6.ItemIndex:=-1; edit7.text:=''; 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....  echt nett von dir !
Moderiert von Christian S.: Code- durch Delphi-Tags ersetzt.
|
|
grayfox
      
Beiträge: 800
win98, winXP
D4 Standard; D6 Personal
|
Verfasst: 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
      
Beiträge: 262
|
Verfasst: 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 
Hält's aus hier
Beiträge: 15
D3 Prof
|
Verfasst: 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
      
Beiträge: 262
|
Verfasst: 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 
Hält's aus hier
Beiträge: 15
D3 Prof
|
Verfasst: So 02.01.05 19:41
Sehr schön !!!! Danke !!!!
Hab jetzt Datum als Primärindex genommen, den Rest als gewartet definiert und es scheint zu funktionieren !!! ECHT, vielen Dank !!!!
Werd nochmal schnell gucken, ob das mit den anderen Tabellen auch geht und dann schließe ich das Thema ab.
Edit: PERFEKT !!! Danke nochmal !
|
|
|