Toon posts:

[VB6] SQL probleem

Pagina: 1
Acties:

Verwijderd

Topicstarter
:'( Ik heb het volgende probleem:

Ik heb meerdere tabellen. Een met gebruikers en een met absenties en dan nog een paar maar dat doet er nu effe niet toe. In de tabel gebruikers staan leerlingen met een icarusnummer en een status. In absenties staat ook weer leerlingen met een icarusnummer.
Nou wil ik in absenties de leerlingen weergeven waarvan hun status ( dus in de tabel gebruikers ) actief is.
Ik heb al aantal boeken afgezocht en het staat er wel in maar het werkt nog steeds niet. ik heb het eerst in access geprobeerd en daar werkt het wel, maar dat is anders dan SQL en VB.
Deze SQL Query heb ik geprobeerd:

Adodc1.RecordSource = "select * from beta_absenties inner join beta_leerlingen where status
like 'actief'"

Ik heb ook deze geprobeerd dan geeft ie geen fout maar toch werkt ie niet.

Adodc1.RecordSource = "select * from beta_absenties GO select icarusnr from beta_leerlingen where status like 'actief'"

Van die 2e tabel gebruikers wil ik in principe niks SELECTEN. daar heb ik alleen een WHERE query nodig, maar in het form absenties is het zo geprogrammeerd dat ie toch alleen maar de gegevens uit de tabel absenties weergeeft dus dat is niet zo heel erg.

Weet iemand hoe het wel moet ? _/-\o_

  • P_de_B
  • Registratie: Juli 2003
  • Niet online
SELECT beta_leerlingen.*
FROM beta_leerlingen l
INNER JOIN beta_absenties a on l.icarusnummer = a.icarusnummer

Kijk ook eens hier: P&W FAQ - SQL

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


  • MPEG
  • Registratie: Oktober 2000
  • Laatst online: 21-10-2020
Ik heb twee tips voor je:
  • zoek even naar een definitie van de taal SQL.
  • probeer eens "SELECT x FROM Tabel1 LEFT JOIN Tabel2 ON Tabel1.x = Tabel2.x WHERE ...

AMD 64 X2 4800+ @2,41Ghz,
2048MB DDRRAM,
ATI X800GTO,
2x Samsung 930BF 19" TFT


  • OZ-Gump
  • Registratie: November 2002
  • Laatst online: 14-05-2024

OZ-Gump

terug van weggeweest

Zou je iets meer gestructureerd info kunnen geven over je probleem? Makkelijk zou het bijvoorbeeld zijn als je de structuur van je tabllen even weergeeft, zodat we weten waarop gejoined of gewhered kan worden.
Van die 2e tabel gebruikers wil ik in principe niks SELECTEN. daar heb ik alleen een WHERE query nodig
Die mis ik even? Wil je de gegevens van de tabellen samenvoegen en weergeven, of wil je alle gegevens uit tabel1 laten zien, waarvan de status in tabel2 'actief' is? In dat laatste geval lijkt je datamodel me niet helemaal in orde.

Je kunt een dergelijke actie overigens als volgt uitvoeren:
code:
1
2
Select * from tabel_1 where tabel_1.IcarusNummer not in
  (Select IcarusNummer from tabel_2 where status = 'Actief')

My personal website


Verwijderd

Topicstarter
bedankt voor jullie reacties maar EINDELIJK ben ik er toch zelf uitgekomen.

"select * from beta_absenties INNER JOIN beta_leerlingen ON beta_absenties.icarusnr=beta_leerlingen.icarusnr WHERE beta_leerlingen.status like 'actief'"

Adodc1.RecordSource = DatabaseQuery
Adodc1.Refresh

wat het mooie nu is, is dat ie ook gelijk de icarusnummers van beiden tabellen met elkaar vergelijkt. staat een gebruiker wel in de absentie tabel maar niet in de gebruikerstabel dan laat ie hem niet zien.

:*)

Verwijderd

Topicstarter
ik heb nu een nieuw probleem wat op het vorige probleem aansluit.

als ik in runtime in het gebruikers form een leerling non actief maak en ik ga daarna naar absenties toe staat ie er nog steeds bij. maak ik die leerling dan weer actief bij gebruikers en ik ga dan weer kijken dan is ie wel weg :? hij reageert steeds 1 actie te laat.

ik heb het volgende geprobeerd in het absenties form.
form_activate()
adodc1.refresh
maar dat werkt niet verder nog aantal dingen geprobeerd wat niet werkte.
hebben jullie nog tips ?? (8>

  • curry684
  • Registratie: Juni 2000
  • Laatst online: 12-05 22:23

curry684

left part of the evil twins

Verwijderd schreef op maandag 31 januari 2005 @ 14:13:
bedankt voor jullie reacties maar EINDELIJK ben ik er toch zelf uitgekomen.

SQL:
1
2
3
select * from beta_absenties
INNER JOIN beta_leerlingen ON beta_absenties.icarusnr=beta_leerlingen.icarusnr 
WHERE beta_leerlingen.status like 'actief'
'like'? :X

Professionele website nodig?


  • pistole
  • Registratie: Juli 2000
  • Laatst online: 12-05 22:11

pistole

Frutter

Verwijderd schreef op maandag 31 januari 2005 @ 14:13:
wat het mooie nu is, is dat ie ook gelijk de icarusnummers van beiden tabellen met elkaar vergelijkt. staat een gebruiker wel in de absentie tabel maar niet in de gebruikerstabel dan laat ie hem niet zien.

:*)
Dat lijkt me niet iets om trots op te zijn.
Zoek eens naar de volgende termen:
-primary key
-foreign key
-referential entegrity

Ik frut, dus ik epibreer


Verwijderd

Topicstarter
pistole schreef op maandag 31 januari 2005 @ 14:54:
[...]

Dat lijkt me niet iets om trots op te zijn.
Zoek eens naar de volgende termen:
-primary key
-foreign key
-referential entegrity
ja weet ik..... maar het probleem is dat een leerling meerdere keren absent kunnen zijn....
dus werkt primary key niet zo goed he _/-\o_
dus daarom moest ik het anders oplossen.
bij gebruikers heb ik wel sleutel omdat een gebruiker maar 1 keer voorkomt.

  • whoami
  • Registratie: December 2000
  • Laatst online: 10:09
Iedere tabel moet een PK hebben.
waarom kan je icarusnr niet foreign key zijn in je absenties tabel, en heb je geen surrogate PK in je absenties tabel?

Trouwens, natural PK's vind ik ugly.

https://fgheysels.github.io/


  • P_de_B
  • Registratie: Juli 2003
  • Niet online

Nou, een like zonder wildcards zal door de meeste databases hetzelfde uitgevoerd worden als een =

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


Verwijderd

Topicstarter
P_de_B schreef op maandag 31 januari 2005 @ 15:02:
[...]



Nou, een like zonder wildcards zal door de meeste databases hetzelfde uitgevoerd worden als een =
ja idd ik snapte het probleem ook niet :? ik dacht reageer er maar niet op, is misschien de eerste keer dat ie een SQL Query ziet.... :*) hahahaha = en LIKE what's the differece ? |:(

  • curry684
  • Registratie: Juni 2000
  • Laatst online: 12-05 22:23

curry684

left part of the evil twins

P_de_B schreef op maandag 31 januari 2005 @ 15:02:
[...]


Nou, een like zonder wildcards zal door de meeste databases hetzelfde uitgevoerd worden als een =
Waarom dan like gebruiken als je = bedoelt? Het feit dat het op de meeste (en dus niet alle!!!!!) databases hetzelfde uitgevoerd wordt is natuurlijk een baggerargument om gewoon de verkeerde syntax voor het correcte effect te gebruiken :)
Verwijderd schreef op maandag 31 januari 2005 @ 17:50:
[...]

