Zum Inhalt

DataSet – Grundlagen

3.1.26 IAutoDataSet Interface

AutoDataSet ist die Basis aller Datentabellen.

IDL

[ uuid(189F4E90-A6F1-11D2-B95E-004005232B30), version(1.0),
  helpstring("Dispatch-Schnittstelle für AutoDataSet-Objekt"), dual, oleautomation ]
interface IAutoDataSet : IAutoBase;

Beschreibung

AutoDataSet ist die Basis aller Datentabellen. Nicht nur CreateDataSet gibt dieses Interface zurück. Auch andere Funktionen, die mit Datentabellen verwenden, greifen auf dieses Interface zurück.

IAutoDataSet Eigenschaften

Die folgende Tabelle zeigt die Eigenschaften von IAutoDataSet.

Methoden

Name Beschreibung
Append Fügt eine Datenzeile am Ende der Tabelle hinzu.
ApplyRange Positionierungsfunktion.
Cancel Die Datentabelle wird zurückgesetzt.
CancelRange Positionierungsfunktion.
CheckDelete Zeigt ein Fenster für den Benutzer an, mit dem das Löschen von Daten bestätigt werden kann.
ClearFields Löscht den Inhalt aller Felder der aktiven Datenzeile.
Commit Schließt eine Transaktion ab.
Delete Löscht die aktuelle Datenzeile.
DeleteAll Löscht die gesamte Tabelle.
DeleteTable Löscht eine Tabelle.
Duplicate Dupliziert eine Tabelle.
Edit Die aktuelle Datenzeile wird geändert.
EditKey Positionierungsfunktion.
EditRangeEnd Positionierungsfunktion.
EditRangeStart Positionierungsfunktion.
First Positionierungsfunktion.
GetInfoString Kurze Beschreibung der Tabelle.
GotoCurrentOf Positionierungsfunktion.
GotoKey Positionierungsfunktion.
GotoNearest Positionierungsfunktion.
Insert Fügt eine Datenzeile hinter die aktuelle Position der Tabelle hinzu.
IsRanged Statusangabe zum Range.
Last Positionierungsfunktion.
Next Positionierungsfunktion.
Post Die Datentabelle wird geschrieben.
PostNestedDataSet Spezielles Post für NestedDataSets.
Prior Positionierungsfunktion.
Rollback Macht eine Transaktion rückgängig.
SetKey Positionierungsfunktion.
SetRangeEnd Positionierungsfunktion.
SetRangeStart Positionierungsfunktion.
StartTransaction Startet eine Transaktion.
TransactionCorrupted Kennzeichnet eine Transaktion als "defekt".
TryStartTransaction Versucht eine Transaktion zu starten.

Eigenschaften

Name Beschreibung
Application Zugriff auf das Basisobjekt, von dem alle Interfaces abstammen.
Bof Zeigt an ob der Anfang einer Tabelle erreicht ist.
Bookmark Der Rückgabewert dient zum eindeutigen Identifizieren dieses Datensatzes.
Eof Zeigt an ob das Ende einer Tabelle erreicht ist.
Fields Liste aller AutoField Elemente.
Indices Liste aller Indices.
Info Beschreibungstext dieser Datentabelle.
IsEmpty Statusanzeige einer Tabelle.
KeyFieldCount Beschreibt die Anzahl der Felder im aktuellen Index.
Name Der Tabellenname wird ermittelt.
NestedDataSets Auflistung aller Datentabellen die innerhalb der aktuellen Tabelle abgelegt sind.
OrgName Der interne Tabellenname wird ermittelt.
Parent Gibt das Parent Interface zurück.
RecordCount Gibt die Anzahl an Datenzeilen zurück.
State Datenstatus der aktuellen Datentabelle ermitteln.

IAutoDataSet::First Methode

Positionierungsfunktion.

IDL

[id(0x00000001)]
HRESULT _stdcall First();

Beschreibung

Die Tabelle wird zum "ersten" Eintrag gebracht.


IAutoDataSet::Last Methode

Positionierungsfunktion.

IDL

[id(0x00000002)]
HRESULT _stdcall Last();

Beschreibung

Navigiert die Datenmenge in der Tabelle zum Ende.


IAutoDataSet::Prior Methode

Positionierungsfunktion.

IDL

[id(0x00000003)]
HRESULT _stdcall Prior();

Beschreibung

Der Datensatzzeiger wird um einen Datensatz nach "vorne" gebracht.


IAutoDataSet::Next Methode

Positionierungsfunktion.

IDL

[id(0x00000004)]
HRESULT _stdcall Next();

Beschreibung

Der Tabellenzeiger wird um einen Datensatz nach "hinten" gesetzt.


IAutoDataSet::Edit Methode

Die aktuelle Datenzeile wird geändert.

IDL

[id(0x00000005)]
HRESULT _stdcall Edit();

Beschreibung

Die aktuelle Datenzeile ist beschreibbar, bis "Post" aufgerufen wird. Damit diese Funktion erfolgreich durchgeführt werden kann, muss Zugriff auf die Tabelle bestehen.


IAutoDataSet::Append Methode

Fügt eine Datenzeile am Ende der Tabelle hinzu.

IDL

[id(0x00000006)]
HRESULT _stdcall Append();

Beschreibung

Die neue Datenzeile ist beschreibbar, bis Post aufgerufen wird. Damit diese Funktion erfolgreich durchgeführt werden kann, muss Zugriff auf die Tabelle bestehen.


IAutoDataSet::Post Methode

Die Datentabelle wird geschrieben.

IDL

[id(0x00000007)]
HRESULT _stdcall Post();

Beschreibung

Die aktuell in Bearbeitung befindliche Datenzeile wird in der Tabelle festgeschrieben. Diese Funktion schließt "Append", "Insert" und "Edit" ab. Damit diese Funktion erfolgreich durchgeführt werden kann, muss Zugriff auf die Tabelle bestehen.


IAutoDataSet::Cancel Methode

Die Datentabelle wird zurückgesetzt.

IDL

[id(0x00000008)]
HRESULT _stdcall Cancel();

Beschreibung

Die aktuell in Bearbeitung befindliche Datenzeile wird auf Ihren Zustand vor "Append", "Insert" oder "Edit" gesetzt. Sollte "Post" schon aufgerufen worden sein, bleibt dieser Befehl ohne Wirkung. Damit diese Funktion erfolgreich durchgeführt werden kann, muss Zugriff auf die Tabelle bestehen.

Delphi-Beispiel: Cancel nach fehlgeschlagenem Append
Tbl.Append;
try
  // Felder schreiben
  Tbl.Post;
catch
  Tbl.Cancel;
end;

IAutoDataSet::Delete Methode

Löscht die aktuelle Datenzeile.

IDL

[id(0x00000009)]
HRESULT _stdcall Delete();

Beschreibung

Der aktuelle Datensatz, auf dem die Tabelle steht, wird gelöscht. Damit diese Funktion erfolgreich durchgeführt werden kann, muss Zugriff auf die Tabelle bestehen.


IAutoDataSet::ClearFields Methode

Löscht den Inhalt aller Felder der aktiven Datenzeile.

IDL

[id(0x0000000A)]
HRESULT _stdcall ClearFields();

Beschreibung

Alle Felder der aktuellen Datenzeile werden geleert. Damit diese Funktion erfolgreich durchgeführt werden kann, muss Zugriff auf die Tabelle bestehen und "Append", "Insert" oder "Edit" zuvor aufgerufen werden.


IAutoDataSet::Bof Eigenschaft

Zeigt an ob der Anfang einer Tabelle erreicht ist.

IDL

__property VARIANT_BOOL* Bof;

Beschreibung

Diese Funktion gibt "True" zurück, wenn die aktuelle Zeile die erste einer Datentabelle ist.

Delphi-Beispiel: Rückwärts-Iteration mit Bof
Tbl.Last;
while not Tbl.Bof do
begin
  //Lesen, Schreiben
  Tbl.Prior;
end;

Parameter

Parameter Beschreibung
Value "True", wenn die aktuelle Position den Anfang einer Tabelle darstellt

IAutoDataSet::Eof Eigenschaft

Zeigt an ob das Ende einer Tabelle erreicht ist.

IDL

__property VARIANT_BOOL* Eof;

Beschreibung

Diese Funktion gibt "True" zurück, wenn die aktuelle Zeile die letzte einer Datentabelle ist.

Delphi-Beispiel: Vorwärts-Iteration mit Eof
Tbl.First;
while not Tbl.Eof do
begin
  //Lesen, Schreiben
  Tbl.Next;
end;

Parameter

Parameter Beschreibung
Value "True", wenn die aktuelle Position das Ende einer Tabelle darstellt

IAutoDataSet::Bookmark Eigenschaft

Der Rückgabewert dient zum eindeutigen Identifizieren dieses Datensatzes.

IDL

__property BSTR Bookmark;

Beschreibung

Bookmark liest oder setzt einen String, der die Position innerhalb der Tabelle markiert. Wird der Wert gelesen, kann die Tabelle (oder eine Andere, sofern es eine Tabelle des selben Aufbaues ist) mit Hilfe des Strings durch Schreiben der Eigenschaft wieder an die Position gebracht werden.

Parameter

Parameter Beschreibung
Value String, der einen Bookmark darstellt

IAutoDataSet::RecordCount Eigenschaft

Gibt die Anzahl an Datenzeilen zurück.

IDL

__property long* RecordCount;

Beschreibung

Es wird die Anzahl der Datensätze in der Tabelle zurückgegeben.

Parameter

Parameter Beschreibung
Value Rückgabewert: Gibt in Ganzzahlen die Anzahl der Datensätze aus

IAutoDataSet::Duplicate Methode

Dupliziert eine Tabelle.

IDL

[id(0x00000012)]
HRESULT _stdcall Duplicate([out, retval] AutoDataSet** Value);

Beschreibung

Die Ursprungstabelle wird dupliziert. Sie erhalten eine voll funktionstüchtige Kopie. Es wird ein Zeiger auf die eigentliche Tabelle erstellt, der aber in seiner Funktion eigenständig ist (Range, Einfügen, Position usw.).

Parameter

Parameter Beschreibung
[out, retval] AutoDataSet** Value Gibt ein AutoDataSet Interface der duplizierten Tabelle zurück

IAutoDataSet::Fields Eigenschaft

Liste aller AutoField Elemente.

IDL

__property AutoFields** Fields;

Beschreibung

Gibt eine Liste der Felder dieser Datentabelle zurück.

Parameter

Parameter Beschreibung
Value Rückgabewert: Gibt ein Interface auf AutoFields zurück

IAutoDataSet::Indices Eigenschaft

Liste aller Indices.

IDL

__property AutoIndices** Indices;

Beschreibung

Gibt eine Liste der möglichen Indices der Tabelle aus.

Parameter

Parameter Beschreibung
Value Rückgabewert: Gibt ein Interface auf AutoIndices zurück

IAutoDataSet::SetRangeStart Methode

Positionierungsfunktion.

IDL

[id(0x00000018)]
HRESULT _stdcall SetRangeStart();

Beschreibung

Nach dieser Funktion können die Werte für den Range geschrieben werden. Die hiernach angegebenen Werte kennzeichnen die "Von" Werte. Ab hier soll also der Range gültig sein.

VBA-Beispiel: Range setzen und aufheben
Public Sub Range()
Dim BpApp As BpNT.Application
Dim DataSetAdressen As BpNT.IAutoDataSet
Set BpApp = CreateObject("BpNT.Application")
Call BpApp.Init("Firmenname", "", "Anmeldename", "Password")
Call BpApp.SelectMand("1")
Set DataSetAdressen = BpApp.DataSetInfos.Item("Adressen").CreateDataSet
DataSetAdressen.First
 Debug.Print DataSetAdressen.RecordCount
 'Index Auswählen dieser enthält ein Feld AdrNr
 DataSetAdressen.Indices.Item("Nr").Select
 'Bekannt geben dass die nächsten Werte den Beginn der Range darstellen
 DataSetAdressen.SetRangeStart
 'Werte der Range zuweisen
 DataSetAdressen.Fields.Item("AdrNr").AsInteger = 10000
 'Bekannt geben dass die nächsten Werte das Ende der Range darstellen
 DataSetAdressen.SetRangeEnd
 ' Werte der Range zuweisen
 DataSetAdressen.Fields.Item("AdrNr").AsInteger = 30000
 ' "scharf schalten" des Ranges
 DataSetAdressen.ApplyRange
 If DataSetAdressen.IsRanged Then
   Debug.Print "Range gesetzt"
 End If
Debug.Print DataSetAdressen.RecordCount
'verwerfen des Ranges
DataSetAdressen.CancelRange
 If DataSetAdressen.IsRanged Then
   Debug.Print "Range gesetzt"
 End If
Debug.Print DataSetAdressen.RecordCount
End Sub

IAutoDataSet::SetRangeEnd Methode

Positionierungsfunktion.

IDL

[id(0x00000019)]
HRESULT _stdcall SetRangeEnd();

Beschreibung

Nach dieser Funktion können die Werte für den Range geändert werden. Die hiernach angegebenen Werte kennzeichnen die "Bis" Werte. Bis hier soll der Range gültig sein.


IAutoDataSet::ApplyRange Methode

Positionierungsfunktion.

IDL

[id(0x0000001A)]
HRESULT _stdcall ApplyRange();

Beschreibung

Die zugewiesenen Werte für die Range werden nun auf den aktuellen Index angewendet. Danach ist die Tabelle in einem Range und die Anzahl der Einträge entspricht jetzt nur noch den Datensätzen, die innerhalb des Range liegen.


IAutoDataSet::CancelRange Methode

Positionierungsfunktion.

IDL

[id(0x0000001B)]
HRESULT _stdcall CancelRange();

Beschreibung

Eine mit "ApplyRange" gesetzte Range kann hiermit rückgängig gemacht werden, sodass die Tabelle keiner Eingrenzung mehr unterliegt.


IAutoDataSet::SetKey Methode

Positionierungsfunktion.

IDL

[id(0x0000001C)]
HRESULT _stdcall SetKey();

Beschreibung

Versetzt die Tabelle in einen Suchmodus. Die auf "SetKey" folgenden Wertzuweisungen über "Fields" schreiben nicht direkt in die Tabelle, sondern werden als Suchparameter für "GotoKey" oder "GotoNearest" verwendet. Eventuelle Felder, die nicht verwendet werden, sind auch mit einem Wert zu versehen. Beispielsweise das 2. Indexfeld.AsString = "". Vgl. KeyFieldCount


IAutoDataSet::GotoKey Methode

Positionierungsfunktion.

IDL

[id(0x0000001D)]
HRESULT _stdcall GotoKey([out, retval] VARIANT_BOOL* Value);

Beschreibung

GotoKey positioniert den Datensatzzeiger auf den Datensatz, der den zuvor gesetzten Schlüsselwerten entspricht. Im Erfolgsfall wird "True" zurückgegeben.

Parameter

Parameter Beschreibung
[out, retval] VARIANT_BOOL* Value "True", wenn der Datensatz gefunden wurde

IAutoDataSet::GotoNearest Methode

Positionierungsfunktion.

IDL

[id(0x0000001E)]
HRESULT _stdcall GotoNearest();

Beschreibung

Positioniert den Datensatzzeiger auf den Datensatz, der dem zuvor gesetzten Schlüsselwert am nächsten kommt.


IAutoDataSet::Insert Methode

Fügt eine Datenzeile hinter die aktuelle Position der Tabelle hinzu.

IDL

[id(0x00000020)]
HRESULT _stdcall Insert();

Beschreibung

Die neue Datenzeile ist beschreibbar, bis "Post" aufgerufen wird. Damit diese Funktion erfolgreich durchgeführt werden kann, muss Zugriff auf die Tabelle bestehen.


IAutoDataSet::Name Eigenschaft

Der Tabellenname wird ermittelt.

IDL

__property BSTR* Name;

Beschreibung

Gibt den Namen der Tabelle zurück.

Parameter

Parameter Beschreibung
Value Rückgabewert: String, der den Tabellennamen enthält

IAutoDataSet::Info Eigenschaft

Beschreibungstext dieser Datentabelle.

IDL

__property BSTR* Info;

Beschreibung

Gibt einen Informationsstring zu dieser Datentabelle zurück.

Parameter

Parameter Beschreibung
Value Gibt einen String mit der Beschreibung zurück

IAutoDataSet::State Eigenschaft

Datenstatus der aktuellen Datentabelle ermitteln.

IDL

__property enum DataSetState* State;

Beschreibung

Gibt einen DataSetState zurück. Anhand dieses Wertes kann der Status der Tabelle ermittelt und dann entsprechend gehandelt werden. Diese Information ist z. B. bei Fehlern interessant, da ermittelt werden kann, ob die gewünschte Operation durchführbar ist.

Parameter

Parameter Beschreibung
Value Rückgabewert: Ein Aufzählungswert des Typs DataSetState, das den aktuellen Status der Tabelle beschreibt

IAutoDataSet::PostNestedDataSet Methode

Spezielles Post für NestedDataSets.

IDL

[id(0x0000000B)]
HRESULT _stdcall PostNestedDataSet();

Beschreibung

Dieser Aufruf wird zum Schreiben von NestedDataSets benötigt. Ein einfacher "Post" der Tabelle reicht nicht aus.

Delphi-Beispiel: NestedDataSet schreiben
DataSetArtikel.Edit;
NestedUmsatz.Append;
NestedUmsatz.Fields['UmsMrz'].AsFloat := 100;
NestedUmsatz.Fields['UmsFeb'].AsFloat := 99;
NestedUmsatz.Post;
NestedUmsatz.PostNestedDataSet;
DataSetArtikel.Post;

IAutoDataSet::NestedDataSets Eigenschaft

Auflistung aller Datentabellen die innerhalb der aktuellen Tabelle abgelegt sind.

IDL

__property AutoNestedDataSets** NestedDataSets;

Beschreibung

Gibt eine AutoNestedDataSets Auflistung zurück. AutoDataSet.NestedDataSets.Item(Name oder Index)

Parameter

Parameter Beschreibung
Value Gibt ein AutoNestedDataSets Interface zurück

IAutoDataSet::OrgName Eigenschaft

Der interne Tabellenname wird ermittelt.

IDL

__property BSTR* OrgName;

Beschreibung

Gibt den Namen der Tabelle zurück, der für den Funktionsaufruf "CreateDataSet" verwendet werden kann.

Parameter

Parameter Beschreibung
Value Rückgabewert: String, der den internen Namen enthält

IAutoDataSet::DeleteTable Methode

Löscht eine Tabelle.

IDL

[id(0x00000015)]
HRESULT _stdcall DeleteTable();

Beschreibung

Löscht die Tabelle als Ganzes (der Aufruf dieser Funktion sollte niemals notwendig sein). Eine auf diese Weise gelöschte Tabelle kann nicht mehr wiederhergestellt werden. Zur Wiederherstellung muss eine Datenrücksicherung durchgeführt werden.


IAutoDataSet::GetInfoString Methode

Kurze Beschreibung der Tabelle.

IDL

[id(0x00000016)]
HRESULT _stdcall GetInfoString([out, retval] BSTR* Value);

Beschreibung

Gibt eine kurze Beschreibung der Tabelle zurück.

Parameter

Parameter Beschreibung
[out, retval] BSTR* Value Rückgabewert: String mit der Beschreibung

IAutoDataSet::EditRangeStart Methode

Positionierungsfunktion.

IDL

[id(0x00000013)]
HRESULT _stdcall EditRangeStart();

Beschreibung

Ermöglicht das nachträgliche Ändern der "Von"-Werte eines bestehenden Range.


IAutoDataSet::EditRangeEnd Methode

Positionierungsfunktion.

IDL

[id(0x00000014)]
HRESULT _stdcall EditRangeEnd();

Beschreibung

Ermöglicht das nachträgliche Ändern der "Bis"-Werte eines bestehenden Range.


IAutoDataSet::EditKey Methode

Positionierungsfunktion.

IDL

[id(0x0000001F)]
HRESULT _stdcall EditKey();

Beschreibung

Ermöglicht das nachträgliche Ändern der Suchparameter für GotoKey/GotoNearest.


IAutoDataSet::IsRanged Eigenschaft

Statusangabe zum Range.

IDL

__property VARIANT_BOOL* IsRanged;

Beschreibung

Gibt an, ob die Tabelle aktuell einem Range unterliegt.

Parameter

Parameter Beschreibung
Value "True", wenn ein Range gesetzt ist

IAutoDataSet::KeyFieldCount Eigenschaft

Beschreibt die Anzahl der Felder im aktuellen Index.

IDL

__property long KeyFieldCount;

Beschreibung

Gibt die Anzahl der Felder im aktuellen Index zurück oder legt die neue Anzahl fest. Dabei kann einem Index mit z.B. 3 Feldern ein Wert "1" zugewiesen werden, wonach nur noch das erste Feld für SetRange gefüllt werden muss.

Delphi-Beispiel: KeyFieldCount einschränken
DataSetAdressen.Indices.Item("Viele Felder").Select;
DataSetAdressen.SetRangeStart;
DataSetAdressen.Fields.Item("Feld1").AsInteger := 10000;
DataSetAdressen.Fields.Item("Feld2").AsInteger := 10000;
DataSetAdressen.KeyFieldCount := 2;
DataSetAdressen.SetRangeEnd;
DataSetAdressen.Fields.Item("Feld1").AsInteger := 30000;
DataSetAdressen.Fields.Item("Feld2").AsInteger := 30000;
DataSetAdressen.KeyFieldCount := 2;
DataSetAdressen.ApplyRange;

Hinweis bei gemischten Indexfeldern

Bitte beachten Sie, dass in verschiedenen Situationen Probleme auftreten können. Wenn z.B. ein Index, der aus Strings und numerischen Werten zusammengesetzt ist, durch KeyFieldCount auf Indexfelder reduziert wird die nur den Datentyp String enthalten. Daraus ergibt sich die Notwendigkeit das Anfangswert und Endwert der String Range unterschiedlich sein müssen, um eine Ergebnismenge erhalten zu können. Es muss dem Endwert des Ranges noch etwas angefügt werden. Verwenden Sie z.B. den String 'ZZZZZ'.

Delphi-Beispiel: KeyFieldCount mit String-Index
bpTbl := BpApp.DataSetInfos('Anschriften').CreateDataSet;
bpTbl.Indices.Item('AdrNrAnsNr').Select;
bpTbl.SetRangeStart;
bpTbl.Fields('AdrNr').AsString := '10000';
bpTbl.KeyFieldCount := 1;
bpTbl.SetRangeEnd;
bpTbl.Fields('AdrNr').AsString := '10000' + 'ZZZZZ';
bpTbl.KeyFieldCount := 1;
bpTbl.ApplyRange;

IAutoDataSet::GotoCurrentOf Methode

Positionierungsfunktion.

IDL

[id(0x0000002B)]
HRESULT _stdcall GotoCurrentOf([in] AutoDataSet* DataSet, [out, retval] VARIANT_BOOL* Value);

Beschreibung

Synchronisiert den Datensatzzeiger der aktuellen Tabelle mit dem der angegebenen Tabelle. Sollte die Operation nicht erfolgreich sein, wenn z. B. der Datensatz nicht in beiden Tabellen vorhanden ist, wird "False" zurückgegeben. Diese Funktion ist nur für Tabellen, die denselben Aufbau haben, vorgesehen.

Parameter

Parameter Beschreibung
[in] AutoDataSet* DataSet Die Datentabelle, zu deren aktuellem Datensatz gesprungen werden soll
[out, retval] VARIANT_BOOL* Value Rückgabewert: "True" im Erfolgsfall, ansonsten "False"

IAutoDataSet::IsEmpty Eigenschaft

Statusanzeige einer Tabelle.

IDL

__property VARIANT_BOOL* IsEmpty;

Beschreibung

Dieser Wert ist "True", wenn die Tabelle keine Datensätze enthält.

Parameter

Parameter Beschreibung
Value Gibt "True" zurück, wenn die Tabelle keine Datensätze enthält. Ansonsten "False"

IAutoDataSet::StartTransaction Methode

Startet eine Transaktion.

IDL

[id(0x00000028)]
HRESULT _stdcall StartTransaction();

Beschreibung

Startet eine Transaktion. Damit deklariert die Applikation gegenüber der Datenbank, dass Sie die Tabelle aktuell alleine benötigt. Lassen Sie Ihre Applikation nie länger als notwendig in einer Transaktion stehen, da ansonsten niemand für die Dauer der Aktion in der Tabelle schreiben kann.

Delphi-Beispiel: Transaktion mit Fehlerbehandlung
procedure Transact;
begin
  DataSet.StartTransaction;
  try
    while not Dataset.Eof do
    begin
      Try
        DataSet.Edit;
        DataSet.Fields.Item('Info').Text := 'wird Bearbeitet';
        DataSet.Post;
      Except
        BpApp.Writeln('Exception');
        DataSet.Cancel;
        raise;
      End;
      DataSet.Next;
    end;
    DataSet.Commit;
  Except
    DataSet.Rollback;
  end;
end;

procedure Main;
begin
  try
    Transact;
  Except
    on e: Exception do
    begin
      ShowMessage('Es ist ein Fehler aufgetreten: ' + e.Message);
      raise;
    end;
  end;
end;

IAutoDataSet::Commit Methode

Schließt eine Transaktion ab.

IDL

[id(0x00000029)]
HRESULT _stdcall Commit();

Beschreibung

Schließt eine erfolgreiche Transaktion ab. Die Tabelle wird festgeschrieben.


IAutoDataSet::Rollback Methode

Macht eine Transaktion rückgängig.

IDL

[id(0x0000002C)]
HRESULT _stdcall Rollback();

Beschreibung

Sollte ein Fehler aufgetreten sein, nutzen Sie "Rollback", um die Tabelle in den Zustand vor "StartTransaction" oder "TryStartTransaction" zurückzusetzen.


IAutoDataSet::TryStartTransaction Methode

Versucht eine Transaktion zu starten.

IDL

[id(0x0000002D)]
HRESULT _stdcall TryStartTransaction([out, retval] VARIANT_BOOL* Value);

Beschreibung

Versucht eine Transaktion zu starten. Im Erfolgsfall ist der Rückgabewert "True". Lassen Sie Ihre Applikation nie länger als notwendig in einer Transaktion stehen, da ansonsten niemand für die Dauer der Aktion in der Tabelle schreiben kann.

Verwenden Sie "TryStartTransaction", wenn Sie Quelltext schreiben, der manchmal innerhalb einer Transaction ausgeführt wird und manchmal nicht. Sollte bereits eine Transaktion bestehen, wird "False" zurückgegeben und die Tabelle muss so verarbeitet werden als sei keine Transaktion vorhanden.

Parameter

Parameter Beschreibung
[out, retval] VARIANT_BOOL* Value Rückgabewert: "True", wenn erfolgreich eine Transaktion gestartet werden konnte. "False", wenn aktuell eine Transaktion aktiv ist
Delphi-Beispiel: TryStartTransaction mit verschachteltem Aufruf
// Bsp1:
// ....
//  Arbeite...
//  BpTblAendern;
//  Arbeite...
// ...

// Bsp2:
// ...
//  BpHauptTabelle.StartTransaction;
//  try
//    Arbeite...
//    BpTblAendern;
//    Arbeite...
//    BpHauptTabelle.Commit;
//  except
//    BpHauptTabelle.RollBack;
//  end;
// ...

procedure BpTblAendern;
begin
  TransactionStarted := BpTbl.TryStartTransaction;
  try
    BpTbl.Edit;
    BpTbl.Fields[Wert].AsBoolean := true;
    BpTbl.Post;
    if TransactionStarted then
      BpTbl.Commit;
  except
    if TransactionStarted then
      BpTbl.RollBack
    else
      BpTbl.TransactionCorrupted;
    raise;
  end;
end;

IAutoDataSet::TransactionCorrupted Methode

Kennzeichnet eine Transaktion als "defekt".

IDL

[id(0x00000030)]
HRESULT _stdcall TransactionCorrupted();

Beschreibung

Wenn "TransactionCorrupted" aufgerufen wird, kann ein "Commit" nicht mehr erfolgreich ausgeführt werden. Der Aufruf erzeugt beabsichtigt einen Fehler. Achtung, nicht alle Programmiersprachen können mit Exceptions umgehen.


IAutoDataSet::DeleteAll Methode

Löscht die gesamte Tabelle.

IDL

[id(0x0000002F)]
HRESULT _stdcall DeleteAll();

Beschreibung

Löscht alle Zeilen der aktuell geöffneten Tabelle. Damit diese Funktion erfolgreich durchgeführt werden kann, muss die Tabelle eine NestedTable sein und Zugriff auf die Tabelle bestehen.


IAutoDataSet::CheckDelete Methode

Zeigt ein Fenster für den Benutzer an, mit dem das Löschen von Daten bestätigt werden kann.

IDL

[id(0x0000002E)]
HRESULT _stdcall CheckDelete([in] VARIANT_BOOL aMeld, [in] VARIANT_BOOL aIgnoreWarnings, [out, retval] VARIANT_BOOL* aCanDelete);

Beschreibung

Hiermit kann geprüft werden, ob der gewählte Datensatz gelöscht werden soll. Der Benutzer bekommt ein eigenes Fenster mit Abfragen zu diesem Löschvorgang angezeigt.

Parameter

Parameter Beschreibung
[in] VARIANT_BOOL aMeld Bei "False" wird kein Fenster angezeigt. Bei "True" wird ein Fenster angezeigt
[in] VARIANT_BOOL aIgnoreWarnings "True", wenn weitere Einzelheiten angezeigt werden sollen. Beispielsweise wird in den Artikeln gemeldet, dass die Umsatzdaten dieses Artikels verloren gehen
[out, retval] VARIANT_BOOL* aCanDelete "True", wenn der Datensatz gelöscht werden soll, "False", wenn dies nicht geschehen soll

3.1.27 IAutoDataSet2 Interface

Von IAutoDataSet abstammendes Interface.

IDL

[ uuid(FAB6DBBE-7A53-469D-9817-3D4262F7F500), version(1.0), dual, oleautomation ]
interface IAutoDataSet2 : IAutoDataSet;

IAutoDataSet2 Eigenschaften

Die folgende Tabelle zeigt die Eigenschaften von IAutoDataSet2.

Methoden

Name Beschreibung
Append Fügt eine Datenzeile am Ende der Tabelle hinzu.
ApplyRange Positionierungsfunktion.
Cancel Die Datentabelle wird zurückgesetzt.
CancelRange Positionierungsfunktion.
CheckDelete Zeigt ein Fenster für den Benutzer an, mit dem das Löschen von Daten bestätigt werden kann.
ClearFields Löscht den Inhalt aller Felder der aktiven Datenzeile.
Commit Schließt eine Transaktion ab.
Delete Löscht die aktuelle Datenzeile.
DeleteAll Löscht die gesamte Tabelle.
DeleteTable Löscht eine Tabelle.
Duplicate Dupliziert eine Tabelle.
Edit Die aktuelle Datenzeile wird geändert.
EditKey Positionierungsfunktion.
EditRangeEnd Positionierungsfunktion.
EditRangeStart Positionierungsfunktion.
First Positionierungsfunktion.
GetInfoString Kurze Beschreibung der Tabelle.
GotoCurrentOf Positionierungsfunktion.
GotoKey Positionierungsfunktion.
GotoNearest Positionierungsfunktion.
Insert Fügt eine Datenzeile hinter die aktuelle Position der Tabelle hinzu.
IsRanged Statusangabe zum Range.
Last Positionierungsfunktion.
Next Positionierungsfunktion.
Post Die Datentabelle wird geschrieben.
PostNestedDataSet Spezielles Post für NestedDataSets.
Prior Positionierungsfunktion.
Rollback Macht eine Transaktion rückgängig.
SetKey Positionierungsfunktion.
SetRangeEnd Positionierungsfunktion.
SetRangeStart Positionierungsfunktion.
SetSatzDatum Datensatzänderung per COM bearbeiten
StartTransaction Startet eine Transaktion.
TransactionCorrupted Kennzeichnet eine Transaktion als "defekt".
TryStartTransaction Versucht eine Transaktion zu starten.

