24. oktober 2007 - 20:11Der er
3 kommentarer og 1 løsning
IBSecurityService, vise brugere
Hej.
Jeg arbejder med Delphi og Firebird og vil gøre brug af IBSecurityService komponenten.
Findes der uddybende hjælp på nettet til at bruge denne? Jeg har google og ledt, men kan ikke finde noget.
Mit konkrete (første) problem er at få vist samtlige oprettede brugere i databasen:
Dertil har jeg oprettet:
-en IBsecurityservice -en listview: "lvBrugere" og følgende procedure til at indsætte de oprettede brugere:
procedure TformBrugere.UpdateListView; var I: integer; begin with dmData.IBSecurityService do begin try Active := true; DisplayUsers; lvBrugere.Items.BeginUpdate; lvBrugere.Items.Clear; for i := 0 to UserInfoCount -1 do begin with UserInfo[i] do begin with lvBrugere.Items.Add do begin Caption := UserName; SubItems.Add(FirstName + ' ' + MiddleName + ' ' + LastName); SubItems.Add(IntToStr(UserID)); SubItems.Add(IntToStr(GroupID)); end; end; end; finally lvBrugere.Items.EndUpdate; Active := false; end; end; end;
Den moderne arbejdsplads er i stigende grad afhængig af mødelokaler til at fremme samarbejde, men dette skift medfører også stigende sikkerhedsudfordringer.
Først skal du have din BeginUpdate flyttet ovenfor din try. Det samme gælder Active. Det er en ret almindelig fejl, men hvorfor gå ind i en try-blok som sikrer at EndUpdate køres, hvis den ikke kunne køre BeginUpdate. Dårligt eksempel. Oprettelse af et objekt er bedre.
Hvad laver DisplayUsers?
Prøv at undgå with, indtil du ved det virker. Jeg ville lave det således skippe with. Især fordi with nogle gange har valgt self.Caption fremfor det listitem man vil sætte.
procedure TformBrugere.UpdateListView; var I: integer; ListItem: TListItem; UI: TUserInfo; // Gætter her... begin with dmData.IBSecurityService do begin Active := true; // Den her kan fejle, så den skal først lvBrugere.Items.BeginUpdate; // Den her fejler aldrig så den kommer sidst try lvBrugere.Items.Clear; DisplayUsers; for i := 0 to UserInfoCount -1 do begin UI := UserInfo[i]; ListItem := lvBrugere.Items.Add; ListItem.Caption := UI.UserName; ListItem.SubItems.Add(UI.FirstName + ' ' + UI.MiddleName + ' ' + UI.LastName); ListItem.SubItems.Add(IntToStr(UI.UserID)); ListItem.SubItems.Add(IntToStr(UI.GroupID)); end; finally lvBrugere.Items.EndUpdate; Active := false; end; end; end;
Nu kan du i alt fald debugge og få værdierne listet. Det er den største ulempe med "with" at man ikke bare kan holde markøren over eksempelvis UserName og se hvad den indeholder. Holder man den over UI.UserName kan man.
Har du oprettet kolonner i listview'et og sat det til "Report"?
tjaa, joe, nu du nøder mig. Gad vide om den er smuttet for Eksperten for jeg er ret sikker jeg lagde et svar. Der sker vist en ajourkørsel omkring midnat og så mener jeg at have oplevet at den æder indlæggene.
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.