Avatar billede JJ77 Juniormester
27. maj 2004 - 00:03 Der er 11 kommentarer og
1 løsning

update tabeller fra textfelter i Form

Er her nogen som kan se hvad som er galt.... jer får vist noget data på en side.. og meningen er så at jeg skal kunne redigere i dataene og så opdatere... jeg bruger følgende kode:

Private Sub Command3_Click()
Set ws = Workspaces(0)
Set db = ws.OpenDatabase(App.Path & "\kundeHistorik.mdb")

db.Execute "UPDATE Historik set rsFirmanavn='" & Text2.Text & "', rsKontakt_fornavn='" & Text3.Text & "', rsKontakt_efternavn='" & Text4.Text & "', rsPostnr='" & Text5.Text & "', rsBy='" & Text6.Text & "', rsAdresse='" & Text7.Text & "', rsTlf1='" & Text8.Text & "', rsTlf2='" & Text9.Text & "', rsMobil='" & Text10.Text & "', rsHistorik='" & Text11.Text & "', rsFax='" & Text12.Text & "', rsEMail='" & Text13.Text & "', rsWWW='" & Text14.Text & "' where rsKundenr='" & Text1.Text & "';"
'Lukker forbindelsen igen
db.Close
ws.Close
End Sub
Avatar billede vbcoder Nybegynder
27. maj 2004 - 07:43 #1
Først lige en overskuelig sql

db.Execute & _
"UPDATE Historik set " & _
"rsFirmanavn='" & Text2.Text & "', " & _
"rsKontakt_fornavn='" & Text3.Text & "', " & _
"rsKontakt_efternavn='" & Text4.Text & "', " & _
"rsPostnr='" & Text5.Text & "', " & _
"rsBy='" & Text6.Text & "', " & _
"rsAdresse='" & Text7.Text & "', " & _
"rsTlf1='" & Text8.Text & "', " & _
"rsTlf2='" & Text9.Text & "', " & _
"rsMobil='" & Text10.Text & "', " & _
"rsHistorik='" & Text11.Text & "', " & _
"rsFax='" & Text12.Text & "', " & _
"rsEMail='" & Text13.Text & "', " & _
"rsWWW='" & Text14.Text & "' " & _
"where rsKundenr='" & Text1.Text & "';"

Dernæst - alle dine data i sql er defineret som tekst.

Er alle dine felter i databasen også tekst eller er der nogen som defineret som tal f.x. rsKundenr?

Hvis rsKundenr er et tal vil det give en fejl da du med din sql forsøger at sætte tekst ind i et talfelt.

En anden mulig fejl er at et felt kan være defineret som et felt der skal udfyldes - hvis det så er tomt får du fejl.

Du må fortælle lidt mere om hvad fejlbeskrivelsen er når du forsøger at opdatere basen, ellers er det svært at vide hvor man skal søge

//vbcoder
Avatar billede martin_moth Mester
27. maj 2004 - 08:37 #2
Og hvad mener du med "en side"

Vi taler om at du forsøger at opdatere en access database på helt almindelig vis fra VB, ikke?

Er enig med vbcoder, hvis fx. postnr er defineret som et tal-felt i databasen og ikke tekst, kunne fejlen være, at du ikke konverterer dit textfelt til tal først.

En anden fejl kunne være forkert tegnsætning - skal du afslutte med ;  ?

Det han du jo teste ved at direkte skrive værdier, og se om det funger

"UPDATE Historik set rsFirmanavn='Hej', rsKontakt_fornavn='Anders',  _
rsKontakt_efternavn='And',rsPostnr='1234', _
...osv.
Avatar billede vbcoder Nybegynder
27. maj 2004 - 12:07 #3
hmm - er der forresten ikke noget med at sql skal i parantes når man kalder db.execute

strSql = "UPDATE Historik set " & _
"rsFirmanavn='" & Text2.Text & "', " & _
"rsKontakt_fornavn='" & Text3.Text & "', " & _
"rsKontakt_efternavn='" & Text4.Text & "', " & _
"rsPostnr='" & Text5.Text & "', " & _
"rsBy='" & Text6.Text & "', " & _
"rsAdresse='" & Text7.Text & "', " & _
"rsTlf1='" & Text8.Text & "', " & _
"rsTlf2='" & Text9.Text & "', " & _
"rsMobil='" & Text10.Text & "', " & _
"rsHistorik='" & Text11.Text & "', " & _
"rsFax='" & Text12.Text & "', " & _
"rsEMail='" & Text13.Text & "', " & _
"rsWWW='" & Text14.Text & "' " & _
"where rsKundenr='" & Text1.Text & "';"

db.Execute (strSql)
Avatar billede vbcoder Nybegynder
27. maj 2004 - 12:10 #4
Semikolon (;) bruges som afslutning af sql.

Om den altid skal være der eller kan undværes synes somme tider at være en tilfældighed. Jeg har prøvet at få fejl når den ikke er der men jeg kan ikke pege på hvorfor man i nogle tilfælde kan eksekvere sin sql uden.