ja idd ik snapte het probleem ook niet :? ik dacht reageer er maar niet op, is misschien de eerste keer dat ie een SQL Query ziet.... :*) hahahaha = en LIKE what's the differece ? |:(
Uhm ik ben professioneel SQL Server developer, mind your words :/ Als je graag van de expertise op dit forum gebruik wil maken is iets meer respect jegens die medegebruikers waar je jezelf van afhankelijk stelt wel gepast.

'The differece' is dat je er met LIKE in dit geval op rekent dat het DBMS een execution plan in mekaar draait dat dit wegoptimaliseert tot een =, en dat een slecht DBMS bijvoorbeeld wel eens de neiging zou kunnen hebben om als ie LIKE ziet bij voorbaat indexes te skippen en een full table scan uit te voeren. Scheelt je maar een factor 100 of meer op performance met een beetje pech. Bewaar die |:( dus aub voor jezelf.

Professionele website nodig?


Verwijderd

whoami schreef op maandag 31 januari 2005 @ 15:01:
Trouwens, natural PK's vind ik ugly.
Tja, die discussie zal denk ik nooit verdwijnen...
Ik vind 't bijvoorbeeld lelijk en overbodig om te pas en te onpas surrogate keys te gebruiken.
OK, bij een tabel met persoonsgegevens is 't niet handig om als PK achternaam, voornaam te gebruiken, omdat die niet uniek hoeven te zijn (Jansen, Jan).
Maar aan de andere kant is het bij bv. een landenlijst, artikelenlijst, etc. die opgebouwd zijn als [code, omschrijving] absoluut overbodig om daar een surrogate key veld aan toe te voegen. Het code-veld moet daar toch al uniek zijn.

  • curry684
  • Registratie: Juni 2000
  • Laatst online: 12-05 22:23

curry684

left part of the evil twins

Verwijderd schreef op maandag 31 januari 2005 @ 18:16:
[...]

Tja, die discussie zal denk ik nooit verdwijnen...
Ik vind 't bijvoorbeeld lelijk en overbodig om te pas en te onpas surrogate keys te gebruiken.
OK, bij een tabel met persoonsgegevens is 't niet handig om als PK achternaam, voornaam te gebruiken, omdat die niet uniek hoeven te zijn (Jansen, Jan).
Maar aan de andere kant is het bij bv. een landenlijst, artikelenlijst, etc. die opgebouwd zijn als [code, omschrijving] absoluut overbodig om daar een surrogate key veld aan toe te voegen. Het code-veld moet daar toch al uniek zijn.
Leuke foreign keys heb je dan, met een varchar(255). Zal vast net zo snel joinen als een klassiek integer identity field ;)

Professionele website nodig?


Verwijderd

Varchars zijn inderdaad niet handig in een PK of FK, maar bv. een char(8) als code-veld is in de praktijk niet langzamer dan een integer veld, en je "vervuilt" je database minder met onnodige extra velden.
Bovendien kun je dan aan de database overlaten of er duplicates optreden, identity of auto increment velden zijn per definitie uniek, en daarmee kun je dus geen dupes afvangen.

Maar deze discussie wordt al gevoerd sinds er relationele databases bestaan, en voor beide visies valt een hoop te zeggen...

[ Voor 49% gewijzigd door Verwijderd op 31-01-2005 21:14 ]


  • whoami
  • Registratie: December 2000
  • Laatst online: 10:09
Verwijderd schreef op maandag 31 januari 2005 @ 21:05:
Varchars zijn inderdaad niet handig in een PK of FK, maar bv. een char(8) als code-veld is in de praktijk niet langzamer dan een integer veld, en je "vervuilt" je database minder met onnodige extra velden.
Een char(8) is als ik het goed heb al 4 bytes groter dan een int (dubbel zo groot), wat dus wil zeggen dat je per 'leaf-node' slechts de helft v/h aantal verwijzingen kwijt kan dan als je een int zou gebruiken, wat dus theoritisch kan neerkomen op dubbel zoveel lees-acties bij een select-query.
(maar dan moet je ook nog rekening houden met dingen zoals fill-factor )

