2

因此,我最近一直在编写 VBA 脚本,将整个学生医疗记录数据库从他们旧的单表、68 字段、平面系统转移到具有 24 个相关表的新动态系统。

前几张桌子没有问题,但后来我遇到了这个问题。引发错误的代码行是:

Set rstFrom = CurrentDb.OpenRecordset("select " & Flat & ".Student," & Flat & ".School," & Flat & ".Social," & Flat & ".FamilyHist from " & Flat & " WHERE 1=1")`

Flat是一个存储平面数据库名称的字符串(这是因为我正在使用一个虚拟数据库,所以他们需要一种方便快捷的方法来修改我为在真实事物上工作而编写的代码)

rstFrom只需要包含与我目前正在复制到的表相关的 68 字段表的列(在这种情况下,实际上只需要studentIDand的 FamilyHistory 表FamilyHistory) - 请注意原始表没有分配唯一studentID的 s,所以我必须使用姓名、学校和社交来确定我正在与同一个孩子打交道并查找他们的studentID

当这行代码运行时,我收到以下错误:

Run-time error '3061':

Too few parameters. Expected 1.

显然我有 1 个参数,它是:

"select " & Flat & ".Student," & Flat & ".School," & Flat & ".Social," & Flat & ".FamilyHist from " & Flat & " WHERE 1=1"

(解析后是):

"select Demos.Student,Demos.School,Demos.Social,Demos.FamilyHist from Demos WHERE 1=1"

使用 Access VBA 时需要 where 1=1 ,否则它只返回匹配的第一条记录,而不是所有匹配的记录。

有没有其他人遇到过同样的问题并已解决?我确实注意到一件事。当我将参数更改为:

"select Demos.Student from Demos WHERE 1=1"

它能够越过这条线没有问题,尽管这会导致稍后当我需要读取我没有检索到的其他数据时出现问题。不过,我认为有趣的是,错误似乎来自 SQL 而不是 OpenRecordset 函数。

4

2 回答 2

4

检查 SQL 中的字段名称与表中的字段名称。

我认为,上述 SQL 中的字段名称拼写错误,或者您在表中没有一个或多个字段(SQL 语句)。

于 2011-05-25T15:42:41.527 回答
0

插入查询中的文本参数需要有一个单引号。我在使用 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());
}
于 2015-03-17T21:45:56.933 回答