Kruistabel Query

Status
Niet open voor verdere reacties.
Dat heb je helemaal goed. De TekstInhoud staat in de tabel txt. In de voorbeeld database die ik in 1 van de vorige berichten heb geplaatst staat er een "lorum ipsum" tekst, maar in mijn volledige database bevat deze de teksten die bv de inhoud en ingredieënten van een artikel weergeven. Deze kan in sommige gevallen meer dan 255 tekens bevatten, waardoor het gebruik van een tekstveld niet mogelijk is.
Toen ik zelf aan het testen was met wat query's kwam ik erachter dat je volgens mij geen memoveld in een kruistabel query kan gebruiken? Of lag dit aan een verkeerde opbouw van mijn query?

Hoe ik uiteindelijk te werk wil kunnen gaan:
- op het formulier ArtikelNr_TXT wil ik "TekstId's" selecteren en koppelen aan 1 artikelNr (dit werkt al)
- zodra er op "opslaan" wordt gedrukt wil ik dat deze TekstId's worden opgeslagen in de tabel [export] als "TekstInhoud". (zoals weergegeven op plaatje van mijn vorige bericht.)
- Hierna kan ik in het labelprogramma verbinding maken met de export tabel, waardoor ik na het invoeren van het ArtikelNr, de bijbehorende teksten (inhoud) te zien krijg. Dit verschilt per artikelnummer, sommige ArtikelNr's hebben 5 teksten, andere 15.

Lastig om iets wat voor mij zo duidelijk is, voor anderen zo uit te leggen dat ze het ook begrijpen haha;)
 
Laatst bewerkt:
In een hoop queries kun je wel memo velden gebruiken, maar wordt het memoveld soms afgekapt tot 255 tekens. Dat gebeurt zodra Access een handeling moet uitvoeren op basis van het memoveld. Dat gebeurt bijvoorbeeld als je het veld opmaakt met Format, of samenvoegt met een ander veld. In een Kruistabel wordt meestal de functie Group By gebruikt, en die functie zorgt er ook voor dat het veld wordt ingekort, omdat Access dan een actie moet uitvoeren op het veld. Gebruik je niet Group BY, maar Eerste, dan blijft de inhoud van het memoveld wel volledig beschikbaar. En zo zijn er er wel meer redenen waarom een memoveld soms wordt afgekapt. De overkoepelende reden is dus: zodra Access een bewerking moet uitvoeren op een memoveld, wordt het afgekapt.
 
Ah vandaar, thanx voor de uitleg weer wat geleerd!:)
Kun je door middel van VBA bijvoorbeeld met de code van de export procedure, de "TekstId's" omzetten naar de TekstInhoud in de tabel [Export]?
Ik ben hier namelijk niet zon held in miss dat jij hier even naar wilt kijken? Of wordt het toch een kruistabelquery?

En dan zit ik ook nog met het probleem dat zodra ik een TekstId vergeten ben te koppelen, en deze later wil toevoegen, de export procedure het niet bijvoegt achter hetzelfde ArtikelNr? Zie Post #16
 
Laatst bewerkt:
Michel, is het mogelijk om dmv vba de tekstid's die worden opgeslagen in de tabel export te vervangen door de "Tekstinhoud" (memoveld) uit de tabel txt?
Ik wil op het formulier "Artikelnr_TXT" dus wel gewoon TekstId's kunnen selecteren, maar in de tabel "export" wil ik graag de tekstinhoud zien.
 
Het is wel mogelijk, maar ik heb nog geen tijd gehad om er naar te kijken (deadline en zo).
 
Oke als je zou willen, graag:) Ik heb namelijk de hele week niets kunnen doen aan de database omdat ik hierop vastloop..
 
Hmm, ik kom er net achter dat het software pakket geen kruistabel kan importeren. Deze optie valt dus af. Wel zou ik een .csv bestand kunnen importeren.

De makkelijkste optie (die ik helaas niet zelf kan realiseren, na inmiddels bijna 2 weken lopen te klooien) is naar mijn inzien om de export procedure zo aan te passen dat ipv de TekstId's de TekstInhoud weergeven wordt. Hopelijk kan ik dan verder komen:rolleyes:
 
