Der Classic Line Connector
verbindet Ihr ERP-System mit der übrigen Welt

Sage Classic Line
Modulare Software für alle betriebswirtschaftlichen Geschäftsprozesse kleiner und mittelständischer Unternehmen.
Demoversion downloaden
Ab sofort stellen wir Ihnen eine kostenlose Demoversion zum Download zur Verfügung. Für diese Demo wird keine Lizenz benötigt.
Sie wollen auf dem neuesten Stand bleiben?
Senden Sie uns eine Mail an info@bizz-consult.de, wenn Sie in den Newsletterversand aufgenommen werden und regelmäßig Informationen zum Classic Line Connector erhalten möchten.



Der Connector im Einsatz


Die Dateibeschreibungen

Im gleichen Verzeichnis, in dem die Connector-DLL abgelegt ist, befindet sich eine XML-Datei, in der alle notwendigen Tabellen- und Feldinformationen abgelegt sind. Wird eine Instanz des Dateizugriffobjektes (Erläuterungen zu diesem Objekt finden Sie weiter unten) erzeugt, so lädt der Connector die in der XML-Datei gespeicherten Informationen und greift darüber auf die entsprechenden Tabellen der Classic Line zu.
Fehlt die XML-Dateibeschreibung im Connector-Verzeichnis ist ein Zugriff auf die Daten der Classic Line nicht möglich!

In der Ihnen vorliegenden Version des Connectors sind folgende Tabellen frei geschaltet:

Tabellenname Dateiname Beschreibung
Kunden A10110 Kundenstamm
Lieferanten A10120 Lieferantenstamm
Artikel A10130 Artikelstamm
Artikelgruppen A10138 Artikelgruppen
Lagerorte A1013B Lagerorte
ArtikelLieferanten A1013K Artikellieferanten
ArtikelProvisionStaffeln A1013VP Artikel-Provisionsstaffel
KundenArtikelSonderpreise A10140 Kunden/Artikel-Sonderpreise
ArtikelRabattstaffelnVk A10144 Rabattstaffeln VK Artikel
KundenStuecklistenSonderpreise A10146 Kunden/Stücklisten-Sonderpreise
Stücklisten A10160 Stücklistenstamm
StücklistenProvisionStaffel A1016VP Stücklisten-Provisionsstaffel
Vertreter A10170 Vertreterstamm
Erloescodes A10180 Erlöscodes
ArtikelIntrastatMerkmale AEGST06 Intrastatmerkmale Artikel
ArtikelBarcode A1013BC2 Barcodeindex
BarcodeArtikel A1013BC1 Barcodestamm


Wenn Sie detaillierte Informationen zu diesen Tabellen benötigen, so drucken Sie sich die entsprechenden Tabellenbeschreibungen in Ihrer Classic Line aus oder lesen Sie die entsprechenden Dokumentationen der Classic Line.

Innerhalb des Connectors können Sie viele Informationen, die in der XML-Dateibeschreibung gespeichert sind, über das clDateiinfo-Objekt (Informationen dazu finden Sie weiter unten) abrufen und in Ihrer Applikation verwenden. Von dieser Möglichkeit sollten Sie auch ausgiebig Gebrauch machen, da dadurch Ihre Applikation dynamisch auf Änderungen und Erweiterung der Dateibeschreibungen reagieren kann.

Wichtiger Hinweis: Diese XML-Datei darf nicht verändert werden, da sie ansonsten unbrauchbar wird und der Connector nicht mehr in der Lage ist, auf die Daten der Classic Line zuzugreifen. Wenn Sie eine Anpassung benötigen, so wenden Sie sich an den Hersteller des Connectors.

In der Demoversion ist nur die Tabelle "Artikel" (A10130) mit wenigen Feldern frei geschaltet. Die hier beschriebenen Funktionalitäten stehen Ihnen für diese Tabelle uneingeschränkt für 30 Tage zur Verfügung.



Verweis auf die Connector-DLL

