[Access] Toevoegen query via QueryDefs collectie gaat fout

Pagina: 1
Acties:

  • abeker
  • Registratie: Mei 2002
  • Laatst online: 12-05 15:06
Ik heb op een server een webapplicatie draaien die gebruik maakt van een Access-database (access 2000). Deze applicatie+database zijn in de afgelopen tijd verder ontwikkeld. Nu wil ik de nieuwe tabellen en queries van de 'nieuwe' database exporteren naar de online database. De tabellen lukt wel, maar het exporteren van de queries gaat maar gedeeltelijk goed.

Omdat Access geen queries kent om queries mee aan te maken, maak ik gebruik van een stukje code om queries toe te voegen:
Visual Basic .NET:
1
2
3
4
Set database = CreateObject("DAO.DBEngine.36").Workspaces(0).OpenDatabase( _
"database.mdb" ,, False)
database.CreateQueryDef querynaam, querytitel
database.Close


Zolang de queries geen JOIN-expressies gebruiken, werkt deze code perfect. Echter, zodra er gebruik wordt gemaakt van JOINS, worden deze JOINS uit de query verwijderd! Ik heb op google gezocht naar vergelijkbare problemen, maar ik ben helaas niets tegengekomen. Weet iemand hoe ik ervoor kan zorgen dat deze methode queries niet aanpast (of een andere methode om queries toe te voegen)??

the less one forgets, the less one remembers


  • P_de_B
  • Registratie: Juli 2003
  • Niet online
[Google=ADOX]

ik denk dat je hiermee wel verder komt, de enigine die je gebruikt is aardig antiek, ik vermoed dat het probleem daar in zit.,

Oops! Google Chrome could not find www.rijks%20museum.nl


  • abeker
  • Registratie: Mei 2002
  • Laatst online: 12-05 15:06
hmmja die had ik ook al gevonden maar dat leverde hetzelfde resultaat op. Maar... ik ben erachter gekomen dat het probleem ergens anders ligt, namelijk in de manier waarop ik de queries specificeer. Blijkbaar zette ik de JOIN-velden in de verkeerde volgorde.

Dit gaat niet goed:
code:
1
2
3
4
PARAMETERS p_reseller_id Long;
SELECT * FROM tbl_sessions
LEFT JOIN tbl_clients ON tbl_clients.id=tbl_sessions.client_id
WHERE tbl_client.reseller_id=p_reseller_id;


Dit gaat wel goed:
code:
1
2
3
4
PARAMETERS p_reseller_id Long;
SELECT * FROM tbl_sessions
LEFT JOIN tbl_clients ON tbl_sessions.client_id=tbl_client.id
WHERE tbl_clients.reseller_id=p_reseller_id;


Voor de liefhebbers nog de code voor het toevoegen via ADOX.
Visual Basic .NET:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
    Dim cnn, cmd, cat

    Set cnn = Server.CreateObject("ADODB.Connection")
    Set cmd = Server.CreateObject("ADODB.Command")
    Set cat = Server.CreateObject("ADOX.Catalog")

    ' Open the Connection
    cnn.Open Application("database")

    ' Create the parameterized command (Microsoft Jet specific)
    Set cmd.ActiveConnection = cnn
    cmd.CommandText = strQueryText

     ' Open the Catalog
     Set cat.ActiveConnection = cnn

    ' Create the new Procedure
    cat.Procedures.Append strQueryName, cmd

    'Clean
    cnn.Close
    Set cat = Nothing
    Set cmd = Nothing
    Set cnn = Nothing

the less one forgets, the less one remembers