Multidesk.be » Forums » Programmeren algemeen » Record lezen en dan toevogen met SQL

  • Pagina
  • 1 van 1
0 gasten lezen dit onderwerp.
^ Onderwerp geschreven door joke op woensdag 1 oktober 2008 om 20:35:59.
joke's avatar
Multiviteit: 2669
Morgen wordt het beter.
Hoi,

Ik heb een tabel in MS-Access met ongeveer 26 verschillende velden. Nu moet ik een record dupliceren, behalve het eerste veld dat moet ik een andere waarde geven.

Iemand een idee hoe ik dat gemakkelijk kan doen met behulp van SQL?

Joke

Dochters, tot hun 16e zeuren ze om een paard en op hun 17e komen ze thuis met een ezel
^ Reactie #1 geschreven door SMG op woensdag 1 oktober 2008 om 21:17:10.
SMG's avatar
Multiviteit: 12000
Moderator
SQL is maar een simpele taal hoor, je in 1 SQL query niet zowel invoegen als lezen.
Je zal dus eerst een SELECT ... FROM .... WHERE .... en nadien invoegen INSERT INTO .... VALUES ....
Normaal gezien moet je SQL code codering in een bestaande taal (PHP, Java, .net, C+, Cobol,...). Dan kan je die programmeertaal combineren met SQL om zeer krachtige dingen te creëren.
^ Reactie #2 geschreven door Simon op woensdag 1 oktober 2008 om 21:23:03.
Simon's avatar
Multiviteit: 3742
Wat je wel kan met SQL is een volledige tabel kopiëren:
CODE
  1. SELECT * INTO nieuwe_tabel FROM oude_tabel


Om een veld een andere waarde te geven gebruik je gewoon UPDATE.
^ Reactie #3 geschreven door SMG op woensdag 1 oktober 2008 om 21:28:50.
SMG's avatar
Multiviteit: 12000
Moderator
Ik leer iets bij, wist niet dat dit kon :D
Eigen wel handig voor het maken van snelle backups. Hier misschien een handige link: http://www.w3schools.com/Sql/sql_select_into.asp
Maar om uiteindelijk je veld in te lezen en tegelijkertijd in dezelfde tabel schrijven lijkt me onmogelijk in 1 SQL query.
^ Reactie #4 geschreven door joke op woensdag 1 oktober 2008 om 22:25:13.
joke's avatar
Multiviteit: 2669
Morgen wordt het beter.
Simon, jou idee kan alleen indien de nieuwe tabel nog niet bestaat.

Ik hoopte dat de één of de andere een lumineus idee had maar het zal dan toch met een hoop vervelend schrijfwerk moeten gebeuren.

Bedankt voor de reakties.

Joke

Dochters, tot hun 16e zeuren ze om een paard en op hun 17e komen ze thuis met een ezel
^ Reactie #5 geschreven door SMG op woensdag 1 oktober 2008 om 22:37:20.
SMG's avatar
Multiviteit: 12000
Moderator
Het is gewoon niet mogelijk met SQL alleen ;) Het is enkel raadplegen, wijzigen, invoegen (of dan backuppen) van je gegevens.
Als je zou zeggen dat ik er een VBA programma van mocht maken zou het wel lukken. Dan kan je SQL combineren met een programmeertaal (wat dus veel krachtigere opties geeft).
^ Reactie #6 geschreven door NightCreature op woensdag 1 oktober 2008 om 22:49:31.
NightCreature's avatar
Multiviteit: 1196
MSc.
Kan je niet een nested querry gebruiken??? Misshien dom idee maar heb al een hele tijd geen SQL of iets dergelijks gedaan.
I need thought completion.
Shaders, een beetje vreemd maar wel lekker (voor de ogen dan he)
2.83Ghz Q9550 HD4850 512MiB 4GiB 1333Mhz DDR3 RAM
http://paulintheuk.blogspot.com
FE Programmer @ Codemasters (Front End)
^ Reactie #7 geschreven door SMG op woensdag 1 oktober 2008 om 23:20:36.
SMG's avatar
Multiviteit: 12000
Moderator
Dat zou misschien kunnen maar ik vrees dat je daarmee een zeer irritante query zal krijgen.
Wat ik mij eerder afvraag joke is waarom je dat eigenlijk wilt doen. Een databank zou juist zo gemaakt moeten zijn dat duplicaten uit den boze zijn. Redundantie is immers de grootste vijand van een databank, waarom het dan expres doen?

