Toon posts:

[delphi] kolom niet zichtbaar in grid

Pagina: 1
Acties:

Verwijderd

Topicstarter
Ik heb een vreemd probleempje:


ik heb in delphi 7 een datamodule met daarop een database die gekoppeld is aan een ODBC-datasource. Er staat ook een query met een datasource.

Ik heb op een form een grid staan dat gekoppeld is aan het datasource.

De query ziet er als volgt uit:
SELECT
kolom1,
kolom2,
sum(kolom3) as som,
kolom4,
kolom5
FROM
tabel1
GROUP BY kolom5

Nou krijg ik het niet voor elkaar om die sum(kolom3) zichtbaar te krijgen. Niet in het grid, maar ook niet als ik dubbelklik op de query in de datamodule, daar rechtsklik en dan kies voor "Add all fields". Die kolom is om een of andere vage rede gewoon niet zichtbaar.

De Query werkt wel perfect in mysql zelf uiteraard, dus een probleem met de query is het blijkbaar niet.

heeft iemand enig idee hoe dit kan?

[ Voor 4% gewijzigd door Verwijderd op 02-12-2005 10:35 ]


  • LordLarry
  • Registratie: Juli 2001
  • Niet online

LordLarry

Aut disce aut discede

Werkt het wel als je het met een ander pakket via ODBC probeerd? Bijvoorbeeld met Access ofzo?

We adore chaos because we like to restore order - M.C. Escher


  • Robbemans
  • Registratie: November 2003
  • Laatst online: 17-07-2025
is dit de LETTERLIJKE tekst van de query? Als je namelijk een komma vergeet na een kolomdefinitie gaat het parsen van de query wel goed, maar zie je de kolommen niet (altijd) terug in een grid.

Verwijderd

Topicstarter
Robbemans schreef op vrijdag 02 december 2005 @ 11:34:
is dit de LETTERLIJKE tekst van de query? Als je namelijk een komma vergeet na een kolomdefinitie gaat het parsen van de query wel goed, maar zie je de kolommen niet (altijd) terug in een grid.
nee, dit is niet de letterlijke tekst, maar waar was ik dan een komma vergeten?

  • Tomatoman
  • Registratie: November 2000
  • Laatst online: 21-04 20:42

Tomatoman

Fulltime prutser

Laat as weg, dan werkt het.

Pas op met namen zoals Som, de verleiding is groot om als je in het Engels werkt een recordveld de naam Sum te geven. Dat zal tot fouten leiden, omdat Sum een gereserveerd woord is.

Een goede grap mag vrienden kosten.


Verwijderd

Topicstarter
LordLarry schreef op vrijdag 02 december 2005 @ 11:12:
Werkt het wel als je het met een ander pakket via ODBC probeerd? Bijvoorbeeld met Access ofzo?
Net even getest, ja... via een andere pakket werkt het wel. Ik heb het geprobeerd met WinSQL via de Datasource en dat gaat gewoon goed.

Verwijderd

Topicstarter
tomatoman schreef op vrijdag 02 december 2005 @ 12:41:
Laat as weg, dan werkt het.

Pas op met namen zoals Som, de verleiding is groot om als je in het Engels werkt een recordveld de naam Sum te geven. Dat zal tot fouten leiden, omdat Sum een gereserveerd woord is.
Nee sorry, dat "AS som" maakt niks uit. Of het er wel bij staat of niet, maakt niks uit. In beide gevallen is de kolom niet zichtbaar. (dit was gewoon even een voorbeeldje)

Dit is trouwens de echte query:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
SELECT
  l.omschrijving,
  sum(aantal),
  l.autorisatienummer,
  l.licentienummer,
  l.ingangsdatum,
  l.einddatum,
  ls.licentiesoort,
  lc.code
FROM 
  licenties l,
  licentiesoorten ls,
  licentiecodes lc
WHERE l.licentiesoort_ID = ls.licentiesoort_ID
AND l.licentiecode_ID = lc.licentiecode_ID
group by   lc.code

Verwijderd

Topicstarter
Iemand nog een suggestie? ;(

  • LordLarry
  • Registratie: Juli 2001
  • Niet online

LordLarry

Aut disce aut discede

Misschien niet ODBC gebruiken, maar ADO/OLE DB Providers, dbExpress of ZeOS gebruiken om MySQL tabellen te benaderen vanuit Delphi. ZeOS heeft mijn persoonlijke voorkeur.

We adore chaos because we like to restore order - M.C. Escher


Verwijderd

Topicstarter
LordLarry schreef op maandag 05 december 2005 @ 12:58:
Misschien niet ODBC gebruiken, maar ADO/OLE DB Providers, dbExpress of ZeOS gebruiken om MySQL tabellen te benaderen vanuit Delphi. ZeOS heeft mijn persoonlijke voorkeur.
hahaha... dat is natuurlijk geen oplossing he? :) zit er even iets tegen wat normaal gesproken altijd perfect werkt dan maar gelijk overstappen op iets anders?

Ik heb meer queries met een sum() kolom in de zelfde applicatie en daar werkt het ook gewoon zoals het hoort. Dit is gewoon een raar probleempie maar wat vast wel te verhelpen is.

  • LordLarry
  • Registratie: Juli 2001
  • Niet online

LordLarry

Aut disce aut discede

Misschien omdat de keuze in het begin al niet ok is? Persoonlijk zou ik nooit voor de zeer verouderde en beperkte techniek ODBC kiezen. Bovendien is dit welzeker een oplossing die direct werkt.

We adore chaos because we like to restore order - M.C. Escher


  • Robbemans
  • Registratie: November 2003
  • Laatst online: 17-07-2025
Nog ff een vraag: Welk grid gebruik je? Standaard TDBgrid?

  • LangTall
  • Registratie: September 2001
  • Laatst online: 08-10-2025

LangTall

Drinking for Holland @ Le Mans

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
SELECT
  l.omschrijving,
  sum(aantal),
  l.autorisatienummer,
  l.licentienummer,
  l.ingangsdatum,
  l.einddatum,
  ls.licentiesoort,
  lc.code
FROM 
  licenties l
  left join licentiesoorten ls on l.licentiesoort_ID = ls.licentiesoort_ID
  left join licentiecodes lc on l.licentiecode_ID = lc.licentiecode_ID

group by   lc.code

Ik zou eerst eens joinen ipv met een where clausule tabellen aan elkaar te koppelen, dit werkt wat vlotter. Waar komt het veld aantal vandaan? als je zoals bovenstaand overal aangeeft uit welke tabel welk veld komt moet je dat natuurlijk wel bij elk veld doen. ;)

Ook lijkt het me stug dat bovenstaande werkt, aangezien je bij een sum op alle overige velden zult moeten groupen.

My wife has passed away: http://leuk-is-anders.blogspot.com I don't have a drinking problem. I drink, get drunk, fall down, no problem!


Verwijderd

Topicstarter
Robbemans schreef op maandag 05 december 2005 @ 14:48:
Nog ff een vraag: Welk grid gebruik je? Standaard TDBgrid?
gewoon een standaard Grid inderdaad, of een grid van rx library, maakt niet uit wat voor een Grid.
Maar zoals je ziet treedt het probleem al op bij het toevoegen van de kolommen aan het query-object. Dus welk control je ook aan dat query-object koppelt nooit zal die kolom aantal zichtbaar zijn.

Verwijderd

Topicstarter
LangTall schreef op maandag 05 december 2005 @ 14:49:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
SELECT
  l.omschrijving,
  sum(aantal),
  l.autorisatienummer,
  l.licentienummer,
  l.ingangsdatum,
  l.einddatum,
  ls.licentiesoort,
  lc.code
FROM 
  licenties l
  left join licentiesoorten ls on l.licentiesoort_ID = ls.licentiesoort_ID
  left join licentiecodes lc on l.licentiecode_ID = lc.licentiecode_ID

group by   lc.code

Ik zou eerst eens joinen ipv met een where clausule tabellen aan elkaar te koppelen, dit werkt wat vlotter. Waar komt het veld aantal vandaan? als je zoals bovenstaand overal aangeeft uit welke tabel welk veld komt moet je dat natuurlijk wel bij elk veld doen. ;)

