如何在 ActionScript 3 中将 SQL 结果分配给变量或数组?
How do I assign SQL results to variables or into an array in ActionScript 3?
我正在构建一个 Flash AIR 应用程序,它将作为一个信息亭安装,用于接受访问者的评论,然后显示以前访问者的评论。这需要具有高度图形化的样式,因此将 query/SQL 结果返回到数据网格不是合适的最终结果。数据库只是由 Flash 应用程序创建的本地数据库,因为这是一个非联网的信息亭安装。
我看到很多评论都在谈论数据网格,我也看到了将所有查询结果显示为单个字符串的代码 - 但我希望填充(无需单击数据网格)一系列包含我的查询结果的动态文本字段。
Insert 语句运行良好:
function addData(): void
{
insertStmt = new SQLStatement();
insertStmt.sqlConnection = conn;
var sqlAdd: String = "";
sqlAdd += "INSERT INTO comments (firstName, lastName, homeTown, comment, avatarID, tagID) ";
sqlAdd += "VALUES ('" + inputFirstName + "', ";
sqlAdd += "'" + inputLastName + "', ";
sqlAdd += "'" + inputHomeTown + "', ";
sqlAdd += "'" + inputComment + "', ";
sqlAdd += inputAvatarID + ", ";
sqlAdd += inputTagID;
sqlAdd += ")";
insertStmt.text = sqlAdd;
insertStmt.addEventListener(SQLEvent.RESULT, insertResult);
insertStmt.addEventListener(SQLErrorEvent.ERROR, insertError);
insertStmt.execute();
}
我还可以在单击按钮时使我的 Select 语句起作用:
function getData(event: MouseEvent): void
{
selectStmt = new SQLStatement();
selectStmt.sqlConnection = conn;
var sql: String = "SELECT firstName, lastName, comment FROM comments";
selectStmt.text = sql;
selectStmt.addEventListener(SQLEvent.RESULT, selectResult);
selectStmt.addEventListener(SQLEvent.RESULT, traceResult);
selectStmt.addEventListener(SQLErrorEvent.ERROR, selectError);
selectStmt.execute();
}
我完全卡住了的地方是提取这些信息,或者给每个东西一个变量名,以便我以后可以使用它,或者至少将数据放入一个多维数组中,这样我就可以使用类似[的语法引用数据=15=]
array[1][firstName]
我得到的代码不太有效:
function selectResult(event: SQLEvent): void
{
selectStmt.removeEventListener(SQLEvent.RESULT, selectResult);
selectStmt.removeEventListener(SQLErrorEvent.ERROR, selectError);
var result: SQLResult = selectStmt.getResult();
// The results grid works so I know I'm getting the data back
resultsGrid.dataProvider = new DataProvider(result.data);
var resultsArray01: Array;
var newResultsRow: Array;
if (result != null)
{
// Iterate through each entry
for each(var entry: Object in result.data)
{
// Trace entry -- this works when I test it
trace(entry.firstName,entry.comment, entry.homeTown);
// Add entries to array -- where I get into troubles
// I get TypeError: Error #1009: Cannot access a property or method of a null object reference.
newResultsRow.push(entry.firstName, entry.comment, entry.homeTown);
resultsArray01.push(newResultsRow);
}
}
}
抱歉,如果这是长篇大论。我是 AS3 的新手,但对 SQL 相当熟悉。感谢任何帮助。
为此您不需要多维数组。您甚至不需要创建循环。您可以按原样存储结果。
//Declare variable to store the data
var resultsArray:Array;
var result: SQLResult = selectStmt.getResult();
if (result != null)
{
resultsArray = result.data;
}
那你就可以这样做了...
trace(resultsArray[1]["firstName"]);
虽然最好使用点语法
trace(resultsArray[1].firstName);
我正在构建一个 Flash AIR 应用程序,它将作为一个信息亭安装,用于接受访问者的评论,然后显示以前访问者的评论。这需要具有高度图形化的样式,因此将 query/SQL 结果返回到数据网格不是合适的最终结果。数据库只是由 Flash 应用程序创建的本地数据库,因为这是一个非联网的信息亭安装。
我看到很多评论都在谈论数据网格,我也看到了将所有查询结果显示为单个字符串的代码 - 但我希望填充(无需单击数据网格)一系列包含我的查询结果的动态文本字段。
Insert 语句运行良好:
function addData(): void
{
insertStmt = new SQLStatement();
insertStmt.sqlConnection = conn;
var sqlAdd: String = "";
sqlAdd += "INSERT INTO comments (firstName, lastName, homeTown, comment, avatarID, tagID) ";
sqlAdd += "VALUES ('" + inputFirstName + "', ";
sqlAdd += "'" + inputLastName + "', ";
sqlAdd += "'" + inputHomeTown + "', ";
sqlAdd += "'" + inputComment + "', ";
sqlAdd += inputAvatarID + ", ";
sqlAdd += inputTagID;
sqlAdd += ")";
insertStmt.text = sqlAdd;
insertStmt.addEventListener(SQLEvent.RESULT, insertResult);
insertStmt.addEventListener(SQLErrorEvent.ERROR, insertError);
insertStmt.execute();
}
我还可以在单击按钮时使我的 Select 语句起作用:
function getData(event: MouseEvent): void
{
selectStmt = new SQLStatement();
selectStmt.sqlConnection = conn;
var sql: String = "SELECT firstName, lastName, comment FROM comments";
selectStmt.text = sql;
selectStmt.addEventListener(SQLEvent.RESULT, selectResult);
selectStmt.addEventListener(SQLEvent.RESULT, traceResult);
selectStmt.addEventListener(SQLErrorEvent.ERROR, selectError);
selectStmt.execute();
}
我完全卡住了的地方是提取这些信息,或者给每个东西一个变量名,以便我以后可以使用它,或者至少将数据放入一个多维数组中,这样我就可以使用类似[的语法引用数据=15=]
array[1][firstName]
我得到的代码不太有效:
function selectResult(event: SQLEvent): void
{
selectStmt.removeEventListener(SQLEvent.RESULT, selectResult);
selectStmt.removeEventListener(SQLErrorEvent.ERROR, selectError);
var result: SQLResult = selectStmt.getResult();
// The results grid works so I know I'm getting the data back
resultsGrid.dataProvider = new DataProvider(result.data);
var resultsArray01: Array;
var newResultsRow: Array;
if (result != null)
{
// Iterate through each entry
for each(var entry: Object in result.data)
{
// Trace entry -- this works when I test it
trace(entry.firstName,entry.comment, entry.homeTown);
// Add entries to array -- where I get into troubles
// I get TypeError: Error #1009: Cannot access a property or method of a null object reference.
newResultsRow.push(entry.firstName, entry.comment, entry.homeTown);
resultsArray01.push(newResultsRow);
}
}
}
抱歉,如果这是长篇大论。我是 AS3 的新手,但对 SQL 相当熟悉。感谢任何帮助。
为此您不需要多维数组。您甚至不需要创建循环。您可以按原样存储结果。
//Declare variable to store the data
var resultsArray:Array;
var result: SQLResult = selectStmt.getResult();
if (result != null)
{
resultsArray = result.data;
}
那你就可以这样做了...
trace(resultsArray[1]["firstName"]);
虽然最好使用点语法
trace(resultsArray[1].firstName);