04. juni 2002 - 13:44Der er
20 kommentarer og 1 løsning
Flere SQL inserts
Ok, har et lidt tricky problem som jeg skal bruge lidt hjælp til.
Vi har en SQL Server database med tabellen "SAGER". Nu vil min kollega så indsætte et bestemt antal sager fra hans Visual Basic program, der så henter en ASP side der laver et INSERT statement.
Problemet er at hvis han vil tilføje f.eks. 3 sager på samme tid (dvs. den sender 3 forskellige rækker af data afsted lige efter hinanden) så bliver der kun indsat 1 række i tabellen, hvilket er den sidst afsendte sag.
Det er som om den bliver hængende i ASP-siden og ikke får lavet en form for "save and go to next row". Han sender alle disse data via en form post i hans program.
Nogen der har en idé til hvordan dette kan løses?
Her lidt kode:
Set myConn = Server.CreateObject("ADODB.Connection") myConn.Open "DRIVER=SQL Server;SERVER=servernavn;UID=id;PWD=etpassword;DATABASE=dbnavn;"
I dette særtema ser vi på, hvordan cloud og AI bliver fundamentet for virksomhedernes digitale forretning, og hvordan de nye muligheder for automatisering og forretningsværdi kan udnyttes uden at miste overblik, sikkerhed og menneskelig kontrol.
Jeg vil foreslå at I bare sender alle INSERT statements afsted i en lang strøm, separeret med semikolon;
SQL variablen vil således eks indeholde "INSERT INTO..VALUES(...);INSERT INTO..VALUES(...);INSERT INTO..VALUES(...);" Denne er totalt dynamisk og SQL Server finder selv ud af at behandle dem enkeltvis.
jo men hvordan får man lavet asp-koden så den laver X antal insert-statements efter hinanden?
Han trykker jo bare på en knap i hans program, så sender den alle sager afsted i én køre - f.eks. 3 rækker med data. Problemet er netop at den kører asp-filen igennem med første sagsrække, og derefter kører samme asp-fil igennem med anden sagsrække osv.osv. :/
Enten snakker vi forbi hinanden, eller også har en af os ikke fattet en brik :-)
Som jeg forstår dit spørgsmål, er det VB applikationen, der ved hvor mange sager der skal oprettes ?
VB applikationen poster data til din ASP side, der sørger for at indsætte det i databasen ?
Hvis dette er korrekt er det, med mit forslag, hamrende ligegyldigt hvor mange INSERTS der i i den parameter/SQL streng som sendes fra VB applikationen. ASP siden skal uanset hvad, kun udføre én Execute. SQL Server finder selv ud af, om der er en, ti eller x INSERTS i den streng der kommer med.
VB applikationen sender sådan set ikke nogen INSERT strenge afsted - den fungerer faktisk bare som en Form med method=post, der sender variabler og værdier direkte til ASP-siden som så finder dem med standard Request("virk_id") kommandoer - det gør den så bare X antal gang efter hinanden :)
Kender ikke selv ret meget til VB applikationen men sådan forklarede min kollega det bare til mig :)
myConn.execute(SQL) kører INSERT strengen, men det er ligesom der mangler en "gem" kommando, der endegyldigt gemmer posten og derefter bevæger sig videre
Kunne du ikke prøve at vise hele din ASP kode og også meget gerne et eksempel på den parameter du får fra VB applikationen. Jeg forstår ikke helt hvordan I overfører parametre mellem VB og ASP.
Hvis det ikke kommer i en samlet masse, men derimod som flere kald efter hinanden, burde det principielt være seperate instancer af ASP koden der kører.
Som det ser ud nu, laver den faktisk et kald til ASP filen for hver post i rsProject i VB applikationen. Dermed vil ASP filen aldrig skulle behandle mere end ét INSERT statement.
Grunden til mit afventende svar var at min kollega ikke har haft tid til at kigge på det før nu. Han mener det sikkert vil virke, men er lidt bekymret for vores stakkels sql server, idet det kan hænde at man skal overføre op til 100+ sager ad gangen ;)
Det bliver jo noget af en djævelsk insert-statement der bliver fyret af. Men løsningen er brugbar så det takker jeg for :)
Jeg ville ikke være bekymret for SQLServer'en, i min virksomhed har vi 20+ SQL Servere og de klarer hver dag ting der er meget værre end dette :-)
Synes godt om
Ny brugerNybegynder
Din løsning...
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.