VBA-Verbindung von Excel 2010 SQL Server 2008
ich bin Recht neu in SQL und VBA, also bitte verzeihen Sie jede audacity den folgenden code enthalten können. Ich arbeite mit code geschrieben in Excel-VBA. Schließlich werden die Daten aus der user form in excel eingetragen werden in eine SQL-Datenbank habe ich erstellt mit SQL Server 2008. Gerade jetzt, ich versuche nur, um öffnen Sie die Verbindung zur SQL-Datenbank, und geben Sie hart codierte Werte in die db. Leider wurde dies viel mehr eine Herausforderung, als ich erwartet hatte. Ich habe versucht, das Spiel mit der Verbindungszeichenfolge ein paar verschiedene Möglichkeiten, aber kein Glück hatten. Wenn das Formular ausgeführt wird, bekomme ich keine Fehler und ich kann die Daten sehen, die Hinzugefügt wurde, in die entsprechende excel-Arbeitsblatt (aber keine änderungen an der SQL-DB). Ich kann sehen, dass die db auf SQL Server Management Studio, und fügen Sie die Zeilen aus, aber ich bin nicht in der Lage, um eine Zeile hinzuzufügen, um die db über diesen code. Die db ist geschützt, die ausschließlich von windows-Authentifizierung. Jegliche Hilfe würde sehr geschätzt werden.
Sub ConnectSqlServer()
'********SPC DATABASE CONNECTION**********************
'write slurry information to database
'spc_date, mix_type, slurry_lot_num, mixer_num, shift, oper
Dim conn As ADODB.Connection
Dim rs As ADODB.Recordset
Dim sConnString As String
'Create connection string
sConnString = "Provider=sqloledb; Server=SERV; Database=db; Trusted_Connection=True;"
'Create the Connection and Recordset objects
Set oConn = New ADODB.Connection
Set rs = New ADODB.Recordset
'Open connection and execute
conn.Open sConnString
Set rs = conn.Execute("INSERT INTO TBL (col1, col2) VALUES ('val', 'val');")
'Clean up
If CBool(conn.State And adStateOpen) Then conn.Close
Set conn = Nothing
Set rs = Nothing
End Sub
- Welche Art von Fehlermeldung bekommst du? Beachten Sie, dass eine
insert
wird nicht ein recordset zurückgeben. - Ich bekomme keine Fehlermeldungen, aber wenn ich das SQL Server Management Studio und in der Tabelle anzeigen, ich kann sehen, dass die Werte, die ich habe versucht, fügen Sie der Tabelle wurden nicht Hinzugefügt
Du musst angemeldet sein, um einen Kommentar abzugeben.
Beim einfügen von Daten, die Sie nicht brauchen, ein recordset-Objekt, da eine
INSERT
Erklärung nicht ein recordset zurückgeben. Stattdessen versuchen Sie es mit einem command-Objekt statt. Das command-Objekt gibt Ihnen mehr Kontrolle über wie Sie Ihre SQL-Anweisung an den server übergeben wird, und es gibt Ihnen auch ein Weg, um zu testen, ob alle Datensätze eingefügt wurden.Ich würde auch empfehlen die Einstellung
Option Explicit
an der Spitze jedes Moduls, da es Sie daran zu hindern, Fehler zu machen, mit Variablen (zum Beispiel, Sie haben beideconn
undoConn
im code, was ich nicht denke, das Sie bestimmt.Hier sind meine änderungen an Ihrem code. Es ist ungetestet, aber ich denke ich habe es Recht. Wenn es ohne Fehler ausgeführt wird, und
recordsAffected
gibt 1 zurück, aber es ist immer noch nichts auf dem server, dann haben wir ein wenig mehr Graben.conn.Open sConnString
, und drücken Sie F9, um erstellen Sie einen Haltepunkt, dann die Dinge laufen wieder. Sollte Ihr code Ausführung anhalten und gelb markiert; Sie können dann durch die Prozedur Schritt für Schritt durch drücken der Taste F8. Dies kann Ihnen zeigen, was falsch läuft, aber ich Frage mich, ob der Haltepunkt wird auch der hit bei allen.sqloledb
, ich denke, Sie wollen 'Datenquelle' und 'Initial Catalog", nicht "Server" und "Datenbank" in der Verbindungszeichenfolge.