Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Delphi Vista Suche in Delphi nutzen (https://www.delphipraxis.net/128650-vista-suche-delphi-nutzen.html)

stOrM 3. Feb 2009 13:38


Vista Suche in Delphi nutzen
 
Hi,
wie aus dem Titel hervorgeht wollte ich mal fragen, ob das schon jemand erfolgreich gemacht hat?
Mein erster Ansatz war der Versuch über Ado, der leider erfolglos blieb, die Beispiele die ich dazu gefunden hatte endeten alle mehr oder weniger in OleExceptions. Im SDK konnte ich auch nicht all zu viel darüber finden, unter anderem fehlen mir wohl auch diverse Sachen wie SearchApiGuids die ich nirgends finden kann...

Wäre schön wenn jemand ein Beispiel hat wie man das ganze nutzt um sagen wir mal einen Dateinamen suchen zu können?

Viele Grüße
s!

Phoenix 3. Feb 2009 15:05

Re: Vista Suche in Delphi nutzen
 
Frag mal Sakura. Der hat schon mindestens einen Search Provider geschrieben ;-)

stOrM 3. Feb 2009 16:01

Re: Vista Suche in Delphi nutzen
 
Danke für die Info!
Naja wollte es halt hier öffentlich halten falls jemand das gleiche problem hat.
Vielleicht liesst er ja den Thread hier wär schön :-)

Was irgendwie seltsam ist das ich eine 80041820 Exception bekomme, nach einer Suche im Netz steht da der Index Dienst läuft nicht, was quatsch ist weil der läuft sehr wohl bei mir...

Jetzt wirds noch viel besser 80041820 beseitigt war ein Fehler meinerseits dafür hab ich nun einen unbekannten Fehler ohne jegliche Beschreibung :-(

stOrM 12. Feb 2009 05:08

Re: Vista Suche in Delphi nutzen
 
Liste der Anhänge anzeigen (Anzahl: 1)
Hmmm, scheint ja ein echt kompliziertes Thema zu sein, oder es interessiert mal wieder nur mich :mrgreen:
Ich hab mal ein wenig weiter gefummelt und bekomm jetzt wenigstens ein wenig Informationen bevor es dann wieder kracht!

Vielleicht mag mal jemand drüber kucken, dass Problem ist irgendwie das ich den Fehler nicht lokalisieren kann, da ich nicht weiß, ob der Fehler nun am Query liegt, an Ado, oder an der TLB selber. Nun ja mit einer Fehlermeldung "unbekannter Fehler" läßt sich auch schlecht arbeiten :shock:

So mal ein bischen Code:

Delphi-Quellcode:
  public
    { Public-Deklarationen }
    pSearchMgr : ISearchManager;
    pSearchCatMgr : ISearchCatalogManager;
    pQueryHelper : ISearchQueryHelper;

    pCatStat,
    pReason : TOleEnum;

    pInxCount : Integer;
    pIndexedUrl : PWideChar;

    pConnectionString : PWideChar;
    pConnectionTimeOut : Cardinal;
    pQuery,
    pSQL : PWideChar;
    pSearchString : PWideChar;

...

procedure TMainForm.FormShow(Sender: TObject);
var
  pReasonRes : string;
begin
  pSearchMgr := CoCSearchManager.Create;

  try
    // the valid catalog is systemindex only! 
    pSearchMgr.GetCatalog('SYSTEMINDEX', pSearchCatMgr);

    // get some stats: pStatus, pPausedReason
    pSearchCatMgr.GetCatalogStatus(pCatStat, pReason);

    case pReason of
      CATALOG_PAUSED_REASON_NONE: pReasonRes := 'none';
      CATALOG_PAUSED_REASON_HIGH_IO: pReasonRes := 'high io';
      CATALOG_PAUSED_REASON_HIGH_CPU: pReasonRes := 'high cpu';
      CATALOG_PAUSED_REASON_HIGH_NTF_RATE: pReasonRes := 'high ntf rate';
      CATALOG_PAUSED_REASON_LOW_BATTERY: pReasonRes := 'low battery';
      CATALOG_PAUSED_REASON_LOW_MEMORY: pReasonRes := 'low memory';
      CATALOG_PAUSED_REASON_LOW_DISK: pReasonRes := 'low disk';
      CATALOG_PAUSED_REASON_DELAYED_RECOVERY: pReasonRes := 'delayed recovery';
      CATALOG_PAUSED_REASON_USER_ACTIVE: pReasonRes := 'user active';
      CATALOG_PAUSED_REASON_EXTERNAL: pReasonRes := 'external';
      CATALOG_PAUSED_REASON_UPGRADING: pReasonRes := 'upgrading';
    end;

    case pCatStat of
      CATALOG_STATUS_IDLE: lblStatus.Caption := Format('Status: %0:s reason: %1:s', ['idle', pReasonRes]);
      CATALOG_STATUS_PAUSED: lblStatus.Caption := Format('Status: %0:s reason: %1:s', ['paused', pReasonRes]);
      CATALOG_STATUS_RECOVERING: lblStatus.Caption := Format('Status: %0:s reason: %1:s', ['recovering', pReasonRes]);
      CATALOG_STATUS_FULL_CRAWL: lblStatus.Caption := Format('Status: %0:s reason: %1:s', ['full crawl', pReasonRes]);
      CATALOG_STATUS_INCREMENTAL_CRAWL: Format('Status: %0:s reason: %1:s', ['incremental crawl', pReasonRes]);
      CATALOG_STATUS_PROCESSING_NOTIFICATIONS: Format('Status: %0:s reason: %1:s', ['notifications', pReasonRes]);
      CATALOG_STATUS_SHUTTING_DOWN: Format('Status: %0:s reason: %1:s', ['shutting down', pReasonRes]);
    end;

    // how many items indexed
    pSearchCatMgr.NumberOfItems(pInxCount);
    lblIdxCount.Caption := Format('Items currently indexed: %d', [pInxCount]);

    // get indexed file
    pSearchCatMgr.URLBeingIndexed(pIndexedUrl);
    lblIndexer.Caption := Format('Last indexed %s', [pIndexedUrl]);

    // ISearchQueryHelper interface
    pSearchCatMgr.GetQueryHelper(pQueryHelper);

    // get timeout value
    pSearchCatMgr.Get_ConnectTimeout(pConnectionTimeOut);

    // get the connectionstring for connection to the oledb
    pQueryHelper.Get_ConnectionString(pConnectionString);

    // connect to oledb using the pconnectionstring {adoconnection}
    con.ConnectionString := pConnectionString;
    con.ConnectionTimeout := pConnectionTimeOut;
    Con.LoginPrompt := False;
    con.Connected := True;

  except
   on E: EOleException do
   begin
     ShowMessage(E.Message);
   end;
  end;

end;

// hier gehts los
procedure TMainForm.btnSearchClick(Sender: TObject);
begin

 pQuery := 'SELECT Top 5 System.ItemPathDisplay FROM SYSTEMINDEX';

  try
   // query helper generates a valid sql string...
   pQueryHelper.GenerateSQLFromUserQuery(pQuery, pSql);


   qry.SQL.Text := pSQL;  
   qry.Active := True;  // hier kracht es aber gewaltig!

  except
  on e: Exception do
  begin
    ShowMessage(E.Message);
    end;
  end;

end;

initialization
  CoInitializeEx(nil, COINIT_MULTITHREADED);

finalization
  CoUninitialize;
end.
Vielleicht sollte ich noch erwähnen, dass ich die Exe unter Vista nur mit Adminrechten starten kann, weil sonst knallts schon bei der Ausführung!

Hier noch ein paar Links zu dem Thema falls jemand in die Thematik mit einsteigen mag:

danielmoth
devx
MSDN

Getestet wurde das ganze unter Vista Ultimate 32 Bit EN / DE mit Delphi 2009 Architect Sp1 incl. DB Update 1 sowie Help Update
Na dann hoff ich mal, dass mir da jemand auf die sprünge helfen kann!
Viele Grüsse
Marc

nahpets 12. Feb 2009 10:36

Re: Vista Suche in Delphi nutzen
 
Hallo,

ich gebe zu, von dem Thema habe ich keine Ahnung.
Was mich verwundert:
SQL-Code:
SELECT Top 5 System.ItemPathDisplay FROM SYSTEMINDEX
Eigentlich kenne ich die Syntax nur so, dass man Tabellenname.Spaltenname angibt oder Tabellenalias.Spaltenname. Hier würde ich daher eine der Varianten erwarten:
SQL-Code:
SELECT Top 5 System.ItemPathDisplay FROM SYSTEMINDEX System
oder
SQL-Code:
SELECT Top 5 SYSTEMINDEX.ItemPathDisplay FROM SYSTEMINDEX
Eigentlich sollte aber
SQL-Code:
SELECT Top 5 ItemPathDisplay FROM SYSTEMINDEX
reichen. Oder wird hier ein "vom Gewohnten" abweichendes SQL verwandt?

stOrM 12. Feb 2009 11:14

Re: Vista Suche in Delphi nutzen
 
Zitat:

Zitat von nahpets
Hallo,

ich gebe zu, von dem Thema habe ich keine Ahnung.
Was mich verwundert:
SQL-Code:
SELECT Top 5 System.ItemPathDisplay FROM SYSTEMINDEX
Eigentlich kenne ich die Syntax nur so, dass man Tabellenname.Spaltenname angibt oder Tabellenalias.Spaltenname. Hier würde ich daher eine der Varianten erwarten:
SQL-Code:
SELECT Top 5 System.ItemPathDisplay FROM SYSTEMINDEX System
oder
SQL-Code:
SELECT Top 5 SYSTEMINDEX.ItemPathDisplay FROM SYSTEMINDEX
Eigentlich sollte aber
SQL-Code:
SELECT Top 5 ItemPathDisplay FROM SYSTEMINDEX
reichen. Oder wird hier ein "vom Gewohnten" abweichendes SQL verwandt?

Hi ja leider ne komplett andere Variante!
Der QueryHelper den ich anspreche übersetzt sozusagen in die übliche Variante fürs AdoQuery...

Genaueres dazu gibt es hier: Msdn

edit: Mist noch vergessen, würde nicht normalerweise, wenn es ein Problem mit dem SQL String wäre eine Meldung kommen die das beeinhaltet? sowas in der Art wie Fehler in SQL ..... anstellen von "unbekannter Fehler"?

Gruß
Marc

nahpets 12. Feb 2009 11:55

Re: Vista Suche in Delphi nutzen
 
Zitat:

Zitat von stOrM
edit: Mist noch vergessen, würde nicht normalerweise, wenn es ein Problem mit dem SQL String wäre eine Meldung kommen die das beeinhaltet? sowas in der Art wie Fehler in SQL ..... anstellen von "unbekannter Fehler"?

Da ich vom MS-SQL-Server die Fehlermeldung "Fehler in der Nähe von...' gewohnt bin, ist "unbekannter Fehler" nicht unbedingt als gravierende Verschlechterung zu betrachten :wink:

Okay, bin mal Deinem Link gefolgt. Sagen wir mal so: Die dort beschriebene Abfragesprache hat (auf den ersten Blick) Ähnlichkeiten mit SQL, man sollte aber nicht vom bekannten SQL darauf schließen, dass Bekanntes hier auch verwendbar sein könnte.

Gib' doch mal bitte
Delphi-Quellcode:
qry.SQL.Text := pSQL;
ShowMessage(pSQL);
qry.Active := True;  // hier kracht es aber gewaltig!
aus und schau, ob das noch ein SQL-Statement ist, das den Vorgaben der MSDN entspricht. Was passiert, wenn Du folgendes ausprobierst?
Delphi-Quellcode:
pQuery      := 'SELECT Top 5 System.ItemPathDisplay FROM SYSTEMINDEX';
qry.SQL.Text := pQuery;
qry.Active  := True;

stOrM 12. Feb 2009 12:11

Re: Vista Suche in Delphi nutzen
 
Zitat:

Zitat von nahpets
Zitat:

Zitat von stOrM
edit: Mist noch vergessen, würde nicht normalerweise, wenn es ein Problem mit dem SQL String wäre eine Meldung kommen die das beeinhaltet? sowas in der Art wie Fehler in SQL ..... anstellen von "unbekannter Fehler"?

Da ich vom MS-SQL-Server die Fehlermeldung "Fehler in der Nähe von...' gewohnt bin, ist "unbekannter Fehler" nicht unbedingt als gravierende Verschlechterung zu betrachten :wink:

Okay, bin mal Deinem Link gefolgt. Sagen wir mal so: Die dort beschriebene Abfragesprache hat (auf den ersten Blick) Ähnlichkeiten mit SQL, man sollte aber nicht vom bekannten SQL darauf schließen, dass Bekanntes hier auch verwendbar sein könnte.

Gib' doch mal bitte
Delphi-Quellcode:
qry.SQL.Text := pSQL;
ShowMessage(pSQL);
qry.Active := True;  // hier kracht es aber gewaltig!
aus und schau, ob das noch ein SQL-Statement ist, das den Vorgaben der MSDN entspricht. Was passiert, wenn Du folgendes ausprobierst?
Delphi-Quellcode:
pQuery      := 'SELECT Top 5 System.ItemPathDisplay FROM SYSTEMINDEX';
qry.SQL.Text := pQuery;
qry.Active  := True;

Also Test ein Query gelassen wie es war, der SearchApi QueryHelper hat dann folgendes daraus gemacht:

SQL-Code:
SELECT "System.ItemUrl", "System.FileName" FROM "SYSTEMINDEX" WHERE CONTAINS(*,'"SELECT*"',1031) AND CONTAINS(*,'"Top*"',1031) AND CONTAINS(*,'"5*"',1031) AND ("System.FileName" LIKE 'System.ItemPathDisplay%' OR CONTAINS(*,'"System*"',1031) AND CONTAINS(*,'"ItemPathDisplay*"',1031)) AND CONTAINS(*,'"FROM*"',1031) AND CONTAINS(*,'"SYSTEM*"',1031) AND CONTAINS(*,'"INDEX*"',1031)
Dann hab ich mal diesen getestet spasseshalber: SELECT Top 5 System.ItemPathDisplay FROM SYSTEMINDEX System das ergab dann folgendes:

SQL-Code:
SELECT "System.ItemUrl", "System.FileName" FROM "SYSTEMINDEX" WHERE CONTAINS(*,'"SELECT*"',1031) AND CONTAINS(*,'"Top*"',1031) AND CONTAINS(*,'"5*"',1031) AND ("System.FileName" LIKE 'System.ItemPathDisplay%' OR CONTAINS(*,'"System*"',1031) AND CONTAINS(*,'"ItemPathDisplay*"',1031)) AND CONTAINS(*,'"FROM*"',1031) AND CONTAINS(*,'"SYSTEM*"',1031) AND CONTAINS(*,'"INDEX*"',1031) AND CONTAINS(*,'"System*"',1031)
Naja alles das gleiche es krackt nach wie vor :shock:

nahpets 12. Feb 2009 12:28

Re: Vista Suche in Delphi nutzen
 
Hallo,

das raff ich ja jetzt nun garnicht, dass sieht doch so aus, als würde hier versucht, nach den einzelnen Strings, aus denen Dein SQL besteht, zu suchen. Quasi: Das SQL sucht sich selber?

Das ist doch niemals so gewollt :roll:

Also bitte mal dasda probieren:
Delphi-Quellcode:
  pQuery := 'Jawassuchenwirdennjetztnuneigentlich';
  try
    // query helper generates a valid sql string...
    pQueryHelper.GenerateSQLFromUserQuery(pQuery, pSql);
    qry.SQL.Text := pSQL;  
    ShowMessage(qry.SQL.Text);
    qry.Active := True;  // hier kracht es hoffentlich nicht mehr.
  except
Hier erwarte ich als SQL nun sowas:
SQL-Code:
SELECT "System.ItemUrl", "System.FileName" FROM "SYSTEMINDEX" WHERE CONTAINS(*,'"Jawassuchenwirdennjetztnuneigentlich*"',1031)
wobei die Ergebnismenge höchstwahrscheinlich leer ist 8)

stOrM 12. Feb 2009 12:46

Re: Vista Suche in Delphi nutzen
 
Zitat:

Zitat von nahpets
Hallo,

das raff ich ja jetzt nun garnicht, dass sieht doch so aus, als würde hier versucht, nach den einzelnen Strings, aus denen Dein SQL besteht, zu suchen. Quasi: Das SQL sucht sich selber?

Das ist doch niemals so gewollt :roll:

Also bitte mal dasda probieren:
Delphi-Quellcode:
  pQuery := 'Jawassuchenwirdennjetztnuneigentlich';
  try
    // query helper generates a valid sql string...
    pQueryHelper.GenerateSQLFromUserQuery(pQuery, pSql);
    qry.SQL.Text := pSQL;  
    ShowMessage(qry.SQL.Text);
    qry.Active := True;  // hier kracht es hoffentlich nicht mehr.
  except
Hier erwarte ich als SQL nun sowas:
SQL-Code:
SELECT "System.ItemUrl", "System.FileName" FROM "SYSTEMINDEX" WHERE CONTAINS(*,'"Jawassuchenwirdennjetztnuneigentlich*"',1031)
wobei die Ergebnismenge höchstwahrscheinlich leer ist 8)

Gesagt getan!

SQL-Code:
SELECT "System.ItemUrl" FROM "SYSTEMINDEX" WHERE CONTAINS(*,'"Jawassuchenwirdennjetztnuneigentlich*"',1031)
Mit der gleichen Fehlermeldung wie gehabt also "unbekannter Fehler" :shock:

Ps. Hast Du Vista zufällig? Ich weiß im Moment nicht obs auch < Vista funzen würd aber dann könntest Du mal selber testen, weil Du scheinst gut SQL Plan zu haben :mrgreen:

Anonsten brauchste bei weiteren postings nicht mehr den kompl. Code schreiben das Query reicht! Habs grad dynamisch gemacht hier per Editfeld :-D Jetzt kann ich schnell per Copy&Paste reinsemmeln auf das es weiter krachen möge hehe

nahpets 12. Feb 2009 13:20

Re: Vista Suche in Delphi nutzen
 
Fehler nicht weg :evil:

Dann muss er irgendwo anders liegen und erst beim Öffnen der Abfrage "wirksam" werden (behaupte ich mal so :?)

Interessant ist:

erwartet:
SQL-Code:
SELECT "System.ItemUrl", "System.FileName" FROM "SYSTEMINDEX" WHERE CONTAINS(*,'"Jawassuchenwirdennjetztnuneigentlich*"',1031)
bekommen:
SQL-Code:
SELECT "System.ItemUrl" FROM "SYSTEMINDEX" WHERE CONTAINS(*,'"Jawassuchenwirdennjetztnuneigentlich*"',1031)
Nach welchen Kriterien erfolgt denn die Auswahl der auszugebenden Spalten?

An anderer Stelle im Programm reagierst Du auf EOleException, die hat ein paar Attribute mehr, wenn die auch hier geworfen wird, ließe sich da eventuell ja noch ein bisserl mehr Information rausholen :glaskugel:
Delphi-Quellcode:
except
   on E: EOleException do
   begin
     ShowMessage(E.Message + #13 + 'ErrorCode: ' + IntToStr(ErrorCode) + #13 + 'Source: ' +  Source);
   end;
  end;
  on e : Exception do
  begin
    ShowMessage(E.Message);
  end;
Nach den bisherigen "Erkenntnissen" gehe ich davon aus, dass man zur Suche kein SQL benötigt, sondern per
Delphi-Quellcode:
pQueryHelper.GenerateSQLFromUserQuery
"alles" geschenkt bekommt.

Eventuell mal
Delphi-Quellcode:
qry.Close;
qry.SQL.Clear;
qry.sql.Add(pSQL);
qry.Open;
probieren, aber eigentlich ist das jetzt nur noch hilflose Daddelei, die ich da vorschlage, befürchte, dass ich da ohne die entsprechenden Werkzeuge keine verwertbare Hilfestellung mehr geben kann :cry:

PS: Habe kein Vista und nur Delphi 7, bin da doch ein bisserl altertümlich 8)

stOrM 12. Feb 2009 13:38

Re: Vista Suche in Delphi nutzen
 
Zitat:

Zitat von nahpets
Fehler nicht weg :evil:

Dann muss er irgendwo anders liegen und erst beim Öffnen der Abfrage "wirksam" werden (behaupte ich mal so :?)

Interessant ist:

erwartet:
SQL-Code:
SELECT "System.ItemUrl", "System.FileName" FROM "SYSTEMINDEX" WHERE CONTAINS(*,'"Jawassuchenwirdennjetztnuneigentlich*"',1031)
bekommen:
SQL-Code:
SELECT "System.ItemUrl" FROM "SYSTEMINDEX" WHERE CONTAINS(*,'"Jawassuchenwirdennjetztnuneigentlich*"',1031)
Nach welchen Kriterien erfolgt denn die Auswahl der auszugebenden Spalten?

An anderer Stelle im Programm reagierst Du auf EOleException, die hat ein paar Attribute mehr, wenn die auch hier geworfen wird, ließe sich da eventuell ja noch ein bisserl mehr Information rausholen :glaskugel:
Delphi-Quellcode:
except
   on E: EOleException do
   begin
     ShowMessage(E.Message + #13 + 'ErrorCode: ' + IntToStr(ErrorCode) + #13 + 'Source: ' +  Source);
   end;
  end;
  on e : Exception do
  begin
    ShowMessage(E.Message);
  end;
Nach den bisherigen "Erkenntnissen" gehe ich davon aus, dass man zur Suche kein SQL benötigt, sondern per
Delphi-Quellcode:
pQueryHelper.GenerateSQLFromUserQuery
"alles" geschenkt bekommt.

Eventuell mal
Delphi-Quellcode:
qry.Close;
qry.SQL.Clear;
qry.sql.Add(pSQL);
qry.Open;
probieren, aber eigentlich ist das jetzt nur noch hilflose Daddelei, die ich da vorschlage, befürchte, dass ich da ohne die entsprechenden Werkzeuge keine verwertbare Hilfestellung mehr geben kann :cry:

PS: Habe kein Vista und nur Delphi 7, bin da doch ein bisserl altertümlich 8)

Hmm ich durchkämme grad das SearchSDK, was wie ich glaube auch gerade deine Antwort wiederlegt Zitat"dass man zur Suche kein SQL benötigt"

Weil dort gibt es ein Beispiel, leider sind meine C Kenntnisse mehr als mager aber kuckst Du ein Auszug aus den Parametern des CmdApps:

Console.WriteLine("wssql <SQL query> [<Chapter Depth>]");
Console.WriteLine("\n<SQL query> will be sent to Windows Search and results returned.");
Console.WriteLine(" Example queries: ");
Console.WriteLine(" SELECT System.ItemName FROM SystemIndex");
Console.WriteLine(" SELECT System.ItemName FROM SystemIndex");
Console.WriteLine(" WHERE contains(*, 'dance*') AND System.Kind = 'email'");
Console.WriteLine(" GROUP ON System.Kind AGGREGATE Count() ");
Console.WriteLine(" OVER (SELECT System.Kind, System.ItemName from SystemIndex)");
Console.WriteLine("\n<Chapter Depth> ");
Console.WriteLine(" Recursion depth when expanding chapters for GROUP ON queries.");
Console.WriteLine(" 0 = stop at first chapter, 1 = stop at second chapter, etc.");
Console.WriteLine(" By default all chapters are expanded.")

Also vermute ich mal, muss man Doch das Query übergebem? Was wohl passiert wenn ich den QueryHelper mal ganz aussen vor lasse?

nahpets 12. Feb 2009 13:52

Re: Vista Suche in Delphi nutzen
 
Hallo,

nachdem, was ich bisher mitbekommen habe, baut der QueryHelper eine Abfrage / ein SQL für die als Parameter übergebene Zeichenfolge zusammen. Bin mir annähern 100% sicher, dass bei der Benutzung des QueryHelpers kein SQL nötig ist.

Ohne den QueryHelper wäre mal einen Versuch wert.

Weise Deiner Query mal bitte nur dasda
SQL-Code:
SELECT System.ItemName FROM SystemIndex
zu.
Wenn das nicht geht, muss der Fehler irgendwo anders sein.
Hast Du da mit dem Debugger irgend eine Chance weiter zu kommen?

Breakpoint auf qry.Active := True; und dort schon reindebuggen (wenn das geht).

stOrM 12. Feb 2009 13:56

Re: Vista Suche in Delphi nutzen
 
Zitat:

Zitat von nahpets
Hallo,

nachdem, was ich bisher mitbekommen habe, baut der QueryHelper eine Abfrage / ein SQL für die als Parameter übergebene Zeichenfolge zusammen. Bin mir annähern 100% sicher, dass bei der Benutzung des QueryHelpers kein SQL nötig ist.

Ohne den QueryHelper wäre mal einen Versuch wert.

Weise Deiner Query mal bitte nur dasda
SQL-Code:
SELECT System.ItemName FROM SystemIndex
zu.
Wenn das nicht geht, muss der Fehler irgendwo anders sein.
Hast Du da mit dem Debugger irgend eine Chance weiter zu kommen?

Breakpoint auf qry.Active := True; und dort schon reindebuggen (wenn das geht).

Ok wart ma ich teste es eben!
Das wird immer unheimlicher, nu kommt also beim Klick auf den Search Button erst Ne Exception Addresse 00000000 danach unbekannter Fehler wie gehabt mit Ausführung des Querys debugging kein brauchbares Ergebnis bisher...

In den SDK Beispielen ist das ganze auch sehr Mysteriös aufgebaut aber im Prinzip so wie ich das versuche hier!
Nur mit dem Unterschied:

// use ATL OLEDB classes to connect to the database and get the results

CDataSource cDataSource;

hr = cDataSource.OpenFromInitializationString(L"provide r=Search.CollatorDSO.1;EXTENDED PROPERTIES=\"Application=Windows\"");
if (SUCCEEDED(hr))
{
CSession cSession;

Usw.

Seltsam ist auch was die Exception mit 0000000 betrifft, die wird ausgelöst bei der Zuweisung des SQlStrings sowie bei Active = true, wenn beides auskommentiert wird keine Exceptions...

Ado Prob?

Zusatzinfo hierzu:
Ich hab jetzt mal dem ConnectionDialog den ConnectionString im OI selbst übergeben Verbindung getestet rennt.
Jetzt hab ich den AdoQeury mit Dem ConnectionDialog verbunden und dein Query unter SQL eingegeben, beim setzen auf Active im OI knallts!

Da iss doch irgendwas im Busch? :shock:
Ich denk mal das der Code dann wohl richtig war bisher?!

nahpets 12. Feb 2009 14:18

Re: Vista Suche in Delphi nutzen
 
Hallo,

ich kapier' momentan garnix mehr.

Hast Du die qry mit 'ner TDataSource und irgendwelchen Datenbankkomponeten verbunden? Mach' das mal weg. Eventuell kann ja nur irgendwer/irgendwas nicht angezeigt werden?

Moment, Deine letzte Ergänzung:

pSQL ist PWideChar. Von welchem Type ist qry.SQL.Text, beharken die sich eventuell?
Deine Beschreibung klingt so ein bisserl wie: Die Zuweisung des SQL's funktioniert nicht, wird aber irgendwie übergangen und anschließend führen wir das nichtzugewiesenen SQL aus?

Was ist mit
Delphi-Quellcode:
qry.sql.text := 'SELECT System.ItemName FROM SystemIndex';

stOrM 12. Feb 2009 14:25

Re: Vista Suche in Delphi nutzen
 
Zitat:

Zitat von nahpets
Hallo,

ich kapier' momentan garnix mehr.

Hast Du die qry mit 'ner TDataSource und irgendwelchen Datenbankkomponeten verbunden? Mach' das mal weg. Eventuell kann ja nur irgendwer/irgendwas nicht angezeigt werden?

Moment, Deine letzte Ergänzung:

pSQL ist PWideChar. Von welchem Type ist qry.SQL.Text, beharken die sich eventuell?
Deine Beschreibung klingt so ein bisserl wie: Die Zuweisung des SQL's funktioniert nicht, wird aber irgendwie übergangen und anschließend führen wir das nichtzugewiesenen SQL aus?

Was ist mit
Delphi-Quellcode:
qry.sql.text := 'SELECT System.ItemName FROM SystemIndex';

Kuck ma eins nach oben letzte Bemerkung!

Jetzt mal nur die AdoConnection im OI mit den Sachen gefüttert, das Query damit Verbunden SQL eingegeben und Active gesetzt wirft eine OleException ohne weitere Details: 80040E14

nahpets 12. Feb 2009 14:45

Re: Vista Suche in Delphi nutzen
 
So ein Stoffwechselendprodukt :wink:

Probier es mal mit ADODataSet und CommandText.
Aber da scheint ja doch Irgendwas im "Inneren" schief zu laufen.

Für meinen Teil bin ich da jetzt mit dem Latein am Ende.

Frag' mal bitte Google nach 80040E14. Da kommt so viel, dass ich da auf die Schnelle für mich keine Chance sehe, das "Richtige" Ergebnis zu finden.

stOrM 12. Feb 2009 14:53

Re: Vista Suche in Delphi nutzen
 
Zitat:

Zitat von nahpets
So ein Stoffwechselendprodukt :wink:

Probier es mal mit ADODataSet und CommandText.
Aber da scheint ja doch Irgendwas im "Inneren" schief zu laufen.

Für meinen Teil bin ich da jetzt mit dem Latein am Ende.

Frag' mal bitte Google nach 80040E14. Da kommt so viel, dass ich da auf die Schnelle für mich keine Chance sehe, das "Richtige" Ergebnis zu finden.

Hmm ich bin grad mal am prüfen obs ggf an meiner MDac Version liegen könnte? Obwohl iss ja 2.8
Ja das sagste was bei Google wirste totgeschmiessen zu der Exception...

Ich check das nochmal mit Adodataset und dann bin ich auch am ende ich weiss nimmer weiter nu...

Trotzdem erstmal schönen Dank für die Mühe die ich gemacht hab :-)

Du hast übrigends völlig recht gehabt, der QueryHelper baut den SQL Query selber auf habs gerade mal durchgespielt:

Bsp.1:
Project1.exe

Daraus baut der QueryHelper folgenden Syntax:
SQL-Code:
SELECT "System.ItemUrl", "System.FileName" FROM "SystemIndex" WHERE ("System.FileName" LIKE 'Project1.exe%' OR CONTAINS(*,'"Project1*"',1031) AND CONTAINS(*,'"exe*"',1031))
Bsp.2:
*.exe

Wird zu:
SQL-Code:
SELECT "System.ItemUrl", "System.FileExtension" FROM "SystemIndex" WHERE ("System.FileExtension" LIKE '.exe%' OR WorkId IS NULL)

nahpets 16. Feb 2009 10:41

Re: Vista Suche in Delphi nutzen
 
Hallo,

