ADS Verbindung

Advantage Database Server

Moderator: Moderatoren

Antworten
Benutzeravatar
Rudolf
Programmier-Gott
Programmier-Gott
Beiträge: 1418
Registriert: Mo, 02. Jan 2006 23:03
Wohnort: Salzburg/Österreich
Kontaktdaten:

ADS Verbindung

Beitrag von Rudolf »

Hallo,
habe noch ein kleines Verständnisproblem mit der ADS Verbindung zu einem externen Server. Ich habe auf dem anderen Rechner ein Datadictionary angelegt. In den Beispielen die ich habe finde ich nur die lokale Verindung zu einem Datadictonary. Wie kann ich mich aber mit der IP und dem anderen Dictionary verbinden ?
Grüße
Rudolf

Das ist meine Verbindung zum lokalen Dictonary, wo gebe ich die IP vom externen Server an und wie das Datadictonary ?

Code: Alles auswählen

scDictName := "v:\formcommander\daten\FormCommander.add"
scUserName := "admin"
scPassword := "!adf456w4r"
scDataPath := "v:\formcommander\daten\"


IF Empty(scDictName)
  DC_WinAlert('No Dictionary specified')
  ShowOptions()
  QUIT
ENDIF

DC_IconDefault(ICON_DICTIONARY)

snDictHandle := 0
snFreeHandle := 0
cSearch := Space(20)

nError := AdsConnect60( Alltrim(scDictName), ;
                ADS_REMOTE_SERVER + ADS_LOCAL_SERVER, ;
                scUserName, ;
                scPassword, ;
                ADS_DEFAULT, ;
                @snDictHandle )

Benutzeravatar
nightcrawler
1000 working lines a day
1000 working lines a day
Beiträge: 650
Registriert: Di, 24. Apr 2012 16:33
Wohnort: 72184 Weitingen
Hat sich bedankt: 3 Mal
Danksagung erhalten: 96 Mal
Kontaktdaten:

Re: ADS Verbindung

Beitrag von nightcrawler »

Code: Alles auswählen

scDictName := "\\192.168.1.100:6262\formcommander\daten\FormCommander.add"
--
Joachim
Joachim Dürr Softwareengineering
https://www.jd-engineering.de
Benutzeravatar
Rudolf
Programmier-Gott
Programmier-Gott
Beiträge: 1418
Registriert: Mo, 02. Jan 2006 23:03
Wohnort: Salzburg/Österreich
Kontaktdaten:

Re: ADS Verbindung

Beitrag von Rudolf »

Danke ! genau das habe ich gesucht. Muss ich dann scDataPath auch noch angeben ?
Grüße
Rudolf
Benutzeravatar
nightcrawler
1000 working lines a day
1000 working lines a day
Beiträge: 650
Registriert: Di, 24. Apr 2012 16:33
Wohnort: 72184 Weitingen
Hat sich bedankt: 3 Mal
Danksagung erhalten: 96 Mal
Kontaktdaten:

Re: ADS Verbindung

Beitrag von nightcrawler »

Rudolf hat geschrieben:Muss ich dann scDataPath auch noch angeben ?
Die Variale verwendest Du doch gar nicht!?
--
Joachim
Joachim Dürr Softwareengineering
https://www.jd-engineering.de
Benutzeravatar
Rudolf
Programmier-Gott
Programmier-Gott
Beiträge: 1418
Registriert: Mo, 02. Jan 2006 23:03
Wohnort: Salzburg/Österreich
Kontaktdaten:

Re: ADS Verbindung

Beitrag von Rudolf »

Danke, habe ich gar nicht bemerkt
Grüße
Rudolf
Benutzeravatar
Rudolf
Programmier-Gott
Programmier-Gott
Beiträge: 1418
Registriert: Mo, 02. Jan 2006 23:03
Wohnort: Salzburg/Österreich
Kontaktdaten:

Re: ADS Verbindung

Beitrag von Rudolf »

Hallo,
bin schon einen entscheidenden Schritt weiter, nur sehe ich die Tabellen nicht, das Dictonary kann ich aber öffnen. Was könnte noch fehlen ?
Die User permissions sind alle auf inherit und alle Gruppenberechtigungen sind angehakt.

Grüße
Rudolf

das ist mein Code aus eXpress++, wo brauche ich dabei den User und das Passwort ?

Code: Alles auswählen

FUNCTION LoadAds( cExt, lCompatibleLocking,cServer )
******************************************************************
LOCAL lAdsCompatible, cAdsServer, cSession, oAdsSession, cError
altd()
DEFAULT lCompatibleLocking TO .T.
DEFAULT cExt TO 'CDX'

IF !"ADSDBE" $ DbeList()
  IF ! DbeLoad( "ADSDBE" )
    Alert( "Unable to load ADSDBE", "ADS Server")
    RETURN .f.
  ENDIF
ENDIF

if upper(cServer) # "LOCAL"
     cAdsServer := cServer
else
     cAdsServer := CurDrive() + ":"
endif
cSession := "DBE=ADSDBE;SERVER=" + cAdsServer
oAdsSession := DacSession():new(cSession)

IF !oAdsSession:isConnected()
  cError := "Error Code: " + Alltrim(Str(oAdsSession:getLastError())) + ;
            Chr(13) + oAdsSession:getLastMessage()
  dc_msgbox( "Unable to establish connection to ADS Server" + Chr(13) + var2char(cError), 'ADS Server' )

//  Alert( "Unable to establish connection to ADS Server" + Chr(13) + var2char(cError), 'ADS Server' )
  RETURN .f.
ENDIF

AdsSession( oAdsSession )
dbeSetDefault('ADSDBE')
IF cExt == 'CDX'
  DbeInfo( COMPONENT_DATA, ADSDBE_TBL_MODE, ADSDBE_CDX )
  DbeInfo( COMPONENT_ORDER, ADSDBE_TBL_MODE, ADSDBE_CDX )
ELSE
  DbeInfo( COMPONENT_DATA, ADSDBE_TBL_MODE, ADSDBE_NTX )
  DbeInfo( COMPONENT_ORDER, ADSDBE_TBL_MODE, ADSDBE_NTX )
ENDIF

IF lCompatibleLocking
  DbeInfo( COMPONENT_DATA, ADSDBE_LOCK_MODE, ADSDBE_COMPATIBLE_LOCKING  )
ELSE
  DbeInfo( COMPONENT_DATA, ADSDBE_LOCK_MODE, ADSDBE_PROPRIETARY_LOCKING  )
ENDIF
// bis daher alles ok
RETURN .t.

Dateianhänge
Einstellungen am externen Server
Einstellungen am externen Server
dict2.jpg (201.02 KiB) 9415 mal betrachtet
datadict Beispielprogramm in eXpress++ welches normal alle DBF Dateien anzeigt
datadict Beispielprogramm in eXpress++ welches normal alle DBF Dateien anzeigt
dict1.jpg (13.81 KiB) 9415 mal betrachtet
Benutzeravatar
nightcrawler
1000 working lines a day
1000 working lines a day
Beiträge: 650
Registriert: Di, 24. Apr 2012 16:33
Wohnort: 72184 Weitingen
Hat sich bedankt: 3 Mal
Danksagung erhalten: 96 Mal
Kontaktdaten:

Re: ADS Verbindung

Beitrag von nightcrawler »

wie wird die Tabellen-Liste erzeugt? Ein Dateizugriff ist da über IP:Port i.d.R. nicht mehr möglich. In einem Data Dictionary kommt man über SQL an alle benötigten Objekte:

Code: Alles auswählen

select * from system.tables;
select * from system.views;
//...
--
Joachim
Joachim Dürr Softwareengineering
https://www.jd-engineering.de
Benutzeravatar
Rudolf
Programmier-Gott
Programmier-Gott
Beiträge: 1418
Registriert: Mo, 02. Jan 2006 23:03
Wohnort: Salzburg/Österreich
Kontaktdaten:

Re: ADS Verbindung

Beitrag von Rudolf »

Hallo Joachim,
ich habe das Datadictonary dort manuell über den ARC erzeugt. Ich dachte ich kann mich wie beim Local Server darauf hin verbinden und dann die DBF's wie gewohnt öffnen. Oder habe ich da was falsch verstanden ?
Grüße
Rudolf
Benutzeravatar
nightcrawler
1000 working lines a day
1000 working lines a day
Beiträge: 650
Registriert: Di, 24. Apr 2012 16:33
Wohnort: 72184 Weitingen
Hat sich bedankt: 3 Mal
Danksagung erhalten: 96 Mal
Kontaktdaten:

Re: ADS Verbindung

Beitrag von nightcrawler »

ja, schon... man muss (wie beim Local Server) die Verbindung zur Datenbank angeben. Nur mit dem Unterschied, dass beim Local Server die Daten über die Datei-Ebene kommen und beim Remote Server über ein eigenes Kommunikationsprotokoll zwischen Client und Server. Man kann übrigens auch auf den Remote Server über einen Pfad zugreifen (zB ein gemapptes Laufwerk) und muss nicht zwingen IP:Port verwenden.
--
Joachim
Joachim Dürr Softwareengineering
https://www.jd-engineering.de
Benutzeravatar
Rudolf
Programmier-Gott
Programmier-Gott
Beiträge: 1418
Registriert: Mo, 02. Jan 2006 23:03
Wohnort: Salzburg/Österreich
Kontaktdaten:

Re: ADS Verbindung

Beitrag von Rudolf »

Hallo,
irgend etwas fehlt mir auf dem Weg zu meinen Daten am Server. Wenn ich die Session aufmache mit

Code: Alles auswählen

DbeSetDefault( “ADSDBE” )
cDictServer := "\\xx.xx.xxx.xxx:6262\FormCommander\daten\FormCommander"
cSession := “DBE=ADSDBE;SERVER=” + cDictServer
oSession := DacSession():new(cSession)
dann müsste ich mit
DbUseArea( nil, oSession, "testfile","test" )
bzw. mit USE testfile
die Datei öffnen können, aber das geht nicht. Mir fehlt auch noch die Anmeldung des Users mit Passwort, wo erfolgt das dann ?
Oder muss ich zuerst ein leeres Datadictionary erzeugen und mit dbcreate() nach öffnen der Verbindung die Dateien so erstellen und die Daten dann mit append() übernehmen ? Ich habe die einzelnen Datein jetzt einfach auf den Server kopiert und ins Datadictionary importiert.

Grüße
Rudolf
Benutzeravatar
nightcrawler
1000 working lines a day
1000 working lines a day
Beiträge: 650
Registriert: Di, 24. Apr 2012 16:33
Wohnort: 72184 Weitingen
Hat sich bedankt: 3 Mal
Danksagung erhalten: 96 Mal
Kontaktdaten:

Re: ADS Verbindung

Beitrag von nightcrawler »

Das Dictionary ist Bestandteil des Connection Pfades, d.h. Du verbindest nicht zu S:\mydata, sondern zu S:\mydata\mydictionary.add. Aus einem Beispiel der letztjährigen Konferenz in Hannover:

Code: Alles auswählen

#pragma library("ADAC20B.LIB")
#include "adsdbe.ch"

PROCEDURE MAIN
  DbeLoad("ADSDBE")
  DbeSetDefault("ADSDBE")

  oSession := DacSession():New("DBE=ADSDBE; SERVER=C:\adsdb\add\testdb.add")
  IF (!oSession:IsConnected())
    MsgBox(oSession:GetLastMessage(), "Connection failed")
    CLS
    RETURN
  ENDIF

  USE test SHARED
  BROWSE()

  USE testdbf SHARED
  BROWSE()

  oSession:disconnect()
  CLS

RETURN
--
Joachim
Joachim Dürr Softwareengineering
https://www.jd-engineering.de
Benutzeravatar
Rudolf
Programmier-Gott
Programmier-Gott
Beiträge: 1418
Registriert: Mo, 02. Jan 2006 23:03
Wohnort: Salzburg/Österreich
Kontaktdaten:

Re: ADS Verbindung

Beitrag von Rudolf »

Hallo,
aber ich möchte mich von einer Worstation über Internet zu einem Windows Server verbinden auf dem ein Datadictonary unter "c:\formcommander\daten\formcommander.add" liegt, und das klappt nicht mit
cSession := "DBE=ADSDBE; SERVER=\\81.19.152.165:6262\ROOT430\FormCommander\daten\FormCommander.add; ADS_AIS_SERVER; UID=Clientxxxx; PWD=xxxx001; "
Port und IP stimmen, der Rest auch 100%ig, könnet was mit dem connect string nicht stimmen ? Der Port 6262 ist eingestellt und in der Firewall offen.
Grüße
Rudolf
Benutzeravatar
nightcrawler
1000 working lines a day
1000 working lines a day
Beiträge: 650
Registriert: Di, 24. Apr 2012 16:33
Wohnort: 72184 Weitingen
Hat sich bedankt: 3 Mal
Danksagung erhalten: 96 Mal
Kontaktdaten:

Re: ADS Verbindung

Beitrag von nightcrawler »

ich nehme mal an, Port 6262 ist der IP Port, nicht der Internet Port.
1. Internet Port am ADS einstellen (auf einen anderen Wert als den IP Port!!!!! zB 6363)
2. Im Data Dictionary Internet Zugriff freigeben (Dictionary Properties)
3. Im Data Dictionary User Access einschalten, damit Login auch geprüft wird (Dictionary Properties)
4. Benutzer für Internet Access freigeben (User Properties)
5. Sicherstellen, das auf der IP und dem TCP und UDP Port eine Verbindung zum ADS hergestellt werden kann (Öffentlich erreichbare IP, im Router Port Forwarding zum Server)
6. Auf öffentliche IP bzw Domain-Namen mit dem Internet Port verbinden (\\rudolf.dynvpn.net:6363\<freigabe>\<pfad>\<dictionary.add>)
--
Joachim
Joachim Dürr Softwareengineering
https://www.jd-engineering.de
Benutzeravatar
Rudolf
Programmier-Gott
Programmier-Gott
Beiträge: 1418
Registriert: Mo, 02. Jan 2006 23:03
Wohnort: Salzburg/Österreich
Kontaktdaten:

Re: ADS Verbindung

Beitrag von Rudolf »

Hallo Joachim,
danke für Deine Geduld, der Tip mit dem Port hat mich weitergebracht. Die Verbindung scheint zu klappen,nur bekomme ich Fehler 7078. Ich habe mit Sicherheit User und Passwort richtig angegeben. Habe es mit dem User ADSSYS und Client1 versucht.
Dann habe ich am Server Anmeldung mit Passwort und Authentifizierung ausgeschalten, es kommt trotzdem der Fehler 7078, könnte der auch noch eine andere Ursache haben ?
Grüße
Rudolf
Dateianhänge
dict3.jpg
dict3.jpg (109.39 KiB) 9348 mal betrachtet
Benutzeravatar
nightcrawler
1000 working lines a day
1000 working lines a day
Beiträge: 650
Registriert: Di, 24. Apr 2012 16:33
Wohnort: 72184 Weitingen
Hat sich bedankt: 3 Mal
Danksagung erhalten: 96 Mal
Kontaktdaten:

Re: ADS Verbindung

Beitrag von nightcrawler »

Hallo Rudolf,
kannst Du mir das Dictionary (nur die .ADD und .AM) wegkopieren, das ADSSYS passwort löschen und zukommen lassen? joachim[dot]duerr[at]sap[dot]com
--
Joachim
Joachim Dürr Softwareengineering
https://www.jd-engineering.de
Benutzeravatar
Rudolf
Programmier-Gott
Programmier-Gott
Beiträge: 1418
Registriert: Mo, 02. Jan 2006 23:03
Wohnort: Salzburg/Österreich
Kontaktdaten:

Re: ADS Verbindung

Beitrag von Rudolf »

Hallo,
habe mit Joachims freundlicher Hilfe Verbindung zum Server bekommen, habe im Connect String statt c:\ c$ verwendet.
Jetzt habe ich aber noch ein Problem mit der Geschwindigkeit, das Öffnen einer Datei dauert ca. 7 Sekunden, ist natürlich viel zu langsam. Ich würde gerne wissen wie schnell es bei anderen Servern ist, meiner ist extern gehostet und eher als Internetserver konzipiert. In einem Netzwerk mit einem NAS Server dürfte es wohl keine Probleme geben. Ich mache die Dateien nicht beim Programmstart auf und lasse sie offen, sonder öffne und schließe sie bei jeder Funktion immer wieder. Oder sollte ich das bei der Umstellung auf ADS ändern ?
Grüße
Rudolf
Benutzeravatar
Tom
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 9358
Registriert: Do, 22. Sep 2005 23:11
Wohnort: Berlin
Hat sich bedankt: 101 Mal
Danksagung erhalten: 361 Mal
Kontaktdaten:

Re: ADS Verbindung

Beitrag von Tom »

Hallo, Rudolf.

Verwendest Du den aktuellen Hotfix-Rollup für die ADSDBE?
Herzlich,
Tom
Benutzeravatar
Rudolf
Programmier-Gott
Programmier-Gott
Beiträge: 1418
Registriert: Mo, 02. Jan 2006 23:03
Wohnort: Salzburg/Österreich
Kontaktdaten:

Re: ADS Verbindung

Beitrag von Rudolf »

Hallo Tom,
nein, verwende ich nicht, habe leider keine Subscription mehr, aber ich glaube die brauche ich aber dazu. Ändert sich dann etwas mit der Geschwindigkeit ?
Grüße
Rudolf
Benutzeravatar
Tom
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 9358
Registriert: Do, 22. Sep 2005 23:11
Wohnort: Berlin
Hat sich bedankt: 101 Mal
Danksagung erhalten: 361 Mal
Kontaktdaten:

Re: ADS Verbindung

Beitrag von Tom »

Herzlich,
Tom
Benutzeravatar
Rudolf
Programmier-Gott
Programmier-Gott
Beiträge: 1418
Registriert: Mo, 02. Jan 2006 23:03
Wohnort: Salzburg/Österreich
Kontaktdaten:

Re: ADS Verbindung

Beitrag von Rudolf »

Hallo Tom,
danke, soweit ich verstanden habe nur bei Verwendung des Datadictionarys, dann muss ich eben leider drauf verzichten, nur für den Hotfix ist mir die Subscription sicher zu teuern.
Grüße
Rudolf
Benutzeravatar
Rudolf
Programmier-Gott
Programmier-Gott
Beiträge: 1418
Registriert: Mo, 02. Jan 2006 23:03
Wohnort: Salzburg/Österreich
Kontaktdaten:

Re: ADS Verbindung

Beitrag von Rudolf »

habe gerade gesehen dass ich die ADS 1.9 auch extra kaufen kann, also Problem (vorläufig) gelöst
Grüße
Rudolf
Benutzeravatar
Tom
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 9358
Registriert: Do, 22. Sep 2005 23:11
Wohnort: Berlin
Hat sich bedankt: 101 Mal
Danksagung erhalten: 361 Mal
Kontaktdaten:

Re: ADS Verbindung

Beitrag von Tom »

Sorry, das war der falsche PDR. Ich finde den richtigen allerdings auch nicht. Aber es gibt definitiv ein - inzwischen behobenes - Latenzenproblem beim Öffnen von Tabellen, vor allem mit der ADS 11.
Herzlich,
Tom
Benutzeravatar
Rudolf
Programmier-Gott
Programmier-Gott
Beiträge: 1418
Registriert: Mo, 02. Jan 2006 23:03
Wohnort: Salzburg/Österreich
Kontaktdaten:

Re: ADS Verbindung

Beitrag von Rudolf »

Hallo Tom,
scheint aber das Problem zu sein, Joachim vermutet auch dieses Problem. Ich werde mal ohne datadictonary testen und im internen Netzwerk. Für mich ist nur wichtig dass ich in meinem Code nicht alles umstellen muss.
Was muss ich im connect string ändern um direkt ohne dictonary zugreifen zu können.
mit diesem funktioniert es mit dem dictonary:
SERVER=\\81.19.456.169:6363\c$\FormCommander\daten\FormCommander.add; ADS_AIS_SERVER; UID=Client1; PWD=clientxxx;
damit aber nicht:
SERVER=\\81.19.456.169:6363\c$\FormCommander\daten\; ADS_AIS_SERVER; UID=Client1; PWD=clientxxx;

Grüße
Rudolf
Antworten