SLE und Datenbankfeld

Zugriff, Engines, Konvertierung. Von ADS über DBF bis zu SQL.

Moderator: Moderatoren

Benutzeravatar
Jan
Marvin
Marvin
Beiträge: 14659
Registriert: Fr, 23. Sep 2005 18:23
Wohnort: 49328 Melle
Hat sich bedankt: 21 Mal
Danksagung erhalten: 88 Mal
Kontaktdaten:

SLE und Datenbankfeld

Beitrag von Jan »

Gibt es eigentlich die Möglichkeit, alleine aus einem SLE-Objekt festzustellen, welches Datenbankfeld dahinter steht? Ich finde im Objectinspector nichts dazu.

Jan
Mitglied der XUG Osnabrück
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.
Benutzeravatar
Manfred
Foren-Administrator
Foren-Administrator
Beiträge: 21200
Registriert: Di, 29. Nov 2005 16:58
Wohnort: Kreis Wesel
Hat sich bedankt: 210 Mal
Danksagung erhalten: 67 Mal

Re: SLE und Datenbankfeld

Beitrag von Manfred »

Hi Jan,

müßte da nicht was im Datalink stehen?
Gruß Manfred
Mitglied der XUG Osnabrück
Schatzmeister des Deutschsprachige Xbase-Entwickler e.V.
großer Fan des Xbaseentwicklerwiki https://wiki.xbaseentwickler.de/index.p ... Hauptseite
Doof kann man sein, man muß sich nur zu helfen wissen!!
Benutzeravatar
Jan
Marvin
Marvin
Beiträge: 14659
Registriert: Fr, 23. Sep 2005 18:23
Wohnort: 49328 Melle
Hat sich bedankt: 21 Mal
Danksagung erhalten: 88 Mal
Kontaktdaten:

Re: SLE und Datenbankfeld

Beitrag von Jan »

Hmmm. Ja, ansich schon, stimmt. Aber da ist es wieder, mein Problem: Wie lese ich denn das aus einem Codeblock aus?

Jan
Mitglied der XUG Osnabrück
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.
Benutzeravatar
Manfred
Foren-Administrator
Foren-Administrator
Beiträge: 21200
Registriert: Di, 29. Nov 2005 16:58
Wohnort: Kreis Wesel
Hat sich bedankt: 210 Mal
Danksagung erhalten: 67 Mal

Re: SLE und Datenbankfeld

Beitrag von Manfred »

Jetzt stellt sich wieder die Gretchenfrage: Was hast Du überhaupt vor?
Gruß Manfred
Mitglied der XUG Osnabrück
Schatzmeister des Deutschsprachige Xbase-Entwickler e.V.
großer Fan des Xbaseentwicklerwiki https://wiki.xbaseentwickler.de/index.p ... Hauptseite
Doof kann man sein, man muß sich nur zu helfen wissen!!
Benutzeravatar
Jan
Marvin
Marvin
Beiträge: 14659
Registriert: Fr, 23. Sep 2005 18:23
Wohnort: 49328 Melle
Hat sich bedankt: 21 Mal
Danksagung erhalten: 88 Mal
Kontaktdaten:

Re: SLE und Datenbankfeld

Beitrag von Jan »

Ich muß den Feldnamen haben. Ganz einfach.

Jan
Mitglied der XUG Osnabrück
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.
Benutzeravatar
Manfred
Foren-Administrator
Foren-Administrator
Beiträge: 21200
Registriert: Di, 29. Nov 2005 16:58
Wohnort: Kreis Wesel
Hat sich bedankt: 210 Mal
Danksagung erhalten: 67 Mal

Re: SLE und Datenbankfeld

Beitrag von Manfred »

und wenn Du den ins Cargofeld schreibst. Nur mal so aus der Hüfte geschossen.
Gruß Manfred
Mitglied der XUG Osnabrück
Schatzmeister des Deutschsprachige Xbase-Entwickler e.V.
großer Fan des Xbaseentwicklerwiki https://wiki.xbaseentwickler.de/index.p ... Hauptseite
Doof kann man sein, man muß sich nur zu helfen wissen!!
Benutzeravatar
Jan
Marvin
Marvin
Beiträge: 14659
Registriert: Fr, 23. Sep 2005 18:23
Wohnort: 49328 Melle
Hat sich bedankt: 21 Mal
Danksagung erhalten: 88 Mal
Kontaktdaten:

Re: SLE und Datenbankfeld

Beitrag von Jan »

Daran hatte ich auch schon gedacht. Das wäre aber erst Lösung B. Lösung A wäre, den Feldnamen aus dem SLE-Objekt auszulesen.

Jan
Mitglied der XUG Osnabrück
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.
Benutzeravatar
Manfred
Foren-Administrator
Foren-Administrator
Beiträge: 21200
Registriert: Di, 29. Nov 2005 16:58
Wohnort: Kreis Wesel
Hat sich bedankt: 210 Mal
Danksagung erhalten: 67 Mal

Re: SLE und Datenbankfeld

Beitrag von Manfred »

Datalink ist doch einem bestimmten Konzept aufgebaut. "," ":= x" usw. Das müßte man doch zerpflücken können.
Gruß Manfred
Mitglied der XUG Osnabrück
Schatzmeister des Deutschsprachige Xbase-Entwickler e.V.
großer Fan des Xbaseentwicklerwiki https://wiki.xbaseentwickler.de/index.p ... Hauptseite
Doof kann man sein, man muß sich nur zu helfen wissen!!
Benutzeravatar
AUGE_OHR
Marvin
Marvin
Beiträge: 12910
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg
Hat sich bedankt: 19 Mal
Danksagung erhalten: 46 Mal

Re: SLE und Datenbankfeld

Beitrag von AUGE_OHR »

Jan hat geschrieben:Daran hatte ich auch schon gedacht. Das wäre aber erst Lösung B. Lösung A wäre, den Feldnamen aus dem SLE-Objekt auszulesen.
hm ... wie wäre es denn den Feldnamen in :SetInputFocus zu "hinterlegen" ?
gruss by OHR
Jimmy
Benutzeravatar
Jan
Marvin
Marvin
Beiträge: 14659
Registriert: Fr, 23. Sep 2005 18:23
Wohnort: 49328 Melle
Hat sich bedankt: 21 Mal
Danksagung erhalten: 88 Mal
Kontaktdaten:

Re: SLE und Datenbankfeld

Beitrag von Jan »

... schon belegt ...

Jan
Mitglied der XUG Osnabrück
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.
Benutzeravatar
Herbert
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 1991
Registriert: Do, 14. Aug 2008 0:22
Wohnort: Gmunden am Traunsee, Österreich
Danksagung erhalten: 3 Mal
Kontaktdaten:

Re: SLE und Datenbankfeld

Beitrag von Herbert »

...oder im :HelpLink
Grüsse Herbert
Immer in Bewegung...
Benutzeravatar
AUGE_OHR
Marvin
Marvin
Beiträge: 12910
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg
Hat sich bedankt: 19 Mal
Danksagung erhalten: 46 Mal

Re: SLE und Datenbankfeld

Beitrag von AUGE_OHR »

Jan hat geschrieben:Ich muß den Feldnamen haben. Ganz einfach.
und dann ?
wie wäre denn :CueBanner() oder :showBalloonTip() ?
gruss by OHR
Jimmy
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 15697
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 66 Mal
Danksagung erhalten: 33 Mal
Kontaktdaten:

Re: SLE und Datenbankfeld

Beitrag von brandelh »

Hallo,

:datalink ist exported, was gibt es denn aus wenn du es später abfragst ?
Gruß
Hubert
Benutzeravatar
Jan
Marvin
Marvin
Beiträge: 14659
Registriert: Fr, 23. Sep 2005 18:23
Wohnort: 49328 Melle
Hat sich bedankt: 21 Mal
Danksagung erhalten: 88 Mal
Kontaktdaten:

Re: SLE und Datenbankfeld

Beitrag von Jan »

Den Codeblock. Die Frage ist: Wie bekomme ich den Codeblock zerpflückt, in dem ja schon das Datenbankfeld steht? Die Idee ansich ist ja sehr gut, aber die Vorgehensweise ...

