2017-01-04 7 views
0

와 다른 BLOB 필드/기록을 복사하는 방법은 다음과 같은 문제가 있습니다하나의 DB에서 MySQL과 클래식 ASP

나는 하나의 테이블이 다른 서버, 동일한 테이블 구조, 각 2 개 MySQL의 DB를 가지고 있습니다. 이러한 DB 테이블에는 각 레코드에 여러 BLOB 필드 (WAV 형식의 음성 녹음)와 숫자 레코드 ID가 있습니다.

전체 ASP가 고전 ASP로 변경되었으므로 변경할 수 없습니다 (아직 다른 언어/시스템을 모르겠습니다). 나는 그것이 오래되었지만 이제는이 문제를 해결할 필요가 있음을 안다.

전체 데이터 (BLOB 필드 포함)와 함께 DB1에서 특정 레코드를 읽어야합니다 (IdNum = 100으로 레코드라고 가정 해 봅시다). DB2의 테이블에 동일한 전체 레코드를 저장 (삽입)해야합니다. BLOB 필드).

정상적인 삽입을 시도했지만 sqlRec2 선언 줄에 "형식 불일치"오류가 표시됩니다.

아무도 나에게 어떻게 도와 줄 수 있습니까 ?? 감사 !!

내 코드 (recwav01가, 02 및 03 BLOB 필드있다 "메모"TXT 필드는) 다음과 같습니다 :

Set my_conn = createobject("ADODB.Connection") 
Set my_conn2 = createobject("ADODB.Connection") 

my_conn.open = "DRIVER={MySQL ODBC 5.3 Unicode Driver};"_ 
& "SERVER=yyy.yyy.yyy.yyy;PORT=3306;"_ 
& "DATABASE=dbremote01;"_ 
& "UID=root;PWD=password01; OPTION=35;" 

my_conn2.open = "DRIVER={MySQL ODBC 5.3 Unicode Driver};"_ 
& "SERVER=xxx.xxx.xxx.xxx;PORT=3306;"_ 
& "DATABASE=dbremote02;"_ 
& "UID=root;PWD=password02; OPTION=35;" 

sqlRec = "SELECT * FROM table01 WHERE idnum>=100 AND idnum <=120;" 
Set rs = my_conn.Execute(sqlRec) 

DO WHILE NOT rs.EOF 
    sqlRec2 = "INSERT INTO table02 (idnum,notes,recwav01,recwav02,recwav03) VALUES (" & _ 
    rs("idnum") & ", '" & rs("notes") & "', '" & rs("recwav01") & "', '" & rs("recwav02") & _ 
    "', '" & rs("recwav03") & "');" 
    my_conn2.Execute(sqlRec2) 
    rs.movenext 
LOOP 
+1

BLOB를 파일에 저장하거나 16 진수 문자열로 삽입해야 할 수 있습니다. http://stackoverflow.com/questions/10729824/how-to-insert-blob-and-clob-files-in-mysql – backpackcoder

답변

-1

Yipes! 너는 어려운 문제가있다. 21 세기 언어와 런타임은 큰 BLOB를 처리하기가 어렵습니다. 서버에서 프로그램 RAM으로 전송하기 위해 일종의 스트리밍 프로토콜이 필요합니다. 그리고 수년 동안 업데이트되지 않은 늦은 20 세기 런타임을 다루고 있습니다. BLOB의 크기에 따라 기본 ASP 질문에 대한 대답은 으로 표시 될 수 있습니다. 수행 할 수없는 내용은 ™입니다.

한편, Base 64 인코딩을 사용하여 이진 데이터를 텍스트 문자열로 변환 해보십시오. 이 SQL 문의 쌍은 트릭을 수행 할 수 있습니다.

은 테이블을 읽으려면 :
sql1 = "SELECT idnum, notes, TO_BASE64(recwav01) w1, TO_BASE64(recwav02) w2, TO_BASE64(recwav03) w3; " 

그런 다음, 다음과 같이 성명을 행을 삽입합니다.

sql2 = _ 
"INSERT INTO table02 (idnum, notes, recwav01, recwav02, recwav03) " & _ 
    "VALUES (" & rs("idnum") & ", '" & rs("notes") & "', " & _ 
      "FROM_BASE64('" & rs("w1") & "'), " & _ 
      "FROM_BASE64('" & rs("w2") & "'), " & _ 
      "FROM_BASE64('" & rs("w3") & "')); " 

(이 연결된 텍스트 문자열의 정확성에 대한 어떠한 보증도하지 않습니다. 당신의 notes 열 값 중 하나가 ' 문자가 포함 된 경우이 당신의 얼굴에 날려 버릴 것 경고.)

아이디어 여기에 DBMS에서 나오는 바이너리 데이터를 텍스트 문자열로 변환하고, 그 문자열을 바이너리로 다시 변환합니다.

BLOB가 고전 ASP에서 BLOB가 너무 크기 때문에 이것이 작동하지 않는다면 mysqldump를 사용하여 데이터를 텍스트 파일로 추출한 다음 새 데이터베이스에로드 해 볼 수 있습니다.

+0

2.nd 옵션을 사용하고 있습니다. 첫 번째 DB에서 mysqldump를 사용하여 각 BLOB 필드를 로컬 파일에 저장 한 다음 각 저장된 파일을 두 번째 DB의 새 레코드에 삽입합니다. 첫 번째 부분은 잘 작동합니다. 파일을 저장할 수 있으며 올바른 파일입니다 (저장된 WAV를들을 수 있습니다). 문제는 두 번째 DB에 저장할 수 없다는 것입니다 ...INSERT INTO table2 (idnum, note, recwav01, recwav02) VALUES (100, NULL, LOAD_FILE ('c : /tempdir/recfile01.wav'), LOAD_FILE ('c :/tempdir/recfile02 .wav ')); ... 레코드를 작성하지만 BLOB를 저장하지 않으므로, BLOB 필드는 비어 있습니다. – Lawrence

+0

무슨 대답이 ....이 대답은 행상! 나는 SQL Server 데이터베이스에 BLOB 형태의 WAV 파일을 저장하고 ADODB.Stream을 사용하여 그것들을 검색했다. 전적으로 수행 할 수있다. – Lankymart

+1

가 suceeded !! 모든 사람들을 위해서 : load_file을 사용할 때 ('c : /path/File.xxx'); 로드중인 파일이 SQL 인스턴스가 실행중인 컴퓨터 (원격 서버를 의미)에 있어야합니다. 또한 my.ini (mysql 구성 파일)에 max_allowed_packet = 100M을 설정하는 데주의하십시오. ;) – Lawrence