Поиск серийных номеров в Excel через базу данных SQL Server - PullRequest
1 голос
/ 06 ноября 2010

В моем листе Excel, как показано ниже, есть три поля. Я хотел бы подключиться к базе данных SQL Server (myserver) (checkdb). База данных Checkdb имеет таблицу (checktable), которая имеет два поля (Material и SerialNumber). В связи с этим я хочу посмотреть каждый SerialNumber и Meterial и написать текст для проверки поля в моем листе Excel с макросом;

  • если существует серийный номер и его материал совпадает с именем материала в листе Excel макрос напишет «ОК» для проверки поля

  • если SerialNumber существует, но его Материал отличается от имени материала в Excel, макрос запишет имя материала в базе данных со ссылкой на серийный номер, который мы ищем

  • если Serial не существует, макрос напишет «nok» для проверки поля

Спасибо за вашу помощь; С уважением,

Перед запуском макроса, мой лист Excel;

Material SerialNumber Check
MTR5100 1 
MTR5100 2 
MTR4100 3 
MTR4100 4

Checktable в checkdb на sql-sever;

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 ]

1 голос
/ 06 ноября 2010

А как насчет 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/

1 голос
/ 06 ноября 2010

Один из способов сделать это с ориентацией на 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")
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...