ADS: sp_mgGetConnectedUsers u.a. auch ohne DD?

Zugriff, Engines, Konvertierung. Von ADS über DBF bis zu SQL.

Moderator: Moderatoren

Antworten
Benutzeravatar
Tom
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 9367
Registriert: Do, 22. Sep 2005 23:11
Wohnort: Berlin
Hat sich bedankt: 102 Mal
Danksagung erhalten: 361 Mal
Kontaktdaten:

ADS: sp_mgGetConnectedUsers u.a. auch ohne DD?

Beitrag von Tom »

Ich will die erweiterten Infos nutzen, die die hauseigene Stored Procedure "sp_mgGetConnectedUsers" liefert, arbeite aber nicht mit einem Data Dictionary. Geht das?
Herzlich,
Tom
Benutzeravatar
Marcus Herz
1000 working lines a day
1000 working lines a day
Beiträge: 852
Registriert: Mo, 16. Jan 2006 8:13
Wohnort: Allgäu
Hat sich bedankt: 39 Mal
Danksagung erhalten: 192 Mal
Kontaktdaten:

Re: ADS: sp_mgGetConnectedUsers u.a. auch ohne DD?

Beitrag von Marcus Herz »

Ja
Gruß Marcus

Erkenne, was du findest, dann weißt du, wonach du gesucht hast
Benutzeravatar
Tom
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 9367
Registriert: Do, 22. Sep 2005 23:11
Wohnort: Berlin
Hat sich bedankt: 102 Mal
Danksagung erhalten: 361 Mal
Kontaktdaten:

Re: ADS: sp_mgGetConnectedUsers u.a. auch ohne DD?

Beitrag von Tom »

Du hast dafür nicht zufällig ein Beispiel zur Hand? :wink:
Herzlich,
Tom
Benutzeravatar
Marcus Herz
1000 working lines a day
1000 working lines a day
Beiträge: 852
Registriert: Mo, 16. Jan 2006 8:13
Wohnort: Allgäu
Hat sich bedankt: 39 Mal
Danksagung erhalten: 192 Mal
Kontaktdaten:

Re: ADS: sp_mgGetConnectedUsers u.a. auch ohne DD?

Beitrag von Marcus Herz »

Code: Alles auswählen

Execute Procedere sp_mggetconnectedusers();
oder wo liegt dein Problem?
Das gibt dir einen cursor auf eine Tabelle zurück.
Das sollte auch mit der adsdbe funktionieren
Gruß Marcus

Erkenne, was du findest, dann weißt du, wonach du gesucht hast
Benutzeravatar
Tom
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 9367
Registriert: Do, 22. Sep 2005 23:11
Wohnort: Berlin
Hat sich bedankt: 102 Mal
Danksagung erhalten: 361 Mal
Kontaktdaten:

Re: ADS: sp_mgGetConnectedUsers u.a. auch ohne DD?

Beitrag von Tom »

oder wo liegt dein Problem?
Ich habe und hatte das auf allen möglichen Wegen versucht, aber es läuft immerzu auf einen Fehler, eigenartigerweise bei "DbUseArea". Ich habe das als SQL-Kommando, über USQL und zuletzt so versucht:

Code: Alles auswählen

a := SqlExecSp("sp_mggetconnectedusers()",oSession,,.F.) // oSession ist die DAC-Session mit dem ADS


Es ist immer dasselbe: Ich bekomme einen 8999 (DbUseArea) in SQLEXECSP(158) (das ist die Funktion, auf die das Kommando EXECSP zeigt).
Herzlich,
Tom
Benutzeravatar
Marcus Herz
1000 working lines a day
1000 working lines a day
Beiträge: 852
Registriert: Mo, 16. Jan 2006 8:13
Wohnort: Allgäu
Hat sich bedankt: 39 Mal
Danksagung erhalten: 192 Mal
Kontaktdaten:

Re: ADS: sp_mgGetConnectedUsers u.a. auch ohne DD?

Beitrag von Marcus Herz »

ich schau mir das morgen mal m Büro an. Kann sein, ADSDBE untestützt das nicht. Aber damit kenne ich mich nicht mehr aus.
Gruß Marcus

Erkenne, was du findest, dann weißt du, wonach du gesucht hast
Benutzeravatar
Marcus Herz
1000 working lines a day
1000 working lines a day
Beiträge: 852
Registriert: Mo, 16. Jan 2006 8:13
Wohnort: Allgäu
Hat sich bedankt: 39 Mal
Danksagung erhalten: 192 Mal
Kontaktdaten:

Re: ADS: sp_mgGetConnectedUsers u.a. auch ohne DD?

Beitrag von Marcus Herz »

hast du mal:

Code: Alles auswählen

a := SqlExecSp("execute procedure sp_mggetconnectedusers()",oSession,,.F.) // oSession ist die DAC-Session mit dem ADS
probiert. Wenn auch nicht, verusuch mal:

