Das Notes Forum

Domino 9 und frühere Versionen => Entwicklung => Thema gestartet von: Joanie am 03.01.03 - 10:46:47

Titel: Automatischer Feldeintrag aus anderer DB
Beitrag von: Joanie am 03.01.03 - 10:46:47
Hi,

folgendes problem: ich würd gern in eine eingabemaske automatisch Daten eintragen, die ich in einer anderen DB hinterlegt habe.
Bsp.: wenn ich den Namen einer person eingebe, dann sollen automatisch die felder Phone,Fax und Email ausgefüllt werden?
Gibt´s da ne Möglichkeit, das so einfach wie möglich zu machen?
Bin nicht so wirklich der notes-spezialist....

gruß,
Joanie
Titel: Re:Automatischer Feldeintrag aus anderer DB
Beitrag von: Rob Green am 03.01.03 - 10:54:37
schau mal auf die @dblookup Formel Syntax:

@DbLookup( Klasse : "NoCache" ; Server  : Datenbank  ; Ansicht  ; Schlüssel  ; Feldname ) oder
@DbLookup( Klasse : "NoCache" ; Server  : Datenbank  ; Ansicht  ; Schlüssel  ; SpaltenNr )

Unter Server kannst Du jeden beliebigen Notesserver eintragen, auf den die User Zugriff haben, bzw. auf die eingetragene DB die User Zugriff haben.

Der "Schlüssel" ist Dein Suchbegriff in der "Ansicht" der eingetragenen DB. Der Suchbegriff wird immer in der ersten UND sortierten Spalte der Ansicht gesucht. Der Suchbegriff ist in Deinem Falle der Name.

Der Rückgabewert ist entweder der Inhalt des Feldes oder der Eintrag in der angegebenen Spaltennummer der Ansicht.
Titel: Re:Automatischer Feldeintrag aus anderer DB
Beitrag von: Joanie am 03.01.03 - 11:15:27
Hört sich soweit logisch an, aber er gibt mir ne Fehlermeldung.

"Feld:"Telefon": eintrag im index nicht gefunden oder der index ist für die ansicht nicht aufgebaut.

@DbLookup( Klasse : "NoCache" ; Server  : Test_contacts  ; Output ; Name ; Phone)

Das ist meine Formel. "Test_contacts" ist der Name der DB, in der die Daten hinterlegt sind, "Output" heißt die View, "Name" ist die Schlüsselspalte und "Phone" ist der Feldname, aus der der Wert übernommen werden soll.

blöde frage: muss ich da irgendwo anführungszeichen machen??

gruß,
Joanie
Titel: Re:Automatischer Feldeintrag aus anderer DB
Beitrag von: Rob Green am 03.01.03 - 11:38:05
ja, die lieben Anführungszeichen...dblookup ist das echt schrecklich.

Da ich das nie genau weiß, helfe ich mir so:
Code
_server:="ABC";
_db:="Test_contacts.nsf";
_view="Output";
_searchkey:=Name;
_returnvalue:="Phone";

_treffer:=@DbLookup( "" : "NoCache" ; _server  : _db  ; _view ; _searchkey ; _returnvalue);

@If( @IsError(_treffer ); ""; _treffer )
Durch die Verwendung von Variablen benötige ich keine Anführungsstriche mehr. Damit kann ich auch keinen Fehler mehr machen. Und die Verwendung von iserror führt zu einer passiven Sicherheit, sollte kein Treffer gefunden werden und damit der user nicht durch eine doofe Fehlermeldung bei dblookup irritiert wird.

(normalerweise kommen nahezu bei allen Eingaben Anfürhunsstriche in der dblookup, außer bei Verwendung der Spaltennummer)
Titel: Re:Automatischer Feldeintrag aus anderer DB
Beitrag von: Joanie am 03.01.03 - 11:38:28
Ok, hab die Formel jetzt soweit abgeändert, das sie eigentlich funktionieren müßte:
@DbLookup( " " : "NoCache" ; "Lokal"  : "Test_contacts.nsf"  ; "Output" ; "Name" ; "Phone")

Jetzt bekomm ich die Fehlermeldung: Der benötigte externe Datenbanktreiber kann nicht gefunden werden.

