Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   StringGrid einträge speichern (https://www.delphipraxis.net/184333-stringgrid-eintraege-speichern.html)

Rippo 18. Mär 2015 13:36

StringGrid einträge speichern
 
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo

ich habe eine ini datei die so aussieht

[Benutzer]
Admin=a

[Zugang]
Admin=1,2,3,4

Admin ist der Benutzername und das a ist sein Passwort
beim zugang sind die zahlen dazu da um berechtigung zu setzten

jetzt möchte ich die einträge aus meinem stringgrid in die ini datei laden.

die einträge bei Benutzername und Passwort sollen in die Section [Benutzername]
Benutzername, Kunde,Lieferant,personal und Verwaltung sollen in die Section [Zugang]

Delphi-Quellcode:
procedure TfrmBenutzerverwaltung.btnSpeichernClick(Sender: TObject);
var
  Zeile, Spalte : integer;
  Titel: string;
  Ini: TIniFile;
Begin
 SaveToStringGrid(edtName.Text,edtPasswort.Text,edtKunde.Text,edtLieferant.Text,edtPersonal.Text,edtVerwaltung.Text);

 Ini := TIniFile.Create('C:\Users\Verwaltung.ini');
 try
  // Lösche Alle Sectionen aus der Ini Datei
  DeleteAllSections(ini);

  // Speicher alle Zeilen
  for Zeile := StringGridVerwaltung.FixedRows to StringGridVerwaltung.RowCount - 1 do
  Begin
    // je Kunde
    for Spalte := StringGridVerwaltung.FixedCols to StringGridVerwaltung.ColCount - 1 do
    begin
      // Kundendetails
      Titel := StringGridVerwaltung.Cells[Spalte, 0];
      Ini.WriteString('BenutzerName' + IntToStr(Zeile), Titel, StringGridVerwaltung.Cells[Spalte, Zeile]);
    end;

  End;
 finally
  Ini.Free;
 end;
end;


wir müss ich es so umsetzten das ich die einträge in die richtige section setzte?

puderle 18. Mär 2015 13:52

AW: StringGrid einträge speichern
 
ich würde wohl 2 TStringList -en machen. (TStringList.Create) für jede Section eine

mit TStringList.Add(str) an jeweils eine der Listen die Daten anfügen.
(d.h. ordne die Daten bevor du in die ini schreibst.. nicht erst beim Write ;))

http://www.delphibasics.co.uk/RTL.asp?Name=TStringList

Dann beide nacheinander in die ini schreiben. Du kannst auch Delimiter verwenden (,, ;, ., #, /, |, usw.)

so wie du es versuchst müsstest du andauernd durch die ini zwitschern um die richtigen Zeilen zu finden. Der "Umweg" über 2 Stringlisten könnte dein Problem lösen.

Hoffe das hilft dir weiter.

gg hfhf


PS: Die Passwörter speicherst du hoffentlich nicht so in der ini! :D der Trick dabei ist, nur die "verschlüsselten" PWDs zu speichern (Google: SHA1-Hash). Bei jeder Abfrage wird "das eingegebene Passwort verschlüsselt und mit dem verschlüsselten Wert in der DB/Liste verglichen". Sind die gleich, war auch das Passwort richtig :D. so speicherst du niemals Passwörter in Textform sondern nur verschlüsselte Werte ;) vielleicht wusstest du das.. aber vielleicht hilft es dir auch :D"

http://helmbold.de/artikel/passwoerter-sicher-speichern

DeddyH 18. Mär 2015 14:02

AW: StringGrid einträge speichern
 
Wenn man schon Benutzerdaten in einer Ini speichert (ein bisschen gruselig ist das ja schon), dann könnte man doch die Benutzernamen als Section verwenden, das macht IMO den Aufbau strukturierter. Das sähe dann so aus:
Code:
[admin]
Passwort=a
Zugang1=1
Zugang2=2
Zugang3=3
Zugang4=4

[Hanswurst]
Passwort=salami
Zugang1=0
Zugang2=0
Zugang3=0
Zugang4=42

Blup 18. Mär 2015 14:23

AW: StringGrid einträge speichern
 
Delphi-Quellcode:
type
  TBenutzer = record
    Name: string;
    Kennwort: string;
    Rechte: string;
  end;

function ReadFromGrid(AZeile: Integer): TBenutzer;
const
  SpalteBenutzer = 1;
  SpalteKennwort = 2;
  SpalteRechteVon = 3;
  SpalteRechteBis = 6;
var
  Spalte: Integer;
  Recht: string;
begin
  Result.Name := StringGridVerwaltung.Cells[SpalteBenutzer, AZeile];
  Result.Kennwort := StringGridVerwaltung.Cells[SpalteKennwort, AZeile];
  Result.Rechte := '';
  for Spalte := SpalteRechteVon to SpalteRechteBis do
  begin
    Recht := StringGridVerwaltung.Cells[Spalte, AZeile];
    if Recht <> '' then
    begin
      if Result.Rechte <> '' then
        Result.Rechte := Result.Rechte + ',';
      Result.Rechte := Result.Rechte + Recht;
    end;
  end;
end;

procedure SaveToIni(AIni: TIniFile; const ABenutzer: TBenutzer);
const
  SectionBenutzer = 'Benutzer';
  SectionZugang = 'Zugang';
begin
  AIni.WriteString(SectionBenutzer, ABenutzer.Name, ABenutzer.Kennwort);
  AIni.WriteString(SectionZugang, ABenutzer.Name, ABenutzer.Rechte);
end;

// je Kunde
Benutzer := ReadFromGrid(Zeile);
SaveToIni(Ini, Benutzer);

Sir Rufo 18. Mär 2015 20:46

AW: StringGrid einträge speichern
 
Es macht erheblich mehr Sinn die Daten so in der INI-Datei abzulegen:
Code:
[User\Admin]
Password=...
Permission=...
[User\Foo]
Password=...
Permission=...
Eine INI-Datei kann eben auch SubSections und Delphi-Referenz durchsuchenTIniFile unterstützt das auch.

Dejan Vu 19. Mär 2015 03:33

AW: StringGrid einträge speichern
 
Beim augenblicklichen Funktionsumfang und dem eigentlichen Sinn einer INI-Datei macht das imho keinen Sinn bzw. bringt keinen Mehrwert. Davon abgesehen, das man Kennwörter eh nicht in einer INI-Datei ablegen sollte, finde ich die Einführung von Subsections insofern kontraproduktiv, als das diese einladen, noch mehr Mumpitz in einer INI abzulegen.

Aber übersichtlicher und selbsterklärend ist dein Vorschlag es allemal, da er die INI-Datei lesbarer macht.

DP-Maintenance 24. Apr 2015 06:22

Dieses Thema wurde am "24. Apr 2015, 07:22 Uhr" von "r_kerber" aus dem Forum "Neuen Beitrag zur Code-Library hinzufügen" in das Forum "Win32/Win64 API (native code)" verschoben.


Alle Zeitangaben in WEZ +1. Es ist jetzt 10:46 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz