Solved

MYSQL Function help needed to return a string comma separated

Posted on 2014-01-06
23
809 Views
Last Modified: 2014-01-15
Hi Experts.

I trying to create a function that must return a string of keywords, comma separated. The last comma must be dropped.
example: (professional makeup artist, professional makeup brands, professional makeup courses, professional makeup kits)

I am getting the following error:

[Err] 1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'RETURN SKW' at line 68

The query returns the results when not put inside the function but I think I have an issue with syntax or something for the function.

Could someone have a look at this function and let me know what the problem is.

The the second part once error identified is how do I get the result to be RETURNED as a string comma separated?

Any help will be appreciated.

Regards

Matt
0
Comment
Question by:matthewdacruz
  • 11
  • 6
  • 5
  • +1
23 Comments
 
LVL 34

Expert Comment

by:Dan Craciun
ID: 39758943
Function?
0
 

Author Comment

by:matthewdacruz
ID: 39758956
sorry Thought I attached the mysql function code
my-function.sql.txt
0
 

Author Comment

by:matthewdacruz
ID: 39758994
Any suggestions?
0
 

Author Comment

by:matthewdacruz
ID: 39759002
I am trying to get the result set into a single string comma separated. This is the main objective. Is this possible?

I get the following error

1415 - not allowed to return a resultset from a function
0
 
LVL 34

Expert Comment

by:Dan Craciun
ID: 39759024
If you use AS, you get a column. If you need a variable, use INTO.

Try
theme_keywords.theme_keywords INTO SKW
targetted_keywords_synonyms.targetted_keywords_synonyms INTO SYNKW
theme_leywords_imp.SupportingKeyword INTO SupKW

Furthermore, you're trying to UNION variables. You probably want CONCAT_WS, which allows you to specify the separator.
0
 
LVL 34

Expert Comment

by:Dan Craciun
ID: 39759049
Try the following:
DELIMITER $$

CREATE DEFINER = CURRENT_USER FUNCTION `NewProc`(`_SiloID` int,`_profileid` int)
RETURNS varchar(1000)
DETERMINISTIC

BEGIN

DECLARE SKW, SYNKW, SupKW VARCHAR(100); 

SELECT
	theme_keywords.SiloID,
	theme_keywords.theme_keywords INTO SKW
FROM
	theme_keywords
WHERE
	theme_keywords.profileid = _profileid
	AND theme_keywords.SiloID = _SiloID
	AND theme_keywords.SiloFlag <> 'Research'
	AND theme_keywords.SiloID <> theme_keywords.theme_keywordsid
GROUP BY
	theme_keywords.theme_keywords
ORDER BY
	FIND_IN_SET(
		theme_keywords.SiloFlag,
		'Silo,Article,Article Long Tail'
	) ASC,
	( theme_keywords.CompetingPages / theme_keywords.TrafficForecast ) / 100 ASC;

SELECT
	targetted_keywords_synonyms.targetted_keywords_synonymsid,
	targetted_keywords_synonyms.theme_keywordsid,
	targetted_keywords_synonyms.targetted_keywords_synonyms INTO SYNKW
FROM
	targetted_keywords_synonyms
WHERE
	targetted_keywords_synonyms.profileid = _profileid
	AND targetted_keywords_synonyms.theme_keywordsid = _SiloID
GROUP BY
	targetted_keywords_synonyms.targetted_keywords_synonyms
ORDER BY
	targetted_keywords_synonyms.targetted_keywords_synonyms ASC;

SELECT
	theme_leywords_imp.theme_keywordsid,
	theme_leywords_imp.SupportingKeyword INTO SupKW
FROM
	theme_leywords_imp
WHERE
	theme_leywords_imp.profileid = _profileid
AND theme_leywords_imp.theme_keywordsid = _SiloID;

SELECT CONCAT_WS(", ", SKW, SYNKW, SupKW) INTO SKW;

RETURN SKW;
END$$

DELIMITER ;

Open in new window

0
 

Author Comment

by:matthewdacruz
ID: 39759089
Thanks for all the effort.

The function installed and when running it with the parameters.

I got the following error:

Procedure execution failed
1222 - The used SELECT statements have a different number of columns
0
 

Author Comment

by:matthewdacruz
ID: 39759104
I removed
targetted_keywords_synonyms.targetted_keywords_synonymsid,

as it is not required so all columns have same data types. Still same error
0
 
LVL 34

Expert Comment

by:Dan Craciun
ID: 39759128
Weird... That error is usually thrown when trying to UNION tables with different number of columns.

OK, remove the SELECTs one by one until you find the one that's causing the problem.
0
 
LVL 34

Expert Comment

by:Dan Craciun
ID: 39759149
I was selecting 2 values and storing them into a single varchar variable, which obviously did not work.

Try this:
DELIMITER $$

CREATE DEFINER = CURRENT_USER FUNCTION `NewProc`(`_SiloID` int,`_profileid` int)
RETURNS varchar(1000)
    DETERMINISTIC

BEGIN

DECLARE SKW, SYNKW, SupKW VARCHAR(100); 
DECLARE temp INT;

SELECT
	theme_keywords.SiloID,
	theme_keywords.theme_keywords INTO temp, SKW
FROM
	theme_keywords
WHERE
	theme_keywords.profileid = _profileid
	AND theme_keywords.SiloID = _SiloID
	AND theme_keywords.SiloFlag <> 'Research'
	AND theme_keywords.SiloID <> theme_keywords.theme_keywordsid
GROUP BY
	theme_keywords.theme_keywords
ORDER BY
	FIND_IN_SET(
		theme_keywords.SiloFlag,
		'Silo,Article,Article Long Tail'
	) ASC,
	( theme_keywords.CompetingPages / theme_keywords.TrafficForecast ) / 100 ASC;

SELECT
	targetted_keywords_synonyms.theme_keywordsid,
	targetted_keywords_synonyms.targetted_keywords_synonyms INTO temp, SYNKW
FROM
	targetted_keywords_synonyms
WHERE
	targetted_keywords_synonyms.profileid = _profileid
	AND targetted_keywords_synonyms.theme_keywordsid = _SiloID
GROUP BY
	targetted_keywords_synonyms.targetted_keywords_synonyms
ORDER BY
	targetted_keywords_synonyms.targetted_keywords_synonyms ASC;

SELECT
	theme_leywords_imp.theme_keywordsid,
	theme_leywords_imp.SupportingKeyword INTO temp, SupKW
FROM
	theme_leywords_imp
WHERE
	theme_leywords_imp.profileid = _profileid
AND theme_leywords_imp.theme_keywordsid = _SiloID;

SELECT CONCAT_WS(", ", SKW, SYNKW, SupKW) INTO SKW;

RETURN SKW;
END$$

DELIMITER ;

Open in new window

0
 

Author Comment

by:matthewdacruz
ID: 39759168
HI Just tried and got the following

Procedure execution failed
1172 - Result consisted of more than one row

I appreciate the help with this
0
IT, Stop Being Called Into Every Meeting

Highfive is so simple that setting up every meeting room takes just minutes and every employee will be able to start or join a call from any room with ease. Never be called into a meeting just to get it started again. This is how video conferencing should work!

 
LVL 108

Expert Comment

by:Ray Paseur
ID: 39759188
Once you get the query working, here is the general strategy for dealing with the output that will be a PHP variable.
// SOMETHING LIKE THIS TO RUN THE QUERY
$res = $mysqli->query($query);
// GET THE RESULTS SET BACK IN A ROW
$row = $res->fetch_assoc();
// CREATE A DOUBLE-QUOTED COMMA-SEPARATED STRING VARIABLE FROM THE ROW
$out = '"' . implode('","', $row) . '"';

Open in new window

Man page here:
http://php.net/manual/en/function.implode.php
0
 
LVL 34

Assisted Solution

by:Dan Craciun
Dan Craciun earned 250 total points
ID: 39759192
That's easy to fix, but shows problems in logic: you can only store ONE value in a variable, so if any of the SELECTs return more than one row, you get that error.

You can add LIMIT 1 to all the SELECT statements (except the last one, obviously) to get rid of the error, but you'll need to check why you are getting multiple rows and if you need those extra values.
0
 
LVL 26

Expert Comment

by:Zberteoc
ID: 39759382
Try this:
CREATE DEFINER = CURRENT_USER FUNCTION `NewProc`(`_SiloID` int,`_profileid` int)
 RETURNS varchar(1000)
    DETERMINISTIC
BEGIN

RETURN (
	SELECT
	SKW
FROM
	(
		SELECT
			theme_keywords.SiloID,
			theme_keywords.theme_keywords AS SKW
		FROM
			theme_keywords
		WHERE
			theme_keywords.profileid = _profileid
		AND theme_keywords.SiloID = _SiloID
		AND theme_keywords.SiloFlag <> 'Research'
		AND theme_keywords.SiloID <> theme_keywords.theme_keywordsid
		GROUP BY
			theme_keywords.theme_keywords
		ORDER BY
			FIND_IN_SET(
				theme_keywords.SiloFlag,
				'Silo,Article,Article Long Tail'
			) ASC,
			(
				theme_keywords.CompetingPages / theme_keywords.TrafficForecast
			) / 100 ASC
	) a
UNION ALL
	SELECT
		SYNKW
	FROM
		(
			SELECT
				targetted_keywords_synonyms.targetted_keywords_synonymsid,
				targetted_keywords_synonyms.theme_keywordsid,
				targetted_keywords_synonyms.targetted_keywords_synonyms AS SYNKW
			FROM
				targetted_keywords_synonyms
			WHERE
				targetted_keywords_synonyms.profileid = _profileid
			AND targetted_keywords_synonyms.theme_keywordsid = _SiloID
			GROUP BY
				targetted_keywords_synonyms.targetted_keywords_synonyms
			ORDER BY
				targetted_keywords_synonyms.targetted_keywords_synonyms ASC
		) b
	UNION ALL
		SELECT
			SupKW
		FROM
			(
				SELECT
					theme_leywords_imp.theme_keywordsid,
					theme_leywords_imp.SupportingKeyword AS SupKW
				FROM
					theme_leywords_imp
				WHERE
					theme_leywords_imp.profileid = _profileid
				AND theme_leywords_imp.theme_keywordsid = _SiloID
			) c
;
END;

Open in new window

0
 

Author Comment

by:matthewdacruz
ID: 39759384
Hi Dan,

I've learnt a lot here.
Thank you for showing me this.
If I may, I would like to explain what I need to build.

I am working with a database that has 3 tables.
one ( SKW ) to many relationship ( SYNKW, SupKW )

I need to create a "keyword string" for each record in a dataset - each row.
SKW is always unique and single,

SYNKW, SupKW will both contain multiple results for one SKW row.
Each unique id requires "keyword string from SKW, SYNKW, SupKW result" in every row.

I was told I need create a function ( This one we working on ) to create this "keyword string" using parameters;
->  then include it into a query I have to get the desired "keyword string" data per row more efficiently and quickly.

I was told that if I nested the select statement that gets the "keyword string" in a comma separated string format into the query itself it would be very slow.

A php script generates an xml file using a query.
This xml file needs the  "keyword string" in the xml node below.

<meta_keyword string>health,medicare,medicare plan,health insurance,other keywords</meta_keyword string>

These files can have a few thousand rows of data in the xml file where the "keyword string" is required on each row. Mandatory data

a call to the two tables returning multiple rows for each single row in the xml query.



That is the objective.
Is this the best route to follow?
How do I get to the end result most efficiently via mysql query.
I need the mysql query to generate the correct output for the xml file

I would love to get your thoughts on this. Hope the explanation is clear.
0
 
LVL 108

Expert Comment

by:Ray Paseur
ID: 39759482
Matt: Why not just run a simple query that says something like SELECT DISTINCT?

Maybe if you can post the CREATE TABLE statements and a little of the test data we can show you a path to success.
0
 

Author Comment

by:matthewdacruz
ID: 39759507
Hi Ray
I will put together some samples

Thanks
0
 
LVL 108

Expert Comment

by:Ray Paseur
ID: 39759513
Great.  If we have some test data and understand what you would expect for output it's often much easier to get a good answer (when compared to starting with code that doesn't work)!  This is the canonical article about how to ask technical questions: http://sscce.org/
0
 

Author Comment

by:matthewdacruz
ID: 39761505
HI Guys
I have attached all the required sample files and stripped all parts not required.
Sample sql data sets in zip.

Here is the summary of what needs to be achieved.
Thanks for the help on this

OBJECTIVE: To Create a “comma separated string” to populate a xml node

Please note the sample data has been reduced to make debugging easy.

Problem:
 Calling data from two tables to create the “comma separate string” within a query that can have over 5000 rows of data. The comma separated string is required for each row.

XML output sample:
XML node:
<BPNode>
<primary_keyword_pagename>health</primary_keyword_pagename>
<meta_keywords>health ¿ need to inject comma separated keyword string here. Not just the theme_keywords.theme_keywords</meta_keywords>
</BPNode>


XML QUERY:  
Existing query that works to get data for xml creation.
See xml-generation-query.sql.txt, lines 3-7.
Row 6 needs to be the comma separated string output


Keyword query to get required keyword for comma separated string:
See: comma-separated-query.sql.txt
this query collects all the correct data rows but the output is not formatted as a comma separated string


Tables
articles: article table, not mandatory – data can be blank

theme_keywords:  primary table.
Parent – each row requires multiple results from tables below in a comma separated string format

Mandatory tables for comma separated keywords

Foreign key: theme_keywords.theme_keywordsid

targetted_keywords_synonyms: list of words (SYNKW)

theme_leywords: list of words (SupKW)
comma-separated.zip
0
 
LVL 108

Expert Comment

by:Ray Paseur
ID: 39762002
Matt: Any chance we can get the CREATE TABLE statements for these?  I would like to put together a PHP script that will create the (temporary) tables, run the queries to INSERT the data, run the queries to SELECT the data and show the rows of the results set.  Once we have that we can move on to the simple part, which is creating CSV strings and/or XML documents.
0
 
LVL 108

Assisted Solution

by:Ray Paseur
Ray Paseur earned 250 total points
ID: 39762081
Also, I'm still a little unclear about the nature of the question.  Are we trying to perfect the SQL or are we trying to get an output string by reformatting the query results set?

If the latter, this self-contained teaching example may be helpful.  It shows how to run a query and use the results set to create a CSV file (line 191-208), create an XML document (line 211-246), create a JSON string from the PHP object, from the XML document (line 253-262).

<?php // RAY_temp_matthewdacruz.php
ini_set('display_errors', TRUE);
error_reporting(E_ALL);
echo '<pre>';


// SEE http://www.experts-exchange.com/Database/MySQL/Q_28331339.html#a39762002
// THIS SCRIPT DEMONSTRATES SOME OF THE BASICS OF MySQLi


// THE ABSOLUTE MINIMUM YOU MUST UNDERSTAND TO USE PHP AND MYSQLI
// MAN PAGE: http://php.net/manual/en/mysqli.overview.php
// MAN PAGE: http://php.net/manual/en/class.mysqli.php
// MAN PAGE: http://php.net/manual/en/class.mysqli-stmt.php
// MAN PAGE: http://php.net/manual/en/class.mysqli-result.php
// MAN PAGE: http://php.net/manual/en/class.mysqli-warning.php
// MAN PAGE: http://php.net/manual/en/class.mysqli-sql-exception.php <-- DID NOT WORK PHP 5.3+, MySQL 5.1+
// MAN PAGE: http://php.net/manual/en/mysqli.construct.php
// MAN PAGE: http://php.net/manual/en/mysqli.real-escape-string.php
// MAN PAGE: http://php.net/manual/en/mysqli.query.php
// MAN PAGE: http://php.net/manual/en/mysqli.errno.php
// MAN PAGE: http://php.net/manual/en/mysqli.error.php
// MAN PAGE: http://php.net/manual/en/mysqli.insert-id.php
// MAN PAGE: http://php.net/manual/en/mysqli-result.num-rows.php
// MAN PAGE: http://php.net/manual/en/mysqli-result.fetch-array.php
// MAN PAGE: http://php.net/manual/en/mysqli-result.fetch-object.php


// CREATE AN ARRAY OF NAMES TO USE FOR TEST DATA
$test_names_arrays = array
( array( "fname" => "Walter" , "lname" => "Williams" )
, array( "fname" => "Ray"    , "lname" => "Paseur"   )
, array( "fname" => "Bill"   , "lname" => "O'Reilly" )
, array( "fname" => "Ray"    , "lname" => "Capece"   )
, array( "fname" => "John"   , "lname" => "Paseur"   )
)
;


// DATABASE CONNECTION AND SELECTION VARIABLES - GET THESE FROM YOUR HOSTING COMPANY
$db_host = "localhost"; // PROBABLY THIS IS OK
$db_name = "??";
$db_user = "??";
$db_word = "??";

// OPEN A CONNECTION TO THE DATA BASE SERVER AND SELECT THE DB
$mysqli = new mysqli($db_host, $db_user, $db_word, $db_name);

// DID THE CONNECT/SELECT WORK OR FAIL?
if ($mysqli->connect_errno)
{
    $err
    = "CONNECT FAIL: "
    . $mysqli->connect_errno
    . ' '
    . $mysqli->connect_error
    ;
    trigger_error($err, E_USER_ERROR);
}

// ACTIVATE THIS TO SHOW WHAT THE DB CONNECTION OBJECT LOOKS LIKE
// var_dump($mysqli);


// CREATING A TABLE FOR OUR TEST DATA
$sql
=
"
CREATE TEMPORARY TABLE my_table
( id    INT         NOT NULL AUTO_INCREMENT PRIMARY KEY
, fname VARCHAR(24) NOT NULL DEFAULT ''
, lname VARCHAR(24) NOT NULL DEFAULT ''
)
"
;

// RUN THE QUERY TO CREATE THE TABLE
$res = $mysqli->query($sql);

// IF mysqli::query() RETURNS FALSE, LOG AND SHOW THE ERROR
if (!$res)
{
    $err
    = 'QUERY FAILURE:'
    . ' ERRNO: '
    . $mysqli->errno
    . ' ERROR: '
    . $mysqli->error
    . ' QUERY: '
    . $sql
    ;
    trigger_error($err, E_USER_ERROR);
}

// SHOW THE RESULTS OF THE QUERY
var_dump($res);


// LOADING OUR DATA INTO THE TABLE
foreach ($test_names_arrays as $person)
{
    // ESCAPE THE DATA FOR SAFE USE IN A QUERY
    $safe_fn  = $mysqli->real_escape_string($person['fname']);
    $safe_ln  = $mysqli->real_escape_string($person['lname']);

    // CONSTRUCT THE QUERY USING THE ESCAPED VARIABLES
    $sql = "INSERT INTO my_table ( fname, lname ) VALUES ( '$safe_fn', '$safe_ln' )";

    // RUN THE QUERY TO INSERT THE ROW
    $res = $mysqli->query($sql);

    // IF mysqli::query() RETURNS FALSE, LOG AND SHOW THE ERROR
    if (!$res)
    {
        $err
        = 'QUERY FAILURE:'
        . ' ERRNO: '
        . $mysqli->errno
        . ' ERROR: '
        . $mysqli->error
        . ' QUERY: '
        . $sql
        ;
        trigger_error($err, E_USER_ERROR);
    }


    // GET THE AUTO_INCREMENT ID OF THE RECORD JUST INSERTED
    $id  = $mysqli->insert_id;
    echo "MySQLI INSERTED A ROW CONTAINING <b>$safe_fn $safe_ln</b> WITH AUTO_INCREMENT ID = $id" . PHP_EOL;
}
echo PHP_EOL;


// CREATE AND SEND A SELECT QUERY AND TEST THE RESULTS
$fname    = "RAY";
$safe_fn  = $mysqli->real_escape_string($fname);

// CONSTRUCT THE QUERY USING THE ESCAPED VARIABLE
$sql = "SELECT id, fname, lname FROM my_table WHERE fname='$safe_fn' OR fname='Bill' ORDER BY lname, fname";
$res = $mysqli->query($sql);

// IF mysqli_query() RETURNS FALSE, LOG AND SHOW THE ERROR
if (!$res)
{
    $err
    = 'QUERY FAILURE:'
    . ' ERRNO: '
    . $mysqli->errno
    . ' ERROR: '
    . $mysqli->error
    . ' QUERY: '
    . $sql
    ;
    trigger_error($err, E_USER_ERROR);
}
// IF WE GET THIS FAR, THE QUERY SUCCEEDED AND WE HAVE A RESULT OBJECT IN $res
// AND SO WE CAN NOW USE $res IN OTHER MYSQLI FUNCTIONS


// DETERMINE HOW MANY ROWS OF RESULTS WE GOT
$num     = $res->num_rows;
$num_fmt = number_format($num);
if (!$num)
{
    echo "<br/>QUERY: $sql ";
    echo "<br/>FOUND NO DATA ";
    echo PHP_EOL;
}
else
{
    echo "<br/>QUERY: $sql ";
    echo "<br/>FOUND $num_fmt ROWS OF DATA ";
    echo PHP_EOL;
}
echo PHP_EOL;


