PDA

View Full Version : 2 databaser


web00132
2005-09-30, 12:55
Av någon anledning har sajten jag jobbar med nu två databaser - en som behandlar data om butiker och en om kunder. Och nu är det så att jag behöver plocka fram priser från "butiksdatabasen" och produktinfo från "kunddatabasen" och skriva ut det i samma html-tabell. Jag använder mig av en loop för att ta fram alla poster om produkterna i kunddatabasen:while not rs.EOF
response.write rs("bild") & rs("beskrivning") & rs("pris")
rs3.movenext
wend Men nu vill jag alltså att rs("pris") ska hämtas från en annan databas. Min tanke var att loopa fram posten "pris" till en array som jag sedan kan loopa och jämföra i loopen jag skrev ut ovan. Då blir det bara en extra databaskoppling men icke desto mindre en j-a massa loopar. Någon som har ett bättre förslag? :OO

@nders
2005-09-30, 13:02
Mitt förslag är att du flyttar på allt som ligger i den ena databasen och lägger det i den andra. Då kommer du att tjäna jättemycket; exempelvis kan du då joina ihop tabellerna i SQL-frågan och få fram allt data på en gång.

Mvh

web00132
2005-09-30, 13:06
Oooo, snabbt svar!
Jo, jag vet. Men nu kan jag inte göra det, det är det som är problemet. Det är en massa andra applikationer kopplade till databaserna som jag inte har lust att börja gräva i. Tror inte jag får det heller.

emission
2005-09-30, 13:15
Vad är det för databasmotor? Om det är MSSQL eller MySQL så kan du joina mellan databaserna. Det är inte direkt någon "best practice", men det går bra att göra det.

Förutsatt att databasanvändaren har rätt till båda databaserna



SELECT d1.* FROM tabell d1, DB2..tabell2 d2 WHERE d1.id=d2.id



i MySQL ska det bara vara en punkt mellan databasnamnet och tabellnamnet (mellan punkterna kan man skriva eventuell tabellägare, ex. DB2.dbo.tabell2)

@nders
2005-09-30, 13:15
Jag antar att du pratar om Access, trots att du inte skriver något om det, och då kan man inte joina mellan databaser, så då är det bara att suga på granatäpplet (iiiih!) och köra pris-SQL-frågorna i loopen, eller göra enligt ditt förslag. Vilket som är bäst kan ju diskuteras, men det beror också på vilken datamängd vi pratar om.

Kanske kan ett dictionaryobjekt att lagra priserna i vara ett alternativ?

OveRRidE
2005-09-30, 13:27
Jag antar att du pratar om Access, trots att du inte skriver något om det, och då kan man inte joina mellan databaser, så då är det bara att suga på granatäpplet (iiiih!)Inte helt sant dock, även om det jag kommer nämna inte är applicerbart i just det här fallet.

Det går faktiskt att använda Distributed Querys/Transactions (med t.ex. UNIONS) mellan t.ex. två SQL-servrar och en Accessdatabas (eller Excelark, dBase, AD eller vadsomhelst som har stöd för OLEDB), om man skapar Linked Servers och fixar lite med DTC'n.

Men som sagt; det är ju inte applicerbart i det här fallet. Dessutom är det otympligt och dålig databasdesign att ha två datakällor i olika databaser om man förväntar sig att iterera/joina/union'a mellan dem.

web00132
2005-09-30, 13:39
Tack för era svar!
Ja, det är Access. Och det handlar om ganska många poster, drygt 1000 i vardera DB. Tyvärr har jag aldrig fattat/orkat ta tag i/behövt använda dictionaryobjekt förut och jag har inte riktigt tid att sätta mig in i det nu, fredag eftermiddag. Men jag får helt enkelt lobba för att de ska omstrukturera sitt databastänk, det är möjligt att det inte är så svårt att fixa. De får helt enkelt anlita mig :)
Men jag kör på min array-idé tills vidare. Kan återkomma när jag fått det att funka och berätta hur segt det går. Ifall det går för segt blir jag nog tvungen att lära mig om dictionary, och då accepterar jag @nders svar som slutgiltigt. Tack hittills hörni! :bire

@nders
2005-09-30, 14:14
Det går faktiskt att använda Distributed Querys/Transactions (med t.ex. UNIONS) mellan t.ex. två SQL-servrar och en Accessdatabas (eller Excelark, dBase, AD eller vadsomhelst som har stöd för OLEDB), om man skapar Linked Servers och fixar lite med DTC'n. Det må vara så. Går det att göra mellan två accessdatabaser och noll SQL-servrar?Kan återkomma när jag fått det att funka och berätta hur segt det går. Inte kan. Ska. :)

OveRRidE
2005-09-30, 15:36
Det må vara så. Går det att göra mellan två accessdatabaser och noll SQL-servrar?Inte kan. Ska. :)Jag vet faktiskt inte riktigt, det beror på hur man "linkar" själva datakällorna, vilket jag inte utforskat närmare. Det ska gå att göra detta utanför SQL Server har jag för mig, och sedan låta DTC'n sköta kommunikationen "remote" mellan servrarna för att koppla ihop datakällorna.

Jag är inte säker, det är bara något jag läst.

OveRRidE
2005-09-30, 15:44
Okej, om man läser lite extra så ska det tydligen gå att köra med två eller fler Access-databaser på flera fysiskt olika servrar, och antagligen (nu gissar jag, eftersom det går till så i SQL Server) så måste man deklarera en vy (view) i den Access-databas som man huvudsakligen anropar, där vy'n via inställningar i Access linkar ihop databaserna via OLEDB.

Låter krångligt. :p

OveRRidE
2005-09-30, 15:45
Mer läsning:
http://forums.aspfree.com/archive/t-22056/Joining-tables-from-different-Access-databases-to-create-a-single-ADO-recordset