Kirjautuminen

Haku

Tehtävät

Keskustelu: Ohjelmointikysymykset: VBA: dbpath & persist data info ongelma

mabuu [03.12.2015 20:36:46]

#

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!

Grez [03.12.2015 20:51:38]

#

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ä :)

mabuu [03.12.2015 21:18:43]

#

Hei, olinpas hölmö... Nyt yhteys taas toimii. Kiitos Grez!

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta