Helpmij.nl
Helpmij.nl
Helpmij.nl

Quote

Weergeven resultaten 1 tot 14 van 14

Onderwerp: SQL opdracht voor intelligente tabellen

  1. #1
    Giga Honourable Senior Member
    Verenigingslid
    snb's avatar
    Geregistreerd
    12 juni 2008
    Vraag is opgelost

    SQL opdracht voor intelligente tabellen

    Dag allen, niet corona-gevelden,

    Als ik in een ADODB-recordset een SQK filteropdracht formuleer om twee gebieden met gegevens in respektievelijk sheet1 en sheet2 samen te voegen, gebruik ik in de SQL-opdracht [Sheet1$] en [Sheet2$] om de afzonderlijke Excel-werkbladen aan te duiden.
    Als ik gebruik maak van intelligente tabellen, krijgen die automatisch een gebiedsnaam: Tabel1 en Tabel2 (zie de 'names' manager bij formules).
    Hoe kan ik in de SQL-opdracht aangeven dat de samen te voegen gegevens zich bevinden in Tabel1 en Tabel2 ?

    De formulering [Tabel1$] of [Tabel2$] werkt hier in ieder geval niet.

    Mijn dank bij voorbaat.
    VBA voor smarties
    VBA is een taal die je moet leren met een grammatica- en een woordenboek.

    http://www.helpmij.nl/forum/announcement.php?f=5
    Plaats svp geen bestanden op andere sites; nadat het bestand daar verwijderd is wordt een forumdraad onbegrijpelijk voor anderen.

  2. #2
    Mega Senior JVeer's avatar
    Geregistreerd
    27 februari 2019
    Ik kom deze tegen. Misschien is dat wat je zoekt.

    Querying the ListObject's range using a table alias

    https://stackoverflow.com/questions/...y-in-vba-excel
    Gr,
    JV

  3. #3
    Mega Senior E v R's avatar
    Geregistreerd
    22 oktober 2008
    Ben benieuwd of bovenstaande suggestie van JVeer werkt, liep zelf in het verleden (met dynamische bereiken ipv intelligente tabellen) tegen het 65K rijen probleem aan, dit in tegenstelling tot het benoemen van een heel werkblad.
    Gr. Eric

  4. #4
    Tera Honourable Senior Member
    Verenigingslid
    OctaFish's avatar
    Geregistreerd
    6 februari 2009
    Locatie
    Rotterdam
    Zullen we eens, net als bij een gewone gebruiker, om een bestandje vragen? Lijkt me wel zo netjes .
    Gebruik de QUOTE knop alleen als je iets wit citeren.
    Op deze pagina kun je zien hoe je met TAGS werkt.

  5. #5
    Giga Honourable Senior Member
    Verenigingslid
    snb's avatar
    Geregistreerd
    12 juni 2008
    Ik mag natuurlijk helemaal geen bestand plaatsen, omdat daarin allerlei zeer vertrouwelijke gegevens zitten.
    En dan nog is het te groot om te plaatsen.
    Dus heb ik er maar zoveel uitgesloopt dat er een nauwelijks representatief bestand overbleef.
    Dat tref je aan als bijlage.
    In de makro is de wél werkende code 'uitgecommentarieerd'.
    2 code-vormen met verwijzingen naar beide tabellen staan eronder.
    Geen van beide biedt een succesvol resultaat.

    Ik ben benieuwd naar jullie suggesties !
    Bijgevoegde bestanden Bijgevoegde bestanden
    VBA voor smarties
    VBA is een taal die je moet leren met een grammatica- en een woordenboek.

    http://www.helpmij.nl/forum/announcement.php?f=5
    Plaats svp geen bestanden op andere sites; nadat het bestand daar verwijderd is wordt een forumdraad onbegrijpelijk voor anderen.

  6. #6
    Mega Senior E v R's avatar
    Geregistreerd
    22 oktober 2008
    Zorg er voor dat de string er zo uit komt zien:

    Code:
     .Open "select * from [Sheet1$A1:D14] left join [Sheet2$A1:D14] on ([Sheet1$A1:D14].aa1 =  [Sheet2$A1:D14].zz1)", c00
    Gr. Eric

  7. #7
    Giga Honourable Senior Member
    Verenigingslid
    snb's avatar
    Geregistreerd
    12 juni 2008
    @ E v R

    Bedankt !

    Blijkbaar evalueert de SQL-string geen benoemde gebieden en beperkt zich tot de evaluatie van werkbladen en A1-gebieden.

    Ik heb het zo vormgegeven:

    Code:
    Sub M_snb_leftjoin()
      Sheet3.UsedRange.ClearContents
      c00 = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & ThisWorkbook.FullName & ";Extended Properties=""Excel 12.0;;HDR=Yes;IMEX=1"""
        
      st = Array("[" & Replace(Split([Table1[#All]].Address(0, 0, , 1), "]")(1), "!", "$") & "]", "[" & Replace(Split([Table2[#All]].Address(0, 0, , 1), "]")(1), "!", "$") & "]")
        
      With CreateObject("ADODB.recordset")
    '   .Open "select * from `sheet1$` left join `sheet2$` on `sheet1$`.aa1 = `sheet2$`.zz1 ", c00
    
        .Open "select * from " & st(0) & " left join " & st(1) & " on " & st(0) & ".aa1 = " & st(1) & ".zz1", c00
        Sheet3.Cells(1).CopyFromRecordset .DataSource
      End With
    End Sub
    VBA voor smarties
    VBA is een taal die je moet leren met een grammatica- en een woordenboek.

    http://www.helpmij.nl/forum/announcement.php?f=5
    Plaats svp geen bestanden op andere sites; nadat het bestand daar verwijderd is wordt een forumdraad onbegrijpelijk voor anderen.

  8. #8
    Mega Senior E v R's avatar
    Geregistreerd
    22 oktober 2008
    ipv "!" zou ik "'!" gebruiken, die ' moet er ook nog uit


    ++

    Zoals reeds gemeld in een voorgaande post; bereiken met meer dan de 65K regels lukt (mij) niet (itt een hele sheet)

    ++

    Een bereiknaam niet zijnde een Tabel werkt ook (waarschijnlijk lukken die tabellen niet omdat deze (ook) blokhaken hebben
    Laatst aangepast door E v R : 25 februari 2021 om 13:10
    Gr. Eric

  9. #9
    Giga Honourable Senior Member
    Geregistreerd
    2 maart 2013
    Geen oplossing voor de vraag maar een aantal wedervragen:
    Waarom wil je dit soort constructies via VBA oplossen en niet via de ingebakken mogelijkheden zoals PQ?
    Het hele Officepakket is opgebouwd uit een aantal logische onderdelen Word voor tekstverwerken, Excel voor rekenen en presenteren, Access voor databases, en nog wel wat meer. Waarom dan gaan 'rommelen' in Excel?
    1. Snelheid?
    2. Licentiekosten?
    3. Backward compatibility?
    Je kan een paard naar het water leiden, maar je kan het niet dwingen te drinken.

  10. #10
    Giga Honourable Senior Member
    Verenigingslid
    snb's avatar
    Geregistreerd
    12 juni 2008
    @ VenA

    - SQL-opdrachten zitten al decennia ingebakken in Excel: Querytables.
    - PQ heeft beperkingen die Querytables en SQL-opdrachten niet hebben
    - PQ maakt gebruik van dezelfde SQL-opdrachten; ze worden alleen aan de gebruiker anders gepresenteerd
    - als je onbekend bent met alle SQL-mogelijkheden van Excel ben je niet de enige
    - ik ben het met je eens dat MS de documentatie van de SQL-mogelijkheden van Excel heeft verwaarloosd
    VBA voor smarties
    VBA is een taal die je moet leren met een grammatica- en een woordenboek.

    http://www.helpmij.nl/forum/announcement.php?f=5
    Plaats svp geen bestanden op andere sites; nadat het bestand daar verwijderd is wordt een forumdraad onbegrijpelijk voor anderen.

  11. #11
    Senior Member
    Geregistreerd
    22 september 2012
    Excel-SQL heeft nooit een update gehad om listobjects te herkennen. Het advies is: zet op een werkblad één gegevenstabel (al dan niet listobject) en hou het gebied er omheen leeg. In de query gebruik je gewoon Sheet1$. (Als je meerdere tabellen op een sheet hebt kan het trouwens wel, dan wordt het iets als Sheet1$Data voor de eerste en Sheet1$Data_1 voor de tweede. Je kunt MS-Query gebruiken om dit te achterhalen.)
    Enige informatie over Excel-Sql vind je in de help van MS-Query. Gebruik de tool MS-Query als inspiratiebron, als een macrorecorder/IDE/Studio voor Excel-SQL. Bijvoorbeeld om te achterhalen of je expressies met Iif() kunt toepassen (en of je dan een , of een ; moet gebruiken). En of je Like kunt gebruiken in criteria.

    PQ heeft beperkingen die Querytables en SQL-opdrachten niet hebben
    Ik zie uit naar De Snb PQ Challenge nummer 1
    Groet,
    Frans
    pixcels.nl

  12. #12
    Giga Honourable Senior Member
    Verenigingslid
    snb's avatar
    Geregistreerd
    12 juni 2008
    Uitzicht is van korte duur: hij stond al hier:

    http://www.eileenslounge.com/viewtop...268690#p268690
    VBA voor smarties
    VBA is een taal die je moet leren met een grammatica- en een woordenboek.

    http://www.helpmij.nl/forum/announcement.php?f=5
    Plaats svp geen bestanden op andere sites; nadat het bestand daar verwijderd is wordt een forumdraad onbegrijpelijk voor anderen.

  13. #13
    Senior Member
    Geregistreerd
    22 september 2012
    Oei, mooi voorbeeld.
    Volgens de verkoopcijfers zijn er 144 producten verkocht. De pivots komen niet verder dan 139. Waar zijn de overige 5 gebleven?

    Andere insteek:
    Feit: Product 1 is 12 keer verkocht;
    Feit: Klant 1 en Klant 2 hebben beide alléén product 1 gekocht, en alleen zij hebben product 1 gekocht;
    Hieruit volgt: Klant 1 en Klant 2 hebben SAMEN 12 producten 1 gekocht.
    Dit is in tegenspraak met de pivots, waar staat dat Klant 1 en 2 samen 24 producten gekocht hebben.
    Oeps.

    Gegeven de dataset is alleen van klanten 8 en 9 te zeggen welke (8 en 9) en hoeveel (19 en 20) producten ze gekocht hebben.
    De producten 2, 4, 5 en 7 zijn wel verkocht maar niet aan klanten

    Op naar challenge 2.
    Groet,
    Frans
    pixcels.nl

  14. #14
    Giga Honourable Senior Member
    Verenigingslid
    snb's avatar
    Geregistreerd
    12 juni 2008
    Bij de 'ouderwetse' methoden wordt nog gewoon 'onder de toonbank' verkocht.
    VBA voor smarties
    VBA is een taal die je moet leren met een grammatica- en een woordenboek.

    http://www.helpmij.nl/forum/announcement.php?f=5
    Plaats svp geen bestanden op andere sites; nadat het bestand daar verwijderd is wordt een forumdraad onbegrijpelijk voor anderen.

Berichtenregels

  • U mag geen nieuwe vragen starten.
  • U mag niet reageren op berichten.
  • U mag geen bijlagen versturen.
  • U mag uw berichten niet bewerken.
  •  
Helpmij.nl
Helpmij.nl

Helpmij.nl

Regels
Help

Helpmij.nl en business

Partners
Sponsoren