Avatar billede 2dbornot2db Nybegynder
04. marts 2005 - 13:41 Der er 7 kommentarer og
2 løsninger

Pass Through query til MySQL

Jeg skal til at lave en Access frontend, der sammenkæder med en MySQL-database via ODBC. Jeg har erfaring ift. en MS SQL server.

Er der nogen der har erfaring med Pass Through forespørgsler på denne facon? Jeg tænker:
- Kan det lade sige gøre, eller er det kun via MS SQL?
- Er der nævneværdig forskel på syntaks?
Avatar billede fdata Forsker
04. marts 2005 - 15:59 #1
Det kan sagtens lade sig gøre via VBA. Syntaksen er i runde tal:

  Dim Qdf As QueryDef
  Set Qdf = CurrentDb.CreateQueryDef("")
  With Qdf
    .Connect = DinSQLconnectStreng
    .ReturnsRecords = False    ' eller True
    .SQL = "StoredProcNavn Parametre"
    .Execute dbSQLPassThrough
  End With
Avatar billede terry Ekspert
04. marts 2005 - 17:06 #2
If you can make an ODBC connection to MySQL then youcan also make a pass-through query.
You can create a Pass-through query in code
http://support.microsoft.com/kb/q210415/
Avatar billede kjulius Novice
04. marts 2005 - 21:56 #3
Du kan sagtens lave en permanent Pass Through forespørgsel til en hvilken som helst ODBC database. Du kan bruge den ligesom du kender det fra Access. Eneste forskel er, at du ikke kan bruge den grafiske overflade til at generere koden, og at du ikke kan basere en forespørgsel på en anden, men skal opbygge hele koden i én enkelt SQL sætning. Den SQL du placerer i forespørgslen skal kunne overgives til serveren, og syntax skal derfor være som den kan genkendes af modtageren (i dit tilfælde MySQL).

En Pass Through forespørgsel vil opføre sig som en ganske alm. Access forespørgsel (men vil sandsynligvis være markant hurtigere end en tilsvarende "normal" access forespørgsel baseret på en ODBC link til den eksterne database), og du kan f.eks. stadig basere en form på en sådan forespørgsel, ligesom du f.eks. kan køre en VBA kode som Me.Requery for at opdatere med nyeste data.

Det er lidt mere besværligt at tilknytte formens/rapportens felter til forespørgslens, men ikke noget uoverkommeligt.

Men alt det ved du jo sikkert, hvis du har prøvet det mod MS SQL Server. Hvad angår syntax, så har jeg ikke et indgående kendskab til hverken SQL Server eller MySQL og kan derfor ikke give et endgyldigt svar, men det er mit indtryk, at MySQL's muligheder er meget afhængig af hvilken version man bruger. Sandsynligvis vil du dog nok opleve, at MySQL vil være noget "svagere" mht. funktionalitet end SQL Server og at syntax på enkelte funktioner vil være lidt anderledes. Du bliver nødt til at efterprøve din kode og belave dig på, at ændre noget, hvis du går ud over det mest basale.
Avatar billede kjulius Novice
04. marts 2005 - 22:04 #4
En permanent Pass Through forespørgsel er i sagens natur ikke opdaterbar, og kan altså kun bruges til at vise data på en form eller en rapport. Men som sagt, så længe opdaterbarhed ikke er et krav, vil den være noget hurtigere end en tilsvarende forespørgsel baseret på linkede tabeller. Jo mere kompleks forespørgslen er, jo mere vil man kunne vinde i tid.
05. marts 2005 - 01:26 #5
Kjulius->hvad mener du med, at den "i sagens natur ikke er opdaterbar"??

En Pass Through forespørgsel er da lige så opdaterbar som en Access-forespørgsel. Jeg bruger det i hvert fald af og til i formularer.

Jeg kender ikke ODBC'en til MySQL, men normalt vil ODBC automatisk optimere en alm. Access Select-forespørgsel, således at der ikke vil være væsentlig forskel på om man bruger Pass Through eller alm. Access.
Kun hvis SQL'en er meget kompleks eller hvis der er tale om andet en Select-queries (f.eks. Update, Insert eller Delete), så vil man opnå væsentlig performance-forbedring.
Avatar billede terry Ekspert
05. marts 2005 - 09:15 #6
its important that the WHOLE side is read and also the other links, for example

http://support.microsoft.com/kb/209116/EN-US/
Avatar billede kjulius Novice
05. marts 2005 - 21:35 #7
--> thomasjepsen:
En permanent Pass Through forespørgsel er en forespørgsel som sender den rå SQL til serveren for afvikling der. Denne sender et recordset retur, men som artiklen terry's udmærkede link henviser til, er dette recordset et snapshot (altså ikke opdaterbart).

Naturligvis har du ret i, at fordelen ved en direkte afvikling på serveren bliver større jo mere kompleks queryen er, men det gælder nu også mindre komplekse queries hvor der er tale om mindre komplekse udtræk, men hvor de involverede tabeller er meget store. Det er i hvert fald min erfaring.

En anden ting som til tider kan tale til fordel for brugen af en sådan query er, at man så ikke er bundet af Access' til tider begrænsende SQL variant, men kan udnytte kraftigere databasers fulde potentiale.

Til gengæld vil man afskrive sig muligheden for at referere til lokale Access tabeller. Det vil altid være en afvejning af fordele og ulemper, om man skal bruge alm. forespørgsler baseret på linkede tabeller eller en pass-through forespørgsel.

--> terry:

Nice link! Kind of sums it all up quite nicely, doesn't it... :-)
05. marts 2005 - 22:01 #8
kjulius->du har ret! Jeg blandede det lige sammen med views på serveren, som er opdaterbare (hvis man blot husker at definere et unikt indeks ved sammenkædningen).

Ellers er jeg stort set enig in dine antagelser :o)
Avatar billede kjulius Novice
06. marts 2005 - 00:00 #9
--> thomasjepsen:
Okay, det forklarer jo din kommentar omkring opdaterbarheden :-)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Dyk ned i databasernes verden på et af vores praksisnære Access-kurser

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester