Jag har rört till det. Jag har med följande >Det skall vara TVÅ databaser så det går inte att "joina" vad jag förstår. Hur gör man då med Connectionstring när man "executar" SQL-satsen? Man måste väl ha en kontaktsträng till varje databas eftersom det blir olika sökvägar? Måste ju fråga... Tack, det vore trevligt med ett exempel, och även då hur man "executar" i det fallet Ojdå Jag har prövat på liknande sätt men problemet är då följande. "Koden" borde fixa det men såg nu att det sista årtalet inte får sin historia :( Jag får felmeddelande på satsen Inte fel sökväg, ser ut som om historia.mdb och person.mdb inte ligger i samma mapp ? Spelar det någon roll om de inte ligger i samma mapp? Jag har ändrat så de ligger i samma mapp. Felmeddelandet säger att input table 'person' hittas inte. Om jag byter plats på sökvägarna är det input table 'historia' som inte hittas. Jag tittar mig blind på tabellerna och ser dom ändå klart och tydligt. Jag menade bara att sökvägarna skiljde sig åt, men då skulle det vara så... Du måste ange IN på båda tabellerna annars antas de vara i samma databas. Hemma på min gata i stan så funkar det enligt exemplet... Om jag sätter In på båda tabellerna får jag felmeddelande om syntaxerror in From clause Jag har löst det!!! Troligen recordset med "ForwardOnly", snabbast så.Problem med loop av två databaser
Öppna databas 1
Select * data1
Lägg utsökta data i rsPerson
Do Until rsPerson.EOF
Fornamn = "" & rsPerson!ForNamn
Artal="" & rsPerson!Artal
osv
Skriv dessa data i rapport
Öppna databas 2
Select * data2 Where Year = Artal
Tilldela rsHistoria det utsökta datat
Skriv dessa data i samma rapport
Töm rsHistoria
rsPerson.MoveNext
Loop
Det skall vara TVÅ databaser så det går inte att "joina" vad jag förstår.
Mitt problem är att ibland finns det fler poster i rsPerson med samma Artal. Då vill jag att rsHistoria bara skivs EN gång eftersom den innehåller samma data för varje årtal, och dessutom EFTER alla rsPerson med det årtalet för att därefter fortsätta som vanligt.Sv: Problem med loop av två databaser
Kan du inte använda IN som i
SELECT *
FROM tabell1 IN "db1.mdb", tabell2 IN "db2.mdb"
WHERE ...Sv: Problem med loop av två databaser
Sv: Problem med loop av två databaser
Du kan inte länka in en tabell från ena db:n till den andra (och skapa en färdig fråga) ?
Nähä...
Har för mig att Access åtminstone förut kunde köra en ad-hoc mellan två db:s.
Skriv helt enkelt sökvägen till db:n i select-satsen typ så här :
SELECT * FROM data1 JOIN data2 IN C:\VadSomHelst.mdb
Är osäker på syntaxen, kan ha konkret exempel i morrn bitti...
/JohanSv: Problem med loop av två databaser
Sv: Problem med loop av två databaser
Kollade ditt ursprungliga problem.
Det skulle nog jag ha löst så här ungefär
Öppna databas 1
Select * data1
Lägg utsökta data i rsPerson
OldArtal ="YXA" ' vad som helst som inte kan komma från db:n
Do Until rsPerson.EOF
Fornamn = "" & rsPerson!ForNamn
Artal="" & rsPerson!Artal
osv
Skriv dessa data i rapport
If OldArtal <> Artal Then
If OldArtal <> "YXA" Then ' råddigt men funkis ?
Öppna databas 2
Select * data2 Where Year = OldArtal ' ta ut årtalet som redan loopats igenom
Tilldela rsHistoria det utsökta datat
Skriv dessa data i samma rapport
Töm rsHistoria
End If
OldArtal = Artal ' för att detta bara ska ske en gång per årtal
End If
rsPerson.MoveNext
Loop
Har annars exemplet för två db:s ligger här...
/JohanSv: Problem med loop av två databaser
Säg att det finns 4 personer med samma Artal.
Då skrivs första personen ut och sedan rsHistoria och därefter de tre andra personerna.
Jag får inte till det så att alla fyra personerna skrivs först och därefter rsHistoria.
Exemplet för två db:s borde inte ligga där och skräpa. Jag tycker nog att detta borde gå att få till ändå men att lära sig hur man gör med två databaser kan ju vara bra får framtiden.Sv: Problem med loop av två databaser
2 db :
I projektet exemplet kommer från använde jag bara en funktion för att hämta data, GetRecordset
<code>
Function GetRecordset(ByVal strSQL As String, Optional ByVal strDatabasnamn As String = "") As ADODB.Recordset
Dim rstSQL As ADODB.Recordset, strConnect As String
' Om parameter inte skickats med används ett filnamn från en global variabel...
If strDatabasnamn = "" Then
strConnect = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & strFilnamn & ";Persist Security Info=False"
Else
strConnect = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & strDatabasnamn & ";Persist Security Info=False"
End If
On Error GoTo GetRecordsetError
Set rstSQL = CreateObject("ADODB.Recordset")
rstSQL.CursorLocation = adUseClient
rstSQL.CursorType = adOpenStatic
rstSQL.ActiveConnection = strConnect
rstSQL.Source = strSQL
rstSQL.Open
Set rstSQL.ActiveConnection = Nothing ' koppla ifrån
Set GetRecordset = rstSQL ' och returnera
GetRecordsetExit:
Exit Function
GetRecordsetError:
Debug.Print "ERR - " & strSQL
Resume GetRecordsetExit
End Function
</code>
Inga pettimeterklagomål - den har funkat i alla fall.
Två db anropas så här
<code>
Dim rstE As ADODB.Recordset
Set rstE = GetRecordset("SELECT * FROM tabA, tabB IN 'C:\B.mdb' WHERE tabA.FK = tabB.PK", "C:\A.mdb")
</code>
Alltså är conn.string = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\A.mdb;Persist Security Info=False"
/JohanSv: Problem med loop av två databaser
Set rstE = GetRecordset("SELECT * FROM person, historia IN 'D:\Historia\data\startdata\historia.mdb' WHERE person.fodelsear = historia.år", "D:\Historia\data\person.mdb")
Tabellerna heter alltså samma som databaserna.Sv: Problem med loop av två databaser
Hur lyder felmedd förresten ?
Svenska tecken alltid knepigt testa [år] eller byt mot Artal som du väl kallade det tidigare
/JohanSv: Problem med loop av två databaser
Sv: Problem med loop av två databaser
Borde ju funka då...
/JohanSv: Problem med loop av två databaser
FROM person IN "C:...", historia IN "C:..."Sv: Problem med loop av två databaser
Men det kan ju skilja mellan ado-versioner, eller ?
/JohanSv: Problem med loop av två databaser
Sv: Problem med loop av två databaser
Öppna databas 1
Select * data1
Lägg utsökta data i rsPerson
Do Until rsPerson.EOF
Fornamn = "" & rsPerson!ForNamn
Artal="" & rsPerson!Artal
osv
Skriv dessa data i rapport
SammaArtal = "" & rsPerson!FodelseAr
rsPerson.MoveNext
If SammaArtal = "" & rsPerson!FodelseAr Then
UpprepningArtal = True
Else
UpprepningArtal = False
End If
If UpprepningArtal = False Then
Öppna databas 2
strSQLHistoria = "select * from historia where Årtal like " & SammaArtal
Tilldela rsHistoria det utsökta datat
Skriv dessa data i samma rapport
Töm rsHistoria
End if
Loop
Det som nu fattas är historiadata från sista årtalet som jag skriver efter loopen men dett kanske också kan göras på snyggare sätt.
En fundering är varför inte rsPerson.MovePrevios verkar fungera?Sv: Problem med loop av två databaser
Natti, natti
/Johan