Autor Beitrag
Karstadt
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 174

Windows 2000 / XP
Delphi 7 Pro
BeitragVerfasst: Mi 02.11.05 13:15 
Hallo. Ab und zu kommt es bei mir zu diese Fehler:

DS kann nicht geändert werden, da der DS von einen anderen Benutzer geändert wurde.

Wie kann das passieren?
noidic
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 851

Win 2000 Win XP Vista
D7 Ent, SharpDevelop 2.2
BeitragVerfasst: Mi 02.11.05 13:19 
Wo und wann kommt der Fehler?

_________________
Bravery calls my name in the sound of the wind in the night...
Karstadt Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 174

Windows 2000 / XP
Delphi 7 Pro
BeitragVerfasst: Mi 02.11.05 13:34 
Bei der Funktion "Edit" (nicht regelmäßig)
noidic
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 851

Win 2000 Win XP Vista
D7 Ent, SharpDevelop 2.2
BeitragVerfasst: Mi 02.11.05 13:40 
Dann wird wohl zwischenzeitlich ein anderer Benutzer ( oder auch eine andere Abfrage o.ä. von dir ) den Datensatz modifiziert haben.

_________________
Bravery calls my name in the sound of the wind in the night...
jasocul
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 6393
Erhaltene Danke: 147

Windows 7 + Windows 10
Sydney Prof + CE
BeitragVerfasst: Mi 02.11.05 13:42 
Dann liegt wohl noch eine Sperre auf dem Datensatz.
Warst du im Edit und das Programm ist abgebrochen? Oder du brichst es innerhlab von Delphi ab.
Arbeitest du mit mehreren Personen oder Anwendungen auf dem Datensatz? Dann ist die Meldung einwandfrei.
Karstadt Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 174

Windows 2000 / XP
Delphi 7 Pro
BeitragVerfasst: Mi 02.11.05 13:48 
Hallo. Diese Anwendung befindet sich in der Entwicklung. Ich arbeite alleine mit diese Anwendung.

Als ich während meine Ausbildung mit DBF gearbeitet habe, habe ich einen datensatz mit LOCK gesperrt und mit UNLOCK entsperrt. Hier in SQL kommt es garnicht vor
noidic
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 851

Win 2000 Win XP Vista
D7 Ent, SharpDevelop 2.2
BeitragVerfasst: Mi 02.11.05 13:59 
Auf eigentlich allen Datenbanksystemen wird ein Datensatz gesperrt, wenn er bearbeitet wird. Allerdings auch erst in dem Moment, wo die Bearbeitung beginnt, nicht schon bei der Selektierung des DS. Entsperrt wird nach Eintrag der Änderung ( also beim Post ).

Außerdem wird die Bearbeitung eines selektierten DS dan nnicht zugelassen, wenn zwischen der Selektion und der Bearbeitung der Datensatz verändert worden ist. Um das zu verhindern, kann man normalerweise bereits beim select den Datensatz als 'zu ändern' markieren und damit sperren ( in oracle z.B. mit select... for update, bei andern Systemen weiss ichs nicht ).

In deinem Fall kanns zwei Möglichkeiten geben:

- Dein Programm ist kurz voher zwischen Edit und Post abgeraucht. Dann ist der Datensatz noch gesperrt.

- Zwischen dem Select und dem Edit gibts von anderer Stelle ein Update auf den Datensatz.

Mehr Möglichkeiten fallen mir im Moment nicht ein, aber das sind ja schon mal 2 :)

_________________
Bravery calls my name in the sound of the wind in the night...
jasocul
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 6393
Erhaltene Danke: 147

Windows 7 + Windows 10
Sydney Prof + CE
BeitragVerfasst: Mi 02.11.05 14:14 
user profile iconKarstadt hat folgendes geschrieben:
Hallo. Diese Anwendung befindet sich in der Entwicklung. Ich arbeite alleine mit diese Anwendung.

Als ich während meine Ausbildung mit DBF gearbeitet habe, habe ich einen datensatz mit LOCK gesperrt und mit UNLOCK entsperrt. Hier in SQL kommt es garnicht vor

Dann lies doch meine ersten beiden Möglichkeiten nochmal durch.

Noch ein paar Fachinformationen: SQL ist keine Datenbank, sondern eine Abfragesprache für Datenbanken. dBase (DBF) als Datenbank zu bezeichnen ist imho übertrieben. Vielleicht sind meine Erwartungen auch zu hoch. :wink: Wie die Locks auf einer richtigen DB funktionieren (können; es gibt noch andere Methoden, aber das würde jetzt zu weit führen), hat user profile iconnoidic ja schon erläutert.
Karstadt Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 174

Windows 2000 / XP
Delphi 7 Pro
BeitragVerfasst: Mi 02.11.05 15:07 
journal := TQuery
t_journal := TTABle


ausblenden 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:
  

  s_journal.Open;
  s_journal.First;

for i := 1 to 16 do
  begin
    JournalID := s_journal.FieldByName('Jour_ID').AsString;


    //Zeiger auf Auftragnummer wird gesetzt (Such optimierung)
    t_journal.Locate('Jour_ID', JournalID, [loCaseInsensitive]);
    t_journal.Edit;

    IF TPanel(FindComponent('Panel'+IntToStr(i))).Color = clRed Then
    begin
      t_journal.FieldValues['Status'] := 'Offen';
      t_journal.FieldValues['Auftragsart'] := f_reklamation_auswahl.Caption;
    end
    else t_journal.FieldValues['Status'] := 'fertig';

    <span style="font-weight: bold">t_journal.Post;</span> //Was mache ich falsch?
    t_journal.Last;

    s_journal.Next;
  end;
noidic
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 851