Bevor Sie in Ihrer Applikation und Ihrer Entwicklungsumgebung auf die Funktionalität der Connector-DLL zugreifen können, müssen Sie einen Verweis auf die COM-Klasse setzen. Dazu hier einige Beispiele (sollte Ihre Entwicklungsumgebung hier nicht beschrieben sein, so schauen Sie in der Dokumentation Ihrer Entwicklungsumgebung nach, wie Sie einen Verweis auf eine COM-Klasse setzen):

Microsoft Excel

Wenn Sie mit Microsoft Excel arbeiten, öffnen Sie zunächst den VBA-Editor über das Menü "Extras" und dem Menüpunkt "Makro" und "Visual Basic Editor". Im VBA-Editor rufen Sie im Menü "Extras" den Menüpunkt "Verweise" auf.



In dem sich öffnendem Fenster selektieren Sie die notwendige Connector-DLL, die Sie hier unter der Bezeichnung "bzCLConnector" finden.



Ist die Connector-DLL nicht in der Liste der verfügbaren Verweise aufgeführt, dann suchen Sie die DLL explizit über den Button "Durchsuchen...". Ist der Verweis gesetzt, stehen Ihnen die Funktionalitäten des Connectors in diesem Worksheet zur Verfügung.

Visual Basic 6.0

Um einen Verweis auf die Connector-DLL in Visual Basic Version 6.0 zu setzen, öffnen Sie in der Entwicklungsumgebung den Menüpunkt "Projekt" und dort den Menüpunkt "Verweise".



In dem sich öffnendem Fenster selektieren Sie die notwendige Connector-DLL, die Sie hier unter der Bezeichnung "bzCLConnector" finden.



Ist die Connector-DLL nicht in der Liste der verfügbaren Verweise aufgeführt, dann suchen Sie die DLL explizit über den Button "Durchsuchen...". Ist der Verweis gesetzt, stehen Ihnen die Funktionalitä-ten des Connectors in diesem Projekt zur Verfügung.

Visual Basic .NET

Öffnen Sie den Projektexplorer, wenn er noch nicht geöffnet ist. Hier finden Sie unter "Verweise" alle zu diesem Projekt gehörenden Klassen und Objekte.

  

Der Connector sollte dort als "bzCLConnector" eingetragen sein. Fehlt er, dann klicken Sie mit der rechten Maustaste auf das Wort "Verweise" und wählen Sie "Verweis hinzufügen".

In dem sich öffnendem Fenster wechseln Sie zunächst auf den Reiter "COM". Dort sind alle verfügbaren COM-Klassen aufgelistet. Im unteren Bereich sind die dem Projekt zugeordneten COM-Klassen aufgelistet. Ist der Connector noch nicht hinzugefügt, so selektieren Sie den Eintrag "bzCLConnector" und betätigen Sie die Taste "Auswählen". Im Bereich "Ausgewählte Komponenten" sollte der Connec-tor nun aufgeführt sein.



Ist die Connector-DLL nicht in der Liste der verfügbaren Komponenten aufgeführt, dann suchen Sie die DLL explizit über den Button "Durchsuchen...". Ist der Verweis gesetzt, stehen Ihnen die Funktionalitäten des Connectors in diesem Projekt zur Verfügung.

Verbindung zur Classic Line herstellen

Damit ein Zugriff auf die Classic Line überhaupt möglich ist, muss zunächst eine Verbindung zum Datenbankdienst hergestellt werden. Legen Sie eine entsprechende Variable an, in der Sie die Referenz auf das Verbindungsobjekt ablegen können und erzeugen Sie eine Instanz des Verbindungsobjektes:

DIM clCon As CLConnector

' Verbindungsobjekt zur Classic Line Set clCon = New CLConnector


Über diese Instanz können Sie nun im anschließenden Schritt eine Verbindung zur Classic Line mit die Methode blnCLConnect herstellen. Dabei öffnet sich der bekannte Anwenderdialog der Classic Line, in der der Anwender seinen Stationsnamen, seinen Usernamen und sein Passwort eingeben kann.