Hier een stukje code waarmee je een nieuwe query maakt met de tekstinhoud. De code loopt door je Export tabel heen, controleert het aantal velden en maakt een nieuwe query aan waarbij je tekst tabel net zo vaak wordt gekoppeld als er velden zijn. Kijk maar eens of je er wat aan hebt.

Code:
Dim iVelden As Integer, i As Integer
Dim strSQL As String
Dim myArray As Variant
Dim tmp
Dim qdfNew As QueryDef

    With CurrentDb.OpenRecordset("Export")
        .MoveFirst
        iVelden = .Fields.Count - 2
        ReDim myArray(iVelden)
        For i = 0 To UBound(myArray)
            myArray(i) = "TekstID" & i + 1
        Next i
        .Close
    End With
    
    strSQL = "SELECT ArtikelNr"
    For i = LBound(myArray) To UBound(myArray)
        strSQL = strSQL & ", "
        strSQL = strSQL & myArray(i) & ".Tekstinhoud"
    Next i
    
    strSQL = strSQL & " FROM "
    For i = UBound(myArray) To LBound(myArray) Step -1
        strSQL = strSQL & "txt AS " & myArray(i) & " RIGHT JOIN "
        If i > LBound(myArray) Then strSQL = strSQL & "("
    Next i
    
    strSQL = strSQL & " Export "
    
    For i = LBound(myArray) To UBound(myArray)
        strSQL = strSQL & "ON " & myArray(i) & ".TekstId = Export." & myArray(i)
        If i < UBound(myArray) Then strSQL = strSQL & ") "
    Next i
    
    tmp = InputBox("", "", strSQL)
    
    On Error Resume Next
    With CurrentDb()
      Set qdfNew = .CreateQueryDef("Export_Tekst", strSQL)
      .Close
    End With
 

Bijlagen

Laatst bewerkt:
Michel, dit is HE-LE-MAAL geweldig! Zoals ik aan de vba en sql code kan zien, was ik hier op eigen houtje zeker niet uitgekomen. Ik ben blij dat het nu helemaal werkt zoals ik wil, zelfs het Label programma vindt de Import nu fijn! Haha, en ik moest ook wel lachen om de door jou aangevulde TekstInhoud :)

Had nog wel 2 vraagjes voor je:
Ik zag dat je query 1 t/m 3 had aangemaakt, voor zover ik kan zien zijn deze alle 3 nagenoeg hetzelfde, en eigenlijk overbodig? of zie ik dit verkeerd..
En bij het uitvoeren van de export procedure, heb je een inputbox gemaakt waarin ik de uit te voeren sql code te zien krijg. Is dit ter controle of zit hier een andere reden achter?
In ieder geval, HEEL ERG BEDANKT!:)
 
De queries kunnen inderdaad weg, die zijn het gevolg van (kan dus ook weg) de inputbox. Ik gebruik die techniek als ik een sql code via vba genereer; je wilt dan controleren of de gemaakte SQL inderdaad werkt. Ik vang die dan af met die inputbox, maak vervolgens een nieuwe query zonder tabellen en plak in het SQL venster dan de gegenereerde sql code. Soms werkt-ie, soms niet :) De query bewaar ik dan wel om later te controleren waar ik de vba code nog moet aanpassen.
 
Oke dan! Laatste vraagje voor dit onderwerp. Als ik nu een "TekstInhoud" heb die groter is dan 255 tekens heb ik dan een probleem? Want zodra ik de tekstvelden in memovelden verander zegt de query dat ik geen memo velden kan koppelen..
 
Memovelden kun je inderdaad nergens aan koppelen. Waar wil je dat doen?
 
Hmm volgens mij is het toch geen probleem. Ik probeerde de tekstvelden in de tabel export naar memovelden om te zetten zodat ik meer dan 255 tekens kon gebruiken. Maar ik heb net even getest door een hele lap tekst in de TekstInhoud te zetten en dat kan wel? ( 600 tekens). Dus volgens mij is er geen probleem:)
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan