|
| Lave ny tabel ud fra data fra anden tabel Fra : Kurt G |
Dato : 12-10-06 11:36 |
|
Jeg skal lave en ny tabel med udplukaf data fra en anden tabel.
Hvordan skal jeg lave loop-ene?
Et par muligheder (grov skitse):
1. Åbn Tabel1
Start loop
Find ønsket forekomst i Tabel1
Åbn Tabel2
Gem data i Tabel2
Luk Tabel2
Næste
Indtil Tabel1 slut
Luk Tabel1
2. Åbn Tabel1
Åbn Tabel2
Start loop
Find ønsket forekomst i Tabel1
Gem data i Tabel2
Næste
Indtil Tabel1 slut
Luk Tabel2
Luk Tabel1
eller er der andre muligheder?
Kan man ikke lave en søgnig på 'Ønskede data' fra Tabel1 først og gemme dem
i et array eller en liste og derefter gemme data i Tabel2 på een gang?
/Kurt
| |
Jens Gyldenkærne Cla~ (12-10-2006)
| Kommentar Fra : Jens Gyldenkærne Cla~ |
Dato : 12-10-06 11:48 |
|
Kurt G skrev:
> Jeg skal lave en ny tabel med udplukaf data fra en anden
> tabel. Hvordan skal jeg lave loop-ene?
Du skal slet ikke lave nogen løkker.
> eller er der andre muligheder?
Ja bestemt.
> Kan man ikke lave en søgnig på 'Ønskede data' fra Tabel1 først
> og gemme dem i et array eller en liste og derefter gemme data
> i Tabel2 på een gang?
Muligvis, men det er langt mere effektivt at flytte data direkte i
databasen - så behøver du ikke at spekulere på
datakonverteringsfejl, transport af data mellem database og asp-
parser og andet "sjov".
Lav en forespørgsel der udvælger de data du har brug for. Brug så
denne forespørgsel på en af følgende måder:
Opret ny tabel ud fra gammel:
SELECT [dinefelter] INTO [nytabel]
FROM [dingamletabel]
WHERE [kriterierne for postudvælgelse]
Indsæt data i eksisterende tabel fra gammel tabel:
INSERT INTO [nytabel] (felt1, felt2, ...)
SELECT [dinefelter]
FROM [dingamletabel]
WHERE [kriterierne for postudvælgelse]
I begge tilfælde skal forespørgslen køres gennem et connection-
objekt, på samme måde som en normal UPDATE, INSERT eller DELETE-
forespørgsel.
Du skal dog være opmærksom på at der i mange tilfælde er bedre
løsninger end at kopiere hvis man skal bruge dele af en tabel.
Almindelig databaseteori siger at man ikke skal gemme samme
oplysning mere end én gang. Når du kopierer dele af en tabel er der
stor sandsynlighed for at bryde denne regel.
--
Bolig søges. Andel eller leje i Emdrup, Nordvest, Nørrebro, Søborg
eller Brønshøj, max 6000 pr. måned.
Kontakt pr. mail - nospam(at)gyros.dk
Jens Gyldenkærne Clausen
| |
Kurt G (12-10-2006)
| Kommentar Fra : Kurt G |
Dato : 12-10-06 21:00 |
|
"Jens Gyldenkærne Clausen"
> Indsæt data i eksisterende tabel fra gammel tabel:
>
> INSERT INTO [nytabel] (felt1, felt2, ...)
> SELECT [dinefelter]
> FROM [dingamletabel]
> WHERE [kriterierne for postudvælgelse]
Tak for hjælpen, men som før sagt, alt mislykkes (men jeg håber stadig).
Den har jeg prøvet med negativt resultat:
Sætningen var således:
INSERT INTO [Alle000] (Kasse,Nr,Omhandler)SELECT [Kasse,Nr,Omhandler]FROM
[AlleKasser]WHERE [Nr = '%000%']
Microsoft JET Database Engine error '80040e14'
Number of query values and destination fields are not the same.
For mig at se er der lige mange felter i begge tabeller, de hedder endda det
samme.
> Du skal dog være opmærksom på at der i mange tilfælde er bedre
> løsninger end at kopiere hvis man skal bruge dele af en tabel.
> Almindelig databaseteori siger at man ikke skal gemme samme
> oplysning mere end én gang. Når du kopierer dele af en tabel er der
> stor sandsynlighed for at bryde denne regel.
Ja, men denne tabel skal bruges til at indsætte 'overskrifter' hver gang der
skiftes 'Kasse' i en løbende udskrift på andre kriterier. Det kommer jeg nok
til senere, det lykkes jo ALDRIG i nogen af de første hug!
/Kurt
| |
Jens Gyldenkærne Cla~ (12-10-2006)
| Kommentar Fra : Jens Gyldenkærne Cla~ |
Dato : 12-10-06 21:22 |
|
Kurt G skrev:
> Sætningen var således:
> INSERT INTO [Alle000] (Kasse,Nr,Omhandler)SELECT
> [Kasse,Nr,Omhandler]FROM [AlleKasser]WHERE [Nr = '%000%']
Firkantparanteserne får Access til at opfatte "Kasse,Nr,Omhandler"
som ét felt - derfor får du fejlen herunder:
> Number of query values and destination fields are not the
> same.
Prøv i stedet med:
INSERT INTO Alle000 (Kasse,Nr,Omhandler)
SELECT Kasse, Nr, Omhandler
FROM AlleKasser
WHERE Nr = '%000%'
Hvis du vil have %-tegnene i kriteriet til at virke som jokertegn,
skal du huske at anvende LIKE:
INSERT INTO Alle000 (Kasse,Nr,Omhandler)
SELECT Kasse, Nr, Omhandler
FROM AlleKasser
WHERE Nr LIKE '%000%'
> Ja, men denne tabel skal bruges til at indsætte 'overskrifter'
> hver gang der skiftes 'Kasse' i en løbende udskrift på andre
> kriterier. Det kommer jeg nok til senere, det lykkes jo ALDRIG
> i nogen af de første hug!
Det lyder som noget der kan klares med en mor-barn-relation i
databasen. Fx som her:
tblKategorier
- kategoriID
- kategoriNavn
tblVarer
- vareID
- kategoriID
- varenavn
--
Jens Gyldenkærne Clausen
»Diplomatiet består netop i, at de gamle kommatister kan få lov til
at tro, at de har vundet. Men i virkeligheden har de tabt.«
Ole Togeby i Information
| |
Kurt G (12-10-2006)
| Kommentar Fra : Kurt G |
Dato : 12-10-06 22:04 |
|
"Jens Gyldenkærne Clausen"
> Hvis du vil have %-tegnene i kriteriet til at virke som jokertegn,
> skal du huske at anvende LIKE:
>
> INSERT INTO Alle000 (Kasse,Nr,Omhandler)
> SELECT Kasse, Nr, Omhandler
> FROM AlleKasser
> WHERE Nr LIKE '%000%'
Det var lige det, der skulle til. Tak.
>> Ja, men denne tabel skal bruges til at indsætte 'overskrifter'
>> hver gang der skiftes 'Kasse' i en løbende udskrift på andre
>> kriterier. Det kommer jeg nok til senere, det lykkes jo ALDRIG
>> i nogen af de første hug!
>
> Det lyder som noget der kan klares med en mor-barn-relation i
> databasen. Fx som her:
>
> tblKategorier
> - kategoriID
> - kategoriNavn
>
> tblVarer
> - vareID
> - kategoriID
> - varenavn
Det er nok rigtigt, men siger mig ikke noget!
/Kurt
| |
|
|