Итак, мне нужно заполнить таблицу базы данных MS Access результатами из запроса MySQL. Это совсем не сложно. У меня есть программа, написанная там, где она копирует файл .mdb шаблона во временное имя и открывает его через odbc. Пока нет проблем.Пакетные вставки и исправленная ошибка запроса
Я заметил, что Access не поддерживает пакетную вставку (VALUES (foo, bar), (second, query), (third query)
). Таким образом, это означает, что мне нужно выполнить один запрос для каждой строки (есть потенциально сотни тысяч строк). Первоначальные тесты производительности показывают скорость около 900 входов/сек в Access. С нашими самыми большими наборами данных это может означать время выполнения минут (что еще не конец света, но, очевидно, чем быстрее, тем лучше).
Итак, я попытался проверить подготовленное заявление. Но я продолжаю получать ошибку (Warning: odbc_execute() [function.odbc-execute]: SQL error: [Microsoft][ODBC Microsoft Access Driver]COUNT field incorrect , SQL state 07001 in SQLExecute in D:\....php on line 30
).
Вот код, я использую (линия 30 является odbc_execute
):
$sql = 'INSERT INTO table
([field0], [field1], [field2], [field3], [field4], [field5])
VALUES (?, ?, ?, ?, ?, ?)';
$stmt = odbc_prepare($conn, $sql);
for ($i = 200001; $i < 300001; $i++) {
$a = array($i, "Field1 $", "Field2 $i", "Field3 $i", "Field4 $i", $i);
odbc_execute($stmt, $a);
}
Так что мой вопрос два раза. Во-первых, есть ли какая-либо идея о том, почему я получаю эту ошибку (я проверил, и число в массиве соответствует списку полей, который соответствует числу маркеров параметра ?
)? И во-вторых, должен ли я даже потрудиться с этим или просто использовать прямые инструкции INSERT? Как я уже сказал, время не критично, но, если это возможно, я бы хотел, чтобы время было как можно ниже (опять же, я могу ограничить пропускную способность диска, так как 900 операций/сек уже высоки). .
Благодаря
Woah! Вы можете сделать это? Теперь мой MySQL-запрос довольно сложный. Должен ли я написать это в синтаксисе Access? Или я пишу его в синтаксисе MySQL, но выполняю его через Access? Я определенно не хочу делать это по строкам (если нужно, отлично), но запрос, который генерирует результаты, имеет от 2 до 8 объединений и переменную величину предложения where (и group by) trickery ... Даже по-прежнему это выглядит как интересный маршрут ... – ircmaxell
Вы должны иметь возможность выполнить сквозной запрос в Access или использовать ADO и строку подключения MySQL, и в этом случае вы можете обратиться к Access с IN , Я не уверен, с чего вы хотите начать, поэтому немного сложнее дать более подробную информацию. – Fionnuala
Я поиграю с этим немного в понедельник, и если у меня возникнут проблемы, отправьте новый вопрос ... Спасибо! – ircmaxell