Fetstil Fetstil Kursiv Understrykning linje färgläggning tabellverk Punktlista Nummerlista Vänster Centrerat högerställt Utfyllt Länk Bild htmlmode
  • Forum & Blog
    • Forum - översikt
      • .Net
        • asp.net generellt
        • c#
        • vb.net
        • f#
        • silverlight
        • microsoft surface
        • visual studio .net
      • databaser
        • sql-server
        • databaser
        • access
        • mysql
      • mjukvara klient
        • datorer och komponenter
        • nätverk, lan/wan
        • operativsystem
        • programvaror
        • säkerhet, inställningar
        • windows server
        • allmänt
        • crystal reports
        • exchange/outlook
        • microsoft office
      • mjukvara server
        • active directory
        • biztalk
        • exchange
        • linux
        • sharepoint
        • webbservers
        • sql server
      • appar (win/mobil)
      • programspråk
        • c++
        • delphi
        • java
        • quick basic
        • visual basic
      • scripting
        • asp 3.0
        • flash actionscript
        • html css
        • javascript
        • php
        • regular expresssion
        • xml
      • spel och grafik
        • DirectX
        • Spel och grafik
      • ledning
        • Arkitektur
        • Systemutveckling
        • krav och test
        • projektledning
        • ledningsfrågor
      • vb-sektioner
        • activeX
        • windows api
        • elektronik
        • internet
        • komponenter
        • nätverk
        • operativsystem
      • övriga forum
        • arbete karriär
        • erbjuda uppdrag och tjänster
        • juridiska frågor
        • köp och sälj
        • matematik och fysik
        • intern information
        • skrivklåda
        • webb-operatörer
    • Posta inlägg i forumet
    • Chatta med andra
  • Konto
    • Medlemssida
    • Byta lösenord
    • Bli bonsumedlem
    • iMail
  • Material
    • Tips & tricks
    • Artiklar
    • Programarkiv
  • JOBB
  • Student
    • Studentlicenser
  • KONTAKT
    • Om pellesoft
    • Grundare
    • Kontakta oss
    • Annonsering
    • Partners
    • Felanmälan
  • Logga in

Hem / Forum översikt / inlägg

Posta nytt inlägg


AccessSQL

Postades av 2005-04-29 10:44:12 - Harry Rosendahl, i forum access, Tråden har 8 Kommentarer och lästs av 1146 personer

Access2000 SELECT
Har gjort ett formulär som hämtar uppgifter från 3 st tabeller.
Formulärets datakälla:
SELECT Manadsuppgifter.*, Personer.*, Parametrar.* FROM Personer INNER JOIN (Parametrar INNER JOIN Manadsuppgifter ON Parametrar.PmeterNyckel=Manadsuppgifter.ParameterNyckel) ON Personer.Anstallningsnr=Manadsuppgifter.Anstallningsnr;

Jag behöver komma åt endel fält i tabell Parametrar och det har jag löst genom att plocka in fälten som ”ej synliga” fält i formuläret. På så sätt kan jag från programmet nå (referera) till fälten och göra beräkningar mm.
Parameterfälten behöver jag använda enbart vid beräkningar som jag gör i programrutiner.

Skulle hellre plocka fram parametervärdena med hjälp av en SQL-sats.
Jag vill alltså referera till de i tabell Parametrar namngivna fälten.
Antar att jag då först skall plocka bort Parametrar.* ur den ovanstående SELECT-satsen

Formulärets datakälla blir då:
SELECT Manadsuppgifter.*, Personer.* FROM Personer INNER JOIN Manadsuppgifter ON Personer.Anstallningsnr=Manadsuppgifter.Anstallningsnr;

Därefter anropar jag InitieraParametrar i början av rutin
Private Sub Form_Current() 'vid Ny post
Call InitieraParametrar 'sätt upp parametervärden
.
.

Public Sub InitieraParametrar() 'Testa värden i Parameter- tabellen
Dim tstDate As Date
Dim Param As Recordset
Param.OpenRecordset _
"SELECT * FROM Param", _
CurrentProject.Connection
tstDate = Param.Fields("PmIkraftDatum")
End Sub