https://fgheysels.github.io/


Verwijderd

Meestal zelfs 4x zo groot (Unicode), maar ik zei dan ook: in de praktijk. Een landentabel bestaat uit pak 'm beet 300 records, en dan is dat verschil niet merkbaar. In zo'n geval is een extra identity field doodgewoon overkill.

  • whoami
  • Registratie: December 2000
  • Laatst online: 10:09
Verwijderd schreef op maandag 31 januari 2005 @ 21:18:
Meestal zelfs 4x zo groot (Unicode)
een char is geen unicode, een nchar wel.
Jij had het over char. :P
maar ik zei dan ook: in de praktijk. Een landentabel bestaat uit pak 'm beet 300 records, en dan is dat verschil niet merkbaar. In zo'n geval is een extra identity field doodgewoon overkill.
Tja, elk z'n eigen voorkeur.

https://fgheysels.github.io/


  • P_de_B
  • Registratie: Juli 2003
  • Niet online
curry684 schreef op maandag 31 januari 2005 @ 18:01:
[...]

Waarom dan like gebruiken als je = bedoelt? Het feit dat het op de meeste (en dus niet alle!!!!!) databases hetzelfde uitgevoerd wordt is natuurlijk een baggerargument om gewoon de verkeerde syntax voor het correcte effect te gebruiken :)
.
psst het was klein geschreven. Ik snap natuurlijk wel dat een like niet de goede keus is als je = bedoeld
ja idd ik snapte het probleem ook niet :? ik dacht reageer er maar niet op, is misschien de eerste keer dat ie een SQL Query ziet.... :*) hahahaha = en LIKE what's the differece ? |:(
Het was sarcasme :X Natuurlijk moet je niet een LIKE gebruiken als je een = wilt.. Probeer maar goed te luisteren naar de adviezen hier.....

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


Verwijderd

Topicstarter
leuke discussie maar mijn probleem is nog steeds niet opgelost.....

als ik in runtime in het gebruikers form een leerling non actief maak en ik ga daarna naar absenties toe staat ie er nog steeds bij. maak ik die leerling dan weer actief bij gebruikers en ik ga dan weer kijken dan is ie wel weg hij reageert steeds 1 actie te laat.

ik heb het volgende geprobeerd in het absenties form.

Private Sub Form_Activate()
Adodc1.Refresh
End Sub

maar dat werkt niet verder nog aantal dingen geprobeerd wat niet werkte.
hebben jullie nog tips ?? :9~

  • farlane
  • Registratie: Maart 2000
  • Laatst online: 17:45
Drop die ADO controls en voer gewoon queries uit. Is wat meer werk in het begin maar bespaart je een hoop ellende.

Somniferous whisperings of scarlet fields. Sleep calling me and in my dreams i wander. My reality is abandoned (I traverse afar). Not a care if I never everwake.


  • whoami
  • Registratie: December 2000
  • Laatst online: 10:09
* whoami is het eens met farlane

Trouwens, als je iedere keer je recordset gaat refreshen als de activate event van je form gefired wordt, gaat dat niet redelijk belastend zijn ?

https://fgheysels.github.io/


Verwijderd

Topicstarter
farlane schreef op dinsdag 01 februari 2005 @ 09:32:
Drop die ADO controls en voer gewoon queries uit. Is wat meer werk in het begin maar bespaart je een hoop ellende.
ja maar we zijn nu al een maand bezig, is nu te veel werk om alles weer om te gooien.
ik hoop dat iemand een oplossing heeft B)

  • farlane
  • Registratie: Maart 2000
  • Laatst online: 17:45
Het kan een verschijnsel zijn van de caching die die controls doen. Er was hier een tijdje geleden iemand die geloof ik in Access een truukje deed met de properties van zijn connectie. FF zoeke.

Somniferous whisperings of scarlet fields. Sleep calling me and in my dreams i wander. My reality is abandoned (I traverse afar). Not a care if I never everwake.


  • Tinoo
  • Registratie: Januari 2005
  • Laatst online: 09-01 16:14
Ja, dat was ik geloof ik.

ff zoeken hoor:

DBEngine.idle dbRefreshCache

dat werkte bij mij in Access, maar ik denk dat het in VB niet zoveel zin heeft.

Verwijderd

Topicstarter
Tinoo schreef op dinsdag 01 februari 2005 @ 10:19:
Ja, dat was ik geloof ik.

ff zoeken hoor:

DBEngine.idle dbRefreshCache

dat werkte bij mij in Access, maar ik denk dat het in VB niet zoveel zin heeft.
nee idd lijkt mij ook niet. Ik hoop dat je erachter kan komen of uit kan zoeken hoe het in VB kan.
want ik kom er niet uit.... ga ik intussen verder met een ander probleem op te lossen....
ik kom af en toe wel kijken of iemand een oplossing heeft :D

  • OZ-Gump
  • Registratie: November 2002
  • Laatst online: 14-05-2024

OZ-Gump

terug van weggeweest

Verwijderd schreef op dinsdag 01 februari 2005 @ 10:36:
[...]

nee idd lijkt mij ook niet. Ik hoop dat je erachter kan komen of uit kan zoeken hoe het in VB kan.
want ik kom er niet uit.... ga ik intussen verder met een ander probleem op te lossen....
ik kom af en toe wel kijken of iemand een oplossing heeft :D
Oei... pas op! Het lijkt er bijna op dat je ten eerste een mogelijke oplossing niet wil proberen, en ten tweede zelf geen energie meer in dit probleem wil stoppen en wel wacht tot iemand hier een oplossing voor je heeft. Zo gaat het hier natuurlijk niet (zoals je vast weet ;)).

Heb je ook al eens geprobeerd om de verbinding eens te sluiten en opnieuw te openen? Niet als eindoplossing, maar om te kijken wat er dan gebeurt. Step eens door je code heen, om te kijken of een 'rustigere' executie van je code kan zorgen voor het op tijd doorkomen van de wijzigingen. Ik heb ook wel eens last gehad van 'te snelle code'. Een korte wait (ik geloof nog geen 100 ms) was toen genoeg voor een oplossing.

My personal website


Verwijderd

Topicstarter
OZ-Gump schreef op dinsdag 01 februari 2005 @ 10:47:
[...]

Oei... pas op! Het lijkt er bijna op dat je ten eerste een mogelijke oplossing niet wil proberen, en ten tweede zelf geen energie meer in dit probleem wil stoppen en wel wacht tot iemand hier een oplossing voor je heeft. Zo gaat het hier natuurlijk niet (zoals je vast weet ;)).

