Avatar billede jonas_h Nybegynder
25. august 2004 - 16:13 Der er 12 kommentarer

Nemmeste måde at opdatere i en tabel

Jeg har brugt MS Access database i lang tid, men er nu nødt til at bruge MySQL pga access's hastighed.

Når jeg skulle opdatere i en tabel, har jeg altid bare loadet recordsettet, og skrevet f.eks:
rs("navn") = "nyt navn"
rs.Update

Og ændringerne ville nu være gemt så,:
Response.Write rs("navn")
ville skrive "nyt navn".

Er der en måde at gøre det ligeså nemt i MySQL?
Bruger nu "UPDATE tabel SET ....... ", men har man det recordset man redigerer i åbent, træder ændringerne ikke i kraft før, man har lukket og åbnet det igen.

Håber I forstår hvad jeg mener.
Avatar billede arne_v Ekspert
25. august 2004 - 16:16 #1
Hvis du bruger ADO så er forskellen mellem Access og MySQL vel primært
connection strengen ?

Så jeg vil da tro at det virker med MySQL !
Avatar billede fennec Nybegynder
25. august 2004 - 16:27 #2
Når du henter data fra en database, bliver de hentet over i en recordset (en tabel). Hvis du så ændre i databasen bliver recordset jo ikke opdateret, da det bare en en kopi af data.

når du bruger rs.Update metoden opdatere du både recordset (kopi'en) og databasen. Med "update tabel set ..." opdatere du kun databasen.

Men som arne_v også siger burde du kunne bruge rs.Update metoden på MySQL også.
Avatar billede fennec Nybegynder
25. august 2004 - 16:31 #3
... Man kunne vel også forstille sig samme problem med rs.Update hvis du har to recordset med data i, hvor noget eller alt data er ens. Hvis du opdatere den ene recordset burde ændringerne ikke kunne ses i det andet recordset.
Avatar billede jonas_h Nybegynder
25. august 2004 - 16:34 #4
Kan man bruge præcis samme kommandoer til MySQL som til MS ACCESS?

Hvordan skal man så connecte til sin MySQL?
Avatar billede jonas_h Nybegynder
25. august 2004 - 16:36 #5
Dette virker IKKE med min. Den melder fejl, når den når til:
rs("navn") = "..."


sql = "SELECT * FROM `test` WHERE id = 25"
Set rs = Server.CreateObject("ADODB.RecordSet")
rs.Open sql, nconn, 3, 3
rs("navn") = "nyt navn"
rs.Update
rs.Close
set rs = Nothing
Avatar billede arne_v Ekspert
25. august 2004 - 16:39 #6
ADO er en standard uafhængig af databasen

SQL er en standard selvom der er visse forskelle mellem Access og MySQL

connection strings:

MyODBC 2.x:

"Driver={mySQL};Server=xxx.domain.dkm;Database=database;Uid=username;Pwd=password;"

MyODBC 3.x:

"DRIVER={MySQL ODBC 3.51 Driver};SERVER=xxx.domain.dk;DATABASE=database;USER=username;PASSWORD=password;"
Avatar billede arne_v Ekspert
25. august 2004 - 16:40 #7
Hvilken fejl ?
Avatar billede jonas_h Nybegynder
25. august 2004 - 18:22 #8
Det var den connection jeg allerede brugte.
Altså:

set nconn = server.createobject("ADODB.connection")
nconn.Open "DRIVER={MySQL ODBC 3.51 Driver};SERVER=xxx.domain.dk;DATABASE=database;USER=username;PASSWORD=password;"

Den kommer med denne fejl når jeg kører førnævnte side:
Microsoft OLE DB Provider for ODBC Drivers error '80040e21'

Multiple-step OLE DB operation generated errors. Check each OLE DB status value, if available. No work was done.

/test/test.asp, line 13

Og en anden ting... En funktion som
rs.RecordCount
viser bare -1 hele tiden... Kan ikke rigtigt finde ud af det her!!! Grrr!
Avatar billede jonas_h Nybegynder
26. august 2004 - 13:22 #9
Ingen meninger? :(

Er ADO forresten meget langsomt frem for, at bruge conn.Execute("En sql sætning") ?For det skal jo helst køre så hurttigt som muligt.
Avatar billede arne_v Ekspert
28. august 2004 - 18:29 #10
Desværre siger fejl meddelelsen intet. Der er et eller andet i linie 13 den ikke kan lide.

Hvad er linie 13 ?
Avatar billede arne_v Ekspert
28. august 2004 - 18:31 #11
Det er 2 helt forskellige ting.

Du skal bruge et record set når du vil hente et antal rækker og måske rette i
et antal af dem.

Du skal bare fyre en execeute med UPDATE/INSERT/DELETE af, når du kun skal gøre
det og allerede har alle data.

Så valget skal ikek bestemmes af performance men af applikationens behov.
Avatar billede arne_v Ekspert
11. september 2004 - 21:36 #12
jonas>

Kommet videre ?
Avatar billede Ny bruger Nybegynder

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.

Loading billede Opret Preview
Kategori
Computerworld tilbyder specialiserede kurser i database-management

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester