D
Dan von InfoPath
Hello,
I am trying to modify the code in the knowledgebase article for ADO
querying, but I want it to return to the secondary data source repeating
table on the form, not the main source.
Is this even possible since there is no "query" section of the Secondary
Data Source? I would hope you only have to modify the first var line of this
code (from the knowledge base article), but I can't figure out how to do it.
I am using Java Script, any help would be greatly appreciated. I have
attached the raw code from the knowledgebase article below for reference.
Thank you very much!
function MyQuery::OnClick(eventObj)
{
// Get the default SQL command for the form.
var strOrigSQLCommand = XDocument.QueryAdapter.Command;
// Get the query node that you want to modify.
var querySuppliers = XDocument.DOM.selectSingleNode(
"/dfs:myFields/dfs:queryFields/q:Suppliers");
// 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.
var strTitle = querySuppliers.selectSingleNode("@ContactTitle").text;
querySuppliers.selectSingleNode("@ContactTitle").text = "";
// Ask InfoPath to construct an SQL command that is based on all other
field values.
var strMySQLCommand =
XDocument.QueryAdapter.BuildSQLFromXMLNodes(querySuppliers);
// Save each of the other query items, and then clear the other query
items before the next query.
var strSupplierID = querySuppliers.selectSingleNode("@SupplierID").text;
querySuppliers.selectSingleNode("@SupplierID").text = "";
var strContactName = querySuppliers.selectSingleNode("@ContactName").text;
querySuppliers.selectSingleNode("@ContactName").text = "";
var strPhone = querySuppliers.selectSingleNode("@Phone").text;
querySuppliers.selectSingleNode("@Phone").text = "";
// Add ContactTitle to the query so
// that ContactTitle can support wildcard characters.
if (strTitle != "")
{
if (strMySQLCommand != "")
strMySQLCommand = strMySQLCommand + " AND ";
strMySQLCommand = strMySQLCommand +
"([Suppliers].[ContactTitle] LIKE \"" + strTitle + "\")";
}
// Construct the full query string.
var strSQLQuery = strOrigSQLCommand;
if (strMySQLCommand != "")
strSQLQuery = strSQLQuery + " WHERE " + strMySQLCommand;
// This is the query.
//XDocument.UI.Alert(strSQLQuery);
// Run the query.
XDocument.QueryAdapter.Command = strSQLQuery;
XDocument.Query();
// Restore all the user entries to the Query fields so that the user
entries will
// be available if you want to modify and to rerun the query.
querySuppliers.selectSingleNode("@SupplierID").text = strSupplierID;
querySuppliers.selectSingleNode("@ContactName").text = strContactName;
querySuppliers.selectSingleNode("@ContactTitle").text = strTitle;
querySuppliers.selectSingleNode("@Phone").text = strPhone;
// Restore the default table command (for the next time).
XDocument.QueryAdapter.Command = strOrigSQLCommand;
// Switch to data entry view to see results.
XDocument.View.SwitchView("Data Entry");
}
I am trying to modify the code in the knowledgebase article for ADO
querying, but I want it to return to the secondary data source repeating
table on the form, not the main source.
Is this even possible since there is no "query" section of the Secondary
Data Source? I would hope you only have to modify the first var line of this
code (from the knowledge base article), but I can't figure out how to do it.
I am using Java Script, any help would be greatly appreciated. I have
attached the raw code from the knowledgebase article below for reference.
Thank you very much!
function MyQuery::OnClick(eventObj)
{
// Get the default SQL command for the form.
var strOrigSQLCommand = XDocument.QueryAdapter.Command;
// Get the query node that you want to modify.
var querySuppliers = XDocument.DOM.selectSingleNode(
"/dfs:myFields/dfs:queryFields/q:Suppliers");
// 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.
var strTitle = querySuppliers.selectSingleNode("@ContactTitle").text;
querySuppliers.selectSingleNode("@ContactTitle").text = "";
// Ask InfoPath to construct an SQL command that is based on all other
field values.
var strMySQLCommand =
XDocument.QueryAdapter.BuildSQLFromXMLNodes(querySuppliers);
// Save each of the other query items, and then clear the other query
items before the next query.
var strSupplierID = querySuppliers.selectSingleNode("@SupplierID").text;
querySuppliers.selectSingleNode("@SupplierID").text = "";
var strContactName = querySuppliers.selectSingleNode("@ContactName").text;
querySuppliers.selectSingleNode("@ContactName").text = "";
var strPhone = querySuppliers.selectSingleNode("@Phone").text;
querySuppliers.selectSingleNode("@Phone").text = "";
// Add ContactTitle to the query so
// that ContactTitle can support wildcard characters.
if (strTitle != "")
{
if (strMySQLCommand != "")
strMySQLCommand = strMySQLCommand + " AND ";
strMySQLCommand = strMySQLCommand +
"([Suppliers].[ContactTitle] LIKE \"" + strTitle + "\")";
}
// Construct the full query string.
var strSQLQuery = strOrigSQLCommand;
if (strMySQLCommand != "")
strSQLQuery = strSQLQuery + " WHERE " + strMySQLCommand;
// This is the query.
//XDocument.UI.Alert(strSQLQuery);
// Run the query.
XDocument.QueryAdapter.Command = strSQLQuery;
XDocument.Query();
// Restore all the user entries to the Query fields so that the user
entries will
// be available if you want to modify and to rerun the query.
querySuppliers.selectSingleNode("@SupplierID").text = strSupplierID;
querySuppliers.selectSingleNode("@ContactName").text = strContactName;
querySuppliers.selectSingleNode("@ContactTitle").text = strTitle;
querySuppliers.selectSingleNode("@Phone").text = strPhone;
// Restore the default table command (for the next time).
XDocument.QueryAdapter.Command = strOrigSQLCommand;
// Switch to data entry view to see results.
XDocument.View.SwitchView("Data Entry");
}