Avatar billede skindbeni Nybegynder
24. oktober 2007 - 20:11 Der 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;

Men intet sker - jeg mangler nok noget.
Avatar billede hrc Mester
01. november 2007 - 23:32 #1
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"?
Avatar billede skindbeni Nybegynder
21. november 2007 - 22:49 #2
Hej hrc.

Tilbage fra efterårsferie kan jeg se, at du har svaret på mit spørgsmål. Ovenstående hjalp mig. Jeg skylder dig 60 points.
Avatar billede hrc Mester
29. november 2007 - 22:10 #3
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.
Avatar billede skindbeni Nybegynder
30. november 2007 - 07:45 #4
Bare i orden - og god weekend
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
Kurser inden for grundlæggende programmering

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