AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi [IB/FB] Computername ermitteln

[IB/FB] Computername ermitteln

Ein Thema von Hansa · begonnen am 17. Mär 2006 · letzter Beitrag vom 27. Mär 2006
Antwort Antwort
Seite 2 von 3     12 3   
Benutzerbild von mschaefer
mschaefer

Registriert seit: 4. Feb 2003
Ort: Hannover
2.032 Beiträge
 
Delphi 12 Athens
 
#11

Re: [IB/FB] Computername ermitteln

  Alt 24. Mär 2006, 21:09
Moin, Spätmoin,

also ein interesantes Thema habt Ihr! Die Windows-Computernamen sind allerdings nicht notwendigerweise eindeutig. Müßte es nicht letzlich die MAC-Adresse sein, die eingetragen werden soll?

Grüße in die DB-Runde // Martin


PS Was ist der Hintergrund? Soll jetz nur festgehalten werden, wer den Datensatz angelegt hat oder wer ihn im Bearbeitungsmenue stehen hat (aktuell gesperrt)?
Martin Schaefer
  Mit Zitat antworten Zitat
Hansa

Registriert seit: 9. Jun 2002
Ort: Saarland
7.554 Beiträge
 
Delphi 8 Professional
 
#12

Re: [IB/FB] Computername ermitteln

  Alt 24. Mär 2006, 22:31
Moin Martin,

MAC-Adresse ändert ja nichts am Problem. Der Datenbank muß mitgeteilt werden, wer ein Insert/Update gemacht hat. Kann natürlich jetzt nur für mich sprechen : jede Tabelle hat ein Feld "angelegt" und "LetzteAenderung". Das verwalten die Trigger automatisch. Hierbei habe ich überlegt, wenn schon dann gleich den Computernamen auch noch mitzuschleppen. Am besten wäre es IMHO mit einer Zeile mehr in den Triggern. Inwieweit man das ausdehnt ist eine andere Sache. Z.B. könnte man ALLE Änderungen chronologisch in Hilfstabellen abspeichern, sofern jemand das Handwerk zu legen ist ! 8) Ohne Computername wäre so was aber nur schwer zu lokalisieren. Nächster Einsatzzweck wären DAUs, die selbstverständlich keinen Unfug treiben. Auch um eigene Fehler im Programm zu finden kann so was im Zweifelsfall helfen.
Gruß
Hansa
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.858 Beiträge
 
Delphi 11 Alexandria
 
#13

Re: [IB/FB] Computername ermitteln

  Alt 25. Mär 2006, 07:00
Moin Hansa,

du könntest auch eine Login-Tabelle anlegen, an der sich das Programm im AfterOpen der Connection anmeldet und hier den eigenen Computername/MAC-Adresse o.ä. mitteilt. Durch einen Trigger könntest du diesem Computernamen die Connection_id der DB zuordnen (Kontext CURRENT_CONNECTION).
In den Triggern der anderen Tabellen könntest du dann durch Trgger den Computernamen übernehmen. Diese Lösung ist zwar nicht ganz sauber, könnte aber funktionieren.
Markus Kinzler
  Mit Zitat antworten Zitat
Benutzerbild von Jelly
Jelly

Registriert seit: 11. Apr 2003
Ort: Moestroff (Luxemburg)
3.741 Beiträge
 
Delphi 2007 Professional
 
#14

Re: [IB/FB] Computername ermitteln

  Alt 25. Mär 2006, 11:21
Wie wird denn in die DB eingeloggt. Hat da jeder User ein in Firebird definiertes Konto... Damit kannst du sicherlich auf Serverseite was anfangen, indem du jeweils diesen Firebirdusernamen in deine Tabellen schreibts (bzw. einen Verweis)
  Mit Zitat antworten Zitat
raiguen
(Gast)

n/a Beiträge
 
#15

Re: [IB/FB] Computername ermitteln

  Alt 26. Mär 2006, 17:27
Moin )

Wenn ich mal folgende Überlegung(en) einwerfen darf:
laut hansa geht es ja darum, welcher hochintelligente User einen Datensatz in der DB angelegt bzw verändert hat. Da nützt der Comuptername als solches wenig, weil damit ja noch nicht eindeutig klar ist, welcher User am Computer arbeitet und Modifikationen in der DB vornimmt.

