| Autor |
Beitrag |
Lolo
      
Beiträge: 24
Win XP, 2003
Turbo Delphi Pro
|
Verfasst: Mi 24.09.08 13:32
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
_________________ Du kannst so alt werden wie eine Kuh, Du lernst immer noch dazu!
|
|
Grenzgaenger
Ehemaliges Mitglied
Erhaltene Danke: 1
|
Verfasst: 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 
      
Beiträge: 24
Win XP, 2003
Turbo Delphi Pro
|
Verfasst: Mi 24.09.08 14:26
Das tu ich doch, siehe Zeile 25! Dort steht:
Delphi-Quelltext
Noch mal zur Klarstellung: Vor dem Edit befindet sich die Tabelle im dsBrowse, nach dem Edit offensichtlich immer noch...
Lolo
_________________ Du kannst so alt werden wie eine Kuh, Du lernst immer noch dazu!
|
|
mikhal
      
Beiträge: 109
Windows 10 Professional 64-Bit
VS 215 CE, Delphi 10.1 Berlin Professional
|
Verfasst: Mi 24.09.08 16:08
Um welche Datenbank und um welchen OLE DB Provider handelt es sich bei deinem Projekt?
Grüße
Mikhal
_________________ Computer erleichtern die Arbeit...
...und die Erde ist eine Scheibe!
|
|
Lolo 
      
Beiträge: 24
Win XP, 2003
Turbo Delphi Pro
|
Verfasst: 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
_________________ Du kannst so alt werden wie eine Kuh, Du lernst immer noch dazu!
|
|
mikhal
      
Beiträge: 109
Windows 10 Professional 64-Bit
VS 215 CE, Delphi 10.1 Berlin Professional
|
Verfasst: 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
_________________ Computer erleichtern die Arbeit...
...und die Erde ist eine Scheibe!
|
|
alzaimar
      
Beiträge: 2889
Erhaltene Danke: 13
W2000, XP
D6E, BDS2006A, DevExpress
|
Verfasst: 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.
_________________ Na denn, dann. Bis dann, denn.
|
|
Lolo 
      
Beiträge: 24
Win XP, 2003
Turbo Delphi Pro
|
Verfasst: 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
_________________ Du kannst so alt werden wie eine Kuh, Du lernst immer noch dazu!
|
|
alzaimar
      
Beiträge: 2889
Erhaltene Danke: 13
W2000, XP
D6E, BDS2006A, DevExpress
|
Verfasst: Fr 26.09.08 14:33
Prüf mal deine ADO-Version und upgrade ggf. auf die Neuest. Ältere Versionen sind zickig.
_________________ Na denn, dann. Bis dann, denn.
|
|
|