2011-12-22 2 views
1

У меня есть функция:ошибка о данных ПОЛУЧИТЬ

def tong_thoigian (self,cr,uid,ids,context={}): 
       obj=self.browse(cr,uid,ids,context=context)[0] 
       cr.execute('''select name,giolam from x_giolam where name=%s'''%(obj.ma_luong)) 
       kq=cr.fetchall() 
       tong=0.00000 
       for i in kq: 
         tong+=kq[1]       
       self.write(cr,uid,ids,{'tonggiolam':tong},context=context) 

и это таблица x_giolam:

class x_giolam(osv.osv): 
    _name = 'x_giolam' 
    _description = 'Gio Lam' 
    _columns = { 
         'name': fields.integer('Lọai',size=64,required="true"), 
         'giolam' : fields.float('Gio lam',size=64,required="True"), 
         'time_in': fields.char('Gio vào',size=20), 
         'time_out' :fields.char('Gio về',size=20), 
         'congviec' :fields.char('Cong viec',size=50), 
    } 
x_giolam() 

и «я» в таблице x_salary, я думаю, что это не значение, чтобы сказать о это потому, что я хочу написать функцию суммы заработной платы персонала, когда имя = Ma_luong таблицы x_salary и ошибка

IndexError: list index out of range 

тип Giolam - float ... и я пишу с openerp , и я думаю, ошибка в строке 'tong + = kq [1]' Как я могу исправить? спасибо !!

ответ

1

Использование моего волшебного хрустального шара, я предполагаю, что cr.execute является вызовом стандартного API баз данных. Итак, kr.fetchall() вернет кортеж строк. Однако кажется, что ваш SQL возвращает только одну строку.

Возможно, вы имеете в виду tong += kq[0][1], то есть второй столбец (giolam) первой строки результата. В качестве альтернативы используйте kr.fetchone(), чтобы получить только один ряд, тогда вы можете сохранить его как kq[1]. В любом случае, вы должны проверить, действительно ли ваш вызов db возвращает результаты.

+0

и жаль, что вы можете мне помочь еще раз ... в таблице x_giolam так много строк, и я хочу суммировать все это с ключом is'name = ma_luong ', я не могу это сделать Спасибо! –