Mød TrackMan og Veo på Computerworld Cloud & AI Festival og hør, hvordan tech ændrer måden, vi træner og udvikler talent – fra skolebold til The Masters.
Jeg vil tro du kan gøre noget i stil med dette (pseudokode):
INSERT INTO tabel(felt1,felt2,felt3) SELECT felt1, 'ny værdi', felt3 FROM tabel WHERE felt1 = 'nøgleværdi'
På denne måde opretter du en ny række på grundlag af en (eller flere, hvis du måtte have det behov) eksisterende række.
Synes godt om
Slettet bruger
14. juli 2009 - 21:41#2
Er vist ikke helt med på hvad du mener. For mig ser det ud som om at jeg så skal skrive hvert eneste felt fra db'en ind i koden, og så skal jeg jo huske at ændre koden, hvis jeg tilføjer et ekstra felt i tabelen. Og hvorfor er det lige at insert into er før select? Jeg kunne vel ikke få dig til at skrive en lidt mere "færdig" kode så jeg kan se hvad du mener ?
...og med relevant mener jeg naturligvis kode og databasestruktur...
Synes godt om
Slettet bruger
14. juli 2009 - 22:02#5
Her er den kode jeg bruger i øjeblikket, går ud fra det er det du søger. Her henter jeg først posten for derefter at sætte den ind i tabelen igen som en ny post.
strSQL = "SELECT * FROM game_tractors WHERE trcID=" & Request.Querystring("buy") & " AND trcSellPrice>0" Set rsTractor = ConnMain.Execute(strSQL) If not (rsTractor.EOF OR rsTractor.BOF) Then
set cmd.ActiveConnection = ConnMain cmd.CommandText = strSQL cmd.CommandType = adCmdText
' det antages at activefarm og buy er long integers, ellers skal ' disse parametre konsekvensrettes til de korrekte typer... cmd.Parameters.Append cmd.CrateCommand("@activefarm", adInteger, adParamInput, 4, Session("activefarm"))
Ovenstående vil kræve at du har adgang til konstanterne for ADO, men det fåes let ved at inkludere nedenstående linie, enten i din global.asa eller i den asp-fil hvor ADO-konstanterne skal benyttes.
Ovenstående linie skal altså indsættes på samme måde som du indsætter en #include-linie, dvs. udenfor ASP-kode sektioner og sikkert helst i toppen af ASP-filen.
NB: Der skal muligvis benyttes semikolon i DateAdd-funktionen i stedet for komma til separering af parametre, men det kan du lige selv teste... og ja, det er med vilje at dateadd og now er en del af SQL-sætningen der sendes til databasen, da Access selv understøtter en mængde af de funktioner som også kendes fra VBScript :-)
Fordømt! Der skal også lige et mellemrum ind før WHERE...
Synes godt om
Slettet bruger
14. juli 2009 - 23:16#9
Kan ikke få det skidt til at virke, får forskellige syntax fejl hele tiden :-( Vil det være nemmere at lave en kopi uden at tilføje ændringer i samme proces?
da, den ellers vil bryde ud af VBScript-strengen og skabe en syntaksfejl (my bad - soorwy!)...
Mht. den fejl du få, har du så benyttet hele den stump kode jeg foreslog (dvs. benyttet command-objektet og fået indsat den META-fætter i toppen af siden)?
Fejlen opstår typisk hvis der er et felt som er stavet forkert, så check evt. om der skulle være nogle af felterne jeg har fået ændret på, da mine fede fingre drønede hen over tastaturet for at flikke eksemplet sammen...
Synes godt om
Slettet bruger
14. juli 2009 - 23:34#14
Har rodet lidt mere med det og det her giver følgende fejl:
ADODB.Command error '800a0bb9' Arguments are of the wrong type, are out of acceptable range, or are in conflict with one another.
' I OG MED DU HAR ÆNDRET DEN SIDSTE PARAMETER I SQL-SÆTNINGEN ' TIL ET ET-TAL, SÅ SKAL DENNE PARAMETER HELLER IKKE SÆTTES! 'cmd.Parameters.Append cmd.CrateCommand("@id", adInteger, _ ' adParamInput, 4, Request.Querystring("buy"))
cmd.Execute
ConnMain.Close %>
Synes godt om
Slettet bruger
15. juli 2009 - 12:06#16
Nu får jeg følgende fejl:
Microsoft VBScript runtime error '800a01b6' Object doesn't support this property or method: 'cmd.CrateCommand'
I denne linie: cmd.Parameters.Append cmd.CrateCommand("@activefarm", adInteger, _
Kan det være fordi jeg ikke har de rigtige komponenter? Hvis det kan være problemet, så kan jeg lige så godt holde det jeg har, selv om det måske virker lidt patent agtigt, men det virker :)
Nej, det er fordi jeg har lavet en stavefejl i mit eksempel. Den metode som opretter en parameter hedder CreateParameter og ikke som jeg har skrevet CrateCommand...
' I OG MED DU HAR ÆNDRET DEN SIDSTE PARAMETER I SQL-SÆTNINGEN ' TIL ET ET-TAL, SÅ SKAL DENNE PARAMETER HELLER IKKE SÆTTES! 'cmd.Parameters.Append cmd.CreateParameter("@id", adInteger, _ ' adParamInput, 4, Request.Querystring("buy"))
cmd.Execute
ConnMain.Close %>
Synes godt om
Slettet bruger
15. juli 2009 - 15:17#18
Hmm det hjalp ikke meget, nu kommer denne fejl bare..... Fejlen er i cmd.Execute.
Microsoft JET Database Engine error '80040e10' No value given for one or more required parameters.
Umiddelbart lyder det som om Session-variables ikke indeholder nogen værdi, eller at det ikke er et tal, så det skal du lige sikre dig inden du gør noget andet...
Synes godt om
Slettet bruger
16. juli 2009 - 23:39#20
Kan ikke se nogen form for fremskridt... Session skulle meget gerne indholde et tal ellers ville min test side sæt ikke køre, da den er en del den side jeg arbejder med.
Hvis du ikke lige kan finde en løsning, så tror jeg bare vi stopper, ellers ender det med jeg spilder alt for meget af din tid :-)
Hvis det er må du godt få point for at have gjort et forsøg.!?
Det er svært at finde en løsning på noget som jeg ikke har kontrol over, men det burde ikke være den mest umulige opgave at løse. Jeg fornemmer dog at du ikke er voldsom motiveret for at investere ret meget i at få løsningen til at fungere med udgangspunkt i det jeg har foreslået, så jeg tror bare vi skal kalde det et mislykket forsøg...
Synes godt om
Slettet bruger
17. juli 2009 - 02:51#22
Jeg tror nu ikke det er motivation der mangler. Men jeg har meget svært ved at se "logikken" i din kode, og derfor har jeg svært ved at give dig de oplysninger du har brug for, jeg kan derfor heller ikke vurdere om vi er på vej i rigtig eller forkert retning.
Jeg har aldrig set den type kode du bruger i det her tilfælde hvis man ser bort fra din strSQL linier, og så alligevel; Jeg kan f.eks. ikke forstå hvorfor Insert skal før Select eller hvorfor der er et ? efter Select, eller hvorfor der er et ? i denne linie: "WHERE [trcID] = ?". Hvorfor er de der? Hvor får de deres data fra? Det forvirre mig en del...
Håber du blev klogere på hvorfor vi skal kalde det et mislykket forsøg ;-)
Spørgsmålstegn fungerer som pladsholdere for parametre til SQL-sætningen. Det er en perfekt måde til bla. at undgå evt. SQL-injections og bør være den foretrukne metode til at kalde databasen på, når der er parametre involveret. Lær det! Det er cool når du forstår det... :-)
Prøv i øvrigt at læse den artikel jeg henviser til i indlæg #6, den giver forhåbentlig svar på hvad det er for noget kode jeg laver for at kalde databasen.
Mht. insert into sammen med select, så nævnte jeg tidligere, at dette er en måde hvorpå du kan læse data fra én tabel og i samme operation indsætte disse data i en anden tabel (som så i dette tilfælde er den samme tabel). Så i stedet for først at lave et udtræk som derefter danner grundlag for en indsættelse, slår jeg i tingene sammen og gør begge dele i én operation (dvs. jeg bla. sparer et kald til databasen - og to hvis jeg også kan lave opdateringen i samme hug).
Min motivation for at gøre dette er, at jo flere operationer du kan udføre i databasen på samme tid (dvs. jo færre gange du skal skabe forbindelse og snakke med databasen), desto bedre vil dit system (oftest) performe og det bør være en overvejelse alle der laver webapplikationer gør med det de laver...
Det første du kan gøre er at fortælle mere om hvilke typer felterne trcFarmID og trcID er af. Er det tal-værdier eller hvad?
Den anden ting du kan give mig vished for, er hvilke værdier der rent faktisk ligger i Session("activefarm") og Request.Querystring("buy"). Det er én ting at du siger de indeholder de rigtige værdier, men det er meget lettere for mig at agere, hvis du fortæller mig hvad der rent faktisk ligger i disse variable (det kan du f.eks. finde ud af ved at udskrive dem i forbindelse med at siden udføes og så fortælle mig hvad der udskrives for de to værdier. Data har det med at snyde, og selvom man tror man ved hvad de indeholder, er det bedre med vished...
I bund og grund savner jeg mere indsigt i, hvad det er for oplysninger du baserer dine fejlende tests på, så jeg kan agere mere målrettet.
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.