Jan
Mitglied der XUG Osnabrück
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.
Benutzeravatar
Manfred
Foren-Administrator
Foren-Administrator
Beiträge: 21200
Registriert: Di, 29. Nov 2005 16:58
Wohnort: Kreis Wesel
Hat sich bedankt: 210 Mal
Danksagung erhalten: 67 Mal

Re: SLE und Datenbankfeld

Beitrag von Manfred »

zeig doch mal, wie Dein Codeblock aussieht, oder aussehen würde. Dann sehen wir weiter
Gruß Manfred
Mitglied der XUG Osnabrück
Schatzmeister des Deutschsprachige Xbase-Entwickler e.V.
großer Fan des Xbaseentwicklerwiki https://wiki.xbaseentwickler.de/index.p ... Hauptseite
Doof kann man sein, man muß sich nur zu helfen wissen!!
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 15697
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 66 Mal
Danksagung erhalten: 33 Mal
Kontaktdaten:

Re: SLE und Datenbankfeld

Beitrag von brandelh »

Hallo Jan,

ich habe es nicht probiert, aber versuche doch mal was angezeigt wird ...

Definition mit exaktem Namen: (cAlias)->FeldName oder field->Feldname

dann ...

msgbox( var2Char( MySle:datalink) )

Wenn nun der Klartext des Feldnamens dort drin steht, dann kannst du den Anfang mit
at("->",cRueckgabeWert) finden und das Ende des Feldes mit dem ersten Blank.

Wenn dir das zu viel Mühe ist, oder wenn der Rückgabewert von Datalink nicht so aussehen,
bleibt nur es vorher zu merken ;-)
Gruß
Hubert
Benutzeravatar
Jan
Marvin
Marvin
Beiträge: 14659
Registriert: Fr, 23. Sep 2005 18:23
Wohnort: 49328 Melle
Hat sich bedankt: 21 Mal
Danksagung erhalten: 88 Mal
Kontaktdaten:

Re: SLE und Datenbankfeld

Beitrag von Jan »

Hier der Datalink:

Code: Alles auswählen

{|x| IIf(x == NIL, AllTrim(&cFeld1), &cFeld2 := x)}
Jan
Mitglied der XUG Osnabrück
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.
Benutzeravatar
Martin Altmann
Foren-Administrator
Foren-Administrator
Beiträge: 16517
Registriert: Fr, 23. Sep 2005 4:58
Wohnort: Berlin
Hat sich bedankt: 111 Mal
Danksagung erhalten: 48 Mal
Kontaktdaten:

Re: SLE und Datenbankfeld

Beitrag von Martin Altmann »

Hallo Jan,
Du solltest Dir mal Dein Objekt im Debugger anschauen - da siehst Du bestimmt was passendes.

Viele Grüße,
Martin
:grommit:
Webseite mit XB2.NET und ausschließlich statischem Content in Form von HTML-Dateien: https://www.altem.de/
Webseite mit XB2.NET und ausschließlich dynamischem Content in Form von in-memory-HTML: https://meldungen.altem.de/

Mitglied der XUG Osnabrück
Vorsitzender des Deutschsprachige Xbase-Entwickler e. V.
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 15697
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 66 Mal
Danksagung erhalten: 33 Mal
Kontaktdaten:

Re: SLE und Datenbankfeld

Beitrag von brandelh »

Jan hat geschrieben:Hier der Datalink:

Code: Alles auswählen

{|x| IIf(x == NIL, AllTrim(&cFeld1), &cFeld2 := x)}
Jan
Hallo Jan,

das sieht mir nach Macro aus ... ich schreibe meine Codeblock so ...

Code: Alles auswählen

local cFeld := "Nachname", cCodeBlock

cCodeBlock := "{|x| iif(x==NIL, field->"+cFeld+", field->"+cFeld+" := x) }"
datalink := &(cCodeBlock)

dies müsste dann nach der Auflösung so aussehen, als ob ich es direkt so eingegeben hätte:

Code: Alles auswählen