Was nun?
Titel: Re:Automatischer Feldeintrag aus anderer DB
Beitrag von: Rob Green am 03.01.03 - 11:41:27
siehe Antwort vor Deinem letzten Posting.

Server "lokal"... ;D...mach mal folgendes:

_server:="";
_db:="Test_contacts.nsf";
_view="Output";
_searchkey:=Name;
_returnvalue:="Phone";

_treffer:=@DbLookup( "" : "NoCache" ; _server  : _db  ; _view ; _searchkey ; _returnvalue);

Server bleibt bei einer lokalen DB leer! Einfach nur doppelte Anführungsstriche "".

Achtung: wenn die DB in einem Unterpfad von Notes\Data liegt, mußt Du den Pfad von Notes\Data aus angeben bzw. wenn es völlig außerhalb von Notes\data liegt, den kompletten Pfad.

zb "c:\\pfad1\\pfad2\\pfad3\\db.nsf"
Titel: Re:Automatischer Feldeintrag aus anderer DB
Beitrag von: Joanie am 03.01.03 - 11:49:38
@DbLookup( "" : "NoCache" ; ""  : "Test_contacts.nsf"  ; "Output" ; Name ; "Phone");

die Index-fehlermeldung von vorher.....
Titel: Re:Automatischer Feldeintrag aus anderer DB
Beitrag von: Rob Green am 03.01.03 - 11:53:21
wie gesagt, den Tip habe ich Dir bereits gegeben, woran es liegt und wie man es vermeiden kann ::). Anführungsstriche....

Auszug aus Help und LESE die Formel bitte langsaaaam:

Diese Formel gibt den Wert zurück, der im Statusfeld des Dokuments "Virus-Check" gespeichert ist. Auf dieses Dokument wird über die Ansicht "In Arbeit" der Datenbank PROJEKTE.NSF im Unterverzeichnis SCHMITT auf dem Server RESEARCH zugegriffen. Die Informationen wird nicht im Cache zwischengespeichert, so daß, wenn die Formel in derselben Arbeitssitzung erneut aufgerufen wird, eine neue Suche ausgeführt werden muß. Auf diese Weise wird sichergestellt, daß die zurückgelieferten Stati immer aktuell sind.
@DbLookup("":"NoCache";"RESEARCH":"SCHMITT\\PROJEKTE.NSF"; "In Arbeit";"Virus-Check";"Status")
Titel: Re:Automatischer Feldeintrag aus anderer DB
Beitrag von: Joanie am 03.01.03 - 12:01:04
die hilfe hab ich auch schon gelesen, aber 1. hab ich mich an dein beispiel gehalten, da waren für Name keine Anführungsstriche und 2. bekomm ich( mit oder ohne A.) die selbe Fehlermeldung....
naja, muss ich noch ein bissel probieren....
Titel: Re:Automatischer Feldeintrag aus anderer DB
Beitrag von: Rob Green am 03.01.03 - 12:09:20
der Name war bei mir ohne Anführungsstriche, da er direkt aus dem Doc und dessen Feld Name den Wert ausliest. Hätte ich bei mir searchkey:="Name" geschrieben, würde er immer nach dem String "Name" suchen.

Direkt in DBLookup müßte ichatürlich "Name" mit Anführungsstrichen schreiben. Ich sags ja, dblookup ist garstig.

Verwenden mal bitte genau meine Formel mit den Variablenangaben davor. Irgendwas ist faul..stimmt der DB Name und ist die DB auch im Notes\Data Pfad? Ist der Viewname wirklich Output?


edit:
schreib das mal so ab:
_server:="";
_db:="Test_contacts.nsf";
_serverdb:=_server+":"+_db;
_view="Output";
_searchkey:=Name;
_returnvalue:="Phone";

_treffer:=@DbLookup( "" : "NoCache" ; _serverdb  ; _view ; _searchkey ; _returnvalue);

@If( @IsError(_treffer ); ""; _treffer )