' Mandant 991 fest verdrahtet
clCon.intMandant = 991

' Verbindung anfordern
If Not clCon.blnCLConnect Then
  Call MsgBox("Es konnte keine Verbindung zur Classic Line hergestellt werden!")
  Exit Sub
End If



In diesem Beispiel wurde der gewünschte Mandant in der Applikation "fest verdrahtet" und auf "991" vorgegeben. Natürlich können Sie hier auch eine Mandantenauswahl zulassen, so dass der Anwender Ihrer Applikation zwischen den vorhandenen Mandanten wechseln kann. Weiter unten ist erläutert, wie Sie die in der Classic Line vorhandenen Mandanten ermitteln können.
Die Methode blnConnect liefert ein False zurück, wenn keine Verbindung hergestellt werden konnte. Dies ist beispielsweise der Fall, wenn der Datenbankdienst gestört ist oder der Anwender im Verbindungsdialog die Taste "Abbrechen" betätigt hat.
Natürlich kann Ihre Applikation den Anmeldedialog der Classic Line auch unterdrücken, so dass die Anmeldung im Hintergrund erfolgt. Dazu müssen Anmeldenamen, Stationsname und Passwort bekannt sein und in Ihrer Anwendung einmalig eingegeben worden und intern abgespeichert sein. Erweitern Sie Ihren Sourcecode wie hier gezeigt:

clCon.strBenutzerName = "@CL"
clCon.strStation = "c:\sage\khk\clbs\33\station\station.ini"            Rem Einplatz
clCon.strStation = "\\clserver\e\sage\khk\clbs\33\station\station.ini " Rem Mehrplatz
clCon.strBenutzerPasswort = ""
clCon.strFinanzjahr = "0"
clCon.blnAnmeldedialogUnbedingtAnzeigen = False


Wichtiger Hinweis: Beachten Sie, dass der Connector als Dienst auf die Classic Line zugreifen muss. Daher muss für die Stationsangabe ein UNC-Pfad angegeben werden, wenn Sie Ihrer Applikation in einer Netzwerkumgebung nutzen möchten.

Verbindung zur Classic Line abbauen

Nach dem Ihre Applikation die benötigten Daten in der Classic Line gelesen und ggf. auch geschrieben hat, muss die Verbindung zur Classic Line wieder abgebaut werden. Dazu bietet Ihnen das Verbindungsobjekt eine entsprechende Methode:

Call clCon.blnCLDisconnect()


Im Anschluss daran kann das Verbindungsobjekt zerstört werden, wenn es nicht mehr gebraucht wird. Sie sollten auf jeden Fall die Verbindung zur Classic Line unterbrechen, wenn ein weiterer Datenzugriff nicht mehr erforderlich ist. Sicherheitshalber wird die Verbindung automatisch abgebrochen, wenn das Verbindungsobjekt zerstört wird.

Das Verbindungsobjekt stellt die Methode blnCLConnected zur Verfügung, mit der die Applikation prüfen kann, ob eine Verbindung zur Classic Line besteht oder nicht.

Mandanten ermitteln

Das Verbindungsobjekt stellt eine Methode zur Verfügung, mit der die Applikation die in der Classic Line angelegten Mandanten abfragen kann.

Dim strMandanten() As String
Dim intAnzahl As Integer
clCon.blnErmittleMandanten(strMandanten, intAnzahl)


Als Parameter bekommt die Methode ein Stringarray und eine Integervariable (Short) übergeben. In dem Array legt die Methode die Nummern und Bezeichnungen der Mandanten ab; in der Integerzahl teilt sie mit, wie viele Mandanten angelegt sind. Beachten Sie, dass das Array in der Regel größer angelegt ist, als tatsächlich Mandanten vorhanden sind. Eine Abfrage der Größe und anschließendes Auslesen aller Elemente des Arrays wird zu einem Fehler führen. Benutzen Sie auf jeden Fall die zu-rück gelieferte Anzahl.
Mit den erhaltenen Mandanten-Informationen können Sie beispielsweise eine Combobox füllen, aus der der Anwender einen Mandanten auswählen kann.

' Combobox füllen
Me.cmbMandanten.Items.Clear()
Dim strItem As String
For Each strItem In strMandanten
    If Not strItem Is Nothing Then
        Me.cmbMandanten.Items.Add(strItem.ToString.Trim)
    End If
Next
Me.cmbMandanten.Text = "bitte wählen..."


Hinweis: Die Übergabe der Mandantennummer an das Verbindungsobjekt kann selbstverständlich auch erfolgen, nachdem eine Verbindung aufgebaut wurde.

Das Dateiinfo-Objekt

Die Connector-DLL stellt Ihnen verschiedene Funktionen zur Verfügung, über die Sie ausführliche Informationen über die unterstützten Tabellen der Classic Line abfragen können; diese Informationen werden aus einer XML_Datei gelesen (siehe oben). Durch Anpassen der XML-Dateibeschreibungen kann die Connector-DLL auf beliebige Tabellen der Classic Line zugreifen. Selbst kundenspezifische Anpassungen an den Tabellen können so berücksichtigt werden.

Zunächst erzeugen Sie eine Instanz des Dateiinfo-Objektes. Hierbei ist keine Verbindung zur Classic Line erforderlich.

' Dateiinfo-Objekt erzeugen
Dim clInfo As CLDateiInfo
Set clInfo = New CLDateiInfo


Sollten Sie bereits ein Verbindungsobjekt (siehe oben) erzeugt haben, so können Sie auch das dortige Dateiinfo-Objekt verwenden. Beim Instanzieren des Verbindungsobjektes wird automatisch ein Dateiinfo-Objekt angelegt, das Sie über die Eigenschaft oDateiinfo alternativ nutzen können.

Im folgenden Text finden Sie eine Übersicht über die vorhandenen Methoden und Eigenschaften des Dateiinfo-Objektes. Weitergehende Informationen finden Sie auch im Referenzteil dieser Dokumentation.

Informationen zu Tabellen

blnErmittleTabellennamen Diese Funktion ermittelt alle Tabellen, auf die Sie mit dem Connector zugreifen können. Welche Tabellen dies sind, ist abhängig von den in der XML-Dateibeschreibung hinterlegten Informationen (siehe oben). Durch Anpassen dieser Konfigurationsdatei können weitere Tabellen gelesen werden.
blnErmittleSatzarten Hierüber können alle Datensatzarten zu einer Tabelle ermittelt werden.
blnErmittleDateiname Ermittelt den zugehörigen Dateinamen einer Tabelle
blnErmittleSatzartenfeld Diese Funktion gibt das Feld zurück, in der die Satzart abgelegt ist.
blnErmittleSatzlaenge Die Datensatzlänge einer Tabelle kann hierüber gelesen werden.
blnErmittleKeylaenge Die Datensätze einer ISAM-Tabelle (R300-Datei) werden sortiert nach einem Schlüssel gespeichert. Diese Funktion ermittelt die Länge des Schlüssels.
blnErmittleFeldnamen Diese Funktion gibt Ihnen alle Feldnamen zurück, die für die übergebene Tabelle und die übergebene Satzart hinterlegt sind. Die Feldnamen werden in einem Array abgelegt und zurückgegeben.
blnErmittleJointabellen Die Datensätze einer Tabelle können mit Datensätzen einer anderen Tabelle verknüpft werden. Diese Methode gibt die Namen aller Tabellen zurück, die über ein bestimmtes Feld miteinander verknüpft sind.
blnGetErsterDatensatzname Ermittelt eine beliebige Datensatzart zu der übergebenen Tabelle.
blnGetDatensatzname Ermittelt eine bestimmte Datensatzart zu der übergebenen Tabelle.


Informationen zu Datensatzfeldern

