[VB+SQL] Meerdere rijen (records) uit dezelfde tabel...

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • Freggel_United
  • Registratie: December 2000
  • Laatst online: 01-07 16:21
Ik zit met het volgende dillema, en ik heb me rot gegoogled... Om te beginnen is ben ik een beginner in zowel VB als SQL, en gebruik het voornamelijk om scripts te bouwen in het VB-dialect in Nicelabel...

Ik heb een tabel in een Access database, en benader deze binnen dit script:

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
Set conn = CreateObject("ADODB.Connection")
conn.Open "Driver={Microsoft Access Driver (*.mdb)}; DBQ=padnaardatabase\database.MDB; "
SQL = "SELECT * from " + ([<hier staat de tabelnaam]) + " where LANG='" + ([<hier de taal (rij) waarop gefilters moet worden]) + "'"

conn.BeginTrans
Set rs = conn.Execute(SQL)

vareen = rs("<kolom een>")
vartwee = rs("<kolom twee>")
vardrie = rs("<kolom drie>")
varvier = rs("<kolom vier>")
...

conn.CommitTrans
conn.Close

set conn=Nothing
set SQL=Nothing
set rs=Nothing


De tabelnaam en filter worden gevuld door Nicelabel, waarbij de tabelnaam de naam van ons product is, en er bij LANG= gefilterd wordt op taal. Nu werkt dit prima voor één taal, echter, ik heb labels waarbij twee of drie talen gedrukt moeten worden, en ik heb geen idee hoe ik dit nu aan moet pakken... Als ik bovenstaande code herhaal (maar de output in andere variabelen wegschrijf) krijg ik een "BOF or eof is true or the current record has been deleted" error..

Alles hetzelfde laten behalve:

code:
1
2
3
4
5
6
7
SQL = "SELECT * from " + ([<hier staat de tabelnaam]) + " where LANG='" + ([<hier de volgende taal [rij] waarop gefilters moet worden]) + "'"
...
var2reen = rs("<kolom een>")
var2twee = rs("<kolom twee>")
var2drie = rs("<kolom drie>")
var2vier = rs("<kolom vier>")
...

Dit werkt dus niet...

Wat ik dus zei, ik heb me scheel gegoogled, maar ik denk dat het me aan ervaring ontbreekt om goed te verwoorden wat ik nou precies wil, ik hoop dat ik een beetje duidelijk ben :) Hoe pak ik dit aan?

By each crime and every kindness, we birth our future


Acties:
  • 0 Henk 'm!

  • Damic
  • Registratie: September 2003
  • Laatst online: 06:37

Damic

Tijd voor Jasmijn thee

while loop maken

Trouwens hier doen ze het anders de verbinding tot stand brengen: http://stackoverflow.com/...n-a-while-loop-in-asp-net en hier http://stackoverflow.com/...lts-from-sql-server-in-vb

[ Voor 22% gewijzigd door Damic op 08-05-2015 11:09 ]

Al wat ik aanraak werk niet meer zoals het hoort. Damic houd niet van zijn verjaardag


Acties:
  • 0 Henk 'm!

  • Caelorum
  • Registratie: April 2005
  • Laatst online: 12:38
De RecordSet is als een lijst met een pointer. Op regel 6 haal je de data op en point de RecordSet naar regel 1 in dit resultaat.
De pointer zet je door naar de tweede regel in het resultaat door MoveNext aan te roepen op de RecordSet.
Overigens wil je waarschijnlijk een where LANG in ('en-US', 'nl-NL') doen en dan bij het vullen van de juiste variabelen in de code checken op taal en de goede zetten. Daarnaast wil ik je nog even wijzen op het bestaan van Arrays en Lists.

Acties:
  • 0 Henk 'm!

  • N0stradamus
  • Registratie: April 2002
  • Laatst online: 19-07-2024
Je kunt meerdere talen in je recordset terugkrijgen door bijvoorbeeld OR, LIKE of IN te gebruiken in het WHERE gedeelte van je SQL.

Met de volgende syntax krijg je bijvoorbeeld alles waar lang gelijk is aan NL of DE:
code:
1
SELET * FROM tabel WHERE lang = 'NL'  OR lang = 'DE'


Hieronder een voorbeeld waarbij je alles krijgt waar lang begint met de letter N:
code:
1
SELET * FROM tabel WHERE lang LIKE 'N*'

(Let op dat in andere database omgevingen de * meestal een % teken is)

En alles waar lang voorkomt in een lijstje (in mijn ogen beste voor deze situatie):
code:
1
SELET * FROM tabel WHERE lang IN ('NL','DE','UK')


Vervolgens kun je dus een recordset terugkrijgen met 0, 1 of meerdere records.
Controleer na de Execute eerst of je wel records hebt (EOF/BOF)
Zo ja, maak dan een loop tot het einde van de recordset (de EOF is dan True)
Binnen de loop kun je met de data van die rij van alles doen.

Je krijg dan zoiets, waarbij de variabele vareen dus bij ieder record van inhoud wisselt:
code:
1
2
3
4
5
6
7
If Not (rs.BOF And rs.EOF) Then
  Do While Not rs.EOF Then
      vareen = rs("<kolom een>")
      rs.MoveNext
  Loop
End If
rs.Close

Als ik het echt allemaal van te voren wist...


Acties:
  • 0 Henk 'm!

  • Freggel_United
  • Registratie: December 2000
  • Laatst online: 01-07 16:21
Thnx, nou is het schema vandaag zo druk dat ik er niet meer aan toe kom... maandag meer :)

By each crime and every kindness, we birth our future


Acties:
  • 0 Henk 'm!

  • Caelorum
  • Registratie: April 2005
  • Laatst online: 12:38
Daar heb je een weekend voor ^^
Maar we horen graag of het maandag is gelukt :)

Acties:
  • 0 Henk 'm!

  • Freggel_United
  • Registratie: December 2000
  • Laatst online: 01-07 16:21
Goedemorgen :) We knutselen weer wat verder... Ik ben de oplossing van n0stradamus aan het proberen, maar ik denk dat ik de logica nog niet helemaal volg... Wat is dus wil bereiken is dat vareen, vartwee enzovoort gevuld worden met gegevens uit de rij die (bijvoorbeeld) NL heet, en dat vervolgens var2een, var2twee bijvoorbeeld gevuld worden met de gegevens uit de rij die BE FR heet (bijvoorbeeld).

Het SQL statement is nu als volgt:

code:
1
SQL = "SELECT * from " + ([PRODUCT]) + " where LANG='" + ([LANGCODE]) + "' or LANG='" + ([LANGCODE2]) + "'"



Hoe worden deze gegevens gelezen, gaat men de eerste rij helemaal af (en is de volgorde dus vareen, vartwee, vardrie, etc, etc), of wordt het kolom voor kolom gedaan (en is de volgorde dus vareen, var2een, var3een, vartwee, var2twee, var3twee etc etc)...

In onderstaande code van n0stradamus wordt dus vareen gevuld, maar waar moet ik de volgende variabelen neerzetten, en ik welke volgorde?

code:
1
2
3
4
5
6
7
If Not (rs.BOF And rs.EOF) Then
  Do While Not rs.EOF Then
      vareen = rs("<kolom een>")
      rs.MoveNext
  Loop
End If
rs.Close


Edit: Inmiddels opgelost, ik heb een array gemaakt met daarin de landcodes, en vervolgens een for loop voor ieder item in de array :) al doende leert men...

[ Voor 6% gewijzigd door Freggel_United op 11-05-2015 12:18 . Reden: Opgelost! ]

By each crime and every kindness, we birth our future

Pagina: 1