cCodeBlock := "{|x| iif(x==NIL, field->Nachname, field->Nachname := x) }"

Gruß
Hubert
Benutzeravatar
AUGE_OHR
Marvin
Marvin
Beiträge: 12910
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg
Hat sich bedankt: 19 Mal
Danksagung erhalten: 46 Mal

Re: SLE und Datenbankfeld

Beitrag von AUGE_OHR »

hi,
Jan hat geschrieben:Hier der Datalink:

Code: Alles auswählen

{|x| IIf(x == NIL, AllTrim(&cFeld1), &cFeld2 := x)}
ok du willst den Namen des Datenbank Feld wohl als Macro benutzen ...

hm ... wieso cFeld1 / cFeld2 ... "normal" ist es doch das "selbe" cFeld1 ?

trotzdem ist mir immer noch nicht ganz klar was du überhaupt machen will und warum du etwas "ermitteln" willst ?

Du fragst mach einem "Detail" aber ich hinterfrage das "Konzept" ob das "ermitteln" statt "wissen" ( :Cargo ) notwendig ist ?

man könnte einen :datalink ja auch mit

Code: Alles auswählen

oSle:datalink := VARBLOCK( @MemVar )
aufbauen und, wenn die SLE Objecte per

Code: Alles auswählen

AADD(editcontrol,oSLE)
in ein Array aufgenommen wurde, dann per ASCAN() nach der MemVar suchen.
gruss by OHR
Jimmy
Benutzeravatar
Martin Altmann
Foren-Administrator
Foren-Administrator
Beiträge: 16517
Registriert: Fr, 23. Sep 2005 4:58
Wohnort: Berlin
Hat sich bedankt: 111 Mal
Danksagung erhalten: 48 Mal
Kontaktdaten:

Re: SLE und Datenbankfeld

Beitrag von Martin Altmann »

Hallo Jan,
da Du auf meinen Vorschlag nicht reagiert hast, habe ich das jetzt mal selber ausprobiert.
Das einzig sinnvolle ist Datalink (und bDatalink) - und das hattest Du ja bereits oben abgefragt.

Viele Grüße,
Martin
:grommit:
Webseite mit XB2.NET und ausschließlich statischem Content in Form von HTML-Dateien: https://www.altem.de/
Webseite mit XB2.NET und ausschließlich dynamischem Content in Form von in-memory-HTML: https://meldungen.altem.de/

Mitglied der XUG Osnabrück
Vorsitzender des Deutschsprachige Xbase-Entwickler e. V.
Benutzeravatar
Jan
Marvin
Marvin
Beiträge: 14659
Registriert: Fr, 23. Sep 2005 18:23
Wohnort: 49328 Melle
Hat sich bedankt: 21 Mal
Danksagung erhalten: 88 Mal
Kontaktdaten:

Re: SLE und Datenbankfeld

Beitrag von Jan »

Hallo alle zusammen,

Hubert,

geht leider nicht, weil nicht immer eine dbf dahinter steht. Manchmal lese ich auch einfach in eine Variable ein.

Jimmy,

cFeld1 und cFeld2 müssen sein. Und an dem Konzept ist nichts zu rütteln. Das ist so und muß insgesamt auch so bleiben.

Martin,

ich hab das wohl gelesen und auch ausprobiert. Aber ich bekomme den Codeblock zurück, so wie ich den oben gepostet habe.

An Alle,

ich möchte einfach nur wissen, ob ich irgendwie aus dem SLE-Objekt das dahinterliegende Datenbankfeld ermitteln kann. Eine Methode dafür scheint es offensichtlich nicht zu geben. Bliebe also nur, den Codeblock auszuwerten. Aber wie? Ich werde heute Abend mal versuchen, ob der von dataLink schlichtweg als Zeichenkette zurückgegeben wird, dann kann ich den ja mit entsprechenden Stringfunktionen zerstückeln und auswerten.

Jan
Mitglied der XUG Osnabrück
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 15697
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 66 Mal
Danksagung erhalten: 33 Mal
Kontaktdaten:

Re: SLE und Datenbankfeld

Beitrag von brandelh »

Hallo Jan,

natürlich wird der Datalink als Zeichenkette zurückgegeben zumindest mit Var2Char() ... du hast ja oben gezeigt was er enthält.
Nämlich den Namen deiner 2 Speichervariablen die per Macro ausgewertet werden ... wenn die immer gleich heißen und der Context sich noch nicht geändert hat, könntest du auf diese auch direkt zugreifen (das sind doch privates oder ?).
Gruß
Hubert
Benutzeravatar
AUGE_OHR
Marvin
Marvin
Beiträge: 12910
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg
Hat sich bedankt: 19 Mal
Danksagung erhalten: 46 Mal

Re: SLE und Datenbankfeld

Beitrag von AUGE_OHR »

Jan hat geschrieben:cFeld1 und cFeld2 müssen sein. Und an dem Konzept ist nichts zu rütteln. Das ist so und muß insgesamt auch so bleiben.
siehe dir mal das hier an

Code: Alles auswählen

#include "Appevent.ch"
#include "Dbstruct.ch"

PROCEDURE Main
LOCAL nEvent, mp1, mp2, oXbp
LOCAL cDBF  := "TEST.DBF"
LOCAL editcontrol := {}
LOCAL aStructure

   SetColor("N/W")
   CLS
   IF !FILE(cDBF)
      C_TEST(cDBF)
   ENDIF
   USE (cDBF) EXCLUSIV

   aStructure := DbStruct()
   AEval( aStructure, {|a| CreateSLE( a[DBS_NAME],editcontrol)} )

   AEval ( editcontrol, { | oXbp | SetAppfocus(oXbp)  ,;
                                        oXbp:SetData() } )

   SetAppfocus(editcontrol[1])

   nEvent := 0
   DO WHILE nEvent <> xbeP_Close
      nEvent := AppEvent( @mp1, @mp2, @oXbp )
      oXbp:handleEvent( nEvent, mp1, mp2 )
   ENDDO

RETURN

FUNCTION CreateSLE(cFeldName,editcontrol)
LOCAL oSLE
LOCAL cVarX := cFeldName
LOCAL aSize := {100,30}

STATIC aPos := {50,200}

   aPos[2] -= 50

   oSLE              := XbpSLE():new( , , aPos, aSize )
   oSLE:tabStop      := .T.
   oSLE:autoTab      := .T.
   oSLE:bufferLength := 10

   oSLE:setInputFocus  := { |x,y,oSLE| cVarX := cFeldName }
   oSLE:killInputFocus := { |x,y,oSLE| oSLE:getData() }

   oSLE:dataLink := {|x| IIf( x==NIL, TRIM(FIELD->&cVarX), FIELD->&cVarX := x ) }

   oSLE:create()

   AADD(editcontrol,oSLE)

RETURN oSLE

function C_TEST(datei,alias,id)
  local p,field_list:={}
  if valtype(datei)!="C"
    datei="TEST.DBF"
  endif
  if valtype(alias)!="C"
    p=at(".",datei)
    alias=if(p>0,substr(datei,1,p-1),datei)
  endif
  if valtype(id)!="N"
    id=0
  endif
  select (id)
  if !file(datei)
    aadd(field_list,{"FELDNO1","C",10,0})
    aadd(field_list,{"FELDNO2","C",10,0})
    dbcreate(datei,field_list)
  endif
  use (datei) alias (alias) EXCLUSIVE
  APPEND BLANK
  REPLACE FELDNO1 WITH "AAAAAAAAAA"
  REPLACE FELDNO2 WITH "BBBBBBBBBB"
  CLOSE
return(.t.)
gruss by OHR
Jimmy
wolfgang37
Cut&Paste-Entwickler
Cut&Paste-Entwickler
Beiträge: 20
Registriert: Mo, 07. Sep 2009 11:45
Wohnort: A-6850 Dornbirn

Re: SLE und Datenbankfeld

Beitrag von wolfgang37 »

Hallo Jan,
ich schreibe immer den Feldnamen in oSle:carco,
damit ist jederzeit möglich damit etwas zu tun.
mfg wolfgang
Antworten