0

我初學者使用appcelerator來開發android應用程序。我試圖插入數據使用文本字段在sqlite中檢索數據。但如果我使用查詢示例「doc_num.value」。我會得到錯誤如何插入值使用文本字段獲取數據在sqlite中使用編輯器

var currentWin = Ti.UI.currentWindow; 

var label_export = Ti.UI.createLabel({ 
color:'#fffdfd', 
text: 'Please insert document number to export :', 
textAlign: Ti.UI.TEXT_ALIGNMENT_CENTER, 
top: 20, //200 
width: 300, 
font:{fontFamily:'Arial',fontSize:14} 
}); 

currentWin.add(label_export); 

var doc_num = Ti.UI.createTextField({ 
color:'#fffdfd', 
top:60, 
left:10, 
width:'80%', 
height:40, 
hintText:'Document Number', 
keyboardType:Ti.UI.KEYBOARD_DEFAULT, 
borderStyle:Ti.UI.INPUT_BORDERSTYLE_ROUNDED 
}); 
currentWin.add(doc_num); 


// btn search 
var btn_search = Ti.UI.createButton({ 
title:'Export CSV', 
top:55, //355 
right:5, 
width:'15%', 
height:50, 
color:'green', 
borderRadius:1, 
font:{fontFamily:'Arial',fontWeight:'bold',fontSize:8} 

}); 

btn_search.addEventListener('click',function(e) { 

var db = Ti.Database.install('../products.sqlite','products'); 
var dbName = db.execute('SELECT doc_num,barcode, product_name,oum,rack_loc,qty FROM products WHERE doc_num = ?',doc_num.value); 
while (dbName.isValidRow()) { 

var doc_num = dbName.fieldByName('doc_num');  
var barcode = dbName.fieldByName('barcode'); 
var product_name = dbName.fieldByName('product_name'); 
var rack_loc = dbName.fieldByName('rack_loc'); 
var oum = dbName.fieldByName('oum'); 
var qty = dbName.fieldByName('qty'); 
dbName.next(); 
Ti.API.info(doc_num + ' ' + barcode + ' ' + product_name+' ' + rack_loc +' '+ oum +' '+qty); 

} 

dbName.close();  
}); 


currentWin.add(label_warning); 

currentWin.add(btn_search); 

[錯誤]:V8Exception:異常發生在測試/ csv.js:61:遺漏的類型錯誤的不確定無法讀取屬性‘價值’」這我的表結構我用我的database.Database名牌產品和磁帶名字也製品

CREATE TABLE產品(ID INTEGER PRIMARY KEY,doc_num VARCHAR,PRODUCT_NAME VARCHAR,條碼VARCHAR,rack_loc VARCHAR,OUM VARCHAR,數量NUMERIC)

回答

0

你只需要使用這個lin的代碼,而不是你的E:

var dbName = db.execute('SELECT doc_num,barcode, product_name,oum,rack_loc,qty FROM products WHERE doc_num = ?', doc_num.value); 

不能連接在執行方法的字符串,則需要使用在SQL查詢中傳遞參數的標準方法「?」簽署

還要注意的是,你不能這樣做這樣的事情也:

var query = 'select * from products where doc_num = ' + doc_num.value; 
  • 這個查詢的情況下,失敗凡是有空間doc_num.value

所以推薦以及將價值傳遞給查詢的最安全方式是:

var query = 'select * from products where doc_num = ? and someother_condition = ?'; 
db.execute(query, doc_num.value, someother_value); 

db.execute方法可以從第二個參數開始取任意數量的參數。

+0

對不起@ prashant-saini。我不明白「someother_condition =?」的說法。 –

+0

這只是另一個條件,如果你想申請相同的表..我的意思是告訴你如何傳遞其他參數在同一個查詢..這是一個普遍的情況下通過查詢及其參數 –

+0

我看到。在這種情況下,我只想在用戶使用文本字段插入後傳遞doc_num值。 –

相關問題