t-SQL vanuit vba

Status
Niet open voor verdere reacties.

manueld

Gebruiker
Lid geworden
12 feb 2012
Berichten
216
ik heb een formulier in access welke vele dingen doet. hij is niet gebonden aan een tabel of query. hij draait volledig op vba. omdat dit formulier straks bij vele gebruikers gaat draaien en er vele querys gaan draaien vanuit het formulier moet het op een degelijke manier gebouwd worden. de standaart manier is natuurlijk via odbc een tabel koppelen en vervolgens vanuit vba daar een query op draaien. zover ik weet haalt hij dan de hele tabel over en draait daar dan de query op. als er straks 10.000 records per maand gegenereerd worden en daarin doorlopend gezocht wordt zal dit een performance perobleem gaan geven. nu zag ik dat "T-SQL" niet de tabellen overhaald maar de query op de sql server draait en dan de uitkomst terug stuurt. daarmee maak je gebruik van de rekenkracht van de sql server ipv je werkstation. nu kan ik verder eigenlijk hier niets over vinden hoe het is opgebouwd, wat ik moet doen om een dergelijke connectie te maken, heb ik de odbc connector nog nodig?

mijn vraag is dan ook of er iemand is die mij een introductie in T-SQL kan geven icm met vba access.
 
De connectie is zo gemaakt als je de naam van de SQL-server instantie hebt waarmee je verbinding moet maken (en de juiste rechten hebt). Zoek maar op SQL Server connection strings, dan vind je genoeg relevante hits. Verder is t-sql gewoon een SQL dialect dat je moet leren, niet wezenlijk anders op de meeste punten dan het Access SQL dialect. Overigens: waarom niet tabellen koppelen aan SQL Server?
 
de reden dat ik tabellen niet wil koppelen is dat als je een query op een gekoppelde tabel doet dan haalt hij de tabel op van de sql server en voert de query uit. als je een query via tsql uitvoert dan voert hij de query op de server uit en stuurt het resultaat naar access. normaal merk je nauwelijks verschil maar als je 30+ compupers hebt die dat doen en het gaat om een tabel met meer dan 100.000 records dan duurt het soms wel 3 minuten om een query uit te voeren en levert het enkele 100en mbs aan netwerkbelasting op. tsql maakt gebruik van de kracht van de server ipv het werkstation.

je haalt niet de kast op om een boek er uit te pakken. je loopt naar de kast en zoekt het boek en komt daarmee terug.

heb je een voorbeeld van een stuk vba waarin je de connectie maakt en vervolgens een query uitvoert? de query kom ik wel uit maar alles er omheen lukt nog niet echt
 
Google eens met deze zoektermen: access vba connect to sql server
 
hieronder een voorbeeld van hoe ik het nu doe.

Code:
Private Sub MoveDataFromTmpToMeasurement()

    Dim cn As Object
    Dim rs As Object
    Dim strFile As String
    Dim strSql As String
    Dim test As String

        Call connection

        Set cn = CreateObject("ADODB.Connection")
        cn.Open strCon
        strSql = "insert into [tblMeasurement]select * from [tblActiveSO] where [Meastatus]=1"
        Set rs = CreateObject("ADODB.RECORDSET")
        rs.activeconnection = cn
        rs.Open strSql

        Call connection

        Set cn = CreateObject("ADODB.Connection")
        cn.Open strCon
        strSql = "delete from [tblActiveSO] where [Meastatus]=1"
        Set rs = CreateObject("ADODB.RECORDSET")
        rs.activeconnection = cn
        rs.Open strSql
        
End Sub
Code:
Sub connection()
strCon = "Provider=SQLNCLI10;Server=ACH-SQL-V01;Database=LMD_Process_control; Uid=" & username & "; Trusted_Connection=yes; "
End Sub
 
Laatst bewerkt:
Waarom gebruik je late binding en generieke object variabelen in plaats van een verwijzing naar de ADO library? Krijg je ook intellisense.
Ook is het bij de twee voorbeelden die je gaf niet nodig een recordset op te halen, je kan de exectute methode van het connection object gebruiken.
 
dit is allemaal nieuw voor mij. ik gebruik wat ik gebruik omdat dat werkt . als er betere manieren zijn wil ik die graag leren. daarvoor moete ik wel weten waarom hetr beter is en hoe het dan werkt. waar het mij omgaat is dat ik zo min mogelijk belasting van het werkstation en netwerk wil en de verwerking van een query bij de server wil laten liggen. als je dus aanbevelingen hebt dan graag maar vertel me dan wel hoe en waarom. dan kunnen we er allemaal van leren:)
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan