Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/vb.net/16.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
从CSV导入、MS Access本机或VB.NET中更新现有访问记录_Vb.net_Csv_Ms Access_Sql Update_Insert Update - Fatal编程技术网

从CSV导入、MS Access本机或VB.NET中更新现有访问记录

从CSV导入、MS Access本机或VB.NET中更新现有访问记录,vb.net,csv,ms-access,sql-update,insert-update,Vb.net,Csv,Ms Access,Sql Update,Insert Update,我是公司票务系统的应用程序管理员。 我们正在添加一个新客户,需要将其客户记录导入我们的系统 然而,我们被拒绝访问直接从数据库连接获取这些记录 我们仅限于进入他们的票务系统,并将现有记录导出到CSV文件 为了使我们的系统能够工作,我将这些CSV输入MS Access数据库,我们的系统将从中读取和导入/更新票务系统上的记录 但是,我无法找到从CSV中的记录更新MS Access db中的记录的方法 我可以将记录导入表中,但它会跳过任何已存在的记录(客户数据中包含一个字段,该字段用作唯一标识符/主键以

我是公司票务系统的应用程序管理员。 我们正在添加一个新客户,需要将其客户记录导入我们的系统

然而,我们被拒绝访问直接从数据库连接获取这些记录

我们仅限于进入他们的票务系统,并将现有记录导出到CSV文件

为了使我们的系统能够工作,我将这些CSV输入MS Access数据库,我们的系统将从中读取和导入/更新票务系统上的记录

但是,我无法找到从CSV中的记录更新MS Access db中的记录的方法

我可以将记录导入表中,但它会跳过任何已存在的记录(客户数据中包含一个字段,该字段用作唯一标识符/主键以区分新记录/现有记录)

任何已经包含该主键的记录都将被跳过,它不会更新包含该主键的ms access数据库中的记录

除了创建基本表格和表单外,我对MS Access没有太多经验;这超出了我的正常工作范围

我需要找到一种方法来获取一个CSV文件,该文件包含的记录可能已经在ms access数据库中,也可能尚未在该数据库中,如果未包含在CSV中,则创建新记录,如果包含在CSV中,则更新记录

这不一定与如何实现无关,我可以使用vb.net或宏来实现这一点,如果您可以提供一种方法来实现这一点的话


我知道这有点偏离指导原则,我试图找到自己的方法来做这件事,但还没有找到任何代码来测试和发布作为起点(我很抱歉)。

基本上,你必须做一系列的操作查询:使用过滤器和连接的追加、更新和删除。您可以将查询保存为存储查询,并通过
DoCmd.OpenQuery
调用它们,也可以将它们作为字符串写入VBA中,以传递到
DoCmd.RunSQL sqlStatement
CurrentDb.Excecute sqlStatement

导入

首先,使用
DoCmd.TransferText acImportDelim
将CSV导入到临时表中。在导入之前,请确保清除临时表中以前的csv数据

DELETE FROM tempTable;
更新

然后,更新临时表和活动表之间的现有记录,但更新活动表中现有客户的条件。在Access SQL中,联接可用于更新查询,但可能会遇到不可更新的查询:

或者,要绕过不可更新的查询:

UPDATE liveTable
SET liveTable.Col1 = DLookUp("Col1", "tempTable", "CustomerID=" & liveTable.CustomerID),
    liveTable.Col2 = DLookUp("Col2", "tempTable", "CustomerID=" & liveTable.CustomerID),
    liveTable.Col3 = DLookUp("Col3", "tempTable", "CustomerID=" & liveTable.CustomerID), 
    ... 
WHERE CustomerID IN 
    (SELECT CustomerID FROM tempTable);
完成后,清除临时表中刚更新的记录(以避免与追加步骤和重复条目冲突):

追加

最后,将临时表中的新记录附加到活动表中,但不在活动表中的客户的条件,您可以使用
左联接来执行该条件。。。空

INSERT INTO (Col1, Col2, Col3 ...) 
SELECT Col1, Col2, Col3 ... 
FROM tempTable LEFT JOIN liveTable 
ON tempTable.CustomerID = liveTable.CustomerID
WHERE liveTable.CustomerID Is Null;

将csv读入数据表,然后您可以根据需要进行更新或插入。因此,请将csv导入单独的表,然后?运行更新查询?我不确定如何使用更新查询来使用新表中的记录更新原始表中的记录……它可能是DataTable,也可能是DB中的实际表。像你描述的那样做税务记录从来不是一个一刀切的查询;总有一些特别的地方。但是,是的,有些基本上是插入式的,有些是更新查询。那么,你知道有什么好的资源可以让我用以找出如何做到这一点吗?我想我还需要学习更多关于access和db的知识……我很困惑,如果这是一个导入操作,access db中为什么会有匹配的记录。它们不是都应该是新的吗?
DELETE FROM tempTable 
WHERE CustomerID IN 
      (SELECT CustomerID FROM liveTable);
INSERT INTO (Col1, Col2, Col3 ...) 
SELECT Col1, Col2, Col3 ... 
FROM tempTable LEFT JOIN liveTable 
ON tempTable.CustomerID = liveTable.CustomerID
WHERE liveTable.CustomerID Is Null;