2014-07-08 2 views
0

MSAccess 데이터베이스에 레코드를 복사하는 간단한 방법을 찾고 있습니다. 저는 ASP 고전/VBscript 페이지와 ADODB를 사용하여 SQL 쿼리를 실행하고 있습니다. 내가 복제 할 기록은 기본 키를 가지고, 그래서 만이 해결 방법 (임시 테이블)을 발견ASP/VB 스크립트 및 기본 키를 사용하여 MS ACCESS에서 레코드를 복제하는 방법은 무엇입니까?

INSERT INTO mytable SELECT * FROM mytable WHERE id=... ---> error 

나는 표준 쿼리를 사용할 수는 없지만, 나는 그것이 최선의 선택이 아니다 생각 :

<% 
set RS=Conn.Execute("SELECT * INTO temptable FROM mytable WHERE id="&id 
set RS=Conn.Execute("ALTER TABLE temptable ALTER COLUMN id INTEGER") 
set RS=Conn.Execute("SELECT MAX(id) AS maxid FROM mytable") 
maxid=RS("maxid")+1 
set RS=Conn.Execute("UPDATE temptable SET id="&maxid) 
set RS=Conn.Execute("INSERT INTO mytable SELECT * FROM temptable") 
set RS=Conn.Execute("DROP TABLE temptable") 
%> 
더 나은

(나는 모든 DB 구조 변경 내용을 추적하지 않으려는)

나는 또한 내 쿼리의 모든 열 이름을 지정할 수 있습니다,하지만 난 컬럼의 거대한 숫자를 가지고 있고, 그들은 종종 수정하고 해결책? 감사합니다

+1

'SELECT *'를 누르지 마십시오. 모든 관련 필드를 이름별로 선택하십시오. 즉, Id를 제외한 모든 필드입니다. – Fionnuala

+0

@Remou는 100 % 정확하며 그의 의견을 뒷받침합니다. 이것은 당신이 마주 치게되는 문제입니다. 'SELECT * FROM Table'에서 각 행을 유일하거나 다른 것으로 만드는'IDENTITY' 필드를 포함하여 모든 것을 선택합니다. 이것은 피해야합니다. 복제하려는 각 컬럼을 선택하고'ID' 컬럼을 피해야합니다. 예 :'SELECT FirstName, LastName, MiddleInitial, BirthDate FROM USERS' –

+0

RecordSets에는 필드 컬렉션이 있습니다. 그래서 rs.Fields : col.name <> PrimID이면 StarString = StarString & col.name & "": next'의 각 열에 대해 lile'을 수행하십시오. SQL보다 레코드 세트에 더 많은 것이 있습니다. – Noodles

답변

0

레코드를 복제하는 문제는 기본 키가 고유하다는 것입니다. 동일한 테이블에 레코드가 있어야하는 경우 다른 기본 키가 있어야합니다. 나는 origianl 기본 키를 넣을 수있는 테이블에 다른 열을 추가하는 것이 좋습니다. 레코드를 복제하고 원본 기본 키를 저장하며이 고유 한 키를 새 레코드에 할당하는 reasonalbe 쿼리를 만들 수 있습니다.

종종 기본 키는 의미가 없으므로 데이터베이스 (자동 번호)에 의해 할당됩니다. OverMind가 지적한 기법을 사용하여 모든 열 (필드)에 액세스 할 수 있습니다.

RecordSets의 필드를 Scripting Dictionaries에서 다른 스크립팅 사전으로, Scripting Dictionaries에서 RecordSets로 복사 한 스크립팅 사전과 루틴을 사용하여 한 테이블에서 다른 테이블로 레코드를 복사하는 코드를 피할 수있었습니다 들판이 넓었습니다.

원하는 경우 서비스 루틴을 공유하지만 실제로 데이터를 이동시키는 코드는 소유권입니다.