Tervehdys!
Mulla on koodinpätkä, jolla haluan viedä Excelistä tietoa Access tietokantaan. Aluksi homma lähtee liikenteeseen sillä, että määritetään tietokannan sijanti GetPathin avulla.
Sub GetPath07() Dim FName As Variant FName = Application.GetOpenFilename(filefilter:="Access Files,*.acc*") Sheet1.Range("L10").Value = FName End Sub
Seuraavaksi yritetään viedä tiedot Accessiin. Ja ongelma ilmenee yhteyden avaamis kohdassa. Eli, jos määritän tietokannan tarkan sijainnin, niin yhteys toimii mainiosti. Mutta dbpathin kanssa ilmenee ongelma, jota en saa ratkaistua.
Sub Export_Data() Dim cnn As ADODB.Connection 'dim the ADO collection class Dim rst As ADODB.Recordset 'dim the ADO recordset class Dim dbPath Dim x As Long, i As Long Dim nextrow As Long 'add error handling On Error GoTo errHandler: 'Variables for file path and last row of data dbPath = ActiveSheet.Range("Y3").Value nextrow = Cells(Rows.Count, 1).End(xlUp).Row 'Initialise the collection class variable Set cnn = New ADODB.Connection 'Check for data If Sheet1.Range("A2").Value = "" Then MsgBox " Taulukosta puuttuu tietoja. Täytä mittauspöytäkirja ja yritä uudelleen " Exit Sub End If 'Connection class is equipped with a —method— named Open '—-4 aguments—- ConnectionString, UserID, Password, Options 'ConnectionString formula—-Key1=Value1;Key2=Value2;Key_n=Value_n; cnn.Open "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & dbPath & ";Persist Security Info=False;" 'two primary providers used in ADO SQLOLEDB —-Microsoft.JET.OLEDB.4.0 —-Microsoft.ACE.OLEDB.12.0 'OLE stands for Object Linking and Embedding, Database 'ADO library is equipped with a class named Recordset Set rst = New ADODB.Recordset 'assign memory to the recordset 'ConnectionString Open '—-5 aguments—- 'Source, ActiveConnection, CursorType, LockType, Options rst.Open Source:="Monitori", ActiveConnection:=cnn, _ CursorType:=adOpenDynamic, LockType:=adLockOptimistic, _ Options:=adCmdTable 'you now have the recordset object 'add the values to it For x = 2 To nextrow rst.AddNew For i = 1 To 24 rst(Cells(1, i).Value) = Cells(x, i).Value Next i rst.Update Next x 'close the recordset rst.Close ' Close the connection cnn.Close 'clear memory Set rst = Nothing Set cnn = Nothing 'communicate with the user MsgBox " Mittaustiedot on lähetetty tietokantaan onnistuneesti " 'Update the sheet Application.ScreenUpdating = True 'show the next ID 'Sheet1.Range("J3").Value = Sheet1.Range("K3").Value + 1 On Error GoTo 0 Exit Sub errHandler: 'clear memory Set rst = Nothing Set cnn = Nothing MsgBox "Error " & Err.Number & " (" & Err.Description & ") in procedure Export_Data" End Sub
Eli kohdassa;
cnn.Open "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & dbPath & ";Persist Security Info=False;"
Onko kellään ideoita, miten ongelman saisi ratkaistua? Olen todella kiitollinen, jos joku osaisi avustaa!
-M
Mod. lisäsi kooditagit!
lainaus:
Seuraavaksi yritetään viedä tiedot Accessiin. Ja ongelma ilmenee yhteyden avaamis kohdassa. Eli, jos määritän tietokannan tarkan sijainnin, niin yhteys toimii mainiosti. Mutta dbpathin kanssa ilmenee ongelma, jota en saa ratkaistua.
Tietenkin "dbPathin kanssa"kin se tietokannan "tarkka polku" täytyy määrittää aktiivisen taulukon soluun Y3.
Kokeile lisätä rivi
Debug.Print "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & dbPath & ";Persist Security Info=False;"
ennen tuota cnn.open riviä ja katso immediate -ikkunasta mikä on vialla.
Yleisesti kannattaa käyttää kooditageja ja sisännyksiä :)
Hei, olinpas hölmö... Nyt yhteys taas toimii. Kiitos Grez!
Aihe on jo aika vanha, joten et voi enää vastata siihen.