Toon posts:

[Access] String scheiden en in tabel stoppen

Pagina: 1
Acties:

Verwijderd

Topicstarter
Ik heb een probleem:

Op de universiteit organiseer ik een bedrijvenweek (voor de geinteresseerden: www.ebtilburg.nl ). Nu gaan dit jaar de inschrijvingen voor het eerst geheel digitaal. Dit betekent dat er zo'n 600 inschrijvingen binnenkomen op een in php gebouwde site. Deze site heb ik samen met iemand die meer verstand heeft van php gebouwd. Aangezien deze jongen naar het buitenland is gegaan hebben we besloten om het frontend 9waar we de inschrijvingen uit kunnen halen) in Access te bouwen. So far so good.

Het datamodel zit enigzins apart in elkaar. Elk bedrijf heeft een ID (tabel bedrijven). Om de inschrijvingen voor de Individuele gesprekken te registeren worden deze ID's achter elkaar in een string geplakt en dat in een veld in de db weggeschreven.

Dit maakt het onmogelijk om fatsoenlijk queries te draaien over deze gegevens. Waar ik nu mee bezig ben is het opsplitsen van de string in losse getallen (ook een rukkarwei, aangezien alles in 97 staat en daar de functie split() nog niet in zit.

Wat ik nu dus wil, is dat ik al die strings opsplits in losse records, die samen met het deelname id naar een andere tabel (soort koppeltabel) weggeschreven worden (eenmalige actie).

Dit is wat ik aan code heb:
Visual Basic:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
Dim strOut As String
Dim strTotal() As String
Dim strBedrijf() As String
Dim i As Integer
Dim a As Integer
Dim RecCount As Integer
Dim dbs As Database
Set dbs = CurrentDb
Dim rst As Recordset
Dim qdf As QueryDef
Dim strParm As String
Dim rstIG As Recordset
Dim qdfIG As QueryDef
Dim strSQLIG As String
Dim strSQLInsert As String
Dim strBedrijfIG As String
Dim qdfInsertIG As QueryDef

strSQLIG = "SELECT id AS ANR, business_lunch AS BEDR FROM Dinsdag"
Set qdfIG = dbs.CreateQueryDef("", strSQLIG)
Set rstIG = qdf.OpenRecordset(dbOpenSnapshot)

strSQLInsert = "[PARAMETERS] strBedrijfIG TEXT; INSERT INTO IG VALUES !ANR, strBedrijfIG"
rstIG.MoveLast
rstIG.MoveFirst

RecCount = rstIG.RecordCount

i = 0
a = 0
'code die alle recrds in de recordset afgaat
Do While a <= RecCount
'code die binnen de record de IG's in een nieuwe tabel plaatst
 With rstIG
  Do While i < 40 And Split(",", !BEDR, i) <> ""

  strBedrijfIG = Split(",", !BEDR, i)
  Set qdfInsertIG = dbs.CreateQueryDef("", strSQLInsert)
  qdfInsertIG.Execute
    
   i = i + 1
 Loop
 rstIG.MoveNext
Loop

End Sub


Zoals je ziet een dubbele do while loop, die alle records in de recordset afgaat en dan per record een/meerdere INSERT query(s) draait om zo de bedrijfsid's weg te schrijven.

Deze oplossing is nog niet werkend, is dit een goede oplossing, of kan ik het beter anders fixen?

(datamodel aanpassen gaat helaas niet...)

Verwijderd

Topicstarter
OK, kleine aanvulling. Aangezien het me geen **** uitmaakt in welke taal dt gaat gebeuren heb ik een stukje php:

PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
<?
        $query = "select business_lunch from dinsdag";
        $result = mysql_Query($query) or die(mysql_error());
        list($bedrijven) = mysql_fetch_array($result);
        if ($bedrijven != '') {     
            $namen = explode(',',$bedrijven);
        
            for ($i=0;$i<count($namen);$i++) {
            $query = "insert into IG values $namen[$i]";
            $result = mysql_query($query) or die(mysql_error());

            }
?>


De tabel IG is een koppeltabel met deelnemersid en bedrijfsid. Bovenstaand stukje php is leuk, maar plaatst alleen de bedrijven afzonderlijk in de tabel, en schrijft in hetzelfde record niet het deelnemersid weg.


Om dat op te lossen zou je een 2 dimensionale array moeten maken oid :?