HotXLS-Dokumentation / API-Referenz

Automatische Abfrageprovider

Verfügbar ab Version 2.384.99 über die XLSX-Arbeitsmappen-Fassade unter Windows; die automatische Providerauswahl greift ausschließlich während einer expliziten Abfrageaktualisierung

Vorhandene Abfrage aktualisieren

Workbook.QueryProviders.BaseDirectory := 'C:\Data';
Workbook.QueryProviders.MaxInputBytes := 64 * 1024 * 1024;
Workbook.QueryProviders.MaxResultCells := 2000000;
Workbook.QueryProviders.TimeoutSeconds := 30;
Status := Sheet.RefreshQueryTable('ImportedData', 1000000);

TXLSXWorkbook.QueryProviders: TXLSQueryProviderDispatcher legt einen von der Arbeitsmappe besessenen Dispatcher aus lxQueryProviders offen; geben Sie den Dispatcher nicht selbst frei

TXLSXWorksheet.RefreshQueryTable(const AName: WideString; AMaxRows: Integer = 1000000; AOnProgress: TXLSQueryRefreshProgress = nil): Integer und die Überladung mit nullbasiertem AIndex wählen eine vorhandene Abfrage aus und verwenden diesen Dispatcher

Bestehende Überladungen, die einen expliziten TXLSQueryTableProvider entgegennehmen, nutzen diesen Provider weiterhin direkt, einschließlich ihrer bisherigen Zurückweisung eines fehlenden Providers; sie fallen nicht auf automatisches Dispatching zurück

Die Aktualisierung liefert 1 bei Erfolg, 0 bei Abbruch oder -1 bei Fehlschlag, mit den Diagnosecodes 1401 und 1400 unter xlsOperationRefresh; die bisherige transaktionale Ergebnisanwendung, die Schemavalidierung sowie das Verhalten für Literal-Strings und Formatierung bleiben in Kraft

Diese Diagnosen heißen xlsDiagnosticQueryRefreshCancelled und xlsDiagnosticQueryRefreshFailed; der Schreibschutz der Arbeitsmappe wird vor der Statuskonvertierung angefordert, daher löst ein eingefrorener Lese-View oder eine andere Schreibschutz-Zurückweisung eine Exception aus

Öffnen und Speichern einer Arbeitsmappe holt nie Verbindungsdaten, wertet nie Abfragen aus und greift nie auf gespeicherte RefreshOnLoad-Metadaten zurück; aktualisieren Sie jede benötigte Abfrage explizit, bevor Sie ihr Ergebnis speichern

Unterstützte eingebaute Provider

BaseDirectory dient ausschließlich als Basis für relative lokale Textpfade; Datenbank-Connection-Strings und Web-URLs bleiben explizite Verbindungsmetadaten

Eine nicht angegebene Textkodierung akzeptiert reinen ASCII-Input, sofern kein unterstütztes Byte Order Mark die Kodierung identifiziert; Nicht-ASCII-Input erfordert eine explizit unterstützte Kodierung oder ein Byte Order Mark

Für eine Textverbindung mit Trennzeichen setzen Sie TextPrompt = False, TextDelimited = True und genau ein Trennzeichen, ohne aufeinanderfolgende Trennzeichen zusammenzufassen; neu angelegte Verbindungen stehen standardmäßig auf Prompting und Tab-Trennzeichen, löschen Sie TextTab also, wenn Sie ein anderes Trennzeichen wählen

Text mit fester Breite

Setzen Sie TextPrompt = False und TextDelimited = False und fügen Sie dann TextFields in streng aufsteigender nullbasierter Position-Reihenfolge ab null hinzu; jedes Feld endet an der nächsten Position oder am physischen Record-Terminator, und xltiftSkip schließt sein Feld vom Ergebnis aus

Positionen zählen dekodierte UTF-16-Codeeinheiten statt Input-Bytes; eine Grenze, die ein Surrogatpaar spaltet, wird zurückgewiesen, und CRLF, LF und CR beenden Records unabhängig von Trennzeichen- und Qualifier-Einstellungen

Feld-Padding wird vor der Konvertierung entfernt, auch bei explizit typisiertem Text, passend zum verifizierten nativen Import mit fester Breite; Anführungszeichen, Tabs und Trennzeichen innerhalb eines Felds bleiben literale Eingabe, und kurze Records liefern leere nachfolgende Felder, ohne das deklarierte Schema zu ändern

Ohne TextFields ist jeder Record ein General-Feld; TextFirstRow wählt den ersten Schema-Record, Query.Headers überspringt die Werte dieses Records, und explizit leere Records bleiben Zeilen

Die bestehenden Limits für Zeilen, Input-Bytes, Ergebniszellen und 32767-Codeeinheiten pro Feld gelten weiter; ungültige Metadaten, Konvertierungsfehler oder übermäßiger Input räumen die Staging-Daten vor der transaktionalen Arbeitsblattaktualisierung weg, und ein Abbruch erhält die bisherigen Ergebniszellen

Connection.TextPrompt := False;
Connection.TextDelimited := False;
Connection.TextFields.Add(xltiftGeneral, 0);
Connection.TextFields.Add(xltiftText, 8);
Status := Sheet.RefreshQueryTable('Imported');

Für eine Web-Verbindung setzen Sie WebHtmlTables = True und WebHtmlFormat = 'none'; unterstützte Requests weisen eingebettete Credentials, Fragmente, Authentifizierung und Redirects zurück

Die eingebauten Provider weisen nicht unterstützte Metadaten ihrer jeweiligen Verbindungsart zurück; die Datenbankaktualisierung weist OLAP- oder Serverbefehle, Connection-File-Indirektion, gespeicherte Passwörter und Credential-Prompts zurück, die Textaktualisierung weist Datei-Prompts zurück, und die Web-Aktualisierung verlangt anonyme Tabellenmetadaten

Typisierte Datenbankparameter

SQL-Textbefehle unterstützen positionale ?-Marker, die über einen ADO Command gebunden werden, in der Reihenfolge von Connection.Parameters; Parameterwerte ersetzen nie den SQL-Text, und Namen beschriften Bindungen, ohne die positionale Reihenfolge zu ändern

Der Preflight zählt Marker außerhalb von einfach gequoteten Strings, doppelt gequoteten oder Backtick-Bezeichnern, geklammerten Bezeichnern, Zeilenkommentaren und verschachtelten Blockkommentaren, einschließlich verdoppelter Quote- oder Bracket-Escapes; nicht geschlossene Quotes oder Kommentare und Abweichungen bei der Markeranzahl weisen zurück, bevor eine Verbindung geöffnet wird

Verwenden Sie ParameterType = 'value' mit einem expliziten ValueKind aus xlcpvInteger, xlcpvDouble, xlcpvBoolean oder xlcpvString und der zugehörigen Wert-Property; null, False und leere Strings sind Werte, und xlcpvNone leitet während der Ausführung keinen Wert her

Connection.CommandType := 2;
Connection.CommandText := 'SELECT Amount FROM Sales WHERE Amount > ?';
with Connection.Parameters.Add do
begin
  Name := 'MinimumAmount';
  ParameterType := 'value';
  ValueKind := xlcpvInteger;
  IntegerValue := 0;
  SqlType := 4;
end;
Status := Sheet.RefreshQueryTable('SalesQuery');

Verwenden Sie ParameterType = 'cell', ValueKind = xlcpvCell und CellReference für eine voll qualifizierte lokale Arbeitsblattreferenz wie Inputs!$A$1 oder 'Sales Input'!B2; gequotete Blattnamen verwenden verdoppelte Apostrophe, während Bereiche, externe Arbeitsmappen, Namen und nicht qualifizierte Zellreferenzen zurückgewiesen werden

Die Arbeitsblattaktualisierung erfasst gespeicherte Skalarwerte und verfügbare Formel-Caches ohne Neuberechnung oder Materialisierung gepackter Zellen; fehlende Formel-Caches und Fehlerzellen weisen zurück, während eine fehlende oder leere Zelle nur mit einem explizit unterstützten SQL-Typ SQL-NULL liefert

Der Zell-Snapshot behält seinen Variant-Typ und erlaubt vorzeichenbehaftete Int64-, Currency-, typisierte Datums- und NULL-Eingaben, ohne sie auf die persistierten 32-Bit-Integer- oder Double-Literalfelder zu reduzieren; direkt gespeicherte Datum-, NULL- und Int64-Literale liegen außerhalb des nativen Parametermetadatenmodells, verwenden Sie für diese Werte also typisierte Zellbindungen

SqlType verwendet ODBC-SQL-Typcodes, die explizit auf ADO-Typen gemappt werden; es ist kein ADO-DataTypeEnum-Wert

SQL-TypcodesAkzeptierte Werte und Bindungskontrakt
0Ableitung aus der expliziten Literalart oder dem ursprünglichen Zell-Variant: Integer, vorzeichenbehaftetes Int64, Single, Double, Currency, Boolean, Datum oder Unicode-String; NULL erfordert einen expliziten SQL-Typ
4, 5, -5INTEGER, SMALLINT und BIGINT, mit exakten integralen numerischen Werten und Validierung gegen den vorzeichenbehafteten Zielbereich
7, 8, 6REAL, DOUBLE und FLOAT; nur numerische Eingaben, mit verlustfreier Integer-zu-Fließkomma-Konvertierung und exakter Single-Konvertierung für REAL
-7BIT akzeptiert Boolean-Werte ohne numerische oder String-Koercion
-8, -9, -10Unicode-CHAR, VARCHAR und LONGVARCHAR erhalten UTF-16-Strings einschließlich leerer Strings
1, 12, -1Nicht-Unicode-CHAR, VARCHAR und LONGVARCHAR akzeptieren nur ASCII-Strings; verwenden Sie einen Unicode-Typ für andere Zeichen
91, 92, 93 oder die Legacy-Codes 9, 10, 11DATE, TIME und TIMESTAMP akzeptieren typisierte Datum-Variants ohne Textparsing oder Raten einer Excel-Epoche; DATE weist eine Zeitkomponente zurück, und TIME verlangt einen Wert von null einschließlich bis eins exklusive

Unterstützte explizite Typen akzeptieren auch SQL-NULL; Arrays, Referenz-Variants, Fehler, nicht endliche Zahlen, nicht unterstützte SQL-Typen und Konvertierungen, die Integer-Präzision verlieren würden, weisen zurück, und NUMERIC oder DECIMAL verlangen Präzisions- und Scale-Metadaten, die diese Bindungs-API nicht liefert

ADO erhält den typisierten Wert und die deklarierte Größe, mit mindestens einer allokierten Codeeinheit für leeren Text; native Treiber bleiben für SQL-Dialekt, unterstützte Parametertypen und Ergebniskonvertierungen verantwortlich, daher kann ein installierter Provider weiterhin eine gültige Bindung zurückweisen oder engere numerische bzw. Datumsfähigkeiten haben

Jet und ACE verwenden typisierte OLE-DATE-Bindungen für validierte DATE-, TIME- und TIMESTAMP-Werte, um Datum und Zeit unabhängig von gebietsabhängigen Zeitstempel-Textprojektionen zu erhalten; die DATE- und TIME-Validierungsregeln gelten weiterhin, und die NULL-Projektionsfähigkeiten bleiben providerspezifisch

Parameter erfordern einen SQL-Textbefehl und sind auf 1024 pro Fetch, 255 Codeeinheiten pro Name und 32767 Codeeinheiten pro Textwert begrenzt; Befehlstext, Parameterreferenzen, Namen und Payloads zählen ebenfalls gegen das Input-Byte-Budget

Prompts und unbekannte Parameter-Erweiterungsattribute weisen zurück; RefreshOnChange bleibt gespeicherte Metadaten und löst keine Hintergrundaktualisierung aus, und Öffnen oder Speichern löst keine Zellen auf und führt keine Befehle aus

Direktes Fetch unterstützt Literale; FetchWithCellResolver(Connection, Query, MaxRows, out Data, var Abort, AResolver) nimmt einen TXLSQueryParameterCellResolver-Callback für Zellwerte entgegen, dessen Boolean-Ergebnis anzeigt, ob ein gespeicherter Wert verfügbar ist

Der Callback ist auf den Aufruf beschränkt und wird nicht zurückgehalten; die automatische Arbeitsblattaktualisierung stellt ihren lokalen Resolver bereit, und registrierte Custom-Provider behalten weiterhin Vorrang und besitzen ihre Parametersemantik

