ADS Fragen

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 Fragen

Beitrag von Rudolf »

Hallo,
muss ein Projet auf ADS umstellen und habe dazu ein paar Fragen. Vielleicht kann mir hier jemand helfen. Ich verwende die letzte 1.09er und FOXCDX und würde das ADS data dictonary verwenden, um auch den AIS verwenden zu können.

1. kann ich einen Index wie z.B. str(n,5)+dtos(datum) erstellen ? Anscheinend funktioniert es, aber welche Funktionen stehen mir zur Verfügung ? Alle XBase++ Möglichkeiten oder Serverseitige vom ADS ?

2. ich habe meine Applikationen auf ANSI eingestellt, gibt es Probleme mit den Umlauten ? Was muss ich berücksichtigen ?

3. habe gelesen, dass leere Datenbankfelder mit NULL befüllt werden. Wenn ich also einen Index wie im obigen Beispiel erstellen würde, resultiert das in einem Runtime Fehler, da NULL im Index wäre.

das wärs mal für den Anfang, der Rest kommt sicher noch während der Umstellung ;-)

Grüsse
Rudolf
hschmidt
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 164
Registriert: Mo, 09. Jan 2006 17:06
Wohnort: Paderborn
Hat sich bedankt: 2 Mal
Kontaktdaten:

Beitrag von hschmidt »

Hallo Rudolf,
1. kann ich einen Index wie z.B. str(n,5)+dtos(datum) erstellen ? Anscheinend funktioniert es, aber welche Funktionen stehen mir zur Verfügung ? Alle XBase++ Möglichkeiten oder Serverseitige vom ADS ?
Das kannst Du in der ADS-Hilfe unter 'Expression Engine' nachlesen. Dort sind die Funktionen aufgeführt, die Serverseitig unterstützt werden. Str() und DTOS() gehören dazu.
2. ich habe meine Applikationen auf ANSI eingestellt, gibt es Probleme mit den Umlauten ? Was muss ich berücksichtigen ?
Das sollte kein Problem sein.

3. habe gelesen, dass leere Datenbankfelder mit NULL befüllt werden. Wenn ich also einen Index wie im obigen Beispiel erstellen würde, resultiert das in einem Runtime Fehler, da NULL im Index wäre.
Es gibt dafür einen Set-Parameter unter Xbase++, der dafür sorgt, dass Nullvalues im Programm als leere bzw. NIL-Werte interpretiert werden:
SET NULLVALUE OFF

Schwieriger ist das allerdings bei zusammengesetzten Indexausdrücken, weil hier der gesamte Indexausdruck NULL wird, sobald ein Teil des zusammengesetzten Ausdruck NULL ist.
Beispiel: Indexausdruck NAME + VORNAME + DTOS(GEBURT)
Alle Datensätze, bei denen kein Geburtsdatum eingetragen sind (GEBURT = NULL) stehen in diesem Index ganz vorne in der Sortierreihenfolge!

Ich habe zu folgendem Workaround gegriffen: NAME + VORNAME + IF(GEBURT=NULL," ",DTOS(GEBURT))
, aber das ist natürlich ein Krampf. Wenn Du hierfür eine bessere Lösung findest, lass es mich bitte wissen!

BTW, ich hatte im Zusammenhang mit der ADT-Umstellung einige Male Kontakt mit dem ALASKA-Support und in deren Antworten stand zwischen den Zeilen immer recht deutlich, dass die diese Umstellung nicht empfehlen!

Schöne Grüße

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

Beitrag von Rudolf »

Hallo Hans,
vielen Dank für die Infos. Für die NULL Values habe ich im Forum einen Tip gefunden. SET NULLVALUE OFF setzen, und in den Indexausdrücken
IIF(EMPTY(Field),SPACE(X),Convert(Field))...
verwenden. Die Funktion Convert gibt es anscheinend im ADS zum konvertieren von nicht Char Variablen in Strings wie z.B. var2char() im XBase++.

Wo liegt genau das Problem mit dem ADT Format ?
Brauche ich das nicht für den AIS ?
Kann ich beim DBF/CDX Format die Indexausdrücke unverändert lassen ?

Grüsse

Rudolf
hschmidt
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 164
Registriert: Mo, 09. Jan 2006 17:06
Wohnort: Paderborn
Hat sich bedankt: 2 Mal
Kontaktdaten:

Beitrag von hschmidt »

Hallo Rudolf,
IIF(EMPTY(Field),SPACE(X),Convert(Field))...
Das funktioniert m.E. so nicht. Convert ist keine gültige Funktion in ADS-Indexausdrücken, wird aber auch nicht benötigt.
Aus dem Beispiel aus meiner vorherigen Mail:

Code: Alles auswählen

UPPER (NAME+VORNAME) + DTOS(GEBURT)
wird dann

Code: Alles auswählen

UPPER (IF(EMPTY(NAME),SPACE(35),NAME)+IF(EMPTY(VORNAME),SPACE(35), VORNAME))+IF(EMPTY(GEBURT),SPACE( 8 ),DTOS(GEBURT))
So richtig gut lesbar und komfortabel finde ich das nicht.
Brauche ich das nicht für den AIS ?
Meines Wissens nach nicht.
Kann ich beim DBF/CDX Format die Indexausdrücke unverändert lassen ?
Ja.
Es gibt natürlich auch gute Gründe für die Umstellung auf ADT, unser Hauptgrund war die automatische Wiedernutzung von gelöschten Datensätzen, damit wir endlich unsere Reorganisationsroutine rauswerfen können. In Zukunft wird für uns auch die Verschlüsselung der Tabellen ein Thema sein.
Ich habe die ADT-Umstellung gemacht und die angesprochenen Klippen umschifft und möchte Dich nicht davon abhalten, im Produktivbetrieb haben wir die 1.9er ADT-Version allerdings noch nicht.

Freundliche Grüße

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

Beitrag von Rudolf »

Hallo Hans,
vielen Dank für die ausführlichen Infos, werde dann wohl gleich ins kalte Wasser springen und auf die ADT's umstellen. Ist die Doku über die verwenbaren Funktionen für die Index-Ausdrücke beim kostenlosen Local Server dabei ?
Grüsse
Rudolf
hschmidt
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 164
Registriert: Mo, 09. Jan 2006 17:06
Wohnort: Paderborn
Hat sich bedankt: 2 Mal
Kontaktdaten:

Beitrag von hschmidt »

Hallo Rudolf,

ich denke, auch beim Localserver ist die Doku komplett.
Ich kann Dir nur empfehlen, dich da gründlich einzulesen (auch in die Doku der ADSDBE von Alaska) - die Hilfe ist wirklich sehr umfangreich.

Freundliche Grüße

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

Beitrag von Rudolf »

vielen Dank, werde mich mal in Ruhe durchlesen
Grüsse
Rudolf
Antworten