// ITERATE OVER THE RESULTS SET AS AN OBJECT TO SHOW WHAT WE FOUND
echo PHP_EOL . 'USING MySQLi_Result::Fetch_<i>Object</i>(): ';
echo PHP_EOL;
while ($row = $res->fetch_object())
{
    // ROW BY ROW PROCESSING IS DONE HERE
    print_r($row);
    echo PHP_EOL;
}
echo PHP_EOL;


// REUSE THE SAME QUERY RESULT SET
$res->data_seek(0);


// CREATE A COMMA-SEPARATED VALUE SET
$csv = 'RAY_temp_matthewdacruz.csv';
$fpw = fopen($csv, 'w');
if (!$fpw) trigger_error("CANNOT OPEN $csv", E_USER_ERROR);

// NOTE: ROW MUST BE FETCHED AS AN ARRAY
while ($row = $res->fetch_assoc())
{
    // COLLAPSE THE ROW INTO A CSV STRING AND WRITE THE FILE
    fputcsv($fpw, $row);
}
// SHOW A LINK TO THE CSV
echo '<a target="_blank" href="' . $csv . '">' . $csv . '</a>';
echo PHP_EOL;


// REUSE THE SAME QUERY RESULT SET
$res->data_seek(0);


// NOTE: ROW CAN BE FETCHED AS AN OBJECT FOR EASIER HEREDOC SYNTAX
$str = NULL;
while ($row = $res->fetch_object())
{
    // COLLAPSE THE ROW INTO XML
    $out = <<<EOD
  <person>
    <id>$row->id</id>
    <fn>$row->fname</fn>
    <ln>$row->lname</ln>
  </person>
EOD;

    $str .= $out;
}

// WRAP THE XML DOCUMENT
$str = <<<EOD
<?xml version="1.0" encoding="UTF-8"?>
<rezult>
$str
</rezult>
EOD;

// TEST TO SEE IF THE DOCUMENT WORKS
$obj = simpleXML_Load_String($str);
var_dump($obj);
echo PHP_EOL;

// WRITE THE XML STRING
$xml = 'RAY_temp_matthewdacruz.xml';
file_put_contents($xml, $str);

// SHOW A LINK TO THE XML
echo '<a target="_blank" href="' . $xml . '">' . $xml . '</a>';
echo PHP_EOL;


// REUSE THE OBJECT TO MAKE A JSON STRING
$jso = json_encode($obj);

// WRITE THE JSON STRING
$txt = 'RAY_temp_matthewdacruz.txt';
file_put_contents($txt, $jso);

// SHOW A LINK TO THE XML
echo '<a target="_blank" href="' . $txt . '">' . $txt . '</a>';
echo PHP_EOL;

Open in new window

0
 

Accepted Solution

by:
matthewdacruz earned 0 total points
ID: 39762368
Hi Ray,

Thanks for the response.
I was hoping to just get the mysql query to work so it minimized any additional work as there is an existing system in place.

All that is required is that I populate that particular column / row  with the comma separated string for meta_keywords.
The php file I have makes a query and then generates the xml from that already.

I am open to suggestions as mentioned in post ID: 39762002.

I will look at your example you submitted.

Thanks
0
 

Author Closing Comment

by:matthewdacruz
ID: 39781813
Learnt a lot thanks
0

Featured Post

How your wiki can always stay up-to-date

Quip doubles as a “living” wiki and a project management tool that evolves with your organization. As you finish projects in Quip, the work remains, easily accessible to all team members, new and old.
- Increase transparency
- Onboard new hires faster
- Access from mobile/offline

Join & Write a Comment

SQL Command Tool comes with APEX under SQL Workshop. It helps us to make changes on the database directly using a graphical user interface. This helps us writing any SQL/ PLSQL queries and execute it on the database and we can create any database ob…
Since pre-biblical times, humans have sought ways to keep secrets, and share the secrets selectively.  This article explores the ways PHP can be used to hide and encrypt information.
The viewer will learn how to dynamically set the form action using jQuery.
Polish reports in Access so they look terrific. Take yourself to another level. Equations, Back Color, Alternate Back Color. Write easy VBA Code. Tighten space to use less pages. Launch report from a menu, considering criteria only when it is filled…

707 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question

Need Help in Real-Time?

Connect with top rated Experts

13 Experts available now in Live!

Get 1:1 Help Now