通过SQL Server数据库查找excel中的序列号

时间:2010-11-06 08:01:13

标签: sql-server excel-vba vba excel

在我的Excel工作表中,如下所示,有三个字段。我想连接到SQL Server(myserver)数据库(checkdb)。 Checkdb数据库有一个表(checktable),它有两个字段(Material和SerialNumber)。通过这种连接,我想查找每个SerialNumber和Meterial,并使用宏写一些文本来检查Excel表格中的字段;

  • 如果SerialNumber存在且其Material与材料名称相同 在Excel工作表中,宏将写入“ok”以检查字段

  • 如果存在SerialNumber但其材料与Excel中的材料名称不同,则宏将在数据库中写入材料名称,参考我们正在寻找的序列

  • 如果Serial不存在,宏会将“nok”写入检查字段

感谢您的帮助; 的问候,

在运行宏之前,我的Excel表格;

Material SerialNumber Check
MTR5100 1 
MTR5100 2 
MTR4100 3 
MTR4100 4

sql-sever上的checkdb中的checktable;

Material SerialNumber
MTR5100 1 
MTR5100 2 
MTR6100 3 
MTR4100 5

运行宏后,在我的Excel工作表中,检查字段将如下所示 这;

Material SerialNumber Check
MTR5100  1   ok
MTR5100  2   ok
MTR4100  3   MTR6100
MTR7100  4   nok

2 个答案:

答案 0 :(得分:1)

以Excel为中心的方式执行此操作的一种方法是将整个表导入工作表。在EXcel 2010中,您可以使用Data -> From Other Sources -> SQL Server

执行此操作

然后,在现有工作表中,添加标有Material from DB的列,并用vlookup填充:

=VLOOKUP(A3,Sheet1!$B$3:$C$5,2,FALSE)

然后在第4列中,您可以将工作表中的材料与数据库中的材料进行比较,如:

=IF(A3=B3,"ok","mismatch")

答案 1 :(得分:1)

ADO怎么样:

''Reference Microsoft ActiveX Data Objects x.x Library
Dim cn As New ADODB.Connection
Dim rs As New ADODB.Recordset
Dim scn As String
Dim sSQL As String
Dim sFullName As String

''Probably not the best way to get the name
''but useful for testing
sFullName = ActiveWorkbook.FullName

scn = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" _
& sFullName _
& ";Extended Properties=""Excel 8.0;HDR=Yes;IMEX=1"";"

cn.Open scn

sSQL = "SELECT IIf(c.Material=t.Material,'ok', " _
    & "IIf(c.Material<>t.Material,c.Material,'nok')) " _
    & "FROM [Sheet1$] t " _
    & "LEFT JOIN [ODBC;Description=TEST;DRIVER=SQL Server;" _
    & "SERVER=Server;Trusted_Connection=Yes;" _
    & "DATABASE=test].CheckTable c " _
    & "ON t.SerialNumber=c.SerialNumber "

rs.Open sSQL, cn

''Might be problems with order of entries
Worksheets("Sheet1").Range("c2").CopyFromRecordset rs

以上使用SQL Express的连接字符串,您可以从http://www.connectionstrings.com/

获取更多字符串