2014-09-30 5 views
1

У меня есть код, который извлекает данные из моей книги и загружает их в базу данных SQL. Он работает очень хорошо, но я просто понял, что как только я вставляю что-то, и для этой строки создается первичный ключ, я хочу добавить это обратно в свою книгу excel, чтобы я мог запускать инструкции обновления против них.Excel VBA & MYSQL Выберите LAST_INSERT_ID();

В SQL, я знаю, что я могу запустить

Insert into reports (blah, blah, blah, etc...) 
Values (1,2,3, etc....) 
Select LAST_INSERT_ID(); 

и получить первичный ключ для новой строки я только что вставил, но я не могу понять, как получить выход этого Select LAST_INSERT_ID() ; обратно в Excel ....

Мой код выглядит следующим образом:

SQLINSERT = "Insert into `dwInvoice`.`report` (`TrackNumber`, `RegNSB`, `TrackCount`, `TrackNSB`, `TotalBacklog`, `AverageBacklogTrackMargin`, `RegRGP`, `RGPPercent`, `PriceCode`, `PMName`, `PMComments`, `PMMRecommendations`, `Outcome`, `NewGPPercent`, `AdditionalGP`, `HomeBranch`, `HomeBranchCode`, `BranchCode`, `PMM`, `FSRName`, `SMRName`, `DateReport`, `NEDA`, `NEDAName`, `HomeNEDA`, `HomeNEDAName`, `InvCustEB`, `InvCustNum`, `InvCustName`, `InvCustDWIndicator`, `RegNum`, `AppDate`, `InvoiceDate`, `InvoiceNumber`, `PartNumber`, `DWCustEB`, `DWCustNumb`, `DWCustName`, `DWIndicator`, `DRAWstatus`, `MarginType`, `UnitResale`, `UnitCost`, `PriceCost`, `UnitsShipped`, `TeamNum`, `TeamName`, `IndirectCustNum`, `IndirectCustDWCode`, `IndirectCustEB`, `IndirectCustName`) VALUES(" 
SQLOUTPUT = "Select LAST_INSERT_ID()" 

For Each c In Range("A2:A" & lastRow) 
SQLBODY = "'" & c.Value & "','" & c.Offset(0, 1).Value & "','" & c.Offset(0, 2).Value & "','" & c.Offset(0, 3).Value & "','" & c.Offset(0, 4).Value & "','" & c.Offset(0, 5).Value & "','" & c.Offset(0, 6).Value & "','" & c.Offset(0, 7).Value & "','" & c.Offset(0, 8).Value & "','" & c.Offset(0, 9).Value & "','" & c.Offset(0, 10).Value & "','" & c.Offset(0, 11).Value & "','" & c.Offset(0, 12).Value & "','" & c.Offset(0, 13).Value & "','" & c.Offset(0, 14).Value & "','" & c.Offset(0, 15).Value & "','" & c.Offset(0, 16).Value & "','" & c.Offset(0, 17).Value & "','" & c.Offset(0, 18).Value & "','" & c.Offset(0, 19).Value & "','" & c.Offset(0, 20).Value & "','" & c.Offset(0, 21).Value & "','" & c.Offset(0, 22).Value & "','" & c.Offset(0, 23).Value & "','" & c.Offset(0, 24).Value & "','" & c.Offset(0, 25).Value & "','" & c.Offset(0, 26).Value & "','" _ 
     & c.Offset(0, 27).Value & "','" & c.Offset(0, 28).Value & "','" & c.Offset(0, 29).Value & "','" & c.Offset(0, 30).Value & "','" & c.Offset(0, 31).Value & "','" & c.Offset(0, 32).Value & "','" & c.Offset(0, 33).Value & "','" & c.Offset(0, 34).Value & "','" & c.Offset(0, 35).Value & "','" & c.Offset(0, 36).Value & "','" & c.Offset(0, 37).Value & "','" & c.Offset(0, 38).Value & "','" & c.Offset(0, 39).Value & "','" & c.Offset(0, 40).Value & "','" & c.Offset(0, 41).Value & "','" & c.Offset(0, 42).Value & "','" & c.Offset(0, 43).Value & "','" & c.Offset(0, 44).Value & "','" & c.Offset(0, 45).Value & "','" & c.Offset(0, 46).Value & "','" & c.Offset(0, 47).Value & "','" & c.Offset(0, 48).Value & "','" & c.Offset(0, 49).Value & "','" & c.Offset(0, 50).Value & "')" 
SQLEND = ";" 

SQL_GET = "" & SQLIF & SQLINSERT & SQLBODY & SQLEND 
cmd.CommandText = SQL_GET 
Set rs = cmd.Execute 
next c 

Я знаю, что это долго ... но это работает.

я могу изменить заявление меняющегося SQL_GET к:

SQL_GET = "" & SQLIF & SQLINSERT & SQLBODY & SQLEND & SQLOUTPUT & SQLEND 

добавить Select LAST_INSERT_ID() ; к концу оператора SQL, но я до сих пор не имею ни малейшего представления о том, как на самом деле получить это значение, которое выводится обратно в Excel , Любые идеи о том, как это сделать?

ответ

1

После Set rs = cmd.Execute поместить следующее:

rs.open SQLOUTPUT 

'to dump the recordset into a worksheet range: 
Sheet1.Range("A1").CopyFromRecordSet rs 

`to dump the result into a variable: 
Dim lastInsertID as string 
lastInsertID = rs.Fields(1).value 
+0

Первое - спасибо! Я попытаюсь проверить это в ближайшее время. На данный момент я получаю следующую ошибку: 'System Msg: [MySQL] [драйвер ODBC 5.3 (w)] [mysqld-5.6.20] У вас есть ошибка в синтаксисе SQL рядом с 'Select LAST_INSERT_ID()' at line 1' Синтаксис именно так, как я бы ввел его в фактический SQL-запрос .... – lordterrin

+0

О, никогда не было - я просто запустил его без SQLOUTPUT в конце исходного запроса, а затем запустил этот код, который вы предоставили. Спасибо огромное! – lordterrin

Смежные вопросы