27. maj 2004 - 00:03Der 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")
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.
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.
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', ...
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....
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")
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
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
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
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.