
Transaktion
Je Verbindung (dsAceSession oder dsAceDD) kann
eine Transaktion gestartet werden.
adsConnection:BeginnTransaction()
beginn sequence
...
adsConnection:CommitTransaction()
recover
adsConnection:
RollBackTransaction()
end sequence
dsAceTable, Ableitungen davon werden
tabellenspezifisch erzeugt und repräsentieren eine
Tabelle. Tabelle kann dabei eine physikalische
Tabelle, eine SQL Abfrage, ein View oder das
Ergebnis einer stored procedure sein. Es erfolgt hier
keine Unterscheidung in der Erzeugung oder
Verwendung.
o Dateiöffnung
dbTable := OpenAceTable(„Kunde“,
adsConnection/adsDD )
dbTable:gotop()
? dbTable:KDNR // 4711
if dbTable:rlock()
dbTable:KDNR := 4712
dbTable:unlock()
endif
? dbTable:alias // KUNDE01
? dbTable:tablename() // KUNDE
do while !dbTable:eof()
….
dbTable:skip()
enddo
dbTable:cose()
o Indizieren
// NTX
dbTable:ordcreate(„NANME“,,;
“upper(name)+Upper(vorname)“)
// CDX
dbTable:ordcreate(,“NAME“,;
“upper(name)+Upper(vorname)“)
// ADT, Feldtyp CiCharacter, Rawkey Index
dbTable:ordcreate(,“NAME“, „name;vorname“)
// absteigend sortiert
dbTable:ordcreate(,“NAME“,;
„name;vorname“,,ADS_DESCENDING )
// oder mit spezieller Collation
dbTable:ordcreate(,“NAME“,„name;vorname“;
,,,,“GERMAN_VFP_CI_AS_1252“ )
Rawkey Index sind binär und können alle Datentypen
mixen, sind dadurch aber extrem performant!
o und die entprechende Suche
// NTX, CDX
dbTable:ordsetfocus(„NAME“)
dbTable:seek(upper(padr(„Müller“,20))+;
upper(padr(„Alfred“,20)))
// ADT, Rawkey Index
dbTable:seek({„Müller“,„Alfred“})
? dbTable:found()
o Filter und Scope:
// wird auf dem Client ausgewertet
dbTable:setfilter({|db| myFilter(db)})
// wird auf dem Server ausgwertet
dbTable:setfilter(,“Kunde=‘Maier‘“)
// wird über Index optimierzt
dbTable:setaof(“Kunde=‘Maier‘“)
// Top und Bottom Scope
dbTable:Setscope(, „BERLIN“)
SQL (Kunde kann ein Tabelle oder ein View sein)
dbTable := OpenSqlTable(,“select * from”+;
“ kunde where name like ‘Schmid%’”,;
adsConnection )
SQL mit Parameter
sqlConn :=;
adsSqlTable():New(adsConnection)
sqlConn:Prepare(;
"SELECT * from Kunde where ort=:P1")
sqlConn:SetParam("P1", "Berlin")
dbTable := sqlConn:Execute2Server()
sqlConn:SetParam("P1", "Hamburg")
dbTable := sqlConn:Execute2Server()
sqlConn:Close()
Das Tabellenobjekt eines SQL Ergebnisses kann
wiederum indiziert werden!
SQL stored procedures
Gibt eine stored procedure eine Ergebnismenge
zurück, wird diese wie jede andere Tabelle behandelt
sqlConn :=;
adsSqlServer():New(adsConnection)
dbTable := sqlConn:SQL2Table(;
"execute procedure sp_MyProc()")
dsAceMg, ADS Management für Anzeige und Pflege
der ADS Einstellungen und Parameter
o Anzeige angemeldeten Benutzer
o Anzeige der geöffneten Tabellen
o Anzeige der gesperrten Sätze mit dem
dazugehörenden Benutzer
o Disconnect von Benutzern
dsAdsListening, Klasse für Notifikationen vom ADS
Server empfangen und verarbeiten. In einem Thread
werden Notifikation, welche zuvor angemeldet
wurden, empfangen und verarbeitet.
// initialisieren im MAIN
AdsListening(dsAceDD)
// Dialogfenster mit Browser erstellen
dlgWindow := xbpDialog():New(...)
...
// events registrieren, browser wird
automatisch // refreshed, wenn ein Satz
geschrieben wurde
AdsListening():CreateEvent(dlgWindow,,;
"ARTICLE.UPDATE ",;
{|| dlgWindow:oBrowse:RefreshAll()})