如果数字匹配,需要SQL使用另一个表中的数据更新表
我下面有一个函数,它允许用户选择excel文件,并将数据导入tableMyTable。它只是一个单列excel文件。它导入的表包含两列SF1、F2 我需要DoCmd.RunSQL命令将以下信息输入到第二列中 MyTable.F1是OEM零件号 我需要把这个数字和我设置的JDSubs表中的2列OEMPartNumer,OEMSub进行比较 若它找到了一个匹配项,我需要它比较JDSUB表中的这两个匹配项,并尝试在OEMItem列的AMI表中找到它 若它找到匹配项,我需要从表AMI的列项返回值,并将其插入MyTable列F2中 表内容示例如果数字匹配,需要SQL使用另一个表中的数据更新表,sql,vba,ms-access,Sql,Vba,Ms Access,我下面有一个函数,它允许用户选择excel文件,并将数据导入tableMyTable。它只是一个单列excel文件。它导入的表包含两列SF1、F2 我需要DoCmd.RunSQL命令将以下信息输入到第二列中 MyTable.F1是OEM零件号 我需要把这个数字和我设置的JDSubs表中的2列OEMPartNumer,OEMSub进行比较 若它找到了一个匹配项,我需要它比较JDSUB表中的这两个匹配项,并尝试在OEMItem列的AMI表中找到它 若它找到匹配项,我需要从表AMI的列项返回值,并将其
MyTable
----------------
F1 | F2
AR77530 |
AR12345 |
JDSubs
---------------------------
OEMPartNumer | OEMSub
AR65123 | AR77530
AR12345 | AR56242
AMI
---------------------------
Item | OEMItem
AMAR77530 | AR77530
AMAR56242 | AR12345
因此,从excel文件导入的数字可能是2个数字之一有时没有子数字
我只需要将我公司的零件号AMI与OEM编号匹配
下面是我将工作表导入MyTable的函数
我只需要用匹配的AMI编号填充F2列,然后导出
次级进口
Dim fDialog As Office.FileDialog
Dim varFile作为变量
将CustomerFile设置为字符串
像弦一样暗淡
设置fDialog=Application.FileDialogmsoFileDialogFilePicker
用fDialog
.AllowMultiSelect=False
.Title=请选择您的OEM零件号文件。
.过滤器
.Filters.Add Excel电子表格,*.xlsx
.Filters.Add Excel电子表格,*.xls
.InitialFileName=C:\Users\&LUser&\Desktop
如果.Show=True,则
'循环浏览选定的每个文件并将其添加到列表框中。
对于.SelectedItems中的每个变量文件
CustomerFile=varFile
下一个
如果结束
以
DoCmd.transfer电子表格导入,acSpreadsheetTypeExcel9,MyTable,CustomerFile,False,sheet1!A:A
DoCmd.RunSQL?????
出口接头
端接头
另外,我有一个表单设置,用户可以一次查找一个数字。下面是它的函数。我只需要有一个自动化的过程
函数fnSearchAndPopulate为布尔值
Dim d作为DAO.Database,r作为DAO.Recordset,strSQL作为String
设置d=CurrentDb
如果Me.txtEnterNumber.Value=则
MsgBox请输入数字,错误
退出功能
如果结束
strSQL=SELECT*从JDSubs内部连接AMI on&_
AMI.OEMItem=JDSubs.OEMPartNumber其中&_
JDSubs.OEMPartNumber='&txtEnterNumber.Value&'或&_
JDSubs.OEMSub='&txtEnterNumber.Value&
调试.打印strSQL
Set r=d.OpenRecordsetstrSQL
如果r.EOF那么
MsgBox OEM&Me.txternumber&不存在!,没有AMI
设置d=无
退出功能
如果结束
“如果有记录就到这里来
r、 先走
'填充任何文本框
Me.txtAMINumber=r!项目
Me.txtDescription=r!描述
Me.txtOEMsubnumber=r!奥姆苏布
设置d=无
退出功能
端函数
这可以通过两个具有不同联接的更新查询来解决。另外,我建议使用Currentdb.Execute而不是DoCmd.Runsql,因为Execute不会抛出任何警告弹出框:
Currentdb.Execute
"UPDATE
(MyTable INNER JOIN JDSubs ON MyTable.F1 = JDSubs.OEMPartNumber)
INNER JOIN AMI ON JDSubs.OEMPartNumber = AMI.OEMItem
SET MyTable.F2 = [AMI].[Item];"
Currentdb.Execute
"UPDATE
(MyTable INNER JOIN JDSubs ON MyTable.F1 = JDSubs.OEMSub)
INNER JOIN AMI ON JDSubs.OEMSub = AMI.OEMItem
SET MyTable.F2 = [AMI].[Item];"
这行吗?如果我搜索的数字是OEMPartNumer,但OEMSub不起作用,它可以正常工作。它只显示blankits,因为OEMSub不在AMI.OEMItem中。OEMSub需要获取OEMPartNumber并将其与AMI.OEMItem匹配。怎么可能?对不起,我不明白你的评论。我制作了一个模拟数据库来测试这些查询。当这两个都运行时,MyTable.F2将填充AMAR77520第1行和AMAR56242第2行。它应该说些别的吗?不知道为什么它不在OEMSub上工作。下面是一个空白的示例。AR26840是OEMPartNumber,RE29610是OEMSub。AR2640是OEMItem,AMAR2640是应该返回给F2的项。我认为第一次更新是将数字放在F2中,从那时起,OEMSub与OEMItem不匹配,它将F2设置为空白。你能插句话说如果价值存在,就不要改变吗?你明白我的意思吗?