Es gibt da zwei schöne Funktionen:
1. WNetGetUser --> gibt den Namen des im Netzwerk angemeldeten Users,sofern im selbigen eingeloggt; ansonsten den Benutzernamen am Computer.
2. GetUserName --> gibt den Namen des aktuell am Computer bzw im Windows angemeldeten BEnutzers.

Zur eindeutigen Identifizierung des Benutzers, welcher da was in der DB gemacht hat, müssten dann alle drei Informationen ComputerName,UserName,NetzLoginName - z.b. zusammengefasst in einem String - abgespeichert werden...

Delphi-Quellcode:
function NetzLoginName: String;
var
  size: Cardinal;
begin
  Size := 0;
  WNetGetUser(nil,nil,size);
  SetLength(RESULT,Size);
  if WNetGetUser(nil,PChar(RESULT), Size) > 0
    then Result := '';
end;

function ComputerName: PChar; //--Code vom marabu
var
  buf: array [Byte]of Char;
  size: Cardinal;
begin
  size := SizeOf(buf);
  if GetComputerName(@buf, size)
    then Result := @buf[0]
    else Result := nil;
end;

function UserName: PChar; //--o.a. Code vom marabu angepasst
var
  buf: array [Byte] of Char;
  size: Cardinal;
begin
  size := SizeOf(buf);
  if GetUserName(@buf, size)
    then Result := @buf[0]
    else Result := nil;
end;
Ich denke, dass diese Informationen wahrscheiblich nicht über einen Trigger in der DB erhältlich sind, aber mit Sicherheit im OnCreate der Hauptform...
  Mit Zitat antworten Zitat
Benutzerbild von Jelly
Jelly

Registriert seit: 11. Apr 2003
Ort: Moestroff (Luxemburg)
3.741 Beiträge
 
Delphi 2007 Professional
 
#16

Re: [IB/FB] Computername ermitteln

  Alt 26. Mär 2006, 17:55
Zitat von raiguen:
Ich denke, dass diese Informationen wahrscheiblich nicht über einen Trigger in der DB erhältlich sind, aber mit Sicherheit im OnCreate der Hauptform...
Ich denke aber, dass es eben genau darum geht, diese Informationen im Trigger zu lösen, da es mit deiner Methode nur mit deinem Programm funktioniert, nicht aber wenn über ein DB Tool an den Daten rumgefuscht wird.
  Mit Zitat antworten Zitat
Benutzerbild von mschaefer
mschaefer

Registriert seit: 4. Feb 2003
Ort: Hannover
2.032 Beiträge
 
Delphi 12 Athens
 
#17

Re: [IB/FB] Computername ermitteln

  Alt 26. Mär 2006, 19:03
Also Ihr habt da beide irgendwie recht,
denn einerseits hat Hansa auf den DAU verwiesen andererseits auf den Trigger .


THEMA: Rechnerkennung
Ok die IP-Eintragen geht wohl ohne Probleme im Trigger. Ob man jetzt per UDF noch weiteree Daten Computername MAC-Adresse einfügen sollte, da bin ich der Auffassung: Lasst es! Genau in dem Moment, wo LAN-Verkehr durch das DBMS da ist, fängt plötlich eine UDF an Netzwerkabfragen durchzuführen. Da ist der Ansatz das per eigenem Programm gleich mitzusenden irgendwie Netzwerksparender und was den Nutzer angeht auch Informativer. Tja ob beide Ansätze zu kombinieren sind...


THEMA: Eingabestatus
In dem Zusammenhang habe ich meistens das Problem, dass ein Rechner in der Eingabemaske steht und dann sollte bei den anderen Rechnern in der ÜBersichtsliste markiert sein, dass dieser Datensatz bearbeitet wird. Sowas scheint mir am besten hier in einem Aufwasch mit zu erledigen zu sein.


THEAM: Versionsrekonsturktion
Das Rückgängigmachen oder das Speichern von alten Eingabeständen kann eigentlich sinnig nur im DBMS gelöst werden, denn bei jedem Update oder Insert müßte der Datensatz mit Zeitstemple in einer Backuptabelle gespeichert werden. Das habe ich bisher mit FB noch nirgends gesehen (könnte natürlich trotzdem gehen).


Grüße in die DB-Profi-Runde // Martin
Martin Schaefer
  Mit Zitat antworten Zitat
Hansa

Registriert seit: 9. Jun 2002
Ort: Saarland
7.554 Beiträge
 
Delphi 8 Professional
 
#18

Re: [IB/FB] Computername ermitteln

  Alt 26. Mär 2006, 21:13
