问题描述
|
因此,我最近一直在研究VBA脚本,以将学生病历的整个数据库从他们的旧的单表,68字段的平面系统转移到具有24个相关表的新动态系统。
前几张桌子没有问题,但是后来我遇到了。引发错误的代码行是:
Set rstFrom = CurrentDb.OpenRecordset(\"select \" & Flat & \".Student,\" & Flat & \".School,\" & Flat & \".social,\" & Flat & \".FamilyHist from \" & Flat & \" WHERE 1=1\")`
Flat
是一个字符串,用于存储平面数据库的名称(这是因为我正在使用虚拟数据库,因此它们将需要一种方便快捷的方法来修改我制作的代码以在真实物体上工作)
rstFrom
只需要包含68字段表中与我当前要复制到的表相关的列(在这种情况下,FamilyHistory表实际上只需要studentID
和FamilyHistory
)-请注意原始表格未分配唯一的ѭ3,因此我必须使用姓名,学校和社交名来确定我正在与同一个孩子打交道,并查找他们的studentID
当这行代码运行时,出现以下错误:
Run-time error \'3061\':
Too few parameters. Expected 1.
显然我有1个参数,它是:
\"select \" & Flat & \".Student,\" & Flat & \".FamilyHist from \" & Flat & \" WHERE 1=1\"
(解析后为):
\"select Demos.Student,Demos.School,Demos.social,Demos.FamilyHist from Demos WHERE 1=1\"
使用Access VBA时需要1 = 1,否则,它仅返回匹配的第一条记录,而不是所有匹配的记录。
还有其他人有解决过的相同问题吗?我确实注意到一件事。当我将参数更改为:
\"select Demos.Student from Demos WHERE 1=1\"
它可以顺利通过此行,尽管这会在以后需要读取其他未检索到的数据时引起问题。不过,我认为很有趣的是,该错误似乎来自sql,而不是来自OpenRecordset函数。
解决方法
检查SQL中的字段名称与表中的字段名称。
我认为,要么上述SQL中的字段名称是拼写错误,要么表中没有一个或多个(SQL语句的)字段。
,插入查询中的文本参数必须在其周围加上单引号。我在使用Visual C ++的查询中遇到了相同的问题。
这是我最终使用的代码...
void FileInterface::TblWrite(CDatabase* db,rec* r)
{
string sqlQuery = \"insert into THREATS(ID,CODE,ID,LAT,LON,SHOW_A,SHOW_B) Values(\" +
to_string((_Longlong)r->num) + \",\" +
to_string((_Longlong)r->code) + \",\" +
\"\'\" + r->id + \"\'\" + \",\" +
to_string((long double)r->lat) + \",\" +
to_string((long double)r->lon) + \",\" +
\"1\" + \",\" +
\"1\" +
\")\";
db->ExecuteSQL(sqlQuery.c_str());
}