2016-12-15 248 views
0

我开始使用Access + SQL,因为我必须将一些重要的Excel文档转移到访问数据库中,并且我仍然是这里的新手。我试过的东西,你可以看到下面,但它不能正常工作,我觉得VBA是很容易...在Access中自动填充单元格

问题:我所试图做到这一点,自动填写一些细胞因用户在前一个单元格中输入。

情况:我有一个访问数据库中的表称为概述将由行由用户填写一行。我将主键设置为ShipmentID,以便每当他启动一个新行时,他必须首先输入该值。

enter image description here

之后,当用户进入DealerNo,我想要的3下一个信息(DealerName,乡村,ShipperContact)中分别被填充。

来自其他房间的信息代理人查看其中列出了所有不同的经销商,并收集他们所有的信息。

DealerLookup分别在列CompanyName,Country,ContactName列中包含这3个信息,而此表中的主键是DealerNo。

尝试:虽然这根本不起作用,所以我希望你能帮助我解决问题。

INSERT INTO Overview (DealerName, Country, ShipperContact) 
WHERE DealerNo = 50535 
SELECT CompanyName , Country , ContactName FROM DealerLookupNew 
WHERE DealerNo = Overview.DealerNo ; 

备注:

  1. 即使它会工作,它不会是一个很好的解决方案,因为这是有效的只有一个DealerNo。所以它只适用于那一行,但如果用户输入另一个DealerNo这个代码不会做任何事......一个好的解决方案(我不知道如何在SQL中编写)将替换50535与DealerNo中最后一个非空单元格的值。
  2. 如果我删除WHERE DealerNo = 50535那么错误来自于最后一行,因为Overview.DealerNo不是说“采取DealerNo最后一个非空单元格的值形成概述表”
正道

任何想法如何做到这一点?

+0

我会写和运行Excel宏导出到访问前,填补了空白单元格。 –

+0

是的,但事情是,这个访问将被更新(新的行进入或删除)每天。目前的数据是在Excel中,但因为它是一个非常沉重的文件就可以使每个操作很慢,这就是为什么我想转让获取了整个事情,避免出口几次 – Seb

回答

1

看起来你正试图在数据表视图中做到这一点。您需要的是AfterUpdate事件,在数据表视图中不可用。

我非常确定要做到这一点的唯一方法是将字段添加到窗体并在DealerNo的AfterUpdate事件中执行计算。它将改变用户输入数据的方式,但与标准的数据表视图相比,它可以为操作数据提供更多的灵活性。

或者,如Dan在评论中所建议的,只需在导入Excel之前完成所有工作即可。但是,一旦所有数据都在Access中并且您正在输入新记录,这将无助于您继续前进。

+0

谢谢您的回答约翰尼,我将开始寻找在窗体,然后自我试图避免它们到目前为止,并会通知您 – Seb

+0

您是否知道将表单链接到表的方法,以便AfterUpdate事件在用户输入DealerNo时运行? – Seb

+1

如果您指定一个表格作为表单的RecordSource,那么在输入数据时该表格会自动更新。对于初学者来说这很好,但如果您将表单解除绑定(不指定任何RecordSource),则您在保存记录的方式和时间方面具有更多的灵活性。无论哪种方式,你可以在DealerNo的文本框的AfterUpdate事件中使用DLookup来填充其他文本框。因此,一条线是:Me.txtCompanyName =使用DLookup( “公司名称”, “DealerLookupNew”, “DealerNo = '” &Me.txtDealerNo& “'”) –