Vid körning får jag felmeddelande körfel 91:
Objektvariabel eller With-block variabel har inte angetts.

FRÅGA 1:
Var ligger felet?
-----------------------------------------------------------------------------------------
Följer jag ett ”bokexempel” så skulle det se ut såhär:
Public Sub InitieraParametrar() 'Testa värden i Parameter- tabellen
Dim tstDate As Date
Dim Param As New Recordset
Param.Open _
"SELECT * FROM Param", _
CurrentProject.Connection
tstDate = Param.Fields("PmIkraftDatum")
End Sub
Vilket ger felmeddelandet:
Kompileringsfel:
Ogiltig användning av Nyckelordet New
FRÅGA 2:
Var ligger felet?
--------------------------------------------------------------------------------

Eller
Fråga 3:
Är det bättre att jag går runt problemet genom att peta in alla Parameterfält jag behöver som osynliga fält i formuläret?

Tacksam för svar /Harry


Svara

Sv: AccessSQL

Postades av 2005-04-29 11:15:49 - Johan Djupmarker

Om du inte behöver uppgifterna väldigt sällan får du troligtvis (marginellt) bättre prestanda med dolda fält som du har gjort... Men det ska ju fungera i vilket fall.

I första exemplet saknas det New, det borde alltså vara såhär:
Dim Param As New Recordset

Men det fungerar ju inte i exempel 2, alltså klagar den säkert på det här med, därför kan du testa såhär och se om detta blir bättre:
Dim Param As Recordset
Set Param = New Recordset

/Johan


Svara

Sv:AccessSQL

Postades av 2005-04-29 11:33:26 - Johan Svensson

Hej,

Ditt problem ligger i att du inte har någon connection. Ditt recordset måste ju köras mot en databs, således glöm inte att skapa din connection först.

// Johan


Svara

Sv:AccessSQL

Postades av 2005-04-29 12:35:11 - Harry Rosendahl

Tack för era svar.
Provade:
Dim Param As Recordset
Set Param = New Recordset , men det gav mig samma felmeddelande:
Ogiltig användning av Nyckelordet New

Avseende saknad connection, så trodde jag att
CurrentProject.Connection var det som behövdes. I "bokexemplet" har man ingen annan connection.
Visa gärna hur det skall se ut.

Tackar på förhand.

mvh / Harry


Svara

Sv: AccessSQL

Postades av 2005-04-29 13:06:43 - Johan Svensson

Ah,

du hade smugit in en connection som jag missade... Har du kollat att den är öppen?

Sedan det du skall göra är att använda execute metoden på ditt connection objekt som i sin tur returnerar det recordset du behöver. Om du gör så skall det lösa sig.

Sedan kan jag inte låta bli att kommentera ditt dåliga variabelnamnsval. Att kalla en recordset variable för parameter är inte så lyckat då man lätt kan tro att det är en parameter till databasanropet istället.

// Johan


Svara

Sv: AccessSQL

Postades av 2005-04-29 14:20:39 - Johan Djupmarker

Hmm, detta ser ut att vara en konstig blandning av ADO och DAO, mest DAO med lite ADO-inslag... Vet att just Access 2000 hade lite problem med detta och att det saknades vissa referenser ibland (om det var till ADO eller DAO kommer jag inte ihåg).

En grej kan vara att testa med DAO-varianten istället.

<code>Public Sub InitieraParametrar() 'Testa värden i Parameter- tabellen
Dim tstDate As Date
Dim db As Database
Dim Param As Recordset
Set db = CurrentDB
Set Param = db.OpenRecordset("SELECT * FROM Param")
tstDate = Param.Fields("PmIkraftDatum")
End Sub</code>

/Johan


Svara

Sv:AccessSQL

Postades av 2005-04-29 15:15:47 - Harry Rosendahl

Bra påpekande om mitt variabelnamn.
Har nu försökt med connection.execte, men resultatet bli samma felmeddelande som tidigare
Ogiltig användning av Nyckelordet New


Dim ParameterRecord As Recordset
Set ParameterRecord = New Recordset

CurrentProject.Connection

Set ParameterRecord = Connection.Execute("SELECT * FROM ParameterRecord")

tstDate = ParameterRecord.Fields("PmIkraftDatum")

Problemet är ju egentligen av typ elementärt.
D.v.s Formulär som hanterar innehåll från en tabell och där man önskar via pgmrutin läsa innehållet även från en annan tabell i samma databas. Men även det tycks gå att "röra till".

Avseende Johan Djupmarkers DAO förslag så har jag inte provat det ännu. Skall prova, men enligt boken jag tar mitt exempel ur (Access2000 programming for Dummies sid 151 ), så är det i fallet Access2000 fråga om ADO.
Till saken hör att den Accessversion jag använder är Access 2003, men enligt uppgift så är databasupplägget i Access2003 detsamma som i Access2000. Kanske det är det som ställer till det för mig.

Jag läste annars din artikel Johan Djupmarker ang. utskrift av Access DB innehåll till Word dokument. Artikeln var bra och jag skulle gärna se en liknande uppdaterad variant för hantering avseende ADO.

Tack för era goda råd. Fler mottages med tacksamhet.
Glad Valborg /Harry


Svara

Sv: AccessSQL

Postades av 2005-04-29 16:54:01 - Åsa Holmgren

Utifrån vad du har skrivit tidigare så antar jag att din parametertabell innehåller en enda post. Jag skulle skriva något i den här stilen:

<code>
Public gdtTestDate as Date

Public Sub InitieraParametrar()
Dim rst As ADODB.Recordset

On Error Goto InitieraParametrar_Err

Set rst = New ADODB.Recordset
rst.Open "SELECT * FROM Param", CurrentProject.Connection, adOpenKeyset, _
adLockReadOnly, adCmdText

If Not rst.EOF Then
If Not IsNull(rst("PmIkraftDatum")) Then gdtTestDate = rst("PmIkraftDatum")
End If

InitieraParametrar_End:
If Not rst Is Nothing Then
If rst.State = adStateOpen Then rst.Close
Set rst = Nothing
End If
Exit Sub

InitieraParametrar_Err:
MsgBox "Fel!"
Goto InitieraParametrar_End
End Sub
</code>


Svara

Sv:AccessSQL

Postades av 2005-05-01 16:15:58 - Harry Rosendahl

Hej Åsa!
Ditt förslag fungerar perfekt! Tackar!!!
Efter att jag konstaterat att ditt förslag fungerar började jag "laborera" med bokens förslag för att försöka få reda på varför det inte fungerade.
Det visar sig att om jag ändrar de två nedanstående pgm raderna:

Dim ParameterRecord As Recordset
Set ParameterRecord = New Recordset

såhär:
Dim ParameterRecord As ADODB.Recordset
Set ParameterRecord = New ADODB.Recordset

så fungerar även bokens förslag:

ParameterRecord.Open _
"SELECT * FROM Parametrar ", _
CurrentProject.Connection

Alltså deklarationen As Recordset
skall deklareras AS ADODB.Recordset.

Tack igen. Må så gott / Harry


Svara

Nyligen

  • 19:13 Международная перевозка грузов
  • 00:01 DL Van Tuning | Exclusive Body Kit
  • 12:08 Indian casino
  • 04:14 Vad finns det för kratomalternativ
  • 14:16 Indian online casino
  • 14:15 Indian online casino
  • 08:28 Butiksskyltar: Hur upplever utbude
  • 22:31 Slappna av

Sidor

  • Hem
  • Bli bonusmedlem
  • Läs artiklar
  • Chatta med andra
  • Sök och erbjud jobb
  • Kontakta oss
  • Studentlicenser
  • Skriv en artikel

Statistik

Antal besökare:
Antal medlemmar:
Antal inlägg:
Online:
På chatten:
4 570 864
27 962
271 767
550
0

Kontakta oss

Frågor runt konsultation, rådgivning, uppdrag, rekrytering, annonsering och övriga ärenden. Ring: 0730-88 22 24 | pelle@pellesoft.se

© 1986-2013 PelleSoft AB. Last Build 4.1.7169.18070 (2019-08-18 10:02:21) 4.0.30319.42000
  • Om
  • Kontakta
  • Regler
  • Cookies