Uiteindelijk denk ik toch nog steeds dat een korte VBA code je uit de nood kan helpen hoor. Ik schat iets van een 5 regels code ofzo. Je gebruikers immers Access, het voordeel dat VBA er ingebakken zit kan je dan best gebruiken ;)
^ Reactie #8 geschreven door joke op donderdag 2 oktober 2008 om 00:39:12.
joke's avatar
Multiviteit: 2669
Morgen wordt het beter.

Dixit

Dixit joke op 01/10/2008 20:35:59:
behalve het eerste veld dat moet ik een andere waarde geven.


Het zijn geen echte duplicaten, voor ik de record weg schrijg wordt via mijn code de inhoud van een veld gewijzigd. En de inhoud van sommige andere velden wijzigen ook tijdens de afhandeling van mijn programma.

Ik maak alleen maar gebruik van de tabellen van een Access database, alle bewerkingen gebeuren via VB2008. Ondertussen is het bijna klaar, ik zit nog wat te prutsen omdat in de INSERT en de SELECT het zelfde aantal velden moet zitten en ik moet er ook nog rekening mee houden dat sommige velden een NULL waarde kunnen bevatten. Access doet daar nogal eens moeilijk over.




Dochters, tot hun 16e zeuren ze om een paard en op hun 17e komen ze thuis met een ezel
^ Reactie #9 geschreven door SMG op donderdag 2 oktober 2008 om 00:51:54.
SMG's avatar
Multiviteit: 12000
Moderator
Als 10 velden wel gelijk zijn maar 1 veld niet, is het wel redundantie en dat moet uit je databank verdwijnen. Ik heb natuurlijk geen zicht op je schema maar als een bepaalde inhoud in een kolom vaak terug komt is de databank niet goed genormaliseerd.
^ Reactie #10 geschreven door joke op donderdag 2 oktober 2008 om 01:16:48.
joke's avatar
Multiviteit: 2669
Morgen wordt het beter.
De praktijk is een klein beetje komplexer als je hier laat uitschijnen.

Stel, je hebt een tabel van natuurlijke personen waar je volgende gegevens wil opslaan:
0) naam
1) geslacht
2) huidskleur
3) kleur haar
4) schoenmaat
5) lengte
enz

Het kan voorkomen dat je mensen hebt waar die 5 kenmerken identiek dezelfde zijn maar elk een andere naam. Dan moet je volgens jou redenering die velden gaan afslitsen in een nieuwe tabel enz.

In sommige gevallen zal dat ook moeten gedaan zijn, dat is juist het normaliseren van je gegevens. Je weet ook dat je dat alleen maar kunt doen als je een overzicht hebt over alle gegevens en die heb ik hier natuurlijk niet mee gedeeld. Als ik dat doe dan zijn we nog een paar weken bezig, voor het normaliseren alleen al.

Joke

Dochters, tot hun 16e zeuren ze om een paard en op hun 17e komen ze thuis met een ezel
^ Reactie #11 geschreven door NightCreature op donderdag 2 oktober 2008 om 02:24:23.
NightCreature's avatar
Multiviteit: 1196
MSc.
Gebruik dan twee queries een om de data op te halen en een andere om het weer weg te schrijven.
Dan kun je in het programma zelf de data na kijken of deze klopt/ veranderen dat is de manier die ik zou toepassen. Dit verandert natuurlijk als er constraints zijn waar ik nu niks van weet maar die invloed hebben op de uitvoering van de queries.
I need thought completion.
Shaders, een beetje vreemd maar wel lekker (voor de ogen dan he)
2.83Ghz Q9550 HD4850 512MiB 4GiB 1333Mhz DDR3 RAM
http://paulintheuk.blogspot.com
FE Programmer @ Codemasters (Front End)
^ Reactie #12 geschreven door joke op donderdag 2 oktober 2008 om 09:31:27.
joke's avatar
Multiviteit: 2669
Morgen wordt het beter.
Hoi,

Ondertussen is werkt het al en weet ik ook weer dat in die ene tabel 31 velden zitten. Knap vervelend als je dat allemaal in de queries moet zetten en het aantal velden zowel in de select als in de insert identiek moeten zijn.

SMG, bedankt voor je geknopt lesje in het normaliseren van gegevens. De anderen ook bedankt voor het meedenken.

Joke

Dochters, tot hun 16e zeuren ze om een paard en op hun 17e komen ze thuis met een ezel
  • Pagina
  • 1 van 1

Snel-antwoordformulier
Toon uitgebreid antwoordformulier Bericht nalezen Bericht plaatsen