20. september 2000 - 14:32Der er
32 kommentarer og 3 løsninger
HASTER ! VB/SQL problem i Access
Jeg har med en del hovedbrud prøvet at få VB6.0 core\'n til at udføre flg. SQL sætning;
SELECT TOP 1 KontraktID FROM Kontrakter ORDER BY KontraktID DESC
Det jeg egentlig søger er en metode til at hente sidste forekomst af KontraktID fra tabellen. Denne værdi skal kunne returneres til en variabel og jeg er lidt i tvivl om at jeg kan bruge DoCmd.RunSQL og DoCmd.OpenQuery til det. Ifølge hjælpfilen er DoCmd.RunSQL begrænset til visse typer af forespørgsler. Hvordan vil ovenstående blive kategoriseret ? Action- eller DataDefinitionQuery ? Point vil blive tildelt den som kan levere en tilfredsstillende, funktionel løsning!
Der bliver investeret massivt i AI. Teknologien er mere tilgængelig end nogensinde, og ambitionerne er høje. Alligevel oplever mange virksomheder, at resultaterne udebliver.
RunSQL er til at køre SQL kode som ikke \"kommer\" tilbage med et resultat ( x antal rækker, UPDATE, INSERT INTO osv. ) hvor imod OpenQuery er til hvis der kommer et antal rækker tilbage ( SELECT )
Du kan evt. bruge \"SELECT max(kontraktID)\", det vil gi\' det højeste KontraktID der er, jeg formoder det var det der var idé\'en
Function getKontraktID() As Integer Dim db As database Dim rs As Recordset Set db = CurrentDb() Set rs = db.OpenRecordset(\"SELECT KontraktID FROM Kontrakter ORDER BY KontraktID\") rs.MoveLast getKontraktID = rs(\"KontraktID\") rs.Close db.Close End Function
så er \"SELECT max(KontraktID)\" væsentlig hurtigere en og ligge og fetvhe alle record, det andet foregår på SQL serveren og kører MEGET hurtigere, skal man bruge SQL, kan man jo lige så godt lave noget der er ordenligt og hurtig. *S*
Afleverer DoCmd resultat?, mig bekendt sker det ikke!
Forslag sammensat af MartinLind\'s forslag og mit ovenstående:
Function getKontraktID() As Integer Dim db As database Dim rs As Recordset Set db = CurrentDb() Set rs = db.OpenRecordset(\"SELECT MAX(KontraktID) FROM Kontrakter\") rs.MoveFirst getKontraktID = rs(0) rs.Close db.Close End Function
I det pågældende eksempel er KontraktID et autonum. felt. jeg var under indtryk af at man skulle dim\'e en variabel til Long for at kunne returnere en sådanne værdi.
->Privaten
Med et simpelt knaptryk, crashede jeg min client TOTALT, da den udførte dit ovenstående funktionforslag. Jeg tvivler på (indtastnings-)fejl fra min side af, da jeg \"bare\" lavede cut\'n\'paste !
I har ingen idé om kravene til evt. req. plugins ?
Du kan ikke paste mit forslag ind, det er som beskrevet hullet ind i Access. Du er nødt til at ændre db & rs variable jf. VB6.0, ellers virker det ikke!
Jeg tror ikke det er et spørgsmål om plugins, det SKAL kunne lade sig gøre ;-)
Hvis vi snakker ANSI92 SQL så SKAL \"SELECT Max(KontraktID) AS MaxID FROM Kontrakter\", hvis feltet KontrakID er i tabelen Kontrakter, hvis det ikke virker kører VB6 ikke efter en std. ANSI SQL ( så svaret skal findes i hjælpen )
Beklager, men jeg bliver nødt til at stoppe 4 idag }( Skal i skole/på kursus kl. 17:00 og skal også have klemt en fråder ind i tidsplanen .. Tak for indsatsen ! ( og tålmodigheden *Nudge Privaten* :)
Vil det være muligt med en forespørgsel/Ren SQL at kopieret værdien \'Maks([Kontrakter].KontraktID])\' til en anden tabel ? Jeg er ikke stiv nok i SQL til at oprette en sådanne forespørgsel :( Men idéen er at efter at have udført Maks([Kontrakter].KontraktID]), skal den værdi gemmes i en anden tabel ([System].PågældendeKontraktID). Så kan jeg bruge noget så simpelt som DLookUp til at hente værdien :)
Jeg har flere valgmuligheder og har krydset flg. af;
MS ActiveX Data Objects (Multi-dimensional) 1.0 MS ActiveX Data Objects 2.1 MS ActiveX Data Objects Recordset 2.1
Jeg arbejder som sagt i Office2K og har valgt den fulde installation. Med lidt held vil en større brugergruppe få glæde af mit produkt og jeg vil gerne vide om den indstilling jeg ændrer vil være permanent! Altså, at de, som vil benytte produktet, ikke skal ind og indstille \'References\'.
Nu får jeg fejlen \'Object Variable or With block variable not set\' !
Jeg har løst mit problem ved at benytte handlingsforespørgsler istedet (DoCmd.RunSQL). Smid lige et svar \'Privaten\', så du kan få point for indsatsen.
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.