Verwendung von Platzhalterzeichen in einer Abfrage des InfoPath-Formulars beim Binden an ein ADO-Datenquelle

SPRACHE AUSWÄHLEN SPRACHE AUSWÄHLEN
Artikel-ID: 826992 - Produkte anzeigen, auf die sich dieser Artikel bezieht
Alles erweitern | Alles schließen

Auf dieser Seite

Zusammenfassung

Microsoft Office InfoPath vereinfacht Bindung auf Microsoft SQL Server oder Microsoft Access. InfoPath kann die einfache, direkte Table-Abfragen in einer SQL-Datenbank oder ein Access-Datenbank mithilfe von Microsoft ActiveX Data Objects (ADO) automatisch generieren. InfoPath ermöglicht dann die Ergebnisse der Abfrage angezeigt und im Formular bearbeitet werden.

Für komplexere Abfragen ist InfoPath mehrere Programmiermethoden für den Entwickler oder fortgeschrittene Benutzer. Diese Programmiermethoden können fortgeschrittene Benutzer oder der Entwickler Formulare erstellen, die eine benutzerdefinierte Abfrage ausführen können, die komplexere SQL-Syntax verwendet. Ein Beispiel für eine allgemeine benutzerdefinierte Abfrage verwendet ein Platzhalterzeichen, um Datensätze zu suchen, die teilweise auf den angegebenen Kriterien entsprechen.

Die folgenden Schritte zeigen, wie mit verwalteten Code in InfoPath führen Sie eine Platzhaltersuche-Zeichen in einer SQL-Tabelle oder in einer Access-Tabelle mithilfe derADOAdapterObjekt.

Weitere Informationen

InfoPath ermöglicht es Ihnen, wandeln Sie eine Abfragedatenverbindung als einAdoQueryConnectionObjekt. Dadurch erhalten Sie die Methoden zum Abrufen und Festlegen von Informationen zu den folgenden Elementen:
  • Die Verbindungszeichenfolge
  • SQL-Befehlstext
  • Der Timeoutwert
Mithilfe derAdoQueryConnectionObjekt, können Sie komplexere Operationen, z. B. eine Abfrage ausführen, die Platzhalterzeichen verwendet eine SQL-Anweisung ändern.

Die Informationen in diesem Artikel gilt für SQL-Datenbanken und Access-Datenbanken. Die folgenden Beispiele verwenden die Nordwind-Datenbank, die mit Microsoft Office Access 2007 und Microsoft Office Access 2010 enthalten ist.

Erstellen der Datenbank

Wenn Sie die Nordwind-Datenbank noch nicht in Ihrer Version von InfoPath verwendet haben, erstellen Sie die Datenbank lokal. Gehen Sie hierzu folgendermaßen vor:

  1. Starten Sie Microsoft Office Access.
  2. In derVerfügbare VorlagenAbschnitt auswählenBeispielvorlagen.
  3. Wählen Sie dieNorthwindDatenbank, und klicken Sie dann aufErstellen.

Entwerfen eines Formulars, das die Datenbank abfragt

Dieser Abschnitt beschreibt, wie eine Abfrageformular in InfoPath entwerfen. Dieses Beispiel verwendet die Tabelle Lieferanten aus der Northwind-Datenbank. Führen Sie die Schritte, die für Ihre Version von InfoPath bereitgestellt werden, um ein Formular zu erstellen, die in dieser Tabelle abfragt.

InfoPath 2010

Erstellen Sie das Formular Vorlage, und legen Sie die Vorlage-Formularcodesprache in c#. Gehen Sie hierzu folgendermaßen vor:
  1. Starten Sie InfoPath Designer 2010.
  2. In derErweiterte FormularvorlagenAbschnitt auswählenDatenbank, und klicken Sie dann aufFormular entwerfen.
  3. Klicken Sie im Datenverbindungs-Assistenten aufDatenbank auswählen.
  4. Suchen Sie den Ordner, in dem Sie die Nordwind-Datenbank gespeichert, wählen Sie die Datei Northwind.accdb, und klicken Sie dann aufÖffnen.
  5. In derWählen Sie TabelleWählen Sie im Fenster einen Bildlauf zum unteren Ende der Liste derLieferantenTabelle, und klicken Sie dann aufOK.
  6. Stellen Sie sicher, dass nur die folgenden Felder in aktiviert sind dieLieferantenTabelle:
    • ID
    • Unternehmen
    • Nachname
    • Vorname
    • Job_Title
    • Business_Phone
  7. Klicken Sie aufWeiter.
  8. Klicken Sie aufFertig stellenum den Datenverbindungs-Assistenten abzuschließen.
  9. In derFelderBereich, erweitern Sie diedataFieldsKnoten, und ziehen Sie das Hinzufügend: LieferantenKnoten, um das Feld unter derAbfrage ausführenSchaltfläche.
  10. Wenn Sie aufgefordert werden, wählen Sie ausWiederholte Tabelle.
  11. In derFelderBereich, erweitern Sie diequeryFieldsKnoten, und ziehen Sie das HinzufügenQ: LieferantenKnoten, um das Feld unter derNeuen DatensatzSchaltfläche. (Dies fügt automatisch einen Abschnitt, der Steuerelemente enthält.)
  12. Unter denEntwicklerRegisterkarte, klicken Sie aufSprache.
  13. In derProgramming languageAbschnitt, unterFormularcodesprache Vorlage, wählen SieC#, und klicken Sie dann aufOK.

InfoPath 2007

Erstellen Sie das Formular Vorlage. Gehen Sie hierzu folgendermaßen vor:
  1. Starten Sie InfoPath 2007.
  2. Klicken Sie im Navigationsbereich von derAusfüllen eines Formularsim Dialogfeld klicken Sie aufEntwerfen einer Formularvorlage.
  3. In derEntwerfen einer FormularvorlageFenster Klicken Sie aufLeer,und klicken Sie dann aufOK.
  4. Auf derToolsMenü, klicken Sie aufDaten Verbindungen, und klicken Sie dann aufHinzufügen. DieDaten VerbindungFenster wird geöffnet.
  5. In derDatenverbindungFenster, klicken Sie auf Wählen Sie dieErstellen Sie eine neue Verbindung zudas Kontrollkästchen, klicken Sie auf Wählen Sie dieEmpfangen von DatenKontrollkästchen Sie, und klicken Sie dann aufWeiter.
  6. Klicken Sie auf dieDatenbank (Microsoft SQL Server oder Microsoft Office Access)Kontrollkästchen Sie, und klicken Sie dann aufWeiter.
  7. Klicken Sie aufDatenbank auswählen.
  8. Suchen Sie den Ordner, in dem Sie die Nordwind-Datenbank gespeichert, wählen Sie den Ordner, und klicken Sie dann aufÖffnen.
  9. In derWählen Sie TabelleWählen Sie im Dialogfeld einen Bildlauf zum unteren Ende der Liste derLieferantenTabelle, und klicken Sie dann aufOK.
  10. In derDatenstruktur einer DatenquelleListen Sie auf, stellen Sie sicher, dass nur die folgenden Spaltenüberschriften aktiviert sind:
    • ID
    • Unternehmen
    • Vorname
    • Nachname
    • Job_Title
    • Business_Phone
  11. Klicken Sie aufWeiter.
  12. Klicken Sie aufDatenansicht zuerst entwerfen, und dann Klicken Sie aufFertig stellenzum Beenden des Assistenten zum Einrichten der Datenquelle und zum Erstellen das Standardformular.
  13. In derDatenquelleund doppelklicken Sie im AufgabenbereichdataFields.
  14. Verschieben derd: LieferantenKnoten, um dieDatenAnsicht des Formulars.
  15. Wenn Sie aufgefordert werden, hinzufügend: Lieferantenals einWiederholte Tabelle.
  16. Auf derAnsichtMenü, klicken Sie aufVerwalten Ansichten.
  17. In derAnsichtenim Aufgabenbereich, klicken Sie auf dieAbfrageanzeigen.
  18. Auf derToolsMenü, klicken Sie aufFormularoptionen.
  19. In derKategorieaufzulisten, klicken Sie aufProgrammierung.
  20. In derFormularcodesprache Vorlagedas Feld, klicken Sie aufC#, und klicken Sie dann aufOK.

Ändern Sie das Formular, um eine benutzerdefinierte Abfrage ausführen

Dieser Abschnitt beschreibt, wie nach Datensätzen zu suchen, deren Werte Suchbegriff ähneln, aber die Zeichenfolge nicht genau übereinstimmen. Um nach Datensätzen zu suchen, die ähnliche Werte verfügen, können Sie eine Platzhalter-Zeichenfolge und dieWIEdie Anweisung in einer SQL-Abfrage. Wenn der Platzhalter Zeichenfolge Zeichen und dieWIEAnweisung zusammen verwendet werden, können Sie Datensätze, die basierend auf Suchkriterien die Wildcard-Zeichen suchen. Diese Einträge werden in InfoPath zurückgegeben.

So ändern Sie das Formular, um eine benutzerdefinierte Abfrage ausführen dieJob-TitelFeld in InfoPath 2010 oder InfoPath 2007, gehen Sie folgendermaßen vor:

  1. Im Entwurfsmodus mit der rechten Maustaste dieAbfrage ausführenSchaltfläche, und klicken Sie dann aufSchaltflächeneigenschaften.
  2. Nehmen Sie folgende Änderungen:
    • Änderung derAktionder Schaltfläche anRegeln und benutzerdefinierter Code
    • Änderung derBezeichnungumAbfrage ausführen
    • Änderung derIDumbtnQuery
  3. Klicken Sie auf dieFormularcode bearbeitenSchaltfläche, um die Änderungen übernehmen, und starten Sie die Visual Studio-Tools für Applikationen-Editor. Es wird den BtnQuery "Clicked"-Ereignishandler geöffnet.
  4. Ersetzen Sie den Kommentar "/ / fügen Sie hier Code" durch folgenden Code:
    //Create an XPathNavigator object for the main data source
    XPathNavigator xnMain = this.MainDataSource.CreateNavigator();
     
    //Create an AdoQueryConnection from the main data source by "casting" the default
    //data connection to an "AdoQueryConnection"
    AdoQueryConnection cn = (AdoQueryConnection)this.DataConnections["Main connection"];
     
    //Obtain the default SQL command for the form.
    string strOrigSQLCommand = cn.Command.ToString();
     
     
     
    // Obtain the query node that you want to change.
    XPathNavigator xnSuppliersQuery = xnMain.SelectSingleNode("/dfs:myFields/dfs:queryFields/q:Suppliers", this.NamespaceManager);
     
    //Obtain the text that was entered for the wildcard character search, and then clear the current query parameter so that InfoPath will leave the current query parameter blank.
    string strJobTitle = xnSuppliersQuery.SelectSingleNode("@Job_Title", this.NamespaceManager).Value;
    xnSuppliersQuery.SelectSingleNode("@Job_Title", this.NamespaceManager).SetValue(string.Empty);
     
    //Have InfoPath construct an SQL command that is based on all other field values.
    string strMySQLCommand = cn.BuildSqlFromXmlNodes(xnSuppliersQuery);
     
    //Save the other query items, and then clear the other query items before the next query.
    string strSupplierID = xnSuppliersQuery.SelectSingleNode("@ID", this.NamespaceManager).Value;
    xnSuppliersQuery.SelectSingleNode("@ID", this.NamespaceManager).SetValue(string.Empty);
    string strCompany = xnSuppliersQuery.SelectSingleNode("@Company", this.NamespaceManager).Value;
    xnSuppliersQuery.SelectSingleNode("@Company", this.NamespaceManager).SetValue(string.Empty);
    string strLastName = xnSuppliersQuery.SelectSingleNode("@Last_Name", this.NamespaceManager).Value;
    xnSuppliersQuery.SelectSingleNode("@Last_Name", this.NamespaceManager).SetValue(string.Empty);
    string strFirstName = xnSuppliersQuery.SelectSingleNode("@First_Name", this.NamespaceManager).Value;
    xnSuppliersQuery.SelectSingleNode("@First_Name", this.NamespaceManager).SetValue(string.Empty);
    string strBusPhone = xnSuppliersQuery.SelectSingleNode("@Business_Phone", this.NamespaceManager).Value;
    xnSuppliersQuery.SelectSingleNode("@Business_Phone", this.NamespaceManager).SetValue(string.Empty);
     
    //Add Job_Title to the query so that Job_Title can support wildcard characters.
    if (strJobTitle != string.Empty)
    {
           if (strMySQLCommand != string.Empty)
                  strMySQLCommand += " AND ";
     
           //Check whether the user entered the wildcard character (%) as part of the title.
    if(strJobTitle.Contains("%"))
                 strMySQLCommand += "[Job Title] LIKE '" + strJobTitle + "'";
           else
                 strMySQLCommand += "[Job Title] LIKE '" + strJobTitle + "%'";               
    }
     
    //Construct the full query string.
    string strSQLQuery = strOrigSQLCommand;
    if (strMySQLCommand != string.Empty)
    strSQLQuery += " WHERE " + strMySQLCommand;
     
    //Set the command and run the query.
    cn.Command = strSQLQuery;
    cn.Execute();
     
    //Restore all the user entries to the Query fields so that the user entries will 
    //be available if you want to change and to rerun the query.
    xnSuppliersQuery.SelectSingleNode("@ID", this.NamespaceManager).SetValue(strSupplierID);
    xnSuppliersQuery.SelectSingleNode("@Company", this.NamespaceManager).SetValue(strCompany);
    xnSuppliersQuery.SelectSingleNode("@Last_Name", this.NamespaceManager).SetValue(strLastName);
    xnSuppliersQuery.SelectSingleNode("@First_Name", this.NamespaceManager).SetValue(strFirstName);
    xnSuppliersQuery.SelectSingleNode("@Job_Title", this.NamespaceManager).SetValue(strJobTitle);
    xnSuppliersQuery.SelectSingleNode("@Business_Phone", this.NamespaceManager).SetValue(strBusPhone);
     
    //Restore the default table command (for the next time).
    cn.Command = strOrigSQLCommand;
     
    //Clean up
    xnMain = null;
    cn = null;
    xnSuppliersQuery = null;
  5. Erstellen Sie das Projekt, indem Sie auf dieBuildMenüelement klicken und dann aufBuildProjektname.
  6. Die Änderungen zu speichern und dann zurück zu InfoPath.

Testen Sie den code

Wird der Beispielcode im vorherigen Verfahren können Sie eine Platzhaltersuche Zeichen von derJob-TitelFeld in derLieferantenTabelle. Z. B. indem Sie eine SuchabfrageSales %, alle Datensätze, die zurückgegeben werden, werden Kontakte haben, in einem Sales-Position. Diese Kontakte möglicherweise einen Vertreter, einen Manager oder ein Agent werden, solange Ihr Datensatz Suchkriterien erfülltSales %. Kontakte, die nicht "Sales", in verfügenJob-TitelFeld werden herausgefiltert.


Stellen Sie sicher, dass alle Datensätze, die zurückgegeben werden Kontakte in einem Sales-Position haben, gehen Sie folgendermaßen vor:
  1. Für InfoPath 2010:Auf derHomedie Registerkarte auf der Multifunktionsleiste, klicken Sie aufVorschau.
    Für InfoPath 2007:Klicken Sie auf der Symbolleiste aufVorschau, und klicken Sie dann aufFormular.
  2. In derJob-TitelAbfragefeld, TypSales %.
  3. Klicken Sie aufFühren Sie die Abfrage.

Datensätze, die durch Ihre eigene benutzerdefinierte Abfrage zurückgegeben werden, werden alle Kontakte in einem Sales-Position.

Eigenschaften

Artikel-ID: 826992 - Geändert am: Montag, 7. Februar 2011 - Version: 1.0
Die Informationen in diesem Artikel beziehen sich auf:
  • Microsoft Office InfoPath 2007
  • Microsoft Office InfoPath 2003
Keywords: 
kbhowto kbmt KB826992 KbMtde
Maschinell übersetzter Artikel
Wichtig: Dieser Artikel wurde maschinell und nicht von einem Menschen übersetzt. Die Microsoft Knowledge Base ist sehr umfangreich und ihre Inhalte werden ständig ergänzt beziehungsweise überarbeitet. Um Ihnen dennoch alle Inhalte auf Deutsch anbieten zu können, werden viele Artikel nicht von Menschen, sondern von Übersetzungsprogrammen übersetzt, die kontinuierlich optimiert werden. Doch noch sind maschinell übersetzte Texte in der Regel nicht perfekt, insbesondere hinsichtlich Grammatik und des Einsatzes von Fremdwörtern sowie Fachbegriffen. Microsoft übernimmt keine Gewähr für die sprachliche Qualität oder die technische Richtigkeit der Übersetzungen und ist nicht für Probleme haftbar, die direkt oder indirekt durch Übersetzungsfehler oder die Verwendung der übersetzten Inhalte durch Kunden entstehen könnten.
Den englischen Originalartikel können Sie über folgenden Link abrufen: 826992
Microsoft stellt Ihnen die in der Knowledge Base angebotenen Artikel und Informationen als Service-Leistung zur Verfügung. Microsoft übernimmt keinerlei Gewährleistung dafür, dass die angebotenen Artikel und Informationen auch in Ihrer Einsatzumgebung die erwünschten Ergebnisse erzielen. Die Entscheidung darüber, ob und in welcher Form Sie die angebotenen Artikel und Informationen nutzen, liegt daher allein bei Ihnen. Mit Ausnahme der gesetzlichen Haftung für Vorsatz ist jede Haftung von Microsoft im Zusammenhang mit Ihrer Nutzung dieser Artikel oder Informationen ausgeschlossen.

Ihr Feedback an uns

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com