2011-01-31 6 views
1

Adob​​e AIRアプリケーション(ランタイム2.5)のsqliteテーブルで複数の行を削除しようとしています。等tdId1、tdId2は、ユーザが削除することを選択している行(複数可)に基づいて実行時に決定されるであろうAdob​​e AIRで複数の行(名前付きパラメータを使用)を削除する方法

"DELETE FROM mylist WHERE tdId IN (tdId1, tdId2, tdId3, ...)"; 

:ここ

は「IN」演算子を使用して、ステートメントです。ユーザーは任意の数の行を削除できます。私は複数の行を削除するに取り掛かる方法

//delete statement text 
"DELETE FROM mylist WHERE tdId IN :tdId"; 
//delete statement parameters: take 1. 
//Got "argument error: near ':tdId': syntax error" 
deleteStmt.parameters[":tdId"] = "(26, 32)"; 
//delete statement parameters: take 2. 
//Also got "argument error: near ':tdId': syntax error" 
var arr:Array = [26, 32]; 
deleteStmt.parameters[":tdId"] = arr; 

私のような何かを試してみましたか?

[編集]したがって、複数の行を削除するときに、パラメータ「 ":tdId"」を持つ前述のキャッシュされた文が機能しないように見えます。これは、チェーンにこれらの削除をトラブルのあまりを思わ

"Error #3110: Operation cannot be performed while SQLStatement.executing is true."

:キューで非常に最初の行が削除された後、非同期モードでdelete文を複数回実行しようとすると、Flashが次のエラーがスローされます折り返し電話。だから私は私の最後の手段を使用していると思う:実行時にSQLを構築する。結論:キャッシュされたステートメントは、このような状況では使用できません。

+0

最後の手段として、次のことができますこれらのすべてのIDを実行時にフォーマットするクエリ文字列。 – alxx

答えて

0

パラメータ「(26,32)」を挿入すると問題が発生します。パラメータは純粋に値の代用ではないため、SQLへの変数であり、STRINGではありません。したがって、あなたの文を効果的原因構文に、あなたのエラーそこで...あなたの最初のテイクで(大体または)

"DELETE FROM mylist WHERE tdId IN '(26,32)'" 

になりました...あなたの第二、それが悪化取るには...

"DELETE FROM mylist WHERE tdId IN *Array(26,32)*" 

変数が文字列値に変換されないので、実際には発生しません。しかし、インプリンター(SQL)が 'IN'テキストの後のコードを理解しようとすると、ARRAYオブジェクトが得られます。これは、何をすべきかについてまったく考えていません。 ...

解決策?あなたはまだ(安全を維持する。このように...

"DELETE FROM mylist WHERE tdId IN (:val1 , :val2)" 

をそれでは、この場合に起こることはuが効果的に実行することである

var toDel:Array = [26,32] 
//delete statement text 
var baseStr:String = "DELETE FROM mylist WHERE tdId IN ("; 
var midStr:String = ''; 
//delete statement parameters: Processing parameter 
for(var i = 0; i < toDel.length; i++) { 
    deleteStmt.parameters[i] = toDel[i]; 
    if(midStr.length > 0) { midStr += ' , '; } 
    midStr += '?'; 
} 
deleteStmt.text = baseStr + midStr + ')'; 
//Then execute 

を[私はまだ完全にそれをテストするために、そうしてください]すべての文字列を文字列に変換せずにパラメータを使用することができます。

EDIT:パラメータ/ '?'の使用を理解していない場合は、 IN句にパラメータを許可しない場合、あなたは古い学校のSQLスタイルを試すことができます http://help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/flash/data/SQLStatement.html#parameters

0

:を参照してくださいSQL文字列に複数の

" OR (tdId = :param" + paramCounter.toString() + ")"

を追加

関連する問題