Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/15.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
如果数字匹配,需要SQL使用另一个表中的数据更新表_Sql_Vba_Ms Access - Fatal编程技术网

如果数字匹配,需要SQL使用另一个表中的数据更新表

如果数字匹配,需要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的列项返回值,并将其

我下面有一个函数,它允许用户选择excel文件,并将数据导入tableMyTable。它只是一个单列excel文件。它导入的表包含两列SF1、F2

我需要DoCmd.RunSQL命令将以下信息输入到第二列中

MyTable.F1是OEM零件号 我需要把这个数字和我设置的JDSubs表中的2列OEMPartNumer,OEMSub进行比较 若它找到了一个匹配项,我需要它比较JDSUB表中的这两个匹配项,并尝试在OEMItem列的AMI表中找到它 若它找到匹配项,我需要从表AMI的列项返回值,并将其插入MyTable列F2中

表内容示例

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设置为空白。你能插句话说如果价值存在,就不要改变吗?你明白我的意思吗?