【发布时间】:2020-06-25 06:04:04
【问题描述】:
嗯...我的问题是我试图在 VBA 中创建一个宏,以便在每次按下按钮时从数据库中更新表的值。连接是本地的,我使用 SQL Workbench 来管理数据库。创建的表是:
CCREATE TABLE EMPLEADO
( Cod_empleado INT NOT NULL,
Nombre VARCHAR(90) NOT NULL,
Fecha_inicio DATE NOT NULL,
Referencia VARCHAR(20) NULL,
Direccion VARCHAR(30) NOT NULL,
PRIMARY KEY (Cod_empleado));
它上面有数据。因此,我使用 ADODB 连接和记录集创建了这个宏(“tEMPLEADO”是 Excel 表的名称,“EMPLEADO”是工作表和 SQL 表的名称)。
Sub Actualizar_Empleado()
Sheets("EMPLEADO").Select
Dim rng As Range
Set rng = Application.Range("tEMPLEADO")
Dim con As ADODB.Connection
Set con = New ADODB.Connection
con.Open "DRIVER={MySQL ODBC 8.0 Unicode Driver};SERVER=localhost;DATABASE=bdferreteria;USER=PruebaUser;PASSWORD=Passw0rd;"
Dim com As New ADODB.Command
com.ActiveConnection = con
com.CommandText = "SELECT * FROM EMPLEADO"
com.CommandType = adCmdText
Dim rs As ADODB.Recordset
Set rs = com.Execute
If rs.EOF = False Then
Dim fila As Integer
fila = 1
Do While Not rs.EOF
Range("B4").EntireRow.Insert
rng.Cells(fila, 1).Value = rs("Cod_empleado")
Range("B4").Value = rs("Cod_empleado")
rng.Cells(fila, 2).Value = rs("Nombre")
Range("C4").Value = rs("Nombre")
rng.Cells(fila, 3).Value = rs("Fecha_inicio")
Range("D4").Value = rs("Fecha_inicio")
rng.Cells(fila, 4).Value = rs("Referencia")
Range("E4").Value = rs("Referencia")
rng.Cells(fila, 5).Value = rs("Direccion")
Range("D4").Value = rs("Direccion")
fila = fila + 1
rs.MoveNext
Loop
rs.Close
con.Close
Else
MsgBox "Recordset is empty"
End If
con.Close
End Sub
代码不会抛出任何错误,但它不会做任何事情,它应该将 Excel 表中的所有值替换为 SQL 表中的值。正如您所看到的,我尝试以两种不同的方式粘贴值,但它们都不起作用。 提前致谢。
【问题讨论】:
-
您是否粘贴了错误的 mySQL 表定义?您是否有要更新的工作表上的现有数据,或者您只是添加新行?您的 Excel“表格”是实际的 Table/ListObject,还是只是一个常规的命名范围?
-
我要更新的Excel表中有已有数据,而我的Excel表是实际表,是的,对不起,我贴错了SQL表,我会及时更正
-
powerquery 不会为你做这件事吗?
-
我必须使用记录集执行此操作,但如果没有其他选项,也许我可以尝试使用 powerquery