2012-11-08 45 views
1

我寫了從訪問的數據傳輸下面的代碼火鳥功能不能在所有的表工作

def getFirebirdFieldNames(firebird_cursor, tablename): 
    firebird_cursor.execute('select rdb$field_name from rdb$relation_fields where rdb$relation_name=\'%s\' order by rdb$field_position' % (tablename,)) 
    field_names = list() 
    for c in firebird_cursor.fetchall(): 
     field_names.append(c[0]) 
    return field_names 

def SelectFromAccessTable(tablename): 
    return 'select * from [' + tablename+']' 

def InsertToFirebirdTable(tablename, row): 
    values='' 
    values=values.encode('cp1251', 'replace') 
    for i in range(len(row)): 
     if (i!=len(row)-1): 
       if type(row[i])==int: 
         temp=str(row[i]) 
       else: 
         if type(row[i])==decimal.Decimal: 
          temp=str(row[i]) 
         else: 
          temp='\'%s\'' % (row[i],) 
       values+=temp+', '     
     else: 
       if type(row[i])==int: 
         temp=str(row[i]) 
       else: 
         if type(row[i])==decimal.Decimal: 
          temp=str(row[i]) 
         else: 
          temp='\'%s\'' % (row[i],) 
       values+=temp 
    return 'insert into '+tablename+' values ('+values+')' 

def AccessToFirebird(accesstablename, firebirdtablename, accesscursor, firebirdcursor): 
    SelectSql=SelectFromAccessTable(accesstablename) 
    for row in accesscursor.execute(SelectSql): 
     InsertSql=InsertToFirebirdTable(firebirdtablename, row) 
     InsertSql=InsertSql 
     print InsertSql 
     firebirdcursor.execute(InsertSql) 

在主程序中有這些功能

conAcc = pyodbc.connect('DRIVER={Microsoft Access Driver (*.mdb, *.accdb)};DBQ=D:\ThirdTask\Northwind.accdb') 
SqlAccess=conAcc.cursor(); 
conn.begin() 
cur=conn.cursor() 
sql.AccessToFirebird('Customers', 'CLIENTS', SqlAccess, cur) 
conn.commit() 
conn.begin() 
cur=conn.cursor() 
sql.AccessToFirebird('Сотрудники', 'EMPLOYEES', SqlAccess, cur) 
conn.commit() 
conAcc.commit() 
conn.close() 
conAcc.close(); 

作爲呼叫填充表CLIENTS中的結果,EMPLOYEES未填滿(Northwind數據庫)。爲什麼? 這裏是文本輸出(sql-query inserts)