Win 2000 Win XP Vista
D7 Ent, SharpDevelop 2.2
BeitragVerfasst: Mi 02.11.05 15:11 
Soweit ich das durchschaue siehts soweit gut aus. Bleibt noch die sache mit dem abgeschmierten Programm.

Was mir auch noch einfällt ist, dass einige DB-Oberflächen wie TOAD ( in einigen Versionen ) und ähnliche den aktuell ausgewählten Datensatz auch einfach mal sperren. Könnte es sowas sein?

_________________
Bravery calls my name in the sound of the wind in the night...
jasocul
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 6393
Erhaltene Danke: 147

Windows 7 + Windows 10
Sydney Prof + CE
BeitragVerfasst: Mi 02.11.05 15:19 
Sieht theoretisch richtig aus. Die andere Möglichkeit hat user profile iconnoidic ja noch genannt.
Eine Möglichkeit, wenn auch unwahrscheinlich:
Du arbeitest mit FieldValues. diese Eigenschaft arbeitet mit Variant. Abgesehen davon, dass das langsam ist (Nimm doch FieldByName), kommt die DB vtl. nicht einwandfrei damit zurecht. Aber wie gesagt, ich halte das für eher unwahrscheinlich. Einen Test wäre es aber wert.
Karstadt Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 174

Windows 2000 / XP
Delphi 7 Pro
BeitragVerfasst: Mi 02.11.05 15:39 
Danke. werde ich versuchen. Das dumme an der Sache ist, mal kommt es, mal nicht...
Karstadt Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 174

Windows 2000 / XP
Delphi 7 Pro
BeitragVerfasst: Mi 02.11.05 16:17 
mir ist aufgefallen, das die Funktion t_journal.recno mir immer den Wert -1 gibt. Ist das normal ?
Stefan.Buchholtz
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 612

WIN 2000, WIN XP, Mac OS X
D7 Enterprise, XCode, Eclipse, Ruby On Rails
BeitragVerfasst: Mi 02.11.05 16:22 
user profile iconKarstadt hat folgendes geschrieben:
mir ist aufgefallen, das die Funktion t_journal.recno mir immer den Wert -1 gibt. Ist das normal ?


Das ist bei SQL-Datenbanken normal. RecNo funktioniert bei der BDE nur bei lokalen Tabellen (Paradox, DBase).

Stefan
Karstadt Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 174

Windows 2000 / XP
Delphi 7 Pro
BeitragVerfasst: Fr 04.11.05 10:07 
Vielleicht liegt das daran, das ich pararell eine ander Anwendung laufen lasse, die beim beenden die Tabelle nicht schließt. Tabelle.close.

Kann das auch sein? Bis jetzt war ich immer der meinung, das beim beenden die Tabellen automatisch beenden werden.

MFG
noidic
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 851

Win 2000 Win XP Vista
D7 Ent, SharpDevelop 2.2
BeitragVerfasst: Fr 04.11.05 10:25 
Das kann sehr gut sein. Zwar wird der Cursor irgendwann dichtgemacht, dass kann aber auch mal ne Weile dauern.

Jeden Cursor, den man öffnet, sollte man auch, direkt wenn man ihn nicht mehr braucht, wieder schließen.

_________________
Bravery calls my name in the sound of the wind in the night...
OlliWausD
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 212

Win 2000/XP
Delphi 5 Professional - Interbase/Firebird
BeitragVerfasst: Fr 04.11.05 13:59 
user profile iconKarstadt hat folgendes geschrieben:
Vielleicht liegt das daran, das ich pararell eine ander Anwendung laufen lasse, die beim beenden die Tabelle nicht schließt. Tabelle.close.

Kann das auch sein? Bis jetzt war ich immer der meinung, das beim beenden die Tabellen automatisch beenden werden.

MFG


beim beenden von was?? wenn du ein 2. Prog offen hast, wo du z.B.: im form4 auf die daten zugreiffst, jedoch die z.B.: Table nicht deaktivierst und dieses Formular schließt, is die Table noch offen, da sie erst beim form4.free aufgelöst wird.

kommt halt drauf an, wie du deine Forms erstellst (beim Prog-start oder manuell)

mfg

OlliW

_________________
Take it easy
Karstadt Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 174

Windows 2000 / XP
Delphi 7 Pro
BeitragVerfasst: Di 08.11.05 14:43 
Genau so funktioniert das. Die Deklaration von Formularen geschieht automatisch und nicht manuell. (das ist ein Projekt, denn ich weiter entwicklere, eine Änderung am kompletten Projekt ist "sehr schwer", da die Folgen fatal sein könnten.

PS: Kann das daran liegen, das die Datenbank am Server liegt? MFG
Karstadt Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 174

Windows 2000 / XP
Delphi 7 Pro
BeitragVerfasst: Di 08.11.05 16:02 
Hier. Passiert das, un zwar nur ein mal: (beim ersten mal!)

t_rabatt.FieldByName('status').asString := FloatToStr(Offen);
t_rabatt.Post;
Karstadt Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 174

Windows 2000 / XP
Delphi 7 Pro
BeitragVerfasst: Fr 11.11.05 11:20 
Hallo. Nun habe ich das Problem gelöst.

IF not (Trim(t_journal.Fieldbyname('Auftragsart').asstring) = Trim(f_reklamation_auswahl.Caption)) Then
begin
t_journal.Edit;
t_journal.Fieldbyname('Auftragsart').asstring := f_reklamation_auswahl.Caption;
t_journal.Post;
end;

Nun fuktioniert es. Diese Fehlermeldung kamm nur dann, wenn ich eine Datensatz zum ändern aufrufe und mit Fieldbyname gleiche werte zuweise die der DS schon hat. Das führ zu diesen Fehler.

Ist das normal?

MFG