I mitt program skrivet i VB6.0 börjar min Access-databas bli ca 6 - 7 mb stor. Det är många tabeller osv. Med tiden kommer den att bli mångdubbelt större. Min tanke är att ev byta till SQL som jag hört är både stabilare och framförallt snabbare. I programmet använder jag flera olika typer av datakontroller såsom ADO, DAO samt vanliga data-kontroller. Min fråga gäller följande: Vad är det för åtgärder som jag måste vidtaga för att göra detta byte, dels i programmet och dels emellan databaserna? Det ska finnas någon sorts "migration kit" utgivet av MS för att flytta mellan databaserna. SQL-servern har också ett Import/Export-verktyg som fungerar helt lysande. När det gäller applikationen så beror det mycket på vilken sorts anslutning du gjort i dina datakontroller. Har du använt ODBC med namngiven datakälla rakt av så blir det enkelt. Med andra typer av anslutning får du nog gå igenom dem och deras kod en och en. Det kan också behövas några förändringar i ditt program vad gäller dina frågor mot databasen. Det finns ett fåtal skillnader syntaxmässigt mellan access och sql. Tänk också att SQL-Server inte är en enskild databas som Access, utan en hel server som ex. MySQL. Föreslår att du i samband med bytet gör alla anrop mot databasen i en särskilld funktion/klass. I din kod anropar du då denna databas-funktion ihop med din SQL sats och returnerar ett recordset eller använder funktionen getRows som returnerar en två-dimensionell array med alla kolumner och alal rader som en SQL sats returnerar. Hur gör det koden mindre beroende av vilken databas som används? Tack alla ni som skickat mig svar. Jag har en hel del att kolla och pröva och era ideer kommer väl till pass. Det är rätt, olika databaser använder olika syntax för SQL. Det som är gemensamt är de mer enkla typerna av SQL Select, Insert etc. Använder du den typen av SQL minskar du det arbete du behöver göra om och när du ev byter databas. Du behöver givetvis ändra i din funktion som anropar datasen. Där ändrar du ODBC kopplingsträng eller annat som är direkt beroende av din databasleverantör.Byte från Access till SQL?
Tacksam för svar
SLSv: Byte från Access till SQL?
//JanneSv: Byte från Access till SQL?
(Exempelvis sql funktionerna iif och isnull...)Sv: Byte från Access till SQL?
Sv: Byte från Access till SQL?
Ex <code>
function ExecuteRS( sql )
dim conn, rs
Set conn = CreateObject("ADODB.Connection")
str = "Provider=SQLOLEDB;Data Source="&DB_Server&";" & _
User ID="&DB_User&";password="&DB_Passwd&";"
conn.Open str
set rs = conn.Execute( sql )
ExecuteRS = empty
if not rs.EOF then
ExecuteRS = rs.GetRows()
end if
conn.close
end function</code>
I din kod anropar du databasen med SQL sats så här
<code>
function MinFunktion
Dim sql, rs
sql = "SELECT * FROM tabelnamn"
rs = ExecuteRS( sql )
If not isEmpty( rs ) Then
...
...
end if
end function
</code>
Du undviker på detta sätt att göra din kod beroende av vilken databas du kör. Du kan även skapa databasfunktioner för att köra stored Procedure i MS SQL server.Sv: Byte från Access till SQL?
Argumentet är en SQL sträng. Det är ju SQL strängen som skiljer applikationerna åt.
Du har då mer nytta av t.ex. funktioner för texta och datum hantering:
<code>
Function SQLText(Value)
If Len(Value) > 0 Then
SQLText = "'" & Replace(Value, "'", "''") & "'"
Else
SQLText = "Null"
End If
End Function
Function SQLNumber(Value)
If IsNumeric(Value) Then
SQLNumber = Replace(Value, ",", ".")
Else
SQLNumber = "Null"
End If
End Function
</code>
Mellan access och MS SQL server skiljer sig hanteringen av datum.
Access:
<code>
Function SQLDate(Value)
If IsDate(Value) Then
SQLDate = "#" & Month(Value) & "/" & Day(Value) & "/" & Year(Value) & " " & Hour(Value) & ":" & Minute(Value) & ":" & Second(Value) & "#"
Else
SQLDate = "Null"
End If
End Function
</code>
SQL server:
Access:
<code>
Function SQLDate(Value)
If IsDate(Value) Then
SQLDate = "'" & Month(Value) & "/" & Day(Value) & "/" & Year(Value) & " " & Hour(Value) & ":" & Minute(Value) & ":" & Second(Value) & "'"
Else
SQLDate = "Null"
End If
End Function
</code>
Det som oxå särskiljer databaser är hur det hanterar Joins, underfråger, proceduers, vyer osv. Sv: Byte från Access till SQL?
tack, SörenSv: Byte från Access till SQL?
Tillsammans med de funktioner för hantering av datum, vissa speciella syntax som gäller för vissa databaser blir det ett rätt hyfsat datalager.