Heb je ook al eens geprobeerd om de verbinding eens te sluiten en opnieuw te openen? Niet als eindoplossing, maar om te kijken wat er dan gebeurt. Step eens door je code heen, om te kijken of een 'rustigere' executie van je code kan zorgen voor het op tijd doorkomen van de wijzigingen. Ik heb ook wel eens last gehad van 'te snelle code'. Een korte wait (ik geloof nog geen 100 ms) was toen genoeg voor een oplossing.
ik wil een mogelijke oplossing wel proberen maar het moet wel betrekking hebben op VB en niet op access en diegene zei zelf al dat het voor access was en niet voor VB.
en ik wil blijf zelf ook proberen want het andere probleem wat ik heb is hetzelfde als dat andere.
ik probeer nog steeds allerlei dingen, en dit is heel erg belangrijk dat dit lukt.
als je op een form iets aanklikt wat betrekking heeft op een ander form dan update hij dat form niet, dat is het probleem.
ik heb dus in een instellingen form een combobox geplaatst met 2 opties:
actief en non-actief.
ik wil dus dat het absenties form zich aanpast aan wat de gebruiker in het instellingen form in de combobox aanklikt. dan heeft de gebruiker een knop met OK op het instellingen form.
En nadat hij OK heeft geklikt moeten de gegevens op het absenties form zich aanpassen.... en dat doet is dus niet :(

  • whoami
  • Registratie: December 2000
  • Laatst online: 10:09
Tja, je zult op de een of andere manier dat andere form moeten notifyen dat hij moet 'refreshen'.

Dat kan je bv doen door je form2 modaal te gaan openen, en checken op de return - waarde. Als de user op OK geklikt heeft, refresh je form1:

code:
1
2
3
4
5
frmForm2 = new Form2();
if( frmForm2.ShowDialog() == DialogResult.OK )
{
    this.Refresh();
}

(pseudo-code).

Je kan het ook nog op een andere manier doen (met custom events oid), maar ik weet niet of je dat in VB kan.

https://fgheysels.github.io/


Verwijderd

Topicstarter
Ik heb mijn ene probleem opgelost maar dat andere niet....
en doordat mijn 1e probleem nog niet is opgelost werkt mijn 2e ook niet helemaal goed.
het gaat er gewoon om dat als een gebruiker de status van een leerling wijzigt, dat ie dan niet gelijk het andere form aanpast daarop.
ik heb een adodc en een datagrid. de resultaten staan in de datagrid.
als de gebruiker in het gebruikersform de status van een gebruiker verandert naar non-actief dan moet bij absenties die gebruiker niet meer zichtbaar zijn.... dat doet ie niet goed.
het rare is dat als je de gebruiker dan weer actief maakt dat ie dan wel weg is.
hij reageert dus steeds een stap te laat :?
het is echt een groot probleem en ik hoop echt dat iemand dit probleem kent en een oplossing voor mij heeft :|

  • whoami
  • Registratie: December 2000
  • Laatst online: 10:09
Hoe open je die 2de form ?

Heb je niets aan mijn 'pseudo' code ?

https://fgheysels.github.io/


Verwijderd

Topicstarter
whoami schreef op dinsdag 01 februari 2005 @ 12:57:
- Hoe open je die 2de form ?
Ik heb een menu met knoppen en klik dus gewoon op een knop en daarmee opent ie het form.

- Heb je niets aan mijn 'pseudo' code ?
nee, dan krijg je dubbele forms....
ik snap wel wat je bedoelt....

  • whoami
  • Registratie: December 2000
  • Laatst online: 10:09
Hoezo, dubbele forms ?

https://fgheysels.github.io/


Verwijderd

Topicstarter
omdat vb ze dan elke keer opnieuw opent.

  • OZ-Gump
  • Registratie: November 2002
  • Laatst online: 14-05-2024

OZ-Gump

terug van weggeweest

Verwijderd schreef op dinsdag 01 februari 2005 @ 15:42:
[...]

omdat vb ze dan elke keer opnieuw opent.
Dan heb je niet de ShowDialog gebruikt: ShowDialog zorgt ervoor dat het geopende venster eerst gesloten moet worden voordat er iets anders kan gebeuren.

My personal website


  • farlane
  • Registratie: Maart 2000
  • Laatst online: 17:45
whoami schreef op dinsdag 01 februari 2005 @ 12:07:
Je kan het ook nog op een andere manier doen (met custom events oid), maar ik weet niet of je dat in VB kan.
Je kunt een interface aanmaken, die door het formulier laten implementeren en vervolgens in je aanroepende module WithEvents declareren. Op die manier kun je de custom events van je interface opvangen.

Ik denk echter dat dit voor de TS een brug te ver is op dit moment.

Btw, voor de TS.

Als je een formulier modal wilt laten zien moet je de Show methode aanroepen met vbModal als eerste parameter.

[ Voor 13% gewijzigd door farlane op 01-02-2005 23:16 ]

Somniferous whisperings of scarlet fields. Sleep calling me and in my dreams i wander. My reality is abandoned (I traverse afar). Not a care if I never everwake.

Pagina: 1