Entwickler-Ecke
Datenbanken - Tabelle geht nicht in Edit-Modus.
Lolo - Mi 24.09.08 13:32
Titel: Tabelle geht nicht in Edit-Modus.
Hallo zusammen,
ich zweifle langsam an mir selbst! Ich versuche nur, eine ADO-Tabelle in den Edit-Modus zu bringen und etwas darin zu schreiben.
Hier der Text:
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:
| procedure TKasseForm.EingabeFeldKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState); var Text: String; begin if (Key = VK_F10) OR (Key = VK_F12) then begin if KasseTabelle.Locate('BonNr',BonNr,[]) then Beep(); case KasseTabelle.State of dsBrowse: Text := 'Browse'; dsInactive: Text := 'Inactive'; dsEdit: Text := 'Edit'; dsInsert: Text := 'Insert'; dsSetKey: Text := 'SetKey'; dsCalcFields: Text := 'CalcFields'; dsFilter: Text := 'Filter'; dsNewValue: Text := 'NewValue'; dsOldValue: Text := 'OldValue'; dsCurValue: Text := 'CurValue'; dsBlockRead: Text := 'BlockRead'; dsInternalCalc: Text := 'InternalCalc'; dsOpening: Text := 'Opening'; end; MessageDlg('Status: ds' + Text,mtInformation,[mbOK],0); KasseTabelle.Edit; if Key = VK_F10 then begin KasseTabelle['ZahlungsArt'] := 'Bar'; |
Ich prüfe also, welchen Status die Tabelle hat und bekomme dsBrowse als Antwort. Lass ich das dann laufen, kommt als Fehlermeldung: "... Klasse EDatabaseError mit der Meldung 'KasseTabelle: Datenmenge weder im Editier- noch im Einfügemodus' aufgetreten."
Was läuft da schief? (Verzweifel!)
Vielen Dank für eure Hilfe!
Lolo
Delete - Mi 24.09.08 13:41
musst halt den datensatz in den editier/einfügemodus versetzen. wenn state = dsbrowse, kann nur angezeigt werden. z.b. mit ds.edit oder ds.append den status verändern.
Lolo - Mi 24.09.08 14:26
Das tu ich doch, siehe Zeile 25! Dort steht:
Noch mal zur Klarstellung: Vor dem Edit befindet sich die Tabelle im dsBrowse, nach dem Edit offensichtlich immer noch...
Lolo
mikhal - Mi 24.09.08 16:08
Um welche Datenbank und um welchen OLE DB Provider handelt es sich bei deinem Projekt?
Grüße
Mikhal
Lolo - Mi 24.09.08 16:44
Hallo Mikhal,
es handelt sich um MS SQL-Server 2005, aktuelles SP.
Provider: SQLOLEDB.1
Das seltsame ist, dass ich an anderer Stelle im Programm einwandfrei auf die Tabelle zugreifen kann.
Gruß
Lolo
mikhal - Fr 26.09.08 12:47
Bist du dir sicher, dass du auf diese Datenbank-Tabelle nicht bereits einen sperrenden Zugriff in deinem Programm hast (Append, Edit), bevor du mit der neuen TAdoTable auf die Datenbank-Tabelle zugreifst?
Grüße
Michael
alzaimar - Fr 26.09.08 12:56
Wenn Du datensensitive Eingabefelder verwendest (TDBEdit etc.), erübrigt sich das Problem. Sobald Du tippst, geht das TDataset automatisch in den Edit-Modus. Du benötigst nur noch einen TDBNavigator bzw. Buttons, die diese Funktionalität bereitstellen (i.a. Append, Insert, Post, Cancel).
Funktionalitäten über Funktionstasten implementiere ich über (unsichtbare) Menüitems, denen ich einen Shortcut zugewiesen habe. Das löst dein Problem zwar nicht, könnte es aber umschiffen. Du kannst -glaube ich- auch TActions nehmen, nur weiss ich aus dem Kopf nicht, ob die Zuweisung eines 'Shortcuts' direkte Auswirkungen hat (ob dann also die Action auch ausgeführt wird).
In jedem Fall prüfst Du, ob die Tabelle im Browse-Modus ist, änderst das ggf. über 'MyTable.Edit' und schreibst dann einfach 'Bar' in das Feld. Das sollte klappen.
Zu deinem Problem fehlt die information, um was für ein 'EingabeFeld' es sich handelt. Ist es denn ein TDBEdit? Spucken andere Routinen/Ereignisse dort rein? Mit solchen Ereignissen zu arbeiten ist manchmal konfus.
Lolo - Fr 26.09.08 14:28
Also,
ich habe das zwar als erstes überprüft, ob ich den Datensatz woanders schon sperre, aber ich prüfs nochmal.
Bei dem EingabeFeld handelt es sich um ein TEdit, ohne Datenbankbezug also. Das ist Absicht, um genau nicht in solche Probleme zu laufen...
Was ich in der Zwischenzeit bemerkt habe: Wenn ich versuche, in dieser Tabelle zu lesen, lande ich umgehend im Debugger bei den Prozessor-Registern. Das spricht eigentlich für die These, dass da irgend was schon gesperrt ist oder doppelt daruf zugreift.
Ich komme jetzt ein paar Tage nicht zum suchen, verfolge das aber in der nächsten Woche weiter. Danke für eure Hilfe.
Lolo
alzaimar - Fr 26.09.08 14:33
Prüf mal deine ADO-Version und upgrade ggf. auf die Neuest. Ältere Versionen sind zickig.
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2026 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!