Code: Alles auswählen

a := SqlExecSp("select * from ( execute procedure sp_mggetconnectedusers())",oSession,,.F.) // oSession ist die DAC-Session mit dem ADS
Das muss funktionieren
Gruß Marcus

Erkenne, was du findest, dann weißt du, wonach du gesucht hast
Benutzeravatar
nightcrawler
1000 working lines a day
1000 working lines a day
Beiträge: 651
Registriert: Di, 24. Apr 2012 16:33
Wohnort: 72184 Weitingen
Hat sich bedankt: 3 Mal
Danksagung erhalten: 96 Mal
Kontaktdaten:

Re: ADS: sp_mgGetConnectedUsers u.a. auch ohne DD?

Beitrag von nightcrawler »

Tom hat geschrieben: So, 12. Nov 2023 14:50

Code: Alles auswählen

a := SqlExecSp("sp_mggetconnectedusers()",oSession,,.F.) // oSession ist die DAC-Session mit dem ADS
wie Markus geschrieben hat: ein "execute procedure" davor. ADS kennt die Microsoft-Abkürzung nicht.
--
Joachim
Joachim Dürr Softwareengineering
https://www.jd-engineering.de
Benutzeravatar
Tom
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 9367
Registriert: Do, 22. Sep 2005 23:11
Wohnort: Berlin
Hat sich bedankt: 102 Mal
Danksagung erhalten: 361 Mal
Kontaktdaten:

Re: ADS: sp_mgGetConnectedUsers u.a. auch ohne DD?

Beitrag von Tom »

Das funktioniert beides nicht, und vor allem bei der Variante mit "SELECT * FROM" hätte mich das auch gewundert, denn SqlExecSp() ist ja explizit (daher auch der Name) für das Ausführen einer Stored Procedure gedacht, nicht für die handelsüblichen SQL-Statements wie SELECT, INSERT, UPDATE usw.

Aber ganz egal, welche Syntax ich im Statement selbst verwende, ich erhalte immer diesen Fehler, und zwar in der Xbase++-Funktion "SqlExecSp()":
adsuser.png
adsuser.png (16.93 KiB) 1530 mal betrachtet
Und, wie gesagt - ich verwende kein Data Dictionary. Ich habe nur eine ganz normale DAC-Session mit dem ADS, und nutze ansonsten die ADSDBE.
Herzlich,
Tom
Benutzeravatar
Tom
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 9367
Registriert: Do, 22. Sep 2005 23:11
Wohnort: Berlin
Hat sich bedankt: 102 Mal
Danksagung erhalten: 361 Mal
Kontaktdaten:

Re: ADS: sp_mgGetConnectedUsers u.a. auch ohne DD?

Beitrag von Tom »

Dasselbe mit SqlGetResult (Statment "SELECT * FROM ( EXECUTE ..."), wieder ein 8999/DbUseArea, dieses Mal in SqlStmtExec.
Kann das an der ADS-Version liegen? Gibt's da ein Minimum?
Herzlich,
Tom
Benutzeravatar
Tom
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 9367
Registriert: Do, 22. Sep 2005 23:11
Wohnort: Berlin
Hat sich bedankt: 102 Mal
Danksagung erhalten: 361 Mal
Kontaktdaten:

Re: ADS: sp_mgGetConnectedUsers u.a. auch ohne DD?

Beitrag von Tom »

SqlCmd() immerhin erzeugt keinen Fehler, retourniert aber .F.
Herzlich,
Tom
Benutzeravatar
Tom
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 9367
Registriert: Do, 22. Sep 2005 23:11
Wohnort: Berlin
Hat sich bedankt: 102 Mal
Danksagung erhalten: 361 Mal
Kontaktdaten:

Re: ADS: sp_mgGetConnectedUsers u.a. auch ohne DD?

Beitrag von Tom »

Okay, Lösung gefunden. Ich erkläre später, worin sie bestand. Danke!
Herzlich,
Tom
Benutzeravatar
Marcus Herz
1000 working lines a day
1000 working lines a day
Beiträge: 852
Registriert: Mo, 16. Jan 2006 8:13
Wohnort: Allgäu
Hat sich bedankt: 39 Mal
Danksagung erhalten: 192 Mal
Kontaktdaten:

Re: ADS: sp_mgGetConnectedUsers u.a. auch ohne DD?

Beitrag von Marcus Herz »

Komisch, ich fin die Funktion SqlExecSP gar nicht. Auch in keinem Header File oder Doku!?!
Ich habe noch einiges probiert. Alles schlägt fehl. Das ist aber ein Problem der ADSDBE
z.B.

Code: Alles auswählen

   DbeInfo( COMPONENT_DATA , ADSDBE_TBL_MODE, ADSDBE_ADT )
   DbeInfo( COMPONENT_ORDER, ADSDBE_TBL_MODE, ADSDBE_ADT )
   DbeInfo( COMPONENT_DATA, ADSDBE_FREETABLE, .T. )
   oStmt1 := DacSqlStatement(oSession):fromChar("execute procedure sp_mggetconnectedusers()")
   oStmt1:build()
   oStmt1:query(USQL_RESULT_WORKAREA, "SP")
   // oder    
      use ("select * from (execute procedure sp_mggetconnectedusers()) x") alias sp via (oSession)

PS: da haben sich 2 Antworten zeitlich überschnitten
Gruß Marcus

Erkenne, was du findest, dann weißt du, wonach du gesucht hast
Benutzeravatar
Tom
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 9367
Registriert: Do, 22. Sep 2005 23:11
Wohnort: Berlin
Hat sich bedankt: 102 Mal
Danksagung erhalten: 361 Mal
Kontaktdaten:

Re: ADS: sp_mgGetConnectedUsers u.a. auch ohne DD?

Beitrag von Tom »

Hallo, Marcus.

Ich habe die Funktion in der SQLCMD.CH gefunden. Sie wird angesprochen, wenn man das Kommando "EXECSP" verwendet.

Ich versuche noch, herauszufinden, warum es funktioniert. Ich habe schlussendlich eine Funktion verwendet, die Roger Donnay geschrieben und hier auch schon dokumentiert hat. Sie verwendet eine eigene Funktion "DC_AdsSqlStatement()", um mit einem ADS SQL zu quatschen, und diese wiederum verwendet eine eigene Klasse "DC_AdsStatement", die immer zwei Verbindungen zu einem ADS herstellt, eine Standard- und eine Dictionary-Verbindung, ganz unabhängig davon, ob man ein Dictionary verwendet oder nicht. Über DC_AdsSqlStatement lässt sich das EXEC PROC ... absetzen und antwortet mit einem Array von DataObjects. Roger umgeht da wohl einige Schwächen, die noch im USQL bzw. PTSQL stecken.
Herzlich,
Tom
Benutzeravatar
Marcus Herz
1000 working lines a day
1000 working lines a day
Beiträge: 852
Registriert: Mo, 16. Jan 2006 8:13
Wohnort: Allgäu
Hat sich bedankt: 39 Mal
Danksagung erhalten: 192 Mal
Kontaktdaten:

Re: ADS: sp_mgGetConnectedUsers u.a. auch ohne DD?

Beitrag von Marcus Herz »

in der sqlcmd.ch hab ich die auch gefunden, aber da wird am Anfang die odbcdbe.cd includiert. Denke, die Funktion ist wohl eher für diese DBE gedacht.
// Inhalt:
// Kommando-basiertes Nutzen von SQL via ODBCDBE in Xbase++
Gruß Marcus

Erkenne, was du findest, dann weißt du, wonach du gesucht hast
Benutzeravatar
Tom
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 9367
Registriert: Do, 22. Sep 2005 23:11
Wohnort: Berlin
Hat sich bedankt: 102 Mal
Danksagung erhalten: 361 Mal
Kontaktdaten:

Re: ADS: sp_mgGetConnectedUsers u.a. auch ohne DD?

Beitrag von Tom »

Hallo, Marcus.
Denke, die Funktion ist wohl eher für diese DBE gedacht.
Das ist möglich. Beim SQL-Kommando ist es in der Hilfe auch explizit erwähnt, während sich EXECSP bei "Executing Stored Procedures" findet, das auch im ODBC-Kontext steht.

Aber - verwendet Ihr sp_mgGetConnectedUsers irgendwo? Und wenn ja, wie macht Ihr das?
Herzlich,
Tom
Benutzeravatar
Marcus Herz
1000 working lines a day
1000 working lines a day
Beiträge: 852
Registriert: Mo, 16. Jan 2006 8:13
Wohnort: Allgäu
Hat sich bedankt: 39 Mal
Danksagung erhalten: 192 Mal
Kontaktdaten:

enddo

Beitrag von Marcus Herz »

Ich hab ja AdsClass++, das rein auf der API basiert. Da hab ich all die Probleme nicht.
Ich kann das dann so abfragen:

Code: Alles auswählen

dbUser	:= AppDic():OpenSelect("execute procedure sp_mgGetConnectedUsers()")  // Appdic() ist das Connection Objekt
// un dann kann ich darüber skippen
do while !dbUser:eof()

	dbUser:skip()
enddo
dbUser:close()	

Gruß Marcus

Erkenne, was du findest, dann weißt du, wonach du gesucht hast
Benutzeravatar
Tom
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 9367
Registriert: Do, 22. Sep 2005 23:11
Wohnort: Berlin
Hat sich bedankt: 102 Mal
Danksagung erhalten: 361 Mal
Kontaktdaten:

Re: ADS: sp_mgGetConnectedUsers u.a. auch ohne DD?

Beitrag von Tom »

Danke.

So macht Roger das auch.
Herzlich,
Tom
Antworten