我有以下问题:
我在2个不同的服务器上有2个MySql DB,只有一个表,每个表都有相同的表结构。这些DB表在每个记录中都有许多BLOB字段(WAV格式的录音),还有一个数字记录id。
我使用的是经典的ASP(VB)并且无法改变,因为整个系统都在经典的asp中(此外我还不知道另一种语言/系统)。我知道它已经老了,但现在需要解决这个问题。
我需要从DB1读取某条记录(让我们说IdNum = 100的记录),包含完整数据(包括BLOB字段)...并在DB2表中保存(插入)相同的完整记录(包括BLOB字段)。
我尝试了正常的插入但得到了#34;类型不匹配" 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
答案 0 :(得分:-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; "
然后,INSERT行,这样的语句。
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来说太大了,你可以尝试使用mysqldump将数据提取到文本文件,然后将其加载到新数据库中。