Jetzt mal langsam. Es geht hauptsächlich um das Prinzip, wie so etwas am Besten zu machen ist. Vom Programm aus irgendein Tabellen-Feld zu setzen ist kein Problem. Den Computernamen usw. auszulesen auch nicht. Natürlich kann ich das von Hand bzw. vom Programm aus erledigen. Wenns keiner verstehen soll, sagt man besser "der Client" soll das machen. Soweit so gut. Wie manipuliere ich nun Datenbestände ? 1. DB-Tool : wenn man sieht, daß sogar hier einige nicht wissen was das ist, dann kann man das außen vor lassen. 2. Programm (könnte auch fremdgeschriebenes sein !) : noch unwahrscheinlicher. 3. das eigene Programm, so wie es auch vorgesehen ist wird bewußt zweckentfremdet/falsch bedient.

Nun speichere ich im Programm normalerweise per SP. An einigen Stellen allerdings auch mit Post etc. An all diesen Stellen müßte man Hand anlegen. Sollte das nötig werden, dann wäre ausnahmsweise eine globale Variable wohl am besten : beim Programmstart alles nötige ermitteln und damit später die Felder besetzen, ohne daß jedesmal alles neu deklariert / ermittelt werden muß, Parameter und blabla. Keine Frage, daß das so geht. Wenn schon, dann aber nicht im FormCreate, sondern im DataModuleCreate. Meine Idee war ja, daß das im Trigger gemacht werden soll, also egal wie ein insert/update zustande kommt.

Dann noch Marabus Vorschlag. Dank diesem war ein kurzer Exkurs zu den UDFs nötig. Union hats ja direkt gesehen : geht so nicht. Ich habe es durchexerziert, allerdings einfach mit GetComputerName. Die UDF ermittelt einwandfrei den Computernamen und speichert ihn auch per Trigger automatisch ab. Allerdings von dem Computer, auf dem die DB und somit die UDF liegt, also vom Server. 8) Dann noch ClientAdress. FB 2 Beta ? Hmm, etwas zu früh. Allerdings habe ich gesehen, daß es da SetConText??? und GetContext??? gibt. Eventuell wäre das genau das Gesuchte. Werde deshalb eventuell 2 vorläufuge Dummy-Felder Computername und Username in alle Tabellen einbauen.

Zur Problematik an sich : es geht um diverse Sachen, konkret tatsächlich um einen 3/4 Computer-DAU, der Fehler nie zugibt und einen Normaluser. Beide sind allerdings in puncto Geld/Lager absolut nicht als DAUs zu bezeichnen. 8)
Gruß
Hansa
  Mit Zitat antworten Zitat
Benutzerbild von Jelly
Jelly

Registriert seit: 11. Apr 2003
Ort: Moestroff (Luxemburg)
3.741 Beiträge
 
Delphi 2007 Professional
 
#19

Re: [IB/FB] Computername ermitteln

  Alt 27. Mär 2006, 00:03
Zitat von Hansa:
1. DB-Tool : wenn man sieht, daß sogar hier einige nicht wissen was das ist, dann kann man das außen vor lassen. 2. Programm (könnte auch fremdgeschriebenes sein !) : noch unwahrscheinlicher. 3. das eigene Programm, so wie es auch vorgesehen ist wird bewußt zweckentfremdet/falsch bedient.
Daraus les ich, dass Punkt 3 Dich betrifft. Somit kannst Du also das Ganze am Client lösen, oder ?
  Mit Zitat antworten Zitat
Hansa

Registriert seit: 9. Jun 2002
Ort: Saarland
7.554 Beiträge
 
Delphi 8 Professional
 
#20

Re: [IB/FB] Computername ermitteln

  Alt 27. Mär 2006, 01:15
Jelly, das geht natürlich. Ist aber nicht das Thema. Deshalb steht es auch bei Datenbanken. Es geht nicht alleine nur um "Computername ermitteln". Es geht darum, diese Funktionalität direkt in der DB zu haben. Meinen "Fall" habe ich zwar im Griff, aber schön wäre es, das zu verallgemeinern und unabhängig vom Programm zu machen. Vielleicht gehts ja auch ganz anders ? Datenbanken zeichnen sich manchmal dadurch aus, daß vermeintlich "Unmögliches" mit einem ganz simplen Trick gemacht werden kann, auf den man selber gar nicht kommt.
Gruß
Hansa
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 05:52 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