Ook lijkt het me stug dat bovenstaande werkt, aangezien je bij een sum op alle overige velden zult moeten groupen.
shit, stom... die "l." had ik een keer weggehaald om te testen. Eerst stond er uiteraard wel sum(l.aantal)! :) maar dat lost nog steeds het probleem niet op.
Ook lijkt het me stug dat bovenstaande werkt, aangezien je bij een sum op alle overige velden zult moeten groupen.
heb je op zich gelijk in, maar in dit geval gaat het gewoon prima, omdat als ik groepeer op lc.code ik zeker weet dat alle ander velden van die records die gegroepeerd gelijk zijn, behalve aantal, maar die wordt bij elkaar opgeteld.

[ Voor 20% gewijzigd door Verwijderd op 05-12-2005 16:31 ]


  • jvdmeer
  • Registratie: April 2000
  • Nu online
Hetr is al een paar keer genoemd, maar maak eerst je query kloppen. Werken doet íe waarschijnlijk al omdat je Mysql gebruikt. Elk ander DBMS zou je query weigeren. Zie voor meer info:
FAQ

Verwijderd

Topicstarter
jvdmeer schreef op maandag 05 december 2005 @ 16:19:
Hetr is al een paar keer genoemd, maar maak eerst je query kloppen. Werken doet íe waarschijnlijk al omdat je Mysql gebruikt. Elk ander DBMS zou je query weigeren. Zie voor meer info:
FAQ
loop nou toch eens niet te zeiken man, jeetje...
Die query is prima! loopt in alle tools die ik gebruik! misschien is die niet volledig compatible met ANSI,en dat hij bijvoorbeeld op een Microsoft SQL 2000 server niet zou lopen, maar die query is wat MySQL betreft prima!

De query loopt prima in WinSQL, MySQL QueryBrowser, MySQL-front etc. etc.

[foutje]
dat slaat natuurlijk nergens op dat hij prima loopt in meerder front-ends... :) hij draait natuurlijk op MySQL. maar wat ik bedoelde te zeggen: tis gewoon een prima query die precies doet wat ik wil. niks meer en niks minder!
[/foutje]

[ Voor 16% gewijzigd door Verwijderd op 05-12-2005 16:37 ]


  • jvdmeer
  • Registratie: April 2000
  • Nu online
Verwijderd schreef op maandag 05 december 2005 @ 16:34:
[...]
loop nou toch eens niet te zeiken man, jeetje...
Nou zeg, wat een toon. En dat op 5 december, ik hoop dat je met Kerstmis wat vriendelijker bent. ;)
Verwijderd schreef op maandag 05 december 2005 @ 16:34:
[foutje]
dat slaat natuurlijk nergens op dat hij prima loopt in meerder front-ends... :) hij draait natuurlijk op MySQL. maar wat ik bedoelde te zeggen: tis gewoon een prima query die precies doet wat ik wil. niks meer en niks minder!
[/foutje]
De query doet vast wat jij wilt, maar hoe lang nog?

Voorbeeldje:
Veld1 Veld2 Veld3
A 3 7
A 2 5
B 5 8
B 4 9


SQL:
1
select veld1, veld2, sum(veld3) from tabel group by veld 1


Geeft als resultaat (denk ik), 't blijft tenslotte gokken...
Veld1 Veld2 Veld3
A 3 of 2 (dat weet ik niet) 12 (=som veld3 voor waarde A)
B 5 of 4 (ook deze is gokken) 17 (=som veld3 voor waarde B)


De getallen in kolom 2 zijn en blijven onzeker. Nu doet je query het misschien goed, maar morgen of volgende week? Misschien toch iets om even bij stil te staan...

Alvast prettige kerstdagen ;)

  • Robbemans
  • Registratie: November 2003
  • Laatst online: 17-07-2025
wat jvdmeer bedoel is dat je group by eigenlijk niet ANSI compliant is (als ik hem goed begrijp). Dit die nmi niet af aan het feit dat de kolom niet verschijnt. Erg raar probleem...

Maar goed, omdat het zo'n raar probleem is, kun je natuurlijk proberen je query eerst 100% kloppend te maken.

  • LangTall
  • Registratie: September 2001
  • Laatst online: 08-10-2025

LangTall

Drinking for Holland @ Le Mans

Heb je in delphi het SQL-component al een keer op active gezet om te kijken wat er dan gebeurd? Het is bij mij nog wel eens voorgekomen dat dergelijke berekende velden pas opduiken als de Query actief staat.

My wife has passed away: http://leuk-is-anders.blogspot.com I don't have a drinking problem. I drink, get drunk, fall down, no problem!


Verwijderd

Topicstarter
Om het nog een keer wat duidelijker te maken:

Als ik in het query-object de meest simpele query hang (dus onder de property "SQL" (TStrings):
code:
1
select sum(aantal) from licenties group by licentiecode_ID


dan werkt het nog steeds niet! Het Query-component kan ik wel op Active zetten, dat gaat prima! Maar als ik dan dubbelklik op het Query-object om de kollomen toe te voegen ("Add all fields" of "Add fields...") dan is dus de enige kolom uit de hele bovenstaande query gewoon NIET zichtbaar. Ik snap er echt geen snars van! Dit is zo basic Delphi, daar kan gewoon zowat niks mis mee gaan.

ik ga een nieuwe mysql Database aanmaken, daar een vergelijkbaar test tabelletje in planten en kijken wat er dan gebeurt!

[toevoeging1]
ok, net dus getest:
Een nieuwe database aangemaakt in mysql (5.0.16-nt)
databasename: test
tabel: testtabel
kolommen: ID (autoincrement), aantal (int 11), code (char 10)

testdata:
code:
1
2
3
4
5
ID    aantal      code
1     100          aaa
2     200          aaa
3     400          bbb
4     500          bbb


testquery:
code:
1
select sum(aantal) from testtabel group by code


nieuw Delphi project aangemaakt:
1 database-object die linkt naar een odbc, een nieuw query-object gelinkt aan de nieuwe db. bovenstaande query ingevoerd in het object. Database op Active gezet, gaat goed, Query op Active gezet, gaat goed! Maar de kolom ("sum(aantal)") is gewoon weer niet zichtbaar!

;(
[/toevoeging1]

[toevoeging2]
Net nog even EXACT hetzelfde getest als hierboven, maar dan op MySQL versie 4.1 en dan werkt het gelijk perfect! Het is dus blijkbaar een MySQL probleem, maar daar moeten toch veel meer mensen last van hebben dan? Waarom is dit niet gewoon een bekend probleem? (Delphi 7 is nog niet te oud voor MySQL 5 applicaties neem ik aan...)
[/toevoeging2]

[ Voor 72% gewijzigd door Verwijderd op 06-12-2005 12:07 ]


  • LordLarry
  • Registratie: Juli 2001
  • Niet online

LordLarry

Aut disce aut discede

Dan zou het eerder aan de MySQL ODBC driver liggen dan aan Delphi. Zoals jij het nu gebruikt boeit het niet welke Delphi versie het is, want voor Delphi is het allemaal ODBC. Ik heb je al eerder een aantal alternatieven voorgesteld die niet afhankelijk zijn van ODBC.

We adore chaos because we like to restore order - M.C. Escher


  • jelmervos
  • Registratie: Oktober 2000
  • Niet online

jelmervos

Simple user

We hebben hier hetzelfde probleem gehad. Gelijk gekozen voor een niet-ODBC oplossing (Zeos), hierna werkte alles perfect! Doe er dus je voordeel mee.

"The shell stopped unexpectedly and Explorer.exe was restarted."


Verwijderd

Topicstarter
hahaha.... eindelijk de oplossing gevonden!

er was een update beschibaar voor MyODBC, ik ging van versie 3.51.11 naar versie 3.51.12 en het was opgelost. Blijkbaar een heel klein miniscuul bugje!

ODBC Rulez :o
Pagina: 1