insert into EMPLOYEES values (1, 'Борей', 'Ильина', 'Юлия', '[email protected]', 'Сотрудник отдела сбыта', '(123)555-0100', '(123)555-0102', 'None', '(123)555-0103', '1-й проспект, д. 12', 'Сочи', '(нет)', '999999', 'Россия', '#http://northwindtraders.com#', 'None', '') 
insert into EMPLOYEES values (2, 'Борей', 'Гладких', 'Андрей', '[email protected]', 'Вице-президент', '(123) 555-0100', '(123) 555-0102', 'None', '(123) 555-0103', '2-й проспект, д. 12', 'Томск', '(нет)', '999999', 'Россия', 'http://northwindtraders.com#http://northwindtraders.com/#', 'Принят в компанию в качестве сотрудника отдела сбыта, затем назначен начальником отдела сбыта, в настоящее время занимает должность вице-президента по продажам.', '') 
insert into EMPLOYEES values (3, 'Борей', 'Куликов', 'Евгений', '[email protected]', 'Сотрудник отдела сбыта', '(123) 555-0100', '(123) 555-0102', 'None', '(123) 555-0103', '3-й проспект, д. 12', 'Псков', '(нет)', '999999', 'Россия', 'http://northwindtraders.com#http://northwindtraders.com/#', 'Прошел стажировку в отделе сбыта, в настоящее время является штатным сотрудником.', '') 
insert into EMPLOYEES values (4, 'Борей', 'Сергиенко', 'Мария', '[email protected]', 'Сотрудник отдела сбыта', '(123) 555-0100', '(123) 555-0102', 'None', '(123) 555-0103', '4-й проспект, д. 12', 'Самара', '(нет)', '999999', 'Россия', 'http://northwindtraders.com#http://northwindtraders.com/#', 'None', '') 
insert into EMPLOYEES values (5, 'Борей', 'Новиков', 'Николай', '[email protected]', 'Начальник отдела сбыта', '(123) 555-0100', '(123) 555-0102', 'None', '(123) 555-0103', '5-й проспект, д. 12', 'Сочи', '(нет)', '999999', 'Россия', 'http://northwindtraders.com#http://northwindtraders.com/#', 'Принят в компанию в качестве сотрудника отдела сбыта, затем назначен начальником отдела сбыта. Свободно владеет французским языком.', '') 
insert into EMPLOYEES values (6, 'Борей', 'Корепин', 'Вадим', '[email protected]', 'Сотрудник отдела сбыта', '(123) 555-0100', '(123) 555-0102', 'None', '(123) 555-0103', '6-й проспект, д. 12', 'Псков', '(нет)', '999999', 'Россия', 'http://northwindtraders.com#http://northwindtraders.com/#', 'Свободно владеет японским языком, читает и пишеть на французском, португальском и испанском.', '') 
insert into EMPLOYEES values (7, 'Борей', 'Климов', 'Сергей', '[email protected]', 'Сотрудник отдела сбыта', '(123) 555-0100', '(123) 555-0102', 'None', '(123) 555-0103', '7-й проспект, д. 12', 'Сочи', '(нет)', '999999', 'Россия', 'http://northwindtraders.com#http://northwindtraders.com/#', 'None', '') 
insert into EMPLOYEES values (8, 'Борей', 'Ожогина', 'Инна', '[email protected]', 'Координатор продаж', '(123) 555-0100', '(123) 555-0102', 'None', '(123) 555-0103', '8-й проспект, д. 12', 'Псков', '(нет)', '999999', 'Россия', 'http://northwindtraders.com#http://northwindtraders.com/#', 'Читает и пишет по-французски.', '') 
insert into EMPLOYEES values (9, 'Борей', 'Попкова', 'Дарья', '[email protected]', 'Сотрудник отдела сбыта', '(123) 555-0100', '(123) 555-0102', 'None', '(123) 555-0103', '9-я улица, д.12', 'Сочи', '(нет)', '999999', 'Россия', 'http://northwindtraders.com#http://northwindtraders.com/#', 'Свободно владеет французским и немецким языком.', '') 

P.S.在嘗試在ibexpert執行請求的情況下

insert into EMPLOYEES values (1, 'Борей', 'Ильина', 'Юлия', '[email protected]', 'Сотрудник отдела сбыта', '(123)555-0100', '(123)555-0102', 'None', '(123)555-0103', '1-й проспект, д. 12', 'Сочи', '(нет)', '999999', 'Россия', '#http://northwindtraders.com#', 'None', '') 

我收到

can't format message 13:198 -- message file C:\Windows\firebird.msg not found. 
arithmetic exception, numeric overflow, or string truncation. 
string right truncation. 

而且我從其中

insert into EMPLOYEES values (2, 'Борей', 'Гладких', 'Андрей', '[email protected]', 'Вице-президент', '(123) 555-0100', '(123) 555-0102', 'None', '(123) 555-0103', '2-й проспект, д. 12', 'Томск', '(нет)', '999999', 'Россия', 'http://northwindtraders.com#http://northwindtraders.com/#', 'Принят в компанию в качестве сотрудника отдела сбыта, затем назначен начальником отдела сбыта, в настоящее время занимает должность вице-президента по продажам.', '') 

有一個線問題

'http://northwindtraders.com#http://northwindtraders.com/#' 

而不是

'http://northwindtraders.com'. 

回答

2

string right truncation意味着您試圖插入一個字符串,該字符串對於列來說太長。