Nachdem alle Clients in einer ListBox aufgelistet werden, sollen nun ein paar Daten des Clients aus der Datenbank geladen und angezeigt werden, welcher in der ListBox markiert wird. Die zu ladenden Daten werden hier nun auf die Computerdomain, die Computerbeschreibung, die IP Adresse, die MAC Adresse, den Betriebssystemnamen, die Betriebssystemversion und das aktuelle ServiePack festgelegt.
Für die genannten Daten fügen Sie für jeden Datensatz ein Label und ein Edit-Feld auf der Form ein. Die Label benennen Sie entsprechend dem Datensatz der in dem zugehörigen Edit-Feld angezeigt werden soll. Geben Sie den Edit-Feldern ebenfalls sprechende Namen über den Object Inspector, über welche die Felder angesprochen werden können. Im Beispiel sind dies die Namen EditDomain, EditBeschreibung, EditIP, EditMAC, EditOS, EditVersion und EditSP.
Damit die soeben erstellten Komponenten mit den Daten eines in der ListBox markierten Clients gefüllt werden können, muss die ListBox angepasst werden. Um die ListBox anzupassen, klicken Sie diese an und wählen Sie den Tab Events im Object Inspector an. Dort führen Sie einen Doppelklick auf das Leerfeld neben dem Event OnClick aus. Dadurch wird automatisch die Funktion ListBox1Click() im Quellcode erstellt, welche automatisch aufgerufen wird, sobald Sie einen Client in der ListBox markieren.
Hinzufügen weiterer Elemente um Details anzeigen zu können
Zunächst deklarieren Sie nun die Variablen LSqlID, LSqlPC und LSqlOS als String sowie LID, LPC und LOS als TStringList. Weiterhin werden die Strings pc und os und der integer pos benötigt. Anschließend müssen Sie die Variablen LID, LPC und LOS mit TStringList.Create initialisiert werden.
In einem try/finally-Block werden nun die Daten des markierten Clients ausgelesen. Dazu wird die Variable LSqlID mit einem SQL-Statement gesetzt, welches die ClientID aus der Datenbank ausliest. Die ClientID wird hier über den Clientnamen des markierten Clients identifiziert. Der aktuell markierte Clientname lässt sich über listBox1.items.strings[listBox1.ItemIndex] herausfinden.
Nachdem das SQL-Statement LSqlID über sqlquery ausgeführt wurde, befindet sich das Ergebnis in der TStringList-Variablen LID. Da sich das Ergebnis aber wieder im Format Spaltenname=Wert befindet, wird der eigentliche Wert mit Hilfe eines Copy ausgelesen und anschließend wieder in der gleichen Variablen gespeichert.
Da die ClientID des markierten Clients nun bekannt ist, können die Variablen LSqlPC und LSqlOS mit jeweils einem SQL-Statement versehen werden. Dabei liest das SQL-Statement der Variablen LSqlPC die Daten Domain, Beschreibung, IP Adresse und MAC Adresse aus der Datenbanktabelle CLT_CLIENTS. Das SQL-Statement der Variablen LSqlOS hingegen liest die Werte Betriebssystem, Version und ServicePack aus der Datenbanktabelle CLT_OPERATINGSYSTEM aus. Über die Where-Klausel in Verbindung mit der soeben ausgelesenen ClientID werden nur die Daten eines einzelnen Clients ausgelesen.
Die Ergebnisse der sqlquery-Abfragen mit den Variablen LSqlPC und LSqlOS befinden sich in den Variablen LPC und LOS. Damit die Ergebnisse weiterverarbeitet und korrekt angezeigt werden können, werden die Ergebnisstrings in den entsprechenden Variablen pc bzw. os gespeichert.
Die Ergebnisse liegen jetzt in dem Format Spaltenname=Wert,Spaltenname=Wert,[…] vor. Diese Ergebnisse werden nun von vorne nach hinten mit Delete-, Pos- und Copy-Funktionen zerteilt. Dadurch können die eigentlichen Werte aus dem Ergebnis herauskopiert und mit EditX.Text direkt in das entsprechende Edit-Feld geschrieben werden. Dies wird zunächst für die Variable pc und anschließend für die Variable os durchgeführt.
Zuletzt sollten Sie Ressourcen der Variablen LID, LPC und LOS mit .Free wieder freigeben.
Wenn Sie die Form nun starten und einen Client markieren, sollten seine Werte angezeigt werden.
procedure ListBox1Click(Sender: TObject);
var
LSqlID, LSqlPC, LSqlOS: String;
LID, LPC, LOS: TStringList;
pc, os : String;
pos: integer;
begin
LID := TStringList.Create;
LPC := TStringList.Create;
LOS := TStringList.Create;
try
LSqlID := 'Select CLIENTID from CLT_CLIENTS_Table WHERE COMPUTERNAME='''
+ listBox1.items.strings[listBox1.ItemIndex] + '''';
SqlQuery(LSqlID, '', '', LID, true);
if (LID.Count > 0) then
begin
LID.strings[0] := Copy(LID.strings[0], 10, Length(LID.strings[0]));
LSqlPC := 'Select COMPUTERDOMAIN, COMPUTERDESCRIPTION, PRIMARYIP, MACADDRESS'
+ ' From CLT_CLIENTS_Table Where CLIENTID=' + quotedstr(LID.strings[0]);
LSqlOS := 'Select OSSTRING, PRODUCTTYPE, SERVICEPACK From CLT_OPERATINGSYSTEM'
+ ' Where CLIENTID=' + quotedstr(LID.strings[0]);
SqlQuery(LSqlPC, '', '', LPC, true);
pc := LPC.strings[0];
SqlQuery(LSqlOS, '', '', LOS, true);
os := LOS.Strings[0];
Delete(pc, 1, 15); pos := Pos(',', pc);
EditDomain.Text := Copy(pc, 0, pos-1);
pos := Pos('=', pc);
Delete(pc, 1, pos);
pos := Pos(',', pc);
EditBeschreibung.Text := Copy(pc, 0, pos-1);
pos := Pos('=', pc);
Delete(pc, 1, pos);
pos := Pos(',', pc);
EditIP.Text := Copy(pc, 0, pos-1);
pos := Pos('=', pc);
Delete(pc, 1, pos);
EditMAC.Text := Copy(pc, 0, Length(pc));
Delete(os, 1, 9);
pos := Pos(',', os);
EditOS.Text := Copy(os, 0, pos-1);
pos := Pos('=', os);
Delete(os, 1, pos);
pos := Pos(',', os);
EditVersion.Text := Copy(os, 0, pos-1);
pos := Pos('=', os);
Delete(os, 1, pos);
EditSP.Text := Copy(os, 0, Length(os));
end;
finally
LID.Free;
LPC.Free;
LOS.Free;
end;
end;
Zuletzt bearbeitet am 07.03.2017