nach den letzten Erkenntnissen scheint der Fehler in der ADODB.Pas aufzutreten und zwar in der Zeile
Delphi-Quellcode:
/* Funktion RefreshFromOLEDB */
OLEDBCommand.QueryInterface(ICommandWithParameters, OLEDBParameters);
Diese Zeile wird nur durchlaufen, wenn
Delphi-Quellcode:
Command.CommandType = cmdText
andernfalls wird
Delphi-Quellcode:
RefreshFromADO
aufgerufen.
Allem Anschein nach gibt es Probleme bei der Prüfung von Parametern (die in unserem Fall allerdings nicht vorhanden sind).

Es wäre mal einen Versuch wert, ParamCheck der Query auf false zu setzen.

stOrM 16. Feb 2009 14:05

Re: Vista Suche in Delphi nutzen
 
Zitat:

Zitat von nahpets
Hallo,

nach den letzten Erkenntnissen scheint der Fehler in der ADODB.Pas aufzutreten und zwar in der Zeile
Delphi-Quellcode:
/* Funktion RefreshFromOLEDB */
OLEDBCommand.QueryInterface(ICommandWithParameters, OLEDBParameters);
Diese Zeile wird nur durchlaufen, wenn
Delphi-Quellcode:
Command.CommandType = cmdText
andernfalls wird
Delphi-Quellcode:
RefreshFromADO
aufgerufen.
Allem Anschein nach gibt es Probleme bei der Prüfung von Parametern (die in unserem Fall allerdings nicht vorhanden sind).

Es wäre mal einen Versuch wert, ParamCheck der Query auf false zu setzen.

Hey Grüß Dich!
ParamCheck steht auf falsch Ergebis leider wie immer es kracht!

Grüß
Marc

Ps. Gibt es irgendwo von mir auch aus Trial Ado Komponenten sprich AdoQuery die nicht auf die AdoDB von CG aufsetzen, dann könnte ich es mal testen ob das Problem dort auch auftritt? Allerdings müßen Die Komponenten dann ggf. Kompatible zu D2009 sein.

nahpets 16. Feb 2009 14:43

Re: Vista Suche in Delphi nutzen
 
Hallo,

Du könntest eventuell die Typlib der Suche importieren und dann alles "von Hand" machen.
Bin mir nicht sicher, ob dashier C:\Programme\Gemeinsame Dateien\System\ado\msadox.dll die richtige ist.

Eventuell kann Dir http://files.codes-sources.com/fichi...all%2fDate.asp dabei behilflich sein.
Dashier http://www.developpez.net/forums/d48...op-search-vbs/ müsste sich eigentlich relativ einfach nach Delphi übersetzen lassen.

Irgendwas zu diesem Thema, im Zusammenhang mit Delphi, habe ich nicht finden können.

Ansonsten: Schau mal hier: www.winsoft.sk ADO Component Suite

stOrM 17. Feb 2009 10:04

Re: Vista Suche in Delphi nutzen
 
Zitat:

Zitat von nahpets
Hallo,

Du könntest eventuell die Typlib der Suche importieren und dann alles "von Hand" machen.
Bin mir nicht sicher, ob dashier C:\Programme\Gemeinsame Dateien\System\ado\msadox.dll die richtige ist.

Eventuell kann Dir http://files.codes-sources.com/fichi...all%2fDate.asp dabei behilflich sein.
Dashier http://www.developpez.net/forums/d48...op-search-vbs/ müsste sich eigentlich relativ einfach nach Delphi übersetzen lassen.

Irgendwas zu diesem Thema, im Zusammenhang mit Delphi, habe ich nicht finden können.

Ansonsten: Schau mal hier: www.winsoft.sk ADO Component Suite

Hey Stephan!
Da ich jetzt allmählich die Sch.... voll hab mit dem Ding hier rum zu eiern, hab ich grad die AdoDB_TLB auch noch importiert und muß sagen ich hatte wohl recht. CG Ado Komponenten scheinen das Problem zu sein!

Suchstring = *.exe
Rückgabe = file:g:/SysinternalsSuite/Diskmon.exe;.exe;file:g:/SysinternalsSuite/DiskView.exe;.exe;

Also es kommt schon mal endlich etwas zurück, jetzt werd ich mich da wohl einarbeiten müssen weil:

G:\ ist zur Zeit nicht angeschlossen, sieht also so aus als wenn er alles zurückliefert was indiziert wurde bisher.

Verzeichniswechsel für eine Live Suche hat noch nicht funktioniert also so etwas in etwa:

Suchstring = D:\*.exe

Naja mal sehen wenn ich das noch hinbekomme ist es wohl geschafft :-)

Viele Grüße
Marc


Alle Zeitangaben in WEZ +1. Es ist jetzt 17:44 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz