dcbrowsecol - nur welches Feld ? [erledigt]

Moderator: Moderatoren

Antworten
Ewald
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 475
Registriert: Sa, 08. Apr 2006 14:07
Wohnort: Datteln
Danksagung erhalten: 3 Mal
Kontaktdaten:

dcbrowsecol - nur welches Feld ? [erledigt]

Beitrag von Ewald »

Hallo und frohe Ostern ...
Ich habe mir aus den Beispielen von Express einen Datenbankbrowser gebaut, mit dem man eine beliebige Datenbank browsen kann, ohne die Felder vorher zu kennen. So weit so gut.
Leider kann ich damit Feldinhalte nicht direkt ändern, da Eingaben nicht zurückgeschrieben werden. Da ich das Problem kenne, habe ich gedacht, ich greife auf die Möglichkeiten von EDITOR zurück.
Dabei stosse ich auf ein für mich bisher unlösbares Problem.
Wenn ich in der Funktion fedit gelandet bin und dort die Daten in die Datenbank zurückschreiben will, fehlt mir die Information, in welches Feld ich die Daten schreiben muss.
Was kann ich wohl von wo aus an fedit mitgeben, dass in fedit bekannt ist, von welchem Datenbankfeld aus ich dort gelandet bin ?
Wenn ich das Feld nicht direkt packen kann, müßte das doch irgendwie über die Browser Spalte und dann mit Field(x) gehen - oder.
Bin wie immer für jeden Tip dankbar.
Gruß
Ewald




Code: Alles auswählen

#include "appevent.ch"
#include "dcdialog.ch"
proc main

use blaDBF excl new    
calias:=alias()

@ 0,1 dcbrowse obrowse alias calias size 170,30 edit xbeBRW_ItemSelected 

for j := 1 to (cAlias)->(FCount())
  
dcbrowsecol data &('{||' + cAlias + '->' + FieldName(j) + '}') ;       
            parent obrowse header (cAlias)->(FieldName(j)) editor 'XED'

next

@ nil,nil dcget xnil getid 'XED' ;
  valid {|o|fedit(o)}

dcread gui fit 

return .t.

function fedit(o)
x:=o:Editbuffer()
repl ??????? with x
return .t.
Zuletzt geändert von Ewald am Sa, 30. Mai 2009 15:39, insgesamt 1-mal geändert.
Benutzeravatar
Tom
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 9367
Registriert: Do, 22. Sep 2005 23:11
Wohnort: Berlin
Hat sich bedankt: 102 Mal
Danksagung erhalten: 361 Mal
Kontaktdaten:

Re: dcbrowsecol - nur welches Feld ?

Beitrag von Tom »

Hallo, Ewald.

Wenn Du im ITEMMARKED-Slot des DCBROWSE eine Variable "nSpaltenNummer" setzt ({||nSpaltenNummer := oBrowse:ColPos}, dann hast Du dadurch automatisch eine Referenz auf das Datenbankfeld, da die Reihenfolge der Spalten derjenigen der Datenbankfelder entspricht. Und dann kannst Du mit FieldPut(nSpaltenNummer) auch wieder zurückschreiben.
Herzlich,
Tom
Ewald
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 475
Registriert: Sa, 08. Apr 2006 14:07
Wohnort: Datteln
Danksagung erhalten: 3 Mal
Kontaktdaten:

Re: dcbrowsecol - nur welches Feld ?

Beitrag von Ewald »

Hallo Tom,
genau so ging das. Danke.
Ich habe da noch ein kleines Problem mit Datums Feldern, die ich nicht geändert bekomme.

Code: Alles auswählen


Browser
.
.

@ nil,nil dcget xnil getid 'XED' ;
          valid {|o|xedit(o)}

dcread gui fit ;
     eval {||dc_getrefresh(getlist)}

return .t.


function xedit(o)
vwert:=o:editbuffer()
do case
  case type(fieldname(ns)) = "N"
       fieldput(ns,val(vwert))
  case type(fieldname(ns)) = "D"
       fieldput(ns,ctod(vwert))
  case type(fieldname(ns)) = "C"
       fieldput(ns,vwert)
endcase
return .t.
Und zwar hängt das Problem in der Funktion xedit.
Wenn ich aus dem Browser ein nummerisches Feld oder ein Zeichenfeld erwische, wird das in der Funktion richtig replaced.
Komme ich aus einem Datums-Feld, kracht es. Es wird richtig erkannt, dass der field_type "D" ist und der string wird umgewandelt, zurückschreiben wird er aber nicht.
War das Datenbankfeld nicht leer (es stand ein Datum drin), kracht es nicht. Der neue Wert wird nur nicht zurückgeschrieben. War das Datenbankfeld leer, kommt die Fehlermeldung "Invalid Date Entered" hoch und es geht nicht weiter. Wenn ich mit DTOS() umwandel, geht es auch nicht. Set Date ist german und cent ist on.
Habe ich da wohl irgendeinen Schalter nicht oder falsch gesetzt ?
Gruß
Ewald
Ewald
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 475
Registriert: Sa, 08. Apr 2006 14:07
Wohnort: Datteln
Danksagung erhalten: 3 Mal
Kontaktdaten:

Re: dcbrowsecol - nur welches Feld ?

Beitrag von Ewald »

alles auf Null zurück, das Problem liegt im Browser. Ich mache dafür mal ein neues Thema auf.
Antworten