Avatar billede snowball Novice
02. april 2002 - 13:57 Der er 11 kommentarer og
2 løsninger

2 ens querys fejler kun det ene sted

Jeg har en query som skal hente nogle data i en tabel. Hvis jeg opretter query'en under Queries så virker den fint nok, men hvis jeg kører den samme query når jeg trykker på en knap på en form, så fejler den. Fejlen er "Incorrect syntax near '12'" (den første tid i between delen!)

Query'en ser sådan her ud:

SELECT H.CIPStart_DT, H.CIPStop_DT, D.Description, H.AlarmCount
FROM tblCIP_Header AS H INNER JOIN tblCIP_Description AS D ON H.Description_Nr=D.Description_Nr
WHERE H.CIPStart_DT Between (#12/10/2001 12:51:0#) And (#1/14/2002 12:51:0#);

Den virker som sagt fra en Queri i Access, men når jeg bygger den op som vist nedenstående, så får jeg føromtalte fejl:

Dim rsCIP As Recordset
Dim Conn As Connection
Dim Cmd As Command

Set Conn = New ADODB.Connection
Conn.Open "ReportDB", "sa", ""

' Create command object.
Set Cmd = New ADODB.Command
Set Cmd.ActiveConnection = Conn

Cmd.CommandText = "SELECT H.CIPStart_DT, H.CIPStop_DT, D.Description, H.AlarmCount " & _
                    "FROM tblCIP_Header AS H INNER JOIN tblCIP_Description AS D " & _
                    "ON H.Description_Nr=D.Description_Nr " & _
                    "WHERE H.CIPStart_DT Between (#12/13/2001 12:51#) And (#12/14/2001 12:51#)"
 
'Create Recordset
Set rsCIP = New ADODB.Recordset
Set rsCIP = Cmd.Execute
 
While Not rsCIP.EOF
    LInfo.AddItem Item:=rsCIP!CIPStart_DT & ";" & rsCIP!CIPStop_DT & ";" & rsCIP!Description & ";"
  rsCIP.MoveNext
Wend
 
rsCIP.Close
Conn.Close



Nogen forslag !? :)

På forhånd tak.

Snowball
02. april 2002 - 14:02 #1
hmm, det velkendte problem med Access' datoer i VBA!

Så snart du arbejde med VBA, så vil den forsøge at benytte US-dateformat så godt som tallene nu tillader.

Kan du ikke bare sige:
cmd.Commandtext = "Navn på din query"

(jeg bruger ikke selv Commands så meget, så jeg kan ikke huske om man kan eller om den insistere på at få en SQL-streng?)
Avatar billede snowball Novice
02. april 2002 - 14:16 #2
Hvordan vil du angive navnet !? Hvis jeg bare skriver navnet på den så kommer den med en "Variable not defined" og hvis jeg skriver "navn" så tror den det er en Stored Procedure !

Snowball
02. april 2002 - 14:18 #3
Du siger at du har queryen liggende og at den fungere, når du køre den manuelt fra databasevinduet.
Det navn, som queryen har, kan du jo angive i din commandtext!
Avatar billede snowball Novice
02. april 2002 - 14:21 #4
Hvis du lige prøvet at læse min sidste kommentar igen, så vil du se at det netop er det jeg lige har prøvet ! :)

Altså, hvis jeg skriver cmd.Commandtext = "QueryNavn" så tror den det er en Stored Procedure, og hvis jeg skriver cmd.Commandtext = QueryNavn så tror den det er en variabel !

Snowball
02. april 2002 - 14:30 #5
arh, sorry - misforstod dig :o(

Men hvorfor er det, at du bruger commands i stedet for blot at åbne en forespørgel som et recordset?

    Dim rsCIP As New ADODB.Recordset
    rsCIP.Open "[Din query]", CurrentProject.Connection, adOpenStatic, , adCmdTable
02. april 2002 - 14:31 #6
Derved sparer du ca 10 linier kode...
Avatar billede snowball Novice
02. april 2002 - 14:37 #7
Så får jeg en "Object variable or With block variable not set" når jeg vil køre den !?

Snowball
02. april 2002 - 14:38 #8
Det er vel nogle af dine .close i bunden, som også skal væk?

Kan du vise mig hele koden, som den ser ud nu?
Avatar billede snowball Novice
02. april 2002 - 14:39 #9
Forresten, nu er den query jo lavet statisk, men jeg skal egentlig ha' 2 input variabler (de 2 dato/tid variabler) med ind i den ! :)

Snowball
Avatar billede snowball Novice
02. april 2002 - 14:52 #10
Koden som den ser ud nu:

  Dim rsCIP As ADODB.Recordset
  Dim Conn As Connection
  Dim Cmd As Command
  Dim StartDT As String
  Dim StopDT As String
 
  LInfo.RowSource = "Start Date;Stop Date;Description"
 
  'Create Connection
  Set Conn = New ADODB.Connection
  Conn.Open "ReportDB", "sa", ""

  ' Create command object.
  StartDT = Format(Forms!Main!SDate + Forms!Main!STime, "DD-MM-YYYY HH:MM") 'De 2 dato/tid input variabler (2 tekst felter)
  StopDT = Format(Forms!Main!EDate + Forms!Main!ETime, "DD-MM-YYYY HH:MM")
 
  Set Cmd = New ADODB.Command
  Set Cmd.ActiveConnection = Conn
 
  rsCIP.Open "[test]", CurrentProject.Connection, adOpenStatic, , adCmdTable
 
  While Not rsCIP.EOF
    LInfo.AddItem Item:=rsCIP!CIPStart_DT & ";" & rsCIP!CIPStop_DT & ";" '& rsCIP!Description & ";"
    rsCIP.MoveNext
  Wend
 
  rsCIP.Close
  Conn.Close

Snowball
02. april 2002 - 14:57 #11
Okay, du kan i hvert fald smide en masse linier kode væk, så det er lettere at overskue:

  Dim rsCIP As ADODB.Recordset
  Dim StartDT As String
  Dim StopDT As String
 
  LInfo.RowSource = "Start Date;Stop Date;Description"
 
  StartDT = Format(Forms!Main!SDate + Forms!Main!STime, "DD-MM-YYYY HH:MM") 'De 2 dato/tid input variabler (2 tekst felter)
  StopDT = Format(Forms!Main!EDate + Forms!Main!ETime, "DD-MM-YYYY HH:MM")
 
  rsCIP.Open "[test]", CurrentProject.Connection, adOpenStatic, , adCmdTable
 
  While Not rsCIP.EOF
    LInfo.AddItem Item:=rsCIP!CIPStart_DT & ";" & rsCIP!CIPStop_DT & ";" '& rsCIP!Description & ";"
    rsCIP.MoveNext
  Wend
 
  rsCIP.Close
02. april 2002 - 14:59 #12
Hvad er problemet herfra? At koden ikke er dynamisk?
Hvorfra skal datoerne hentes? Skal brugeren taste dem ind eller skal de hentes fra en formular?
Avatar billede snowball Novice
02. april 2002 - 15:29 #13
Har fået løst problemet nu. Det største problem var sådan set at Access åbenbart vil ha' dato/tid som en streng når det bli'r kørt fra VBA så derfor blev # erstattet med ' de steder den var brugt ! Og så byttede jeg også lige rundt på dag og måned.

Således kom det hele til at se sådan her ud:

  Dim rsCIP As Recordset
  Dim Conn As Connection
  Dim Cmd As Command
  Dim StartDT As String
  Dim StopDT As String
 
  LInfo.RowSource = "Start Date;Stop Date;Description"
 
  'Create Connection
  Set Conn = New ADODB.Connection
  Conn.Open "ReportDB", "sa", ""
 
  ' Create command object.
  StartDT = Format(Forms!Main!SDate + Forms!Main!STime, "MM-DD-YYYY HH:MM")
  StopDT = Format(Forms!Main!EDate + Forms!Main!ETime, "MM-DD-YYYY HH:MM")
 
  Set Cmd = New ADODB.Command
  Set Cmd.ActiveConnection = Conn
 
  Cmd.CommandText = "Select H.CIPStart_DT, H.CIPStop_DT, D.Description, H.AlarmCount from tblCIP_Header as H " & _
  "inner join tblCIP_Description as D on (H.Description_Nr = D.Description_Nr) Where H.CIPStart_DT Between ('" & _
  StartDT & "') And ('" & StopDT & "')"
 
  'Create Recordset
  Set rsCIP = New ADODB.Recordset
  Set rsCIP = Cmd.Execute
 
  While Not rsCIP.EOF
    LInfo.AddItem Item:=rsCIP!CIPStart_DT & ";" & rsCIP!CIPStop_DT & ";" & rsCIP!Description & ";"
    rsCIP.MoveNext
  Wend
 
  rsCIP.Close
  Conn.Close


Du får dog alligevel lidt som tak for hjælpen :)

Snowball
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