ADS Datenbanken via Thread Öffnen

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

Moderator: Moderatoren

Antworten
DSEDSE
Cut&Paste-Entwickler
Cut&Paste-Entwickler
Beiträge: 21
Registriert: Mi, 11. Feb 2009 12:22

ADS Datenbanken via Thread Öffnen

Beitrag von DSEDSE »

Hi,

da die bestimmte datenbanken via ADS-Internet geöffnet werden und dies das Programmstart erheblich verlangsamt, wollte ich die ADS-Datenbanken über einen Thread öffnen. Da habe ich nun folgendes Problem: Die Datenbank wird in der Funtion eröffnet, jedoch im Main kann ich diese nicht ansprechen. Wenn ich die Funtion tr_open() normal starte kann ich auf die Datenbank zugreifen.

Code: Alles auswählen

FUNCTION Main ( cParam1, cParam2 )   
                 LOCAL oDBThread := Thread():new()  
                 open_local()   //Locale Datenbanken 
                 oDBThread:start("tr_open" ) //via Internet
Return nil 

Function tr_open() 
         LOCAL oSession
         DbeSetDefault("ADSDBE")       
         cConnStr := "SERVER=\\testweb.dnsalias.com:3232\test\data\test.ADD;ADS_REMOTE_SERVER;ADS_COMPRESS_INTERNET;UID=test;PWD=test"
         oSession    := DacSession():New("DBE=ADSDBE;"+cConnStr) 
          DbeInfo( COMPONENT_DATA , ADSDBE_TBL_MODE, ADSDBE_CDX )   
          DbeInfo( COMPONENT_ORDER, ADSDBE_TBL_MODE, ADSDBE_CDX )  
         If (oSession:isConnected())  
             If !DbUseArea(.T.,oSession, "adress","wadress",.t.,.t.)
             	 MsgBox("Status:"+Alias()+" kann nicht geöffnet werden")     
             EndIf    
             Set Index to Adress
             trconnect:=.t.
         Else
             trconnect:=.f.
             MsgBox("Status:"+Alias()+" kann nicht geöffnet werden")       
         EndIf    
Return trconnect
Benutzeravatar
Martin Altmann
Foren-Administrator
Foren-Administrator
Beiträge: 16560
Registriert: Fr, 23. Sep 2005 4:58
Wohnort: Berlin
Hat sich bedankt: 116 Mal
Danksagung erhalten: 48 Mal
Kontaktdaten:

Re: ADS Datenbanken via Thread Öffnen

Beitrag von Martin Altmann »

Iyi akşamlar Ayhan,
das liegt daran, dass die Workspacelist Threadlokal ist - das ist eine der Stärken von Xbase++!
Wenn also eine Datenbank in einer Workarea in einem Thread geöffnet wird, kann genau die selbe Datenbank in einer Workarea mit der selben Nummer in einem anderen Thread geöffnet werden und man kann in beiden Threads getrennt von einander durch die Daten navigieren.

Çok selam,
Martin
:grommit:
Webseite mit XB2.NET und ausschließlich statischem Content in Form von HTML-Dateien: https://www.altem.de/
Webseite mit XB2.NET und ausschließlich dynamischem Content in Form von in-memory-HTML: https://meldungen.altem.de/

Mitglied der XUG Osnabrück
Vorsitzender des Deutschsprachige Xbase-Entwickler e. V.
Benutzeravatar
Tom
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 9394
Registriert: Do, 22. Sep 2005 23:11
Wohnort: Berlin
Hat sich bedankt: 105 Mal
Danksagung erhalten: 364 Mal
Kontaktdaten:

Re: ADS Datenbanken via Thread Öffnen

Beitrag von Tom »

Man kann aber Workareas mit DbRelease() in den Zero-Space übertragen und mit DbRequest() aus dem Zerospace abholen (einfach mal in der Doku bei diesen Funktionen nachschauen). Dadurch sollte dieser Austausch möglich sein.
Herzlich,
Tom
Benutzeravatar
Martin Altmann
Foren-Administrator
Foren-Administrator
Beiträge: 16560
Registriert: Fr, 23. Sep 2005 4:58
Wohnort: Berlin
Hat sich bedankt: 116 Mal
Danksagung erhalten: 48 Mal
Kontaktdaten:

Re: ADS Datenbanken via Thread Öffnen

Beitrag von Martin Altmann »

Yup - klappt auch wunderbar, danke für den Hinweis! Mache ich bei meinem Webserver mit dem zentralen "Hundearchiv" so.

Viele Grüße,
Martin
:grommit:
Webseite mit XB2.NET und ausschließlich statischem Content in Form von HTML-Dateien: https://www.altem.de/
Webseite mit XB2.NET und ausschließlich dynamischem Content in Form von in-memory-HTML: https://meldungen.altem.de/

Mitglied der XUG Osnabrück
Vorsitzender des Deutschsprachige Xbase-Entwickler e. V.
DSEDSE
Cut&Paste-Entwickler
Cut&Paste-Entwickler
Beiträge: 21
Registriert: Mi, 11. Feb 2009 12:22

Re: ADS Datenbanken via Thread Öffnen

Beitrag von DSEDSE »

iyi aksamlar,

danke für die schnelle antwort. Falls ich es zeitlich hinbekomme werde ich auch zum User-Treffen kommen. Freue mich jetzt schon euch kennen zu lernen :)

Gruß

Ayhan
Benutzeravatar
Martin Altmann
Foren-Administrator
Foren-Administrator
Beiträge: 16560
Registriert: Fr, 23. Sep 2005 4:58
Wohnort: Berlin
Hat sich bedankt: 116 Mal
Danksagung erhalten: 48 Mal
Kontaktdaten:

Re: ADS Datenbanken via Thread Öffnen

Beitrag von Martin Altmann »

Tamam ve hoşgeldiniz içinde Köln!
(Oder so ähnlich :lol: )

Bis dann,
Martin
:grommit:
Webseite mit XB2.NET und ausschließlich statischem Content in Form von HTML-Dateien: https://www.altem.de/
Webseite mit XB2.NET und ausschließlich dynamischem Content in Form von in-memory-HTML: https://meldungen.altem.de/

Mitglied der XUG Osnabrück
Vorsitzender des Deutschsprachige Xbase-Entwickler e. V.
DSEDSE
Cut&Paste-Entwickler
Cut&Paste-Entwickler
Beiträge: 21
Registriert: Mi, 11. Feb 2009 12:22

Re: ADS Datenbanken via Thread Öffnen

Beitrag von DSEDSE »

Also irgendwas mache ich noch falsch im Zero ist Alias nicht zu sehen :(


Code: Alles auswählen

Funtuion Main()
              
            oDBThread:start("tr_open" ) 
            if select("WADRESS") = 0 
                dbrequest("WADRESS",.t.,,.t.)   
             endif 
return .t.
Function tr_open() 
         LOCAL oSession,bJob    := {|| DbCount( bFor ) } 
         DbeSetDefault("ADSDBE")       
         cConnStr := "SERVER=\\test.dnsalias.com:3232\ewttr\data\test.ADD;ADS_REMOTE_SERVER;ADS_COMPRESS_INTERNET;UID=test;PWD=test"
         oSession    := DacSession():New("DBE=ADSDBE;"+cConnStr) 
         oMERSINSession = oSession
          DbeInfo( COMPONENT_DATA , ADSDBE_TBL_MODE, ADSDBE_CDX )   
          DbeInfo( COMPONENT_ORDER, ADSDBE_TBL_MODE, ADSDBE_CDX )  
         If (oSession:isConnected())  
             If !DbUseArea(.T.,oSession, "adress","wadress",.t.,.t.)
             	 MsgBox("Status:"+Alias()+" kann nicht geöffnet werden")     
             EndIf    
             Set Index to Adress
             trconnect:=.t.
             //
             dbrelease("WADRESS") 
    
         Else
             trconnect:=.f.
             MsgBox("Status:"+Alias()+" kann nicht geöffnet werden")       
         EndIf
        
          DbeSetDefault("FOXCDX")     
      
Return .t.
"WADRESS" wir im Zero nicht angezeigt. Datenbank ist korrect Connected.

Gruß

Ayhan
DSEDSE
Cut&Paste-Entwickler
Cut&Paste-Entwickler
Beiträge: 21
Registriert: Mi, 11. Feb 2009 12:22

Re: ADS Datenbanken via Thread Öffnen [Erlädigt]

Beitrag von DSEDSE »

Habe das Problem gefunden,

dbrequest wurde nicht im Main ausgeführt sondern in einem weiteren Thread.
:oops: :oops:

Gruß

Ayhan
Antworten