blnGetFeld_Key Diese Funktion prüft, ob es sich bei dem übergebenen Feld um ein Schlüsselfeld handelt.
blnGetFeld_Typ Hierüber können Sie den Datentyp des übergebenen Feldes ermitteln. Dabei wird einer der folgenden Werte zurück¬gegeben:
Text = 0
Numerisch = 1
IntZahl = 2
SinglePrecision = 3
DoublePresision = 4
DatumLang = 5
LongInteger = 6
ByteZahl = 7
DatumKurz = 8
Periode = 9
Uhrzeit = 10
Binaer = 11
(Siehe auch Enumeration CLDataTypes)
blnGetFeld_VKStellen Ermittelt die Vorkommastellen eines Feldes
blnGetFeld_NKStellen Ermittelt die Nachkommastellen eines Feldes
blnGetFeld_Defaultwert Jedem Feld kann in der XML-Dateibeschreibung ein Defaultwert zugeordnet werden. Dieser hinterlegte Defaultwert kann hierüber abgefragt werden.
blnGetFeld_Pflichtfeld Felder können in der XML-Dateibeschreibung mit einem Kennzeichen versehen werden, dass es sich bei diesen Feldern um ein Pflichtfeld handelt. Dieses Kennzeichen kann hierüber abgefragt werden.
blnGetFeld_Sichtbar Einzelne Felder können in der XML-Dateibeschreibung als unsichtbar gekennzeichnet werden. Diese Eigenschaft kann über diese Funktion abgefragt werden.
blnGetFeld_Start An welcher Position das übergebene Feld im Datensatz abgelegt ist, kann hierüber ermittelt werden. In der Regel benötigen Sie diese Methode nicht, da ein Zugriff auf die einzelnen Datensatzfelder nur über deren Namen erfolgt.
blnGetSplitFeld Ermittelt das Feld, über das ein anderer Datensatz mit diesem Datensatz verbunden ist.
blnGetNachfolgerFeld Positionen werden in der Classic Line Datenbank als Kette abgespeichert. Ein Zeiger innerhalb eines solchen Kettdatensatzes verweist auf den nächsten Datensatz. Mit der Funktion blnGetNachfolgerFeld kann das Feld ermittelt werden, in dem der Zeiger abgelegt ist.


Anwendungsbeispiel zum Dateiinfo-Objekt

Im beigefügten Beispiel-Worksheet für das Programm Microsoft Excel werden einige Informationen zu der Artikel-Tabelle über das Dateiinfo-Objekt ausgelesen und in den Excel-Tabellenfeldern abgelegt.
Zunächst wird ein Dateiinfo-Objekt erzeugt, über das die gewünschten Tabelleninformationen gelesen werden können:

Private clInfo As CLDateiInfo
Set clInfo = New CLDateiInfo


Die Namen der in dieser Tabelle enthaltenen Datensatzfeldnamen werden anschließend über die Methode blnErmittleFeldnamen ausgelesen und in einer Schleife in eine Spalte der Excel-Tabelle übertragen. Die Rückgabe der Feldnamen erfolgt über das Stringarray Felder().

lngZeile = 5
' Alle Felder ermitteln
Call clInfo.blnErmittleFeldnamen(strTabelle, strDatensatzname, Felder())

For Each strTemp In Felder

    ' Feldname ausgeben
    Cells(lngZeile, 1) = strTemp
    .
    .
    .


Next



Zusätzlich werden der Datentyp des Feldes ermittelt, die Vor- und Nachkommastellen und ob es sich bei dem jeweiligen Feld um ein Schlüsselfeld handelt. Diese Informationen werden wiederum in eine separate Spalte geschrieben. Details dazu entnehmen Sie dem Source des Programmierbeispiels.
Beachten Sie an dieser Stelle auch, dass noch keine Verbindung zur Classic Line besteht, da dass Dateiinfo-Objekt alle Informationen selbst beinhaltet.


Das Dateizugriffs-Objekt


Tabelle öffnen

Eine weitere Klasse des Connectors ist die Dateizugriffs-Klasse, über die auf die Classic Line Daten-sätze zugegriffen wird.
Legen Sie zunächst wieder eine Verweisvariable an und erzeugen Sie das notwendige Objekt:

Private clData As CLDateiZugriff
' Dateizugriffsobjekt erzeugen
Set clData = New CLDateiZugriff
' Connector übergeben
Set clData.oCLConnector = clCon


Dem Dateizugriffs-Objekt wird zusätzlich eine offene Verbindung zur Classic Line zur Verfügung ge-stellt. Dies erfolgt durch Zuweisung des Verbindungsobjektes an die Eigenschaft oCLConnector.
Im nachfolgenden Programmablauf öffnen Sie die gewünschte Tabelle über die Methode blnDatei_Oeffnen; hier der Artikelstamm:

' Tabelle öffnen
If Not clData.blnDatei_Oeffnen("Artikel") Then
    Call MsgBox("Konnte Tabelle ""Artikel"" nicht öffnen!")
    Call clCon.blnCLDisconnect
    Exit Sub
End If


Konnte die Tabelle geöffnet werden, so erhalten Sie ein True zurück. Im anderen Fall sollte die weitere Programmausführung abgebrochen werden, da ein Lesen in diesem Fall dann nicht möglich ist. Im gezeigten Beispiel wird eine Fehlermeldung ausgegeben, die Verbindung zur Classic Line abgebaut und die Prozedur verlassen.

Tabelle schließen

Eine geöffnete Tabelle sollte über die Methode Schliesse_Datei wieder geschlossen werden, sobald ein weiterer Zugriff nicht mehr erforderlich ist. Eine geöffnete Datei wird automatisch beim Zerstören des Dateizugriffs-Objektes geschlossen oder wenn die Verbindung zur Classic Line abgebaut wird.

Call clData.Schliesse_Datei


Datensatz lesen (ISAM-Tabelle)

Ist eine Verbindung zur Classic Line hergestellt und die gewünschte Tabelle geöffnet, so können Datensätze über einen Schlüssel aus einer ISAM-Tabelle (R300-Datei) gelesen werden:

If clData.blnLeseDatensatz_Key(strSchluessel) Then


Wie ein solcher Schlüssel auszusehen hat, ist von der geöffneten Tabelle abhängig und kann den Dateibeschreibungen der Classic Line entnommen werden.
Konnte der Lesevorgang erfolgreich durchgeführt werden und wurde ein Datensatz mit diesem Schlüssel gefunden, so wird dies durch ein True als Rückgabewert angezeigt.
Datensätze einer Kettdatei werden mit einer anderen Methode gelesen, die weiter unten beschrieben ist.

Datensatzfelder auslesen

Ist ein Datensatz eingelesen, so kann Ihre Applikation die einzelnen Werte über die Methode blnGetFeldwert auslesen. Exemplarisch ist dies hier anhand der Felder "Artikel", "Hersteller", "Matchcode" und den Verkaufspreisen 1 bis 9 dargestellt.

Dim vntFeldwert As Variant
Dim clDatatyp As CLDatenTypenVB

  If clData.blnGetFeldwert("Artikel", "", vntFeldwert, clDatatyp) Then ' Wert verarbeiten
    If clData.blnGetFeldwert("Hersteller", "", vntFeldwert, clDatatyp) Then ' Wert verarbeiten
      If clData.blnGetFeldwert("Matchcode", "", vntFeldwert, clDatatyp) Then ' Wert verarbeiten

        For intI = 1 To 9
          If clData.blnGetFeldwert("Verkaufspreis" & CStr(intI), "", vntFeldwert, clDatatyp) Then
            ' Wert verarbeiten
          End if
        Next intI


Zunächst übergeben Sie an die Funktion den Namen des Feldes, welches Sie auslesen möchten. Weiterhin übergeben Sie die Satzart (In unserem Beispiel übergeben wir einen Leerstring, da die Tabelle Artikel keine unterschiedliche Satzarten kennt) und zwei Variablen, in denen zum einen der gelesene Wert und zum anderen der Typ des Wertes abgelegt werden.
In unserem Beispiel wird der gelesene Wert in der Variablen vntFeldwert vom Typ Variant gespeichert. Um welchen Werttypen es sich handelt, kann (hier) über die Variable clDatatyp ermittelt werden. In Abhängigkeit davon, wird der Variantwert in den entsprechenden Wertetyp umgewandelt und dann weiterverarbeitet.

Werte in Datensatzfeldern verändern

Mit einer Funktion, die der im vorhergehenden Kapitel beschriebenen Methode blnGetFeldwert sehr ähnlich ist, lassen sich auch Inhalte eines Feldes verändern. Das Dateizugriffs-Objekt stellt dazu die Methode blnSetFeldwert zur Verfügung.

If Not clData.blnSetFeldwert("Matchcode", "", vntWert) Then ' Wert nicht verarbeitet


Auch hier übergeben Sie zunächst den Namen des Feldes, in das die Information gespeichert werden soll und die Satzart (wie bereits oben erwähnt, wird hier ein Leerstring übergeben, da die Tabelle Artikel keine unterschiedliche Satzarten kennt). Die Variable vntWert beinhaltet den zu speichernden Wert.
Sie sollten natürlich darauf achten, dass Sie nur Werte übergeben, die in dem angegeben Feld auch tatsächlich gespeichert werden können. Es macht wohl keinen Sinn ein alphanumerisches Zeichen in einem numerischen Feld abzulegen. In diesem Fall wird ein Laufzeitfehler ausgelöst und die Applikation beendet, wenn diese nicht entsprechend auf den Fehler reagiert.

Wichtiger Hinweis: Ändern Sie keine Felder, deren Inhalte an anderer Stelle nochmals abgelegt sind. Beispiel: Wenn Sie den Matchcode im Artikelstamm ändern, so können Sie davon ausgehen, dass eine Dateninkonsistenz entsteht, da es eine Index-Tabelle gibt, die aus dem Matchcode und der Artikelnummer besteht. Ändern Sie den Matchcode im Artikelstammsatz, so stimmt dieser Matchcode nicht mehr mit dem Matchcode überein, der in der Indexdatei abgelegt ist.

Mit der hier beschriebenen Methode ändern Sie Werte des zuletzt gelesenen Datensatzes. Bevor Sie also einen Datensatz abändern möchten, müssen Sie diesen zunächst lesen und dann die Werte ändern. Haben Sie vor der Änderung keinen Datensatz gelesen, wird ein Laufzeitfehler erzeugt.

Schlüsselfelder können nicht verändert werden!

Datensätze abspeichern (ISAM-Tabelle)

Nachdem Sie eine Änderung an einem Datensatz vorgenommen haben, können Sie ihn wieder in der Classic Line abspeichern. Dazu verwenden Sie die Funktion blnSchreibeDatensatz

' Datensatz schreiben
If Not clData.blnSchreibeDatensatz Then ' Speichern nicht erfolgreich


Konnte der Datensatz erfolgreich abgelegt werden, erhalten Sie den Rückgabewert True.
Beachten Sie, dass für die Zeit des Lesens und des Schreibens des Datensatzes keine Satzsperre gesetzt wird, da der Connector so konzipiert ist, dass auch ein (scheinbar) verbindungsloser Datenzugriff möglich ist. Über die Synchronisationsroutinen ist es möglich, vor dem Abspeichern zu prüfen, ob eine Änderung stattgefunden hat, so dass die Applikation darauf entsprechend reagieren kann.

Mehrere Datensätze in einer Schleife lesen

Der Connector bietet die Möglichkeit Datensätze innerhalb eines bestimmten Schlüsselbereiches zu lesen; dazu werden eine untere und eine obere Schlüsselgrenze angegeben.

' Datensätze einlesen
If clData.blnLeseDatensatz_Erster(String(30, 1), String(30, 254), AlleStati) Then
    Do
    ' hier werden die Datensätze verarbeitet


    Loop While clData.blnLeseDatensatz_Naechster
End If


Mit der Methode blnLeseDatensatz_Erster wird der erste Datensatz gelesen, der sich innerhalb des angegebenen Schlüsselbereiches befindet. Im gezeigten Beispiel werden alle Artikel gelesen, da als untere Grenze eine 30stellige Zeichenfolge aus dem Charakter mit dem ASCII-Code 1 und eine obere Grenze aus einer 30stelligen Zeichenfolge aus dem Charakter mit dem ASCII-Code 254 angegeben wurde.
Der Parameter AlleStati gibt an, dass alle Datensätze gelesen werden sollen. Der Connector ist in der Lage, auch nur "gelöschte", "geänderte" oder "neue" Datensätze zu lesen. Informationen dazu finden Sie im Referenzteil dieser Dokumentation.
Wurde ein Datensatz gefunden, liefert die Methode ein True zurück und die Applikation kann in einer Schleife die Verarbeitung oder Darstellung des Datensatzes vornehmen. Anschließend wird der nächste Datensatz mit der Methode blnLeseDatensatz_Naechster gelesen und ebenfalls verarbeitet.
Diese Methode liefert ein False zurück, wenn kein weiterer Datensatz gefunden wurde, so dass die Schleife verlassen wird.

Datensatz in einer Kettdatei lesen

Das Lesen eines Datensatzes aus einer Kettdatei ist ähnlich dem Lesen aus einer ISAM-Datei. Allerdings wird nicht nach einem Schlüssel selektiert, sondern nach einer festen Datensatznummer. Die Datensatznummer für den ersten Datensatz ist in der Regel im Kopfsatz der Datensatzfolge abgelegt, während die Datensatznummern aller folgenden Sätze in den vorhergehenden Datensätzen abgelegt sind. Um also eine Kette zu lesen, muss zunächst der Anfang der Kette ermittelt werden. Dazu wird der zugehörige Kopfsatz gelesen:

' Kopfsatz öffnen
If clData.blnDatei_Oeffnen(strKopfsatz) Then
' Zugehörige Positionen öffnen
  If clDataPos.blnDatei_Oeffnen(strPositionen, KettDatei) Then
  ' Kopfsatz lesen
    If clData.blnLeseDatensatz_Key(strSchluessel) Then
    ' Datensatznummer lesen
      Call clData.blnGetFeldwert("Positionsanker", "", vntFeldwert, clDatatyp)
      clDataPos.lngDatensatznummer = CLng(vntFeldwert)

      While clDataPos.lngDatensatznummer > 0
        Call clDataPos.blnLeseDatensatz_Kette

        ' Verarbeiten des Datensatzes

        Call clDataPos.blnLeseNaechstenDatensatz_Kette
      Wend


Zunächst wird die Kopfsatzdatei geöffnet und anschließend die Positionsdatei. Beachten Sie, dass beim Öffnen der Positionsdatei der zusätzliche Parameter Kettdatei angegeben ist. Dadurch wird mitgeteilt, dass es sich eben um eine Kettdatei und nicht um eine ISAM-Datei handelt.
Nachdem der gewünschte Kopfdatensatz gelesen wurde (in diesem Beispiel ist der Schlüssel in der Variable strSchluessel abgelegt), wird die Datensatznummer des ersten Kettdatensatzes aus dem Feld Positionsanker ausgelesen. (Beachten Sie, dass der Name dieses Feldes von der jeweiligen Tabelle abhängig ist und ggf. angepasst werden muss.)
In einer Schleife werden nun alle Datensätze dieser Kette durchlaufen, gelesen und ggf. verarbeitet. Die Methode blnLeseNaechsterDatensatz_Kette erkennt dabei automatisch den Zeiger auf den nächsten Datensatz.
Weitere Informationen zu den verschiedenen Methoden zum Lesen von Kettdateien entnehmen Sie bitte dem Referenzteil dieser Dokumentation.

Hinweis: Kettdateien können zurzeit mit dem Connector nur vorwärts gelesen werden.