Automatiska frågeproviders
Finns sedan version 2.384.99 via XLSX-arbetsbokens facade i Windows; automatiskt val av provider sker bara vid en explicit frågeuppdatering
Uppdatera en befintlig fråga
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 exponerar en dispatcher som ägs av arbetsboken, från lxQueryProviders; frigör inte dispatchern
TXLSXWorksheet.RefreshQueryTable(const AName: WideString; AMaxRows: Integer = 1000000; AOnProgress: TXLSQueryRefreshProgress = nil): Integer och överladdningen som tar ett nollbaserat AIndex väljer en befintlig fråga och använder den här dispatchern
Befintliga överladdningar som tar en explicit TXLSQueryTableProvider använder fortfarande den providern direkt, inklusive deras vägran vid saknad provider; de faller inte tillbaka till automatisk dispatch
Uppdateringen returnerar 1 vid lyckat resultat, 0 vid avbrott och -1 vid fel, med diagnostikkoderna 1401 och 1400 under xlsOperationRefresh; den befintliga transaktionella resultatappliceringen, schemavalideringen, literalsträngar och formateringsbeteendet gäller fortfarande
De här diagnostikvärdena heter xlsDiagnosticQueryRefreshCancelled och xlsDiagnosticQueryRefreshFailed; arbetsbokens skrivlås tas innan statuskonverteringen, så en fryst läsvy eller annat skrivlåsavslag utlöser ett undantag
Att öppna och spara en arbetsbok hämtar aldrig anslutningsdata, utvärderar aldrig frågor och agerar aldrig på sparad RefreshOnLoad-metadata; uppdatera uttryckligen varje fråga som behövs innan dess resultat sparas
Stödda inbyggda providers
xlckTextläser lokal avgränsad text eller text med fast bredd, med strikt avkodning i UTF-8, UTF-16LE, UTF-16BE, Windows-1252 eller Latin-1, konfigurerade startrader och stödda fälttyper, inklusive sex datumordningar och överhoppade fält; avgränsade indata stöder också citerade flerradiga posterxlckAdo,xlckOleDbochxlckOdbcanvänder installerade Windows ADO- och databasdrivrutiner med skrivskyddade anslutningar och recordsets;CommandType = 2väljer SQL-text ochCommandType = 3väljer ett tabellkommandoxlckWebanvänder Windows WinHTTP för en anonym HTTP- eller HTTPS-GET av en enda icke-tom rektangulär HTML-tabell, vald via dess positiva index eller namn; stödda teckenkodningar för svaret är UTF-8, UTF-16, Windows-1252 och Latin-1
BaseDirectory anger basen endast för relativa lokala textsökvägar; databasanslutningssträngar och webb-URL:er förblir uttrycklig anslutningsmetadata
En ej angiven teckenkodning accepterar endast ASCII-indata, om inte en stödd byte order mark identifierar kodningen; icke-ASCII-indata kräver en uttryckligt stödd kodning eller en byte order mark
För en avgränsad Text-anslutning, sätt TextPrompt = False, TextDelimited = True och exakt en avgränsare, utan att sammanfoga upprepade avgränsare; nyskapade anslutningar frågar som standard och använder tabb som avgränsare, så rensa TextTab när du väljer en annan avgränsare
Text med fast bredd
Sätt TextPrompt = False och TextDelimited = False, lägg sedan till TextFields i strängt stigande nollbaserad Position-ordning med start på noll; varje fält slutar vid nästa position eller vid den fysiska postavslutaren, och xltiftSkip exkluderar sitt fält från resultatet
Positioner räknar avkodade UTF-16-kodenheter, inte indatabyte; en gräns som delar ett surrogatpar avslås, och CRLF, LF och CR avslutar poster oberoende av inställningarna för avgränsare och kvalificerare
Fältutfyllnad trimmas innan konverteringen, även vid uttryckligen typad text, vilket matchar det verifierade inbyggda beteendet vid import med fast bredd; citattecken, tabbar och avgränsartecken inuti ett fält förblir literal indata, och korta poster ger tomma efterföljande fält utan att det deklarerade schemat ändras
Utan TextFields är varje post ett allmänt fält; TextFirstRow väljer den första schemaposten, Query.Headers hoppar över den postens värden, och uttryckligen tomma poster förblir rader
Befintliga gränser för rader, indatabyte, resultatceller och fält på 32767 kodenheter gäller; ogiltig metadata, konverteringsfel eller överdriven indata rensar mellanlagrade data innan den transaktionella kalkylbladsuppdateringen, och ett avbrott bevarar de tidigare resultatcellerna
Connection.TextPrompt := False;
Connection.TextDelimited := False;
Connection.TextFields.Add(xltiftGeneral, 0);
Connection.TextFields.Add(xltiftText, 8);
Status := Sheet.RefreshQueryTable('Imported');
För en webbanslutning, sätt WebHtmlTables = True och WebHtmlFormat = 'none'; stödda begäranden avslår inbäddade autentiseringsuppgifter, fragment, autentisering och omdirigeringar
De inbyggda providrarna avslår metadata som inte stöds i sina respektive anslutningstyper; databasuppdatering avslår OLAP- eller serverkommandon, indirekta anslutningsfiler, lagrade lösenord och autentiseringsfrågor, Text-uppdatering avslår filfrågor, och webbuppdatering kräver anonym tabellmetadata
Typade databasparametrar
SQL-textkommandon stöder positionella ?-markörer som binds via ett ADO Command, i Connection.Parameters-ordning; parametervärden ersätter aldrig SQL-texten, och namn etiketterar bindningar utan att positionsordningen ändras
Preflight räknar markörer utanför enkelciterade strängar, dubbelciterade eller backtick-avgränsade identifierare, hakparentesidentifierare, radkommentarer och nästlade blockkommentarer, inklusive dubblerade citat- eller parentescapes; omatchade citattecken eller kommentarer samt avvikande markörantal avslås innan en anslutning öppnas
Använd ParameterType = 'value' med en uttrycklig ValueKind av xlcpvInteger, xlcpvDouble, xlcpvBoolean eller xlcpvString och dess motsvarande värdeegenskap; noll, False och tomma strängar är värden, och xlcpvNone härleder inget värde under körningen
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');
Använd ParameterType = 'cell', ValueKind = xlcpvCell och CellReference för en fullständigt kvalificerad lokal kalkylbladsreferens som Inputs!$A$1 eller 'Sales Input'!B2; citerade kalkylbladsnamn använder dubblerade apostrofer, och områden, externa arbetsböcker, namn samt okvalificerade cellreferenser avslås
Kalkylbladsuppdateringen ögonblicksbildar lagrade skalärvärden och tillgängliga formelcacher utan omberäkning eller materialisering av packade celler; saknade formelcacher och felceller avslås, medan en saknad eller tom cell ger SQL null endast med en uttryckligen stödd SQL-typ
Cellens ögonblicksbild behåller sin Variant-typ, vilket tillåter tecknade Int64-, Currency-, typade datum- och null-indata utan att de redureras till de bestående 32-bitars heltalsfälten eller Double-literalfälten; direkt lagrade datum-, null- och Int64-literaler ligger utanför den inbyggda parametermetadatamodellen, så använd typade cellbindningar för de värdena
SqlType använder ODBC:s SQL-typkoder, som mappas uttryckligen till ADO-typer; det är inte ett ADO DataTypeEnum-värde
| SQL-typkoder | Godtagna värden och bindningskontrakt |
|---|---|
0 | Härleds från den uttryckliga literaltypen eller cellens ursprungliga Variant: heltal, tecknat Int64, Single, Double, Currency, Boolean, datum eller Unicode-sträng; null kräver en uttrycklig SQL-typ |
4, 5, -5 | INTEGER, SMALLINT och BIGINT, med exakta heltalsvärden och validering mot det tecknade målintervallet |
7, 8, 6 | REAL, DOUBLE och FLOAT; endast numeriska indata, med förlustfri konvertering från heltal till flyttal och exakt Single-konvertering för REAL |
-7 | BIT accepterar Boolean-värden utan numerisk eller strängbaserad tvångskonvertering |
-8, -9, -10 | Unicode CHAR, VARCHAR och LONGVARCHAR bevarar UTF-16-strängar, inklusive tomma strängar |
1, 12, -1 | Icke-Unicode CHAR, VARCHAR och LONGVARCHAR accepterar endast ASCII-strängar; använd en Unicode-typ för andra tecken |
91, 92, 93, eller äldre 9, 10, 11 | DATE, TIME och TIMESTAMP accepterar typade datum-Variants utan att tolka text eller gissa en Excel-epok; DATE avslår en tidskomponent, och TIME kräver ett värde från noll inklusive till ett exklusivt |
Stödda uttryckliga typer accepterar också SQL null; matriser, referens-Variants, fel, icke-ändliga tal, SQL-typer som inte stöds och konverteringar som skulle tappa heltalsprecision avslås, och NUMERIC eller DECIMAL kräver precisions- och skalmetadata som det här bindnings-API:t inte tillhandahåller
ADO tar emot det typade värdet och den deklarerade storleken, med minst en kodenhet allokerad för tom text; inbyggda drivrutiner ansvarar fortfarande för SQL-dialekt, stödda parametertyper och resultatkonverteringar, så en installerad provider kan fortfarande avslå en giltig bindning eller ha smalare stöd för tal och datum
Jet och ACE använder typade OLE DATE-bindningar för validerade DATE-, TIME- och TIMESTAMP-värden för att bevara datum och tid oberoende av lokalberoende tidsstämpeltextprojiceringar; valideringsreglerna för DATE och TIME gäller fortfarande, och förmågan att projicera null förblir providerspecifik
Parametrar kräver ett SQL-textkommando och är begränsade till 1024 per hämtning, 255 kodenheter per namn och 32767 kodenheter per textvärde; kommandotext, parameterreferenser, namn och nyttolaster förbrukar också indatabytebudgeten
Frågor och okända parameterutökningsattribut avslås; RefreshOnChange förblir sparad metadata och utlöser ingen bakgrundsuppdatering, och öppning eller sparande löser inte celler eller kör kommandon
Direkt Fetch stöder literaler; FetchWithCellResolver(Connection, Query, MaxRows, out Data, var Abort, AResolver) tar en TXLSQueryParameterCellResolver-callback för cellvärden, vars Boolean-resultat anger om ett lagrat värde är tillgängligt
Callbacken gäller bara för anropet och sparas inte; automatisk kalkylbladsuppdatering tillhandahåller sin lokala resolver, och registrerade anpassade providers har fortfarande företräde och äger sina parametersemantiker
Webbuppdatering stöder vanliga text/html-tabeller utan översträckande celler, nästlade valda tabeller eller skriptstyrt innehåll; layouter och entiteter som inte stöds avslås i stället för att ge partiella data
Registrera en anpassad provider
Workbook.QueryProviders.RegisterProvider(xlckWeb, CustomProvider);
try
Status := Sheet.RefreshQueryTable('RemoteData');
finally
Workbook.QueryProviders.RegisterProvider(xlckWeb, nil);
end;
TXLSQueryProviderDispatcher.Create konstruerar en självägd dispatcher för direkt användning; arbetsboken skapar och äger sin egen instans
RegisterProvider(AKind: TXLSConnectionKind; AProvider: TXLSQueryTableProvider) installerar en lånad hanterare för en deklarerad anslutningstyp, och nil avregistrerar den; hanteraren måste överleva registreringen
En registrerad hanterare har företräde framför den inbyggda providern och kan stödja applikationsspecifik autentisering eller anslutningstyper; registreringsändringar, konfigurationsändringar och rekursiv dispatch avslås under hämtning, och ogiltiga enum-värden avslås före arrayåtkomst
Fetch(Connection, Query, MaxRows, out Data, var Abort) tar emot frikopplad metadata under kalkylbladsuppdateringen och returnerar en rektangulär TXLSQueryResultData; avbrott eller undantag rensar mellanlagrade resultat innan de vidarebefordras
Resursgränser
MaxInputBytes är 67108864 byte som standard och begränsar text- eller webbindata samt stödda databasresultatnyttolaster; MaxResultCells är 2000000 celler som standard och begränsar det rektangulära resultatet
TimeoutSeconds är 30 som standard och konfigurerar stödda inbyggda databas- eller HTTP-faser; det är ingen garanterad tidsgräns för hela åtgärden eller för en anpassad provider
Alla tre inställningarna och MaxRows måste vara positiva, och timeouten måste få plats i ett inbyggt millisekundheltal; dispatchern avslår överskottsvis rader, kolumner eller celler utan trunkering, medan byte- och indatagränserna tillämpas av de inbyggda providrarna och förblir den registrerade hanterarens ansvar vid anpassade hämtningar
Kalkylbladsuppdateringen validerar alla resultatvärden och återställer celler samt fråge- eller tabellmetadata efter avbrott eller appliceringsfel; anpassade providers ansvarar fortfarande för att respektera sina egna gränser för externa åtgärder
Inbyggda XLSX-resultatbindningar
Tabellbaserade databasfrågor använder relationen tabell-till-frågetabell, sammanhängande fält-ID, kolumnidentiteter och ett dolt lokalt målnamn; fristående stödda Text- och webbmål behåller sitt resultatområde
TXLSXTable.ColumnUniqueNames[Index]: WideString exponerar nollbaserade inbyggda kolumnidentiteter och bevarar dem genom tilldelning, kopiering och återöppning, tillsammans med ColumnQueryTableFieldIds
En äldre Text-anslutning som binds direkt som en extern tabell är ingen stödd inbyggd exportform, och sparandet avslår den innan utdata; uttryckligen uppdaterade textvärden kan fylla en vanlig tabell, eller så kan en installerad ADO/ODBC-textdrivrutin tillhandahålla en inbyggd tabellbaserad databasfråga
Orelaterade eller ostödda importerade relationer och tilläggs-XML förblir bevarade; den här funktionen omvandlar inte ogenomskinliga externa grafer till stödda uppdateringsbara frågor
Se anslutnings- och transaktionella fråge-API:er för målvalidering, progresscallbacks och den omgivande metadatamodellen