est ici que je l'ai fait il y a un moment - sachez qu'il peut être à jour:
const
GENERAL_COLUMNS = '"System.Itemname", "System.Size", "System.DateCreated", "System.ItemDate",' +
'"System.ItemFolderPathDisplay", "System.Search.AutoSummary", "System.ItemType"';
IMAGE_COLUMNS = '"System.Image.HorizontalSize", "System.Image.VerticalSize", '+
'"System.Image.BitDepth", "System.Image.Compression", '+
'"System.Photo.CameraModel", "System.Photo.DateTaken", "System.Photo.Flash"';
MUSIC_COLUMNS = '"System.Music.Artist", "System.Music.Genre", "System.Music.TrackNumber", '+
'"System.Audio.Compression", "System.Audio.SampleRate", '+
'"System.DRM.IsProtected", "System.Music.AlbumTitle", "System.Rating", '+
'"System.Audio.EncodingBitrate"';
procedure TWDSDataSource.RetrieveDataFromDB;
var
manager : ISearchManager;
catalogManager : ISearchCatalogManager;
queryHelper : ISearchQueryHelper;
wQuery : string;
temp : PWideChar;
sTemp : string;
begin
manager := CoCSearchManager.Create;
if Succeeded(manager.GetCatalog('SystemIndex',catalogManager)) then
begin
if Succeeded(catalogManager.GetQueryHelper(queryHelper)) then
begin
if fMaxResults 0 then
queryHelper.Set_QueryMaxResults(fMaxResults);
queryHelper.Set_QuerySelectColumns(GENERAL_COLUMNS + ',' + MUSIC_COLUMNS + ',' + IMAGE_COLUMNS);
queryHelper.GenerateSQLFromUserQuery(PWideChar(fQuery),temp);
wQuery := temp;
queryHelper.Get_ConnectionString(temp);
sTemp := temp;
dataset := CreateComObject(CLASS_Recordset) as _Recordset;
dataset.CursorLocation := adUseClient;
dataset.Open(wQuery, stemp, adOpenForwardOnly, adLockReadOnly, adCmdText);
dataset.Set_ActiveConnection(nil);
bDatabaseFailed := false;
end else
bDatabaseFailed := true;
end else
bDatabaseFailed := true;
end;
Je pense qu'il est tout assez explicite, fQuery est la requête que vous souhaitez exécuter.
Cordialement Keith
Merci pour l'exemple de code. Que contient votre clause USES pour cette unité? –
AdoDB, Windows, SysUtils, ComObj, graphiques, variantes, ShellApi, ShlObj, AdoInt, JPeg, Utils, SearchAPILib_tlb, ThreadSafeJpeg; La plupart sont probablement hors de propos. –
J'ai trouvé que j'ai besoin de la clause d'utilisations suivantes: utilise Windows, SysUtils, Classes, DB, ComObj, AdoInt, SearchAPILib_TLB, ADODB; Un dernier suivi (je pense): Quel type de composant est défini comme ensemble de données? Je supposais que c'est TADODataset compoenent, mais je reçois une erreur de compilation que la procédure Open a trop de paramètres. –