좋아, 그래서 MySQL 쿼리에서 결과와 MS 액세스 데이터베이스 테이블을 채울 필요가. 그것은 전혀 어렵지 않습니다. 템플리트 .mdb 파일을 임시 이름에 복사하고 ODBC를 통해 열리는 프로그램을 작성했습니다. 지금까지 문제 없습니다.배치 삽입 및 준비된 쿼리 오류
Access에서 배치 삽입 (VALUES (foo, bar), (second, query), (third query)
)을 지원하지 않는 것으로 나타났습니다. 즉 행당 하나의 쿼리 (수십만 개의 행이있을 수 있음)를 실행해야한다는 의미입니다. 초기 성능 테스트는 Access에 약 900 인서트/초의 속도를 나타냅니다. 가장 큰 데이터 세트를 사용하면 실행 시간이 몇 분이 소요될 수 있습니다 (이는 세계의 끝이 아니지만 빠를수록 빠릅니다).
그래서 준비된 문장을 테스트 해 보았습니다. 하지만 계속 오류가 발생합니다 (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 조작/초가 이미 높습니다.) .
감사
와아! 너 할 수있어? 자, 내 MySQL 쿼리는 꽤 복잡합니다. Access 구문에서 그 코드를 작성해야합니까? 아니면 MySQL 구문으로 작성하지만 Access를 통해 실행합니까? 가장 명확하게 행 단위로 처리하고 싶지는 않지만 (결과를 생성해야하는 경우) 결과를 생성하는 쿼리는 2와 8 조인 사이에 있고 where 절 (및 group by 절) 속임수 ... 여전히 흥미로운 경로처럼 보입니다 ... – ircmaxell
Access에서 통과 쿼리를 실행하거나 ADO와 MySQL 연결 문자열을 사용할 수 있어야합니다.이 경우에는 IN . 어디에서 시작하고 싶은지 잘 모르겠습니다. 자세한 내용을 설명하기가 다소 어렵습니다. – Fionnuala
월요일에 이걸 가지고 놀아 보겠습니다. 문제가 생기면 새로운 질문을 올리십시오. 고마워요! – ircmaxell