Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/74.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
MS Acess 2003-用于更新SQL查询的VBA?_Sql_Ms Access_Vba - Fatal编程技术网

MS Acess 2003-用于更新SQL查询的VBA?

MS Acess 2003-用于更新SQL查询的VBA?,sql,ms-access,vba,Sql,Ms Access,Vba,嘿,伙计们,有人可以通过vb向我展示一下简单的更新查询吗?我需要向表中添加新字段(仅3个),并在表单上添加两个文本框,以便用户可以添加一些与记录相关的附加数据(这已经是此表单的基础) 所以我的第一个表单是一个填充列表的表单,当用户双击该列表中的一个选项时,它会打开一个新表单,这样绑定到该表单的表的ID就可以添加这些文本框了(此时,与一条记录相关的所有组合框和文本框都绑定到活动窗体,但所有组合框和文本框都未绑定。单击按钮时,已有vb将信息保存到表中)。我没有创建这个,但是,它是由一个不再存在的人创

嘿,伙计们,有人可以通过vb向我展示一下简单的更新查询吗?我需要向表中添加新字段(仅3个),并在表单上添加两个文本框,以便用户可以添加一些与记录相关的附加数据(这已经是此表单的基础)

所以我的第一个表单是一个填充列表的表单,当用户双击该列表中的一个选项时,它会打开一个新表单,这样绑定到该表单的表的ID就可以添加这些文本框了(此时,与一条记录相关的所有组合框和文本框都绑定到活动窗体,但所有组合框和文本框都未绑定。单击按钮时,已有vb将信息保存到表中)。我没有创建这个,但是,它是由一个不再存在的人创建的,显然在这方面比我做得更好。我的问题是,有太多的vb检查记录,以及基于大小写的各种sql语句,我无法将其解译为最简单的形式

因此,我正在寻找一个简单的例子,在vb中更新sql语句,以便我可以尝试打破这一点

我需要它根据ID:sql更新记录,其中RecordID=me.RecordID

事实上,我认为我知道如何根据示例执行此操作,但是每次尝试,然后尝试在单击按钮时运行时,我都会得到一个运行时错误,即语法错误,调试只是突出显示db.execute(sql)部分。因此,我试着获得sql语句的即时窗口,我觉得很好:

UPDATE tblMain 
   SET [Name] = "John Doe", 
       [DATE] = #9/30/2009#, 
       [TYPE] = "TypeA", 
 WHERE RecordID = 958;
我可以在不考虑表中每个字段的情况下更新表吗(因为这个表中大约有15个字段加上新的3个字段,所以我在这里忽略了大约14个字段,但无论如何我都不想修改它们

所以一如既往,我感谢亚尔的帮助!!谢谢

编辑:

对不起,我总是忘了这个…我实际上是在试

  Dim db as DAO.Database
  Dim sql as String
  set db = CurrentDb

etc

你差一点就成功了!你在上一列后面加了一个简单的逗号。去掉它,它就可以正常工作了

UPDATE tblMain SET 
[Name] = "John Doe", 
[DATE] = #9/30/2009#, 
[TYPE] = "TypeA" 
WHERE RecordID = 958;
是的,你完全可以只更新几列,而不是全部。顺便说一句,这是一个最佳实践


最后,用保留字(如“name”和“Date”)命名列被认为是一种不好的做法,但我知道您继承了这种做法。

您明智地在代码中包含了Debug.Print sql。bpayne已经指出了sql语句中多余的逗号

我想指出另一种故障排除技术,您可能会发现它对调试SQL语句问题很有用

从即时窗口复制该语句,并将其粘贴到新查询的SQL视图中。在查询设计器中修改该查询,直到该查询正常工作,然后修改VBA代码以生成匹配的SQL语句


在这种情况下,您可能没有注意到多余的逗号。但是,您可以创建另一个新查询,并在查询设计器中从头开始构建UPDATE语句。在使该查询正常工作后,您可以将其SQL视图与失败的查询进行比较。

您是否使用.NET Framework及其ActiveX数据对象.NET(ADO.NET)?如果我没记错的话,因为VBA和VB.NET的方式非常不同。即使VB6也有自己的ADO方式。哇,这是我应该知道的,唉,我不知道。我只能说它是MS XP操作系统,访问00-02/03,我想……你在00中工作,然后转换到02/03的方式有意义吗?我几乎不是新手谢谢!我明白了吃了它。是的,那些字段名实际上是ust;对于任何模糊的字段名,db中的字段名太多了!谢谢!我通常使用即时窗口而不是msgbox,因为对我来说,这更容易,但那只是我自己。好吧,所以我想这样做(从IW复制生成的sql语句并粘贴到查询对象的sql视图中),但是如何处理所有括号和括号???我还考虑反向计算sql语句(将其从sql视图转换为vba代码),但是sql字符串可以在vb中使用所有的括号和括号吗?谢谢!对不起,我不理解你对括号和括号的担心。另外一点:我通常在查询设计器中起草一个查询。然后使用VBA创建一个与查询的sql视图相匹配的sql语句。我的意思是,我正在学习这两者(sql和vba以及vb中的sql)因此,有时当我试图为具有多个表的排名前n位的查询等计算sql时,我必须使用查询生成器来学习sql。因此,我可以在vba字符串中使用这个确切的sql吗?因为从我在vba中了解的一点sql字符串,sql视图中存在的所有括号和括号,我不确定它们是否可以n在vba中使用sql字符串??很抱歉,这是一个更一般的问题,不特定于上述查询…只是以这种方式检查查询而已..谢谢如果vba生成的sql语句与工作访问查询的sql视图匹配,我认为括号和方括号不会有问题。但是,我认为查询设计器倾向于s添加的括号比严格要求的要多。因此,在构建VBA字符串等效项时,我通常会尽可能多地丢弃这些括号。谢谢Hans!我也很想知道这一点,因此非常感谢!