Eigenschaften

Name Beschreibung
Application Zugriff auf das Basisobjekt, von dem alle Interfaces abstammen.
AutoSetSatzDatum Automatisch das aktuelle Datum setzen.
Bof Zeigt an ob der Anfang einer Tabelle erreicht ist.
Bookmark Der Rückgabewert dient zum eindeutigen Identifizieren dieses Datensatzes.
Eof Zeigt an ob das Ende einer Tabelle erreicht ist.
Fields Liste aller AutoField Elemente.
Indices Liste aller Indices.
Info Beschreibungstext dieser Datentabelle.
IsEmpty Statusanzeige einer Tabelle.
KeyFieldCount Beschreibt die Anzahl der Felder im aktuellen Index.
Name Der Tabellenname wird ermittelt.
NestedDataSets Auflistung aller Datentabellen die innerhalb der aktuellen Tabelle abgelegt sind.
OrgName Der interne Tabellenname wird ermittelt.
Parent Gibt das Parent Interface zurück.
RecordCount Gibt die Anzahl an Datenzeilen zurück.
State Datenstatus der aktuellen Datentabelle ermitteln.

IAutoDataSet2::SetSatzDatum Methode

Datensatzänderung per COM bearbeiten.

IDL

[id(0x00000027)]
HRESULT _stdcall SetSatzDatum([in] DATE ErstDat, [in] BSTR ErstBzr, [in] DATE AendDat, [in] BSTR AendBzr);

Beschreibung

Funktion, um im Datensatz die Werte für Erstellungsdatum, Erstellungsbenutzer und letzte Änderungsdatum, letzter Änderungsbenutzer zu setzen.

Parameter

Parameter Beschreibung
[in] DATE ErstDat Datum, wann der Datensatz erstellt wird
[in] BSTR ErstBzr Benutzerkurzkennung, die für den Ersteller abgelegt wird
[in] DATE AendDat Datum, wann der Datensatz geändert wurde
[in] BSTR AendBzr Benutzerkurzkennung, die für den Änderungsbenutzer hinterlegt wird

IAutoDataSet2::AutoSetSatzDatum Eigenschaft

Automatisch das aktuelle Datum setzen.

IDL

__property VARIANT_BOOL AutoSetSatzDatum;

Beschreibung

Der Zeitpunkt des Postens wird als Zeit verwendet, sowie der Kurzname des angemeldeten Benutzers. Dieser Aufruf muss immer nach einem "Edit", "Append" oder "Insert" erfolgen.


3.1.28 IAutoDataSet3 Interface

Von IAutoDataset2 abstammendes Interface.

IDL

[ uuid(099BAF5A-2283-4AF0-80F1-CA166F802DA5), version(1.0), dual, oleautomation ]
interface IAutoDataSet3 : IAutoDataSet2;

IAutoDataSet3 Eigenschaften

Die folgende Tabelle zeigt die Eigenschaften von IAutoDataSet3.

Methoden

Name Beschreibung
Alle Methoden aus IAutoDataSet2
LockTable Sperrt eine Tabelle für gewisse Operationen.
UnlockTable Gesperrte Tabelle freigeben.
UnLockTableAll Alle Locks einer Tabelle freigeben.

Eigenschaften

Name Beschreibung
Alle Eigenschaften aus IAutoDataSet2
Filter Datenmengenoperation.
Filtered Datenmengenoperation.

IAutoDataSet3::LockTable Methode

Sperrt eine Tabelle für gewisse Operationen.

IDL

[id(0x00000032), helpstring("Diese Funktion kann z.b. Lese und Schreib Lock setzen indem Sie 2x malig Aufgerufen wird.")]
HRESULT _stdcall LockTable([in] enum dbLockType LockType);

Beschreibung

Fordert einen "TableLock" mit der übergebenen "Lock-Art" an. Wenn Sie mehrere Locking-Arten kombinieren möchten, rufen Sie die Funktion mehrmals nacheinander auf. Für einen Schreib- und Lese-Lock muss die Funktion zweimalig aufgerufen werden. Halten Sie die Zeit der Sperrung möglichst gering.

Parameter

Parameter Beschreibung
[in] enum dbLockType LockType Art der Sperre (siehe Aufzählungstyp dbLockType)

IAutoDataSet3::UnlockTable Methode

Gesperrte Tabelle freigeben.

IDL

[id(0x00000033)]
HRESULT _stdcall UnlockTable([in] enum dbLockType LockType);

Beschreibung

Gibt einen zuvor gesetzten Lock wieder frei.

Parameter

Parameter Beschreibung
[in] enum dbLockType LockType Art der freizugebenden Sperre

IAutoDataSet3::UnLockTableAll Methode

Alle Locks einer Tabelle freigeben.

IDL

[id(0x00000034)]
HRESULT _stdcall UnLockTableAll();

Beschreibung

Gibt alle gesetzten Locks dieser Tabelle frei.


IAutoDataSet3::Filter Eigenschaft

Datenmengenoperation.

IDL

__property BSTR Filter;

Beschreibung

Hier kann der Filterstring der Tabelle gesetzt werden. Damit können Datasets auch außerhalb der Funktionalität von Indices Datenmengen eingrenzen. Zum Löschen des Filters einfach einen leeren String übergeben.

Wird ein Dataset gefiltert, können nur Datensätze gelesen werden, die dem Filter entsprechen. Hier ein Beispiel:

Datenbankfeldname = 'gewünschter Filter Wert' OR Datenbankfeldname = 'anderer gewünschter Filter Wert'

Falls der Filter auch leere Werte in der Ergebnismenge enthalten soll, verwenden Sie das Schlüsselwort "NULL".

BelegNr <> 'RE000001' OR ArtNr = NULL

Beispiel, wie ein Filter für Datumswerte aussieht:

Delphi: 'Dat > ''30.03.2009'''
VB, C++, C#: "Dat > '30.03.2009'"

Falls Feldnamen mit Leerzeichen verwendet werden, müssen diese in eckige Klammern gesetzt werden:

[Meine Bezeichnung] = 'Filter Wert'
Operator Aufgabe
< Linker Operator kleiner als der Rechte
> Linker Operator größer als der Rechte
>= Linker Operator größer oder gleich dem Rechten
<= Linker Operator kleiner oder gleich dem Rechten
= Linker und Rechter Operator gleich
<> Linker und Rechter Operator sind ungleich
AND Wahr, wenn Linker und rechter Ausdruck dasselbe Ergebnis liefern
NOT Wahr, wenn Linker und rechter Ausdruck ein unterschiedliches logisches Ergebnis liefern
OR Entweder ist der Linke oder der Rechte Ausdruck wahr

Parameter

Parameter Beschreibung
Value String, der den Filter darstellt

IAutoDataSet3::Filtered Eigenschaft

Datenmengenoperation.

IDL

__property VARIANT_BOOL Filtered;

Beschreibung

Hiermit kann der Filterstring eines Datasets gesetzt werden. Erst wenn Filtered den Wert "True" hat, wird die Datenmenge eingeschränkt.

Parameter

Parameter Beschreibung
Value "True", um den Filter zu aktivieren

3.1.29 IAutoDataSet4 Interface

Von IAutoDataset3 abstammendes Interface.

IDL

[ uuid(4D678542-EF16-484C-9270-D525C480C4D7), version(1.0), dual, oleautomation ]
interface IAutoDataSet4 : IAutoDataSet3;

IAutoDataSet4 Eigenschaften

Die folgende Tabelle zeigt die Eigenschaften von IAutoDataSet4.

Methoden

Name Beschreibung
Alle Methoden aus IAutoDataSet3
MoveFromToHistory Automatisiert in/aus der/dem History/Archiv kopieren.

Eigenschaften

Name Beschreibung
Alle Eigenschaften aus IAutoDataSet3

IAutoDataSet4::MoveFromToHistory Methode

Automatisiert in/aus der/dem History/Archiv kopieren.

IDL

[id(0x00000035)]
HRESULT _stdcall MoveFromToHistory([out, retval] VARIANT_BOOL* Result);

Beschreibung

Je nach gewählter Datenbank verschiebt diese Funktion einen Datensatz in/aus der History/Archiv. Vorab ist zu prüfen, ob der gewählte Datensatz in der Zieldatenbank bereits enthalten ist. Der existierende Datensatz ist vorab zu löschen. In einigen Konstellationen kann es ansonsten zu dem Fehler "Key Violation" kommen, da für den Primärindex identische Datensätze erstellt werden könnten.

Parameter

Parameter Beschreibung
[out, retval] VARIANT_BOOL* Result Rückgabewert: Boolean "True" wenn erfolgreich kopiert wurde

3.1.30 IAutoDataSet5 Interface

Von IAutoDataSet4 abstammendes Interface.

IDL

[ uuid(05CDC003-70F7-4D23-B4F6-B51D6448F33C), version(1.0), dual, oleautomation ]
interface IAutoDataSet5 : IAutoDataSet4;

IAutoDataSet5 Eigenschaften

Die folgende Tabelle zeigt die Eigenschaften von IAutoDataSet5.

Methoden

Name Beschreibung
Alle Methoden aus IAutoDataSet4
DbFindNextNum VERALTET: Siehe Funktion "SetupNr" – Automatisiert die Erstellung einer Adressnummer im Standard Nummernkreis.

Eigenschaften

Name Beschreibung
Alle Eigenschaften aus IAutoDataSet4

IAutoDataSet5::DbFindNextNum Methode

VERALTET: Siehe Funktion "SetupNr"

Automatisiert die Erstellung einer Adressnummer im Standard Nummernkreis.

IDL

[id(0x00000036)]
HRESULT _stdcall DbFindNextNum([out, retval] BSTR* Result);

Beschreibung

Je nach aktueller Datenbank findet diese Funktion die nächste freie Nummer einer Datenbank. Diese Funktion wirkt aktuell nur bei einer Adressentabelle mit Standard Nummernkreis korrekt. Wenn Sie eine andere Nummerierung neuer Adressdatensätze benötigen, sollten Sie diese Funktion nicht verwenden.

Veraltet

Diese Funktion kann weiterhin aufgerufen werden. Sie sollten aber auf jeden Fall "SetupNr" für diese Funktionalität verwenden.

Parameter

Parameter Beschreibung
[out, retval] BSTR* Result String mit der nächsten freien Adressnummer

3.1.31 IAutoDataSet6 Interface

Ein von AutoDataSet5 abgeleitetes Interface.

IDL

[ uuid(C1166631-741D-4C1F-B09F-8E866CA9F45D), version(1.0), dual, oleautomation ]
interface IAutoDataSet6 : IAutoDataSet5;

Beschreibung

Ab Build: 3307.

IAutoDataSet6 Eigenschaften

Die folgende Tabelle zeigt die Eigenschaften von IAutoDataSet6.

Methoden

Name Beschreibung
Alle Methoden aus IAutoDataSet5
IDString Diese Funktion gibt einen ID String zurück.

Eigenschaften

Name Beschreibung
Alle Eigenschaften aus IAutoDataSet5

IAutoDataSet6::IDString Methode

Diese Funktion gibt einen ID String zurück.

IDL

[id(0x000000C9)]
HRESULT _stdcall IDString([out, retval] BSTR* Result);

Beschreibung

Die Funktion IDString ist eine Möglichkeit einen Datensatz in der microtech Software eindeutig zu identifizieren auch wenn der Datensatz z.B. verschoben wird. Die Positionierung erfolgt über einen internen Kennzeichner. Daraus ergibt sich das diese Kennung auch nach diversen Aktionen mit dem Datensatz noch gefunden werden kann. Darunter fällt z.B. Verschieben und Nummernkreis-Anpassungen.

Parameter

