2013-03-27 3 views
2

Я переношу старый Access.mdb в новую базу данных MSSQL с небольшими изменениями. У меня есть простой цикл:Ошибка последовательности функций, состояние SQL S1010 при выполнении подготовленного оператора

//$_new is an MSSQL2011-ODBC-Datasource 
//$_old is an old MSACCESS.mdb-ODBC-Datasource 
$devices_result = odbc_exec($_old,"SELECT * FROM Druckerarchiv"); 
$device_insert_prepare = odbc_prepare($_new,"INSERT INTO Geraetearchiv (Kd_Nr, 
[Typ],Seriennummer,Firma,Rg_Datum,Dauer,Markerart,Zus_Papierfach,Duplexeinheit, 
Universalzufuhr,Plz,Ort,Strasse,Bemerkungen,Telefon,Fax,Ansprechpartner,Abteilung, 
Wartung_BEGINN,Wartung_ENDE,Reaktions_TIME,Fix_TIME,Autom_Verl,Vertrags_Nr, 
W_EK,W_VK,Wartung_LAUFZEIT,Absprachen,Drucker_USB,Drucker_LAN,Drucker_Parallel, 
Drucker_Printserver,Drucker_Printserver_Typ,Drucker_Printserver_Sn, 
Drucker_Zusatz,Email,Dienstleister,Garantieverlaengerung, 
GVServicedienstleister,Aktiv,Typnummer,Firma_Standort) VALUES 
(?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?, 
?,?,?,?,?,?,?,?,?,?,?,?,?)"); 
while($device = odbc_fetch_array($devices_result)) 
{ 
    $device_insert = array(
    utf8_encode($device['KD_NR']), 
    utf8_encode($device['Druckertyp']), 
    utf8_encode($device['Seriennummer']), 
    utf8_encode($device['Firma']), 
    $device['Rg-Datum'], 
    (float)$device['Dauer'], 
    (float)$device['Markerart'], 
    (int)$device['2_Papierfach'], 
    (int)$device['Duplexeinheit'], 
    (int)$device['Universalzufuhr'], 
    utf8_encode($device['Plz']), 
    utf8_encode($device['Ort']), 
    utf8_encode($device['Straße']), 
    utf8_encode($device['Bemerkungen']), 
    utf8_encode($device['Telefon']), 
    utf8_encode($device['Fax']), 
    utf8_encode($device['Ansprechpartner']), 
    utf8_encode($device['Abteilung']), 
    $device['Wartung_BEGINN'], 
    $device['Wartung_ENDE'], 
    (int)$device['Reaktions_TIME'], 
    (int)$device['Fix_TIME'], 
    (int)$device['Autom_Verl'], 
    utf8_encode($device['VERTRAGS_NR']), 
    (double)$device['W-EK'], 
    (double)$device['W-VK'], 
    (float)$device['Wartung_LAUFZEIT'], 
    utf8_encode($device['Absprachen']), 
    0, 
    (int)$device['Ethernet'], 
    0, 
    0, 
    '', 
    '', 
    (($device['Y-Adapter/Typ'])? 
    ("Hat Y-Adapter ".$device['Y-Adapter/Typ']." SN: ".$device['Y-Adapter/SN']):null), 
    '', 
    (int)$servicedienstleister[$markerart[ 
    (int)$device['Markerart']]], //dienstleister 
    '', 
    '', 
    1, 
    '', 
    '', 
    ); 
    odbc_execute($device_insert_prepare,$device_insert); 
} 

Этот цикл выполняется в течение первых 2 до 3 раз. Но после того, что он failes каждого прогона и бросает

Warning: odbc_execute() [function.odbc-execute]: SQL error: 
[Microsoft][SQL Server Native Client 11.0]Function sequence error, 
SQL state S1010 in SQLDescribeParameter 

Поскольку этот цикл должен сделать ~ 30k раунда я хочу, чтобы запустить его в подготовленном заявлении и выполнить его ~ 30k раз. Я уже пытался отключить автокоманду. Я что-то пропустил?

+0

Что вы подразумеваете под этим '[39x?]'? –

+0

его просто ярлык для '?,?,?,?,?, ...'. 39 вопросительных знаков, соответствующих 39 столбцам. –

+0

Обновите свой вопрос с помощью фактического кода, который вы использовали, если только ваш исходный код не соответствует приведенному выше описанию. Использование ярлыков в вопросе проблематично. –

ответ

1

Включите отслеживание ODBC, что должно дать вам ключ к проблеме.

Тот факт, что вы собираетесь на SQL Server, заставляет меня подозревать, что вы нажимаете один активный предел действия SQL Server. Возможно, подумайте о том, чтобы использовать MARS или любые другие обходные пути (или два подключения).

1

Благодаря Нику я получил правильный путь, чтобы исправить мою проблему. Я использовал MARS-Connection. Я отправляю свой собственный ответ с правильным Connection-DSN, поэтому другим разработчикам с той же проблемой не потребуется искать его.

$_new = odbc_connect('DRIVER={SQL Server Native Client 11.0};'. 
        'SERVER=<ServerIP>;'. 
        'DATABASE=<DatabaseName>;'. 
        'MARS_Connection=yes;', 
        '<user>', 
        '<password>'); 
Смежные вопросы