Klappt das dann? :P
Titel: Re:Automatischer Feldeintrag aus anderer DB
Beitrag von: Joanie am 03.01.03 - 12:28:44
klappt insofern, das ich keine fehlermeldung mehr bekomme!
Thanks a lot!!!!
Aber der kleine Schönheitsfehler ist: er trägt keine Daten ein.....
hab die felder als "Berechnet" angelegt und die Formel in "Wert" reingeschrieben. Richtig oder falsch??
Titel: Re:Automatischer Feldeintrag aus anderer DB
Beitrag von: Rob Green am 03.01.03 - 12:34:26
feld Name sollte natürlich editierbar sein,
das berechnete Feld, das zB die dazugehörige Tel.nummer ausspuckt sollte die dblookup Formel enthalten.

Gehe bitte in die Contact DB und schau mal im View Output nach, was in der ersten sortierten Spalte für Begriffe stehen. Steht da zB "HANS", trage dann testhalber ins Namensfeld ebenso "Hans" ein. Dann solltest Du etwas zurückbekommen (insofern Hans eine eingetragene Tel.nummer im Feld Phone hat).
Titel: Re:Automatischer Feldeintrag aus anderer DB
Beitrag von: Joanie am 03.01.03 - 13:24:56
funktioniert nicht!

keine fehlermeldung, aber er tut´s einfach nicht... ???
Titel: Re:Automatischer Feldeintrag aus anderer DB
Beitrag von: Rob Green am 03.01.03 - 14:05:21
kannst Du bei DBs hier gezipped reinstellen?
Brauche nur die Maske der DB mit dem Namensfeld und die Contact DB mit der einen Maske und dem View Output plus einem Testeintrag.
Titel: Re:Automatischer Feldeintrag aus anderer DB
Beitrag von: Joanie am 03.01.03 - 14:21:56
hoffe das hilft!
Titel: Re:Automatischer Feldeintrag aus anderer DB
Beitrag von: Wipe am 03.01.03 - 15:01:24
Wenn ich mich recht erinnere muß ich doch die Infos aus der anderen DB über eine angesprochene Spalte abziehen

Bsp:
FIELD ViewName:="Personen";
@SetField("Urlauber";@PickList([Custom]:[Single];"":"";ViewName;"Person sortiert nach Nachnamen";"Bitte wählen Sie Ihren Namen aus";1));
@SetField("Abteilung";@DbLookup( "Notes" : "NoCache" ; ""  : ""  ; ViewName; Urlauber  ; 4 ));

und je nach weiterer Information hole ich mir eine andere Spalte.
Titel: Re:Automatischer Feldeintrag aus anderer DB
Beitrag von: Joanie am 03.01.03 - 15:14:06
Und was entspricht dann "Abteilung" ??
den rest hab ich hoffentlich richtig angepasst:

FIELD ViewName:="Output";

@SetField("????";@DbLookup("":"NoCache";"":"Test_contacts.nsf";ViewName;Name;3))
Titel: Re:Automatischer Feldeintrag aus anderer DB
Beitrag von: joringel am 03.01.03 - 15:28:08
_serverdb:=_server+":"+_db;    <- das gibt nur einen String, @dblookup erwartet eine Liste...

muss heissen: _serverdb := _server : _db;

_view="Output";    <- da fehlt ein Doppelpunkt...

_searchkey:=Name;    <- was ist 'Name'? Da muss der Feldname des Feldes hinein, das den Wert enthält, den du in der Ansicht finden willst...
.
.

Manchmal ist es ganz brauchbar, _erstmal_ alle Parameter im @dblookup hart zu kodieren -> schliesst solche Fehler aus...

@dblookup("":"nocache"; "":"Test_contacts.nsf"; "Output"; "Max Müller"; "Phone")


Gruss
Joringel
Titel: Re:Automatischer Feldeintrag aus anderer DB
Beitrag von: Axel am 03.01.03 - 15:30:19
@Bubble

Bei DBLookup kannst du entweder die Nummer einer Spalte in der Ansicht angeben oder den Namen eines Feldes des entsprechenden Dokumentes.

@Joanie

Wird der Wert auch nach der Aktualisierung des Dokumentes nicht eingetragen ?


Axel
 
Titel: Re:Automatischer Feldeintrag aus anderer DB
Beitrag von: Rob Green am 03.01.03 - 15:39:21
@joringel, danke für die Fehlerbereiniung. Könnte man nicht auf dem Forum einen eingebauten Formel-Debugger verwenden?  ;D ;D ;D
Titel: Re:Automatischer Feldeintrag aus anderer DB
Beitrag von: Joanie am 03.01.03 - 16:21:42
@Joringel + Rob Green

hab das jetzt so gemacht, wie ihr beide gesagt habt, und es funktioniert immer noch nicht!
ich bekomm einfach keinen eintrag!
why that?
weiß langsam echt nicht mehr, woran es liegen kann
Titel: Re:Automatischer Feldeintrag aus anderer DB
Beitrag von: Rob Green am 03.01.03 - 16:25:00
 ;D ;D ;D

ich schau mir die DB heute Abend in Ruhe mal an.
Bis nachher.
Titel: Re:Automatischer Feldeintrag aus anderer DB
Beitrag von: Joanie am 03.01.03 - 16:26:27
danke!
das ist echt nett!
eigentlich kann die garnicht so kompliziert sein, ich kann nicht gutes mit notes umgehen....
Titel: Re:Automatischer Feldeintrag aus anderer DB
Beitrag von: Rob Green am 03.01.03 - 23:49:48
so gehts:

(http://www.basic-t.com/grafics/dblookup.jpg)

Was nun falsch war? Eigentlich nix großartiges. Hier und da einige Schreibfehler:

- der Suchbegriff kommt aus dem Feld "Kunde" und nicht aus "Name". Dass Feld "Name" existiert in der Ticketmaske nicht!
- die Zuweisung {view="Output"} ist keine Zuweisung, es fehlte ein ":"
also: view:="Output"
- würde vorsichtshalber Telefonnummer berechnet machen, statt Berechnet zur Anzeige..alle anderen Kontaktfelder sind ebenfalls berechnet

nimm also die Formel

Variante A:
Code
_server:="";
_db:="Test\\Test_contacts.nsf";
_serverdb:=_server:_db;
_view:="Output";
_searchkey:=Kunde;
_returnvalue:="Phone";

_treffer:=@DbLookup( "" : "NoCache" ; _server:_db  ; _view ; _searchkey ; _returnvalue);

@If( @IsError(_treffer );"keine Telefonnummer vorhanden"; _treffer)

Variante B:
Code
_server:="";
_db:="Test\\Test_contacts.nsf";
_serverdb:=_server:_db;
_view:="Output";
_searchkey:=Kunde;
_returnvalue:="Phone";

_treffer:=@DbLookup( "" : "NoCache" ; _serverdb  ; _view ; _searchkey ; _returnvalue);

@If( @IsError(_treffer );"keine Telefonnummer vorhanden"; _treffer)

Variante C:
Code
_treffer:=@DbLookup( "" : "NoCache" ; "":"Test\\Test_contacts.nsf":"Output" ; "Kunde" ; "Phone");

@If( @IsError(_treffer );"keine Telefonnummer vorhanden"; _treffer)

ACHTUNG: bei mir liegt die Kontakt DB im Notes\Data\Test Pfad, daher ist bei mir die DB mit "Test\\Test_contacts.nsf" angegeben

*meeeensch, ich fass es nicht, hätte ich doch nie gesagt, daß dblookups garstig sein können....und dabei ist es doch sooo einfach.....oder etwa nicht...rofl*

(http://uniserver.no-ip.com/mysmilies/OLA.gif)
Titel: Re:Automatischer Feldeintrag aus anderer DB
Beitrag von: Joanie am 04.01.03 - 16:22:54
vielen dank!

funktioniert soweit einwandfrei, nur noch ein kleiner schönheitsfehler:
kann man das so einstellen, das man sobald man was in das feld Ansprechpartner einträgt, die telefoneinträge sichtbar werden. ich seh die erst, wenn ich dann abspeichere und dann eben in der ansicht. ich könnte damit leben, aber der anwender an sich würde gern sehen, was da eingetragen wird.....

aber der rest funktioniert echt super!!!
thanx a lot!!!
Titel: Re:Automatischer Feldeintrag aus anderer DB
Beitrag von: Joanie am 04.01.03 - 16:31:35
ok, problem hat sich erledigt!
hab einfach "felder automatisch aktualisieren" angeklickt und jetzt läuft es super! also nochmal vielen dank für die hilfe und die geduld!!!!
bin halt erst am lernen....