Parameter Beschreibung
[out, retval] BSTR* Result String, der den Wert des aktuellen Datensatz beschreibt

Siehe auch: IAutoApplication9::CreateDataSetFromId


3.1.32 IAutoDataSet7 Interface

Von IAutoDataSet6 abstammendes Interface.

IDL

[ uuid(46169101-5B24-496A-8418-5BEFE4475879), version(1.0), dual, oleautomation ]
interface IAutoDataSet7 : IAutoDataSet6;

Beschreibung

Ab Build: 3650.

IAutoDataSet7 Eigenschaften

Die folgende Tabelle zeigt die Eigenschaften von IAutoDataSet7.

Methoden

Name Beschreibung
Alle Methoden aus IAutoDataSet6
SetupNr Belegt eine Adressnummer für den nächsten neuen Datensatz vor.

Eigenschaften

Name Beschreibung
Alle Eigenschaften aus IAutoDataSet6

IAutoDataSet7::SetupNr Methode

Belegt eine Adressnummer für den nächsten neuen Datensatz vor.

IDL

[id(0x00000385)]
HRESULT _stdcall SetupNr([in] BSTR VgbNr, [out, retval] BSTR* Result);

Beschreibung

SetupNr wird vor allem für die Adressnummernvergabe verwendet. Es gibt 2 Modi:

  • Vorgegebene Nummer
  • Automatisch vergebene Nummer

Diese Funktion wird hauptsächlich in der Adressen Tabelle genutzt. Bei der Neuanlage von Adressen kann hierüber entweder anhand eines vorgegebenen Nummernkreises eine Nummer für die Adresse automatisch vergeben werden oder eine gewünschte übergebene Nummer geprüft werden. Das folgende Beispiel zeigt die Verwendung zur automatischen Vergabe einer Nummer. Damit dabei eine Vorbelegung aus den Parametern erfolgen kann, muss vor dem Post der Adressentabelle das Statusfeld beschrieben sein. Wenn dieser Status in den Parametern gefunden wird und eine Vorgabenummer dafür besteht, wird die Nummerierung dort geholt.

C#-Beispiel: Automatische Nummernvergabe
public bool UpdateOrInsertAdress(ref string Adressnummer, IFieldValue[] Values)
{
  BpNT.AutoDataSet DataSet;
  IFieldMetaInformation Meta;
  DataSet = null;
  try
  {
    if (string.IsNullOrEmpty(Adressnummer))
    {
      // erstelle Adresse in microtech ERP
      DataSet = BpApp(false).CreateDataSetFromId("Adr.0.0");
      DataSet.Append();
      NeedMainNumber = true;
    }
    else
    {
      // ändere eine Adresse in microtech ERP
      DataSet = BpApp(false).CreateDataSetFromId(Adressnummer);
      if (DataSet.IDString() == Adressnummer)
      {
        DataSet.Edit();
      }
      else
      {
        DataSet = null;
        DataSet = BpApp(false).CreateDataSetFromId("Adr.0.0");
        DataSet.Append();
      }
    }
  }
  for (int i = 0; i < Values.GetLength(0); i++)
  {
    // Werte eintragen
  }
  // Die Zuordnung des Status kann natürlich auch an anderer Stelle erfolgen
  DataSet.Fields["Status"]
  ///////////////////
  DataSet.SetupNr("");
  ///////////////////
  try
  {
    DataSet.Post();
  }
  catch (Exception ex)
  {
    DataSet.Cancel();
    BpMessageBox.Show("Das Übernehmen von Daten war nicht möglich.\r\nOftmals ist ein Datenwert fehlerhaft."
      + ex.Message);
  }
  System.Runtime.InteropServices.Marshal.ReleaseComObject(DataSet);
  DataSet = null;
  return true;
}
catch (Exception ex)
{
  if (DataSet != null)
  {
    DataSet.Cancel();
    System.Runtime.InteropServices.Marshal.ReleaseComObject(DataSet);
    DataSet = null;
  }
  BpMessageBox.Show("Beim übertragen von Daten ist ein Fehler aufgetreten.\r\n" + ex.Message);
  return false;
}
C#-Beispiel: Eigene Nummernvorgabe
public bool UpdateOrInsertAdress(ref string Adressnummer, IFieldValue[] Values)
{
  BpNT.AutoDataSet DataSet;
  IFieldMetaInformation Meta;
  string AdressNumber;
  string PostedAdressNumber;
  DataSet = null;
  try
  {
    if (string.IsNullOrEmpty(Adressnummer))
    {
      DataSet = BpApp(false).CreateDataSetFromId("Adr.0.0");
      DataSet.Append();
      NeedMainNumber = true;
    }
    else
    {
      DataSet = BpApp(false).CreateDataSetFromId(Adressnummer);
      if (DataSet.IDString() == Adressnummer)
      {
        DataSet.Edit();
      }
      else
      {
        DataSet = null;
        DataSet = BpApp(false).CreateDataSetFromId("Adr.0.0");
        DataSet.Append();
      }
    }
  }
  for (int i = 0; i < Values.GetLength(0); i++)
  {
    // Werte eintragen
  }
  AdressNumber = "1000";
  ///////////////////////////////////////////////////
  PostedAdressNumber = DataSet.SetupNr(AdressNumber);
  ///////////////////////////////////////////////////
  if (PostedAdressNumber != AdressNumber)
  {
    // Melde das die ursprüngliche Nummer nicht gesetzt werden konnte.
  }
  try
  {
    DataSet.Post();
  }
  catch (Exception ex)
  {
    DataSet.Cancel();
    BpMessageBox.Show("Das Übernehmen von Daten war nicht möglich.\r\nOftmals ist ein Datenwert fehlerhaft."
      + ex.Message);
  }
  System.Runtime.InteropServices.Marshal.ReleaseComObject(DataSet);
  DataSet = null;
  return true;
}
catch (Exception ex)
{
  if (DataSet != null)
  {
    DataSet.Cancel();
    System.Runtime.InteropServices.Marshal.ReleaseComObject(DataSet);
    DataSet = null;
  }
  BpMessageBox.Show("Beim übertragen von Daten ist ein Fehler aufgetreten.\r\n" + ex.Message);
  return false;
}

Parameter

Parameter Beschreibung
[in] BSTR VgbNr "" (leer) für eine Automatische Vergabe; gefüllt für eine vorgegebene Nummer
[out, retval] BSTR* Result "True", wenn eine Nummer vergeben werden konnte.