vba - 将长文本插入表中时访问 VBA 错误
问题描述
在 Access 中,我有 2 个表,table_A 和 table_B。在 table_A 的 col2 中,我有一个 R 函数作为单元格值。
mdPatternChart<-function (x, Str_PathFile)
{
if (!(is.matrix(x) || is.data.frame(x)))
stop("Data should be a matrix or dataframe")
if (ncol(x) < 2)
stop("Data should have at least two columns")
R <- is.na(x)
nmis <- colSums(R)
R <- matrix(R[, order(nmis)], dim(x))
pat <- apply(R, 1, function(x) paste(as.numeric(x), collapse = ""))
sortR <- matrix(R[order(pat), ], dim(x))
if (nrow(x) == 1) {
mpat <- is.na(x)
} else {
mpat <- sortR[!duplicated(sortR), ]
}
if (all(!is.na(x))) { cat(" /\\ /\\\n{ `---' }\n{ O O }\n==> V <==")
cat(" No need for mice. This data set is completely observed.\n")
cat(" \\ \\|/ /\n `-----'\n\n")
mpat <- t(as.matrix(mpat, byrow = TRUE))
rownames(mpat) <- table(pat)
} else {
if (is.null(dim(mpat))) {
mpat <- t(as.matrix(mpat))
}
rownames(mpat) <- table(pat)
}
r <- cbind(abs(mpat - 1), rowSums(mpat))
r <- rbind(r, c(nmis[order(nmis)], sum(nmis)))
png(file=paste(Str_PathFile,".png",sep=""),bg="transparent")
plot.new()
if (is.null(dim(sortR[!duplicated(sortR), ]))) {
R <- t(as.matrix(r[1:nrow(r) - 1, 1:ncol(r) - 1]))
} else {
if (is.null(dim(R))) {
R <- t(as.matrix(R))
}
R <- r[1:nrow(r) - 1, 1:ncol(r) - 1]
}
par(mar = rep(0, 4))
plot.window(xlim = c(-1, ncol(R) + 1), ylim = c(-1, nrow(R) +
1), asp = 1)
M <- cbind(c(row(R)), c(col(R))) - 1
shade <- ifelse(R[nrow(R):1, ], mdc(1), mdc(2))
rect(M[, 2], M[, 1], M[, 2] + 1, M[, 1] + 1, col = shade)
adj = c(0, 0.5)
srt = 90
for (i in 1:ncol(R)) {
text(i - 0.5, nrow(R) + 0.3, colnames(r)[i], adj = adj,
srt = srt)
text(i - 0.5, -0.3, nmis[order(nmis)][i])
}
for (i in 1:nrow(R)) {
text(ncol(R) + 0.3, i - 0.5, r[(nrow(r) - 1):1, ncol(r)][i],
adj = 0)
text(-0.3, i - 0.5, rownames(r)[(nrow(r) - 1):1][i],
adj = 1)
}
text(ncol(R) + 0.3, -0.3, r[nrow(r), ncol(r)])
dev.off()
}
现在我想将它插入到 table_B 的 col2 中。两个表中的 Col2 都是memo
. 它作为
CurrentDb.Execute "insert into Table_B (Col1,Col2) select Col1,Col2 from Table_A"
DAO.recordset
但如果我如下使用它就行不通。
CurrentDb.Execute "insert into Table_B (Co1,Col2) values (2,'" & Rs_TableA.Fields("Col2") & "')"
它给出了一个运行时错误 3075,说明语法有问题。我换了!和 " 在函数中,但它不起作用。我还尝试在插入之前将其值保存在字符串变量中,但它也不起作用。因为我需要循环遍历 table_A,有人可以帮忙吗?谢谢!
解决方案
函数文本包含撇号和引号字符。这些字符在 SQL 语句中具有特殊含义。SELECT 子查询不会有问题,但构造的 SQL 从记录集中提取值正在尝试将它们处理为特殊字符,而不仅仅是简单的文本。这会导致编译后的语句对 SQL 引擎来说是无意义的。查看如何在 SQL Server 中转义单引号?.
处理选项:
Replace(Replace([fieldname], "'", "''"), Chr(34), Chr(34) & Chr(34))
打开源记录集和目标记录集,循环访问源并使用 AddNew 和 Update 将记录写入目标
也许 SELECT 子查询版本实际上会满足要求,如果 ID 应该由文本框动态提供:
CurrentDb.Execute "INSERT INTO Table_B (Col1,Col2) SELECT " & Me.tbxID & " As C1, Col2 FROM Table_A"
此外,有 2 个倾斜的撇号,我认为应该有正常的撇号。
推荐阅读
- html - CSS:如何在具有多个 div 的父 div 中定义子 div 的位置
- c# - 音频源即使被碰撞盒“触发”也不想工作
- python - 使用 RSA 或 AES 加密运行加密的 python 代码
- c# - JSON.NET 未将 TypeConverter 用于 Dictionary 键
- php - 更改我的 login.php 文件后无法注销 wordpress 用户
- javascript - Overwritten property in constructor
- php - 使用 PHP 打开 PTY 的最佳方式
- python - Python Selenium - 获取 Google 搜索 HREF
- javascript - 终止 HTML 脚本元素
- amazon-dynamodb - 在 AppSync 解析器中使用多个字段查询 DynamoDB