Die Web-Aktualisierung unterstützt einfache text/html-Tabellen ohne spanning cells, ohne verschachtelte ausgewählte Tabellen und ohne skriptgetriebene Inhalte; nicht unterstützte Layouts und Entities weisen zurück, statt partielle Daten zu erzeugen

Custom-Provider registrieren

Workbook.QueryProviders.RegisterProvider(xlckWeb, CustomProvider);
try
  Status := Sheet.RefreshQueryTable('RemoteData');
finally
  Workbook.QueryProviders.RegisterProvider(xlckWeb, nil);
end;

TXLSQueryProviderDispatcher.Create konstruiert einen unabhängig besessenen Dispatcher für die direkte Verwendung; die Arbeitsmappe erzeugt und besitzt ihre eigene Instanz

RegisterProvider(AKind: TXLSConnectionKind; AProvider: TXLSQueryTableProvider) installiert einen geliehenen Handler für eine deklarierte Verbindungsart, und nil meldet ihn ab; der Handler muss die Registrierung überdauern

Ein registrierter Handler hat Vorrang vor dem eingebauten Provider und kann anwendungsspezifische Authentifizierung oder Verbindungsarten unterstützen; Registrierungsänderungen, Konfigurationsänderungen und rekursives Dispatching weisen während des Fetches zurück, und ungültige Enum-Werte weisen vor dem Arrayzugriff zurück

Fetch(Connection, Query, MaxRows, out Data, var Abort) erhält während der Arbeitsblattaktualisierung abgekoppelte Metadaten und gibt rechteckige TXLSQueryResultData zurück; Abbruch oder Exceptions räumen die Staging-Ergebnisse auf, bevor sie weitergereicht werden

Ressourcenlimits

MaxInputBytes steht standardmäßig auf 67108864 Bytes und begrenzt Text- oder Web-Input sowie unterstützte Datenbank-Ergebnis-Payloads; MaxResultCells steht standardmäßig auf 2000000 Zellen und begrenzt das rechteckige Ergebnis

TimeoutSeconds steht standardmäßig auf 30 und konfiguriert unterstützte native Datenbank- oder HTTP-Phasen; es ist keine garantierte Deadline für die komplette Operation oder für einen Custom-Provider

Alle drei Einstellungen und MaxRows müssen positiv sein, und der Timeout muss in einen nativen Millisekunden-Integer passen; der Dispatcher weist überschüssige Zeilen, Spalten oder Zellen ohne Abschneiden zurück, während Byte- und Input-Limits von den eingebauten Providern durchgesetzt werden und bei Custom-Fetches in der Verantwortung des registrierten Handlers bleiben

Die Arbeitsblattaktualisierung validiert alle Ergebniswerte und stellt Zellen sowie Abfrage- bzw. Tabellenmetadaten nach Abbruch oder Anwendungsfehlern wieder her; Custom-Provider bleiben dafür verantwortlich, ihre eigenen Limits externer Operationen einzuhalten

Native XLSX-Ergebnisbindungen

Datenbankabfragen mit Tabellenbindung nutzen die Table-zu-QueryTable-Beziehung, kohärente Feld-IDs, Spaltenidentitäten und einen versteckten lokalen Zielnamen; eigenständige unterstützte Text- und Web-Ziele behalten ihren Ergebnisbereich

TXLSXTable.ColumnUniqueNames[Index]: WideString legt nullbasierte native Spaltenidentitäten offen und erhält sie zusammen mit ColumnQueryTableFieldIds über Zuweisung, Kopieren und erneutes Öffnen hinweg

Eine Legacy-Textverbindung, die direkt als externe Tabelle gebunden ist, ist keine unterstützte native Exportform, und das Speichern weist sie vor der Ausgabe zurück; explizit aktualisierte Textwerte können eine gewöhnliche Tabelle füllen, oder ein installierter ADO/ODBC-Texttreiber liefert eine native tabellengebundene Datenbankabfrage

Nicht verwandte oder nicht unterstützte importierte Beziehungen und Erweiterungs-XML bleiben erhalten; dieses Feature wandelt opake externe Graphen nicht in unterstützte, aktualisierbare Abfragen um

Siehe Verbindungs- und transaktionale Abfrage-APIs für Zielvalidierung, Progress-Callbacks und das umgebende Metadatenmodell