Men hvis du kigger i MS Access i en forepørgsel i sql-visning vil den altid indeholde semikolon som slut på sætning.
Avatar billede martin_moth Mester
27. maj 2004 - 12:44 #5
OK - det var bare et eksempel på, at der kunne være anvendt en forkert syntaks et sted. Synes montana skulle prøve at skrive direkte uden textboxe for at se om det funger - så kan vi udelukke syntaksfejl
Altså "UPDATE Historik set rsFirmanavn='Hej', rsKontakt_fornavn='Anders', rsKontakt_efternavn='And', ...
Avatar billede JJ77 Juniormester
27. maj 2004 - 18:31 #6
Hej igen.... Når jeg indsætter i min accesdatabase fra VB sætter jeg bare tekst ind i alle felter... hvordan kan jeg lade være med det... hmmmm... altså hvordan fortæller jeg at data fra feltet med kundenr skal skal være et tal osv....
Avatar billede vbcoder Nybegynder
27. maj 2004 - 18:52 #7
Det skal det jo nødvendigvis heller ikke - kun hvis dit felt i databasen er defineret som et felt der forventer at lagre et tal.

Konverterings muligheder:

hvis det er et almindeligt heltal
integer - cint(text)
long - clng(text)

komma tal
singleprecision - csgl(text)
doubleprecision - cdbl(text)

dog er det bedst at kontrollere først om værdien kan fortolkes som et tal med

isnumeric(text)

der så vil returnere sand hvis det er tal

f.x. dit rsKundenr

"where rsKundenr='" & cint(Text1.Text) & "';"
Avatar billede JJ77 Juniormester
27. maj 2004 - 19:13 #8
nu har jeg ændret lidt i syntaksen.... det virker stadig ikke.. det skal lige siges at feltet rsHistorik i databasen er at datatypen "memo"...


Private Sub Command3_Click()
'Her skal vi så smide data ind i databasen
Set ws = Workspaces(0)
Set db = ws.OpenDatabase(App.Path & "\kundeHistorik.mdb")

db.Execute "UPDATE Historik set rsFirmanavn='" & Text2.Text & "', rsKontakt_fornavn='" & Text3.Text & "', rsKontakt_efternavn='" & Text4.Text & "', rsPostnr='" & CLng(Text5.Text) & "', rsBy='" & Text6.Text & "', rsAdresse='" & Text7.Text & "', rsTlf1='" & CLng(Text8.Text) & "', rsTlf2='" & CLng(Text9.Text) & "', rsMobil='" & CLng(Text10.Text) & "', rsHistorik='" & Text11.Text & "', rsFax='" & CLng(Text12.Text) & "', rsEMail='" & Text13.Text & "', rsWWW='" & Text14.Text & "' where rsKundenr='" & Text1.Text & "';"
'Lukker forbindelsen igen
db.Close
ws.Close
End Sub
Avatar billede JJ77 Juniormester
27. maj 2004 - 20:17 #9
Her har jeg lige prøvet på en ny måde... kun med et felt som bliver opdateret.. der er dog stadig de andre.. men man kan vel nøjes med at opdatere et enkelt felt...
lidt om min accessdatabase: min primærnøgle rsKundenr er af typen LONG og en autoencriment... det andet felt rsFirmanavn er af typen TEXT.
hvad er galt?????

Private Sub Command3_Click()
'Her skal vi så smide data ind i databasen
Set ws = Workspaces(0)
Set db = ws.OpenDatabase(App.Path & "\kundeHistorik.mdb")

db.Execute "UPDATE Historik set rsFirmanavn='" & Text2.Text & "' where rsKundenr='" & CLng(Text1.Text) & "';"
'Lukker forbindelsen igen
db.Close
ws.Close
End Sub
Avatar billede JJ77 Juniormester
27. maj 2004 - 20:59 #10
Har fundet ud af at problemet ligger ved datatypen, når jeg indsætter.. hvis alle felterne i databasen er sat som text er der ingen problemer... problemet kommer først når rsKundenr bliver sat som autonummering.... har prøvet at teste med:

db.Execute "UPDATE Historik set rsPostnr='" & CLng(Text5.Text) & "' where rsKundenr='" & CLng(Text1.Text) & "';"


Men det er som om at den ikke vil acceptere CLng når det er kundenr.. hmmmm
Avatar billede JJ77 Juniormester
27. maj 2004 - 21:02 #11
Så vbcoder.. du havde ret.. du får lige lidt point.. gider du ikke lige sende et svar
Avatar billede vbcoder Nybegynder
28. maj 2004 - 10:30 #12
Når du indsætter tal skal du ikke have 'plinger' (') omkring data

db.Execute "UPDATE Historik set rsPostnr='" & CLng(Text5.Text) & "' where rsKundenr=" & CLng(Text1.Text) & ";"

Sådan

Der er ligeledes nogle finuligheder omkring felter af typen dato/tid hvis du skulle rende på det. Der skal data omkranses af 'havelåger' (#)

//vbcoder
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
Kurser inden for grundlæggende programmering

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