[gelöst] Letzte Anmeldung der User / SQL 5Zeilen

19. April 2007 11:15

Hallo,

habe mir in SQL ein kleine Auswertung erstellt - liefert die letzte Anmeldung eines Users

Select
"User ID",
max(Date) as "Last Logon Date"
from
"MandantXY$User Time Register"
Group by "User Id"

Dies schaff' ich auch recht leicht mit einem Bericht - kann dann jedoch nichts mit Copy-Paste ins Excel kopieren. Eventuell als HTML speichern.
Dataport oder Form mit einer temp-Tabelle wäre auch eine Lösung.

Wie schreibt man diese Abfrage, so dass man das Ergebnis mit Copy-Paste koperen kann mit möglichst wenig Code?

Bin schon gespannt auf eure Vorschläge

btw:
Am besten überhaupt wäre wenn man im CAL SQL verwenden könnte - manche Abfragen dauern mit SQL 2-3 sec. in CAL 2 min (!) - hier wäre ein ADD-In ein Hit
Zuletzt geändert von Juergen_G am 20. April 2007 09:06, insgesamt 1-mal geändert.

19. April 2007 12:39

Hi Jürgen!

Nun, um sich "echtes" SQL in NAV nutzbar zu machen, gäbe es schon ein paar Wege ...

Zunächst die "User Time Register" Abfrage: Tja, blöderweise werden die Spaltenüberschriften in SQL nicht in die Zwischenablage kopiert. Am einfachsten wäre es wohl hier, das Ergebnis nicht im Raster, sondern als Text oder in Datei auszugeben.

Ansonsten könnte man auf Basis dieser Abfrage einen "View" erstellen und diesen als "Linked Object/Table" direkt in NAV einbinden.

Darüber hinaus könnte man die Abfrage aus NAV heraus via MSADO (als Automation Server) an den SQL Server schicken und das Ergebnis wieder weiter in C/AL verarbeiten.
Dieses "Add In" gibt es also schon :idea:
Im "NAV SQL Server Option Resource Kit" kann man sehen wie's geht!

19. April 2007 12:57

Hallo Jörg - erstmal Danke für deine rasche Antwort.

zum Vorschlag "Linked Object/Table" nun dann würde man eine eigene Tabelle benötigen - Linzenzkosten von ca 65€ - finde ich persönlich etwas zu viel für eine einfache Abfrage - aber gut das es dieses Möglichkeit gibt, man kann so einfach externe Daten ins System holen.

MSADO ist für mich neu - werde ich mir ansehen.

19. April 2007 18:32

Ja, das mit den "Linked Tables" und "Views" macht erst dort richtig Sinn, wenn man z.B. Daten aus anderen Systemen/Datenbanken einbinden will, oder wenn der View auf komplexere Abfragen basiert.

Hier noch ein Beispiel zur Verwendung von MS ADO:

Code:
IF ISCLEAR(ADOConnection) THEN
  CREATE(ADOConnection);
ConnectionString := 'Server=' + <Server_Name>;

IF <Trusted> THEN
  // Windows Authentication
   ConnectionString += ';Trusted_Connection=Yes;'
ELSE
  // Database Authentication
  ConnectionString += ';Trusted_Connection=no;UID=' + <User_ID> + ';pwd=' + <Passwd> + ';'

CursorLocation := 3;  // Client Site

ADOConnection.Provider('SQLOLEDB');
ADOConnection.CursorLocation(CursorLocation);
ADOConnection.ConnectionString(ConnectionString);
ADOConnection.Open;

RecordsAffected := 0;
Options := 1;  // Textual Definition

IF ADOConnection.State = 1 THEN BEGIN  // connected
  ADOConnection.DefaultDatabase(<Database_Name>);
  ADOConnection.CommandTimeout(0); // Timeout set to indefinitely
  ADORecSet := ADOConnection.Execute(<Statement>, RecordsAffected, Options);
  ADOErrors := ADOConnection.Errors();
END;

ADOConnection.Close;

20. April 2007 09:06

Danke für das Codebeispiel