Avatar billede leif Seniormester
23. december 2005 - 15:09 Der er 25 kommentarer og
2 løsninger

Undgå dobbeltoprettelser

Hej,

som udspringer af http://exp.dk/spm/674136

Hvordan kan man sikre at man undgår dobbeltoprettelser ? Så jeg fx. ikke kan have 2 records med tlf. 99999999 ?

På forhånd tak.

/Leif
Avatar billede mmmtm Nybegynder
01. januar 2006 - 14:58 #1
Som Jogii skrev, så kan det kun laves som en "vejledende" kontrolfunktion. Den simple måde er at oprette et view, med tlf (det feltnavn du vil tjekke) som første sorterede kolonne, og så i inputvalidation på feltet lave et opslag:
@If(@IsError(@DbLookup("":"Nocache";"":"";"DitViewsNavn";tlf;1));@success;@Failure("Der eksisterer allerede et dokument med dette telefonnummer"));
Det er ikke den rigtige måde at gøre det på (at validere på om man får en fejl...), kønt osv. Men det virker :-)
Avatar billede leif Seniormester
01. januar 2006 - 15:33 #2
Hvad er så den korrekte metode ?
Avatar billede jogii Nybegynder
01. januar 2006 - 18:32 #3
Den kode som mmmtm skriver er helt i orden. Problemet er nok bare at ENHVER fejl i opslaget vil resultere i accept. Dvs. at hvis du har fejl i oversigtsnavnet eller angivet det forkerte felt eller på en eller anden både laver en fejl i kodningen af opslaget så vil det resultere i accept af alle indtastede numre.

Lige en ting vedr. den anden parameter til DBLookup: Jeg ved ikke om "":"" vil virke efter hensigten. Jeg har set problemer med det. Jeg plejer at angive "". Det vil altid betyde "denne database".

Husk at sortere den første kolonne i den oversigt som du kontrollerer imod. Det er en almindelig fejl at glemme det.

Skjul også oversigten ved at navngive den med paranteser, f.eks. "(DitViewsNavn)|DitViewsNavn". Det der står efter | er aliaset og kan efterfølgende bruges til programmering. Det der står foran | er den "synlige" del af navnet.
Avatar billede leif Seniormester
01. januar 2006 - 19:50 #4
Cool ! Så har jeg den med.

Virker tilsyneladende efter den hensigt jeg efterspurgte.

Sidder dog med en ny problemstilling ! Da jeg kan se jeg reelt godt vil søge på 2 felter, om Tlf er oprettet hos Selskab, fx. må 99999999 godt være oprettet både hos TDC og Telia, da den ene kan være opsagt og dermed at man har flyttet nummeret.
Avatar billede jogii Nybegynder
02. januar 2006 - 07:58 #5
En anden problemstilling kan være at nogle konglumerat-firmaer bruger samme telefonnummer til forskellige instanser af deres firma. Sjældent, men er set.

Vedr. Opsigelse hos TDC og flytning til Telia, så kan jeg ikke helt forstå problemstillingen, da nummeret jo må tilhøre samme firma, altså er knyttet til samme dokument i Notes ... medmindre du representerer et telefonselskab ...

I dette tilfælde burde det være muligt at angive dette forhold for TDC-dokumentet og så via SELECT-statementet i "DitViewsNavn" at få fravalgt det pågældende dokument via f.eks.

SELECT Form="Telefonabonnement" & SubscriptionCancelled != "1"

Så vil oprettelsen af Telia-flytningen ikke give problemer, forudsat at du forinden har stemplet TDC-abonnementet som "aflyst" ...
Avatar billede leif Seniormester
02. januar 2006 - 09:24 #6
Nu kan man godt kalde mig et Teleselskab (Internt i virksomheden), det er fordi vi er ved at omlægge en masse telefoni til andre løsninger og aftaler.
Avatar billede jogii Nybegynder
02. januar 2006 - 09:31 #7
Så gælder det bare om at markere de poster som er opsagt og på den måde få dem frigivet i din kontroloversigt.
Avatar billede mmmtm Nybegynder
02. januar 2006 - 21:58 #8
Jogii: Hvad betyder konglumerat ?
- Og hvorfor er det vigtigt at "skjule" oversigten ?
Avatar billede mmmtm Nybegynder
02. januar 2006 - 22:02 #9
Leif: Hvis du godt vil søge på to felter, kan du på formularen lave et tredie (computed) felt som er selskab + tlf, og så lave dblookup på et view med dette felt som første sorterede kolonne.
Avatar billede jogii Nybegynder
02. januar 2006 - 23:15 #10
"konglomerat" er min øgebetegnelse for "sammensat/skuffeselskab/etellerandetmystisk"
Det er nok mit tyske arv der her skinner igennem :-)
http://de.wikipedia.org/wiki/Konglomerat

Jeg plejer at skjule systemoversigter, så der ikke lige pludselig dukker brugere op som mener at der skal lavet ændringer i oversigten så de bedre kan bruge den. Normalt bør man aldrig lave opslag til oversigter som brugerne har adgang til.
Avatar billede jogii Nybegynder
02. januar 2006 - 23:17 #11
http://susning.nu/Konglomerat kommer også med en god forklaring
Avatar billede mmmtm Nybegynder
05. januar 2006 - 20:43 #12
jogii: Ok, jeg troede det var et hjemmelavet ord :-). Men ang. oversigter - kan brugere ikke få adgang til alle oversigter med ctrl-shift-gå til ?
Leif: Kunne du bruge svaret ?
Avatar billede leif Seniormester
05. januar 2006 - 20:47 #13
Sorry, ja, det kunne jeg dog med et lille minus at jeg kan ikke editere dokumentet så får jeg fejl.
Avatar billede jogii Nybegynder
05. januar 2006 - 23:06 #14
mmmtm> Joda, <Ctrl Shift> virker altid. Det skal bare ikke være sådan at man laver opslag på oversigter som brugerne kigger på til daglig. Lige pludselig er der en avanceret bruger der ønsker at flytte rundt på alting for at få et bedre overblik eller at nogle brugere mener at denne oversigt ikke bruges og derfor kan slettes :-(

leif> Det løser du ved have følgende formel i anden kolonne på din opslagsoversigt: @Text(@DocumentUniqueID).

formlen fra mmmtm skal ændres til

_thisunid = @Text(@DocumentUniqueID);
_key := tlf;
_view := "DitViewsNavn";
_column := 2;
_look := @DbLookup("":"Nocache";"";_view;_key;_column);
REM "bemærk ændring til kolonne 2 istedetfor kolonne 1";

@If(@IsError(_look); @success;
    @Elements(_look) > 1;
          @Failure("Der eksisterer FLERE dokumenter med dette telefonnummer");
    _look = _thisunid;
          @Success;
    @Failure("Der eksisterer allerede et dokument med dette telefonnummer")
)

Ideen er alstå at se om det fundne nummer stammer fra det aktuelle dokument. Hvis ja, så OK.
Avatar billede leif Seniormester
05. januar 2006 - 23:35 #15
Jeg får nu bare "Der eksisterer allerede et dokument med dette telefonnummer" når jeg prøver at gemme et editeret dokument.

Kan det være min Save & Close der er problemet ?
@If (!@IsValid; @Return(0);
        @Do(@Command([FileSave]);@Command([FileCloseWindow])))
Avatar billede mmmtm Nybegynder
06. januar 2006 - 00:29 #16
Leif> så er alt som det skal være !.
Har du et dokument i editmode, ligger det jo back-end med samme data. Du skal komme en @isDocBeingEdited omkring din validation (den fra Jogii:
@isDocBeingEdited(@If(@IsError(_look); @success;
    @Elements(_look) > 1;
          @Failure("Der eksisterer FLERE dokumenter med dette telefonnummer");
    _look = _thisunid;
          @Success;
    @Failure("Der eksisterer allerede et dokument med dette telefonnummer")
);@success);
- så skulle den være der.
Avatar billede mmmtm Nybegynder
06. januar 2006 - 00:33 #17
Hovsa, glemte en @if:

@if(@isDocBeingEdited(@If(@IsError(_look); @success;
    @Elements(_look) > 1;
          @Failure("Der eksisterer FLERE dokumenter med dette telefonnummer");
    _look = _thisunid;
          @Success;
    @Failure("Der eksisterer allerede et dokument med dette telefonnummer")
);@success);
Avatar billede mmmtm Nybegynder
06. januar 2006 - 00:40 #18
Jogii> vi har primært web-brugere. Og desværre er brugen af (klient) databaser ikke så udbredt som den kunne være. Så hvis en klient-bruger når så langt som at bruge "gå til", vil vedkommende nok ringe til helpdesk i det øjeblik der dukker en oversigt op (uanset hvordan den ser ud :-). Men du har ret i at der nok ikke bør være en så nem adgang til oversigterne. Jeg har det bare sådan, at kan den ikke skjules helt, så kan det være det samme...
Avatar billede mmmtm Nybegynder
06. januar 2006 - 00:42 #19
..det svarer lidt til at skjule et felt på en formular, og så er det alligevel tilgængeligt via document properties.
Avatar billede leif Seniormester
06. januar 2006 - 13:21 #20
Hvis jeg så bruger:
_thisunid = @Text(@DocumentUniqueID);
_key := TeleNummer;
_view := "TeleTjeck";
_column := 2;
_look := @DbLookup("":"Nocache";"";_view;_key;_column);
REM {bemærk ændring til kolonne 2 istedetfor kolonne 1};

@if(@isDocBeingEdited(@If(@IsError(_look); @success;
    @Elements(_look) > 1;
          @Failure("Der eksisterer FLERE dokumenter med dette telefonnummer");
    _look = _thisunid;
          @Success;
    @Failure("Der eksisterer allerede et dokument med dette telefonnummer")
);@success);



Kan jeg ikke gemme formen pga. Passing arguments to a non-@Function or to a @Function that doesn's require arguments: ';'
Avatar billede jogii Nybegynder
06. januar 2006 - 16:03 #21
Jeg går ud fra at du lader denne formel arbejde i inputvalidationfeltet der laver opslag.

Det er lidt besværligt med nestede @If's i programmering, derfor plejer jeg at bruge noget der ligner dette:

@If(@IsDocBeingEdited; @Success; @Return( @ThisValue ));

koden bringer dig ud af beregningen på et passende tidspunkt.

Derefter fortsætter du med min kode

f.eks. sådan:

@If(@IsDocBeingEdited; @Success; @Return( @Success ));
_thisunid = @Text(@DocumentUniqueID);
_key := TeleNummer;
_view := "TeleTjeck";
_column := 2;
_look := @DbLookup("":"Nocache";"";_view;_key;_column);
REM {bemærk ændring til kolonne 2 istedetfor kolonne 1};

@If(@IsError(_look); @success;
    @Elements(_look) > 1;
          @Failure("Der eksisterer FLERE dokumenter med dette telefonnummer");
    _look = _thisunid;
          @Success;
    @Failure("Der eksisterer allerede et dokument med dette telefonnummer")
)
Avatar billede leif Seniormester
06. januar 2006 - 16:10 #22
Ja, på TeleNummer feltet på formen ?

Jeg får stadig samme fejl.
Avatar billede jogii Nybegynder
07. januar 2006 - 17:54 #23
Prøv dette
@Prompt([OK]; "dette dokument"; _thisunid);
@Prompt([OK]; "unid fra oversigt"; _look);
før den anden @if
Så kan du sammenligne de to værdier.
Avatar billede leif Seniormester
07. januar 2006 - 23:56 #24
Den første er tom den anden med teksten.
Avatar billede leif Seniormester
08. januar 2006 - 00:14 #25
_thisunid = @Text(@DocumentUniqueID);

til

_thisunid := @Text(@DocumentUniqueID);

Så virkede det !
Avatar billede leif Seniormester
08. januar 2006 - 00:16 #26
jogii -> Vil du ligge et svar ?
Avatar billede jogii Nybegynder
08. januar 2006 - 18:45 #27
arghh - yrk-fejl  :-)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Computerworld tilbyder specialiserede kurser i database-management

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester