怎样将两个不同文件中的内容当成表进行两个表的SQL查询

时间:2021-12-23 13:28:40
我有一个.txt文件,里面存放了内容,指定某个东西是什么类型。这里的名称和类型记录数共有上千条
名称,类型
A,1
B,2
C,3

还有一个excel文件,里面有很多条内容,名称那里是A、B、C等等。出现的顺序和频率是随机的,记录数少的上千条,多的上万条
名称,类型,其他参数...
A,未知,其他参数
C,未知,其他参数
B,未知,其他参数
A,未知,其他参数
C,未知,其他参数
.....
---------------------------------------------------------------------
现在我想用VBS,把EXCEL里的类型这里全部按照txt里指定的标记为相应内容。例如EXCEL名称为A的,记录那里就标为1。如果名称那里在txt中没有,就还是保持为未知。最后结果就像下面这样
名称,类型,其他参数...
A,1,其他参数
C,3,其他参数
B,2,其他参数
A,1,其他参数
C,3,其他参数
.....

之前我是逐个读取EXCEL中的每一条记录,然后每条记录再遍历TXT文件去找是否为相应类型,然后再标记。这样太慢了。TXT中1000条记录,EXCEL中1000条记录,都要5分钟,后面数据多了肯定不行。

所以我想把txt和excel都当成数据库中的表来操作,用SQL语句得到结果,再批量写到EXCEL中。
将文件中内容当成表来操作很简单,但现在有一个问题就是,怎么样对txt,EXCEL这两个不同文件中的两个表放在一起进行多表查询呢。
我现在能想到的是
1.在EXCEL文件中再创建一个sheet2,把TXT文件中的内容写到sheet2里,然后只打开EXCEL文件操作[sheet1$],[sheet2$]
2.把两个文件中的内容全部用select *读到记录集里,再对记录集进行操作。但是这样又有一个我不知道的问题,对于记录集里的结果,有没有办法也当成表来执行SQL语句再进行查询操作呢

或者有没有更好更方便的方法呢?

6 个解决方案

#1



.txt 和 .xls 文件都是 Jet Engine 支持的外部数据库。但是,Jet Engine 不支持同时打开外部两个数据库。

你可以把 .txt 文件写入 Access 临时表,然后和 Excel 一起查询。

还有一种笨办法,把你原来的查询顺序倒过来:

1 从 .txt 读取一条记录

2 Update [sheet1$] Set field2 = 1 Where field1 = 'A'

当然 SQL 命令中的参数引用的都是 .txt 读取的值。

#2


把TXT文件转化在EXCEL表,用VLOOKUP函数不行吗?

#3


就是像我上面说的第一种

1.在EXCEL文件中再创建一个sheet2,把TXT文件中的内容写到sheet2里,然后只打开EXCEL文件操作[sheet1$],[sheet2$]

这样才可以是吧?

那我之前说的,先把两个文件打开,内容读到recordset里,然后可以对recordset里的内容执行SQL语句吗

#4


另外我想用Range的CopyFromRecordset方法来把recordset中的内容直接全部复制到EXCEL中去,recordset中的结果只有一列,我想把它复制到我的EXCEL文件中的E列

myexlWorkbook.Worksheets(1).Range("E2").CopyFromRecordset rs

结果到这一句的时候VBS报错.内容是
"用于查看已链接的Microsoft Excel工作表的连接,已经失去"
请问有人知道这个是什么原因吗

#5


creat table table1  名称 c(1) ,类型 c(1)
use table1
appe from .txt type sdf
import from 2.xls type xl5
sele 1
use table1
sele 2
use 2
sele table.*,2.名称,2. 类型,2.其他参数 from table1 full join 2

#6


SQL语句我知道怎样写,用的是right join

现在唯一的问题就是CopyFromRecordset这个会报错了

#1



.txt 和 .xls 文件都是 Jet Engine 支持的外部数据库。但是,Jet Engine 不支持同时打开外部两个数据库。

你可以把 .txt 文件写入 Access 临时表,然后和 Excel 一起查询。

还有一种笨办法,把你原来的查询顺序倒过来:

1 从 .txt 读取一条记录

2 Update [sheet1$] Set field2 = 1 Where field1 = 'A'

当然 SQL 命令中的参数引用的都是 .txt 读取的值。

#2


把TXT文件转化在EXCEL表,用VLOOKUP函数不行吗?

#3


就是像我上面说的第一种

1.在EXCEL文件中再创建一个sheet2,把TXT文件中的内容写到sheet2里,然后只打开EXCEL文件操作[sheet1$],[sheet2$]

这样才可以是吧?

那我之前说的,先把两个文件打开,内容读到recordset里,然后可以对recordset里的内容执行SQL语句吗

#4


另外我想用Range的CopyFromRecordset方法来把recordset中的内容直接全部复制到EXCEL中去,recordset中的结果只有一列,我想把它复制到我的EXCEL文件中的E列

myexlWorkbook.Worksheets(1).Range("E2").CopyFromRecordset rs

结果到这一句的时候VBS报错.内容是
"用于查看已链接的Microsoft Excel工作表的连接,已经失去"
请问有人知道这个是什么原因吗

#5


creat table table1  名称 c(1) ,类型 c(1)
use table1
appe from .txt type sdf
import from 2.xls type xl5
sele 1
use table1
sele 2
use 2
sele table.*,2.名称,2. 类型,2.其他参数 from table1 full join 2

#6


SQL语句我知道怎样写,用的是right join

现在唯一的问